From 8723cc124bcda8838762e2a5abf79a3fb637c613 Mon Sep 17 00:00:00 2001
From: Hans-Christoph Steiner <hans@eds.org>
Date: Sun, 30 Oct 2011 18:30:06 -0400
Subject: [PATCH] Pd-extended 0.42.5

---
 doc/1.manual/x1.htm                           |    2 +-
 doc/1.manual/x2.htm                           |    2 +-
 doc/1.manual/x5.htm                           |   27 +-
 doc/3.audio.examples/output~.pd               |   66 -
 doc/4.data.structures/output~.pd              |   66 -
 doc/5.reference/about.pd                      |  423 ++
 doc/5.reference/help-intro.pd                 |    4 +-
 doc/5.reference/import-help.pd                |   19 +
 doc/5.reference/readsf~-help.pd               |   26 +-
 doc/6.externs/makefile                        |    2 +-
 extra/bonk~/bonk~.c                           |    9 +-
 extra/expr~/makefile                          |    2 +-
 extra/expr~/vexp.c                            |    4 +-
 extra/fiddle~/fiddle~.c                       |    2 +-
 extra/makefile                                |    4 +-
 extra/output~-help.pd                         |   11 +
 extra/output~.pd                              |  124 +
 extra/pd~/pd~.c                               |    2 +-
 extra/pd~/z.pd                                |   15 +
 extra/pique/pique.c                           |    2 +-
 extra/sigmund~/sigmund~.c                     |    6 +-
 linux/README.txt                              |   21 -
 linux/clone-pd                                |   14 -
 linux/cp-to-max.sh                            |    9 -
 linux/detab-src.sh                            |    8 -
 linux/get-tgz.sh                              |   22 -
 linux/git-add-pd.sh                           |    4 -
 linux/make-nodoc                              |   43 -
 linux/make-release                            |   39 -
 linux/rpmspec                                 |   64 -
 linux/rpmspec-alsa                            |   64 -
 msw/FESource.exe                              |  Bin 309742 -> 0 bytes
 msw/MakeSFX.exe                               |  Bin 31744 -> 0 bytes
 msw/build-nt.bat                              |   22 -
 msw/get-msw.sh                                |   21 -
 msw/makesfx.bat                               |    5 -
 msw/pdprototype.tgz                           |  Bin 1269272 -> 0 bytes
 msw/send-msw.sh                               |   41 -
 msw/send-nodoc.sh                             |   44 -
 msw/textconvert.c                             |   68 -
 portaudio/include/pa_asio.h                   |   16 +-
 portaudio/include/pa_jack.h                   |    3 +-
 portaudio/include/pa_linux_alsa.h             |   10 +-
 portaudio/include/pa_mac_core.h               |    5 +
 portaudio/include/pa_win_ds.h                 |  101 +
 portaudio/include/pa_win_wasapi.h             |  391 ++
 portaudio/include/pa_win_waveformat.h         |  199 +
 portaudio/include/pa_win_wmme.h               |   24 +-
 portaudio/include/portaudio.h                 |    6 +-
 portaudio/src/common/pa_allocation.h          |    8 +-
 portaudio/src/common/pa_converters.c          |   66 +-
 portaudio/src/common/pa_debugprint.c          |   61 +-
 portaudio/src/common/pa_dither.c              |   29 +-
 portaudio/src/common/pa_dither.h              |   18 +-
 portaudio/src/common/pa_endianness.h          |   30 +-
 portaudio/src/common/pa_front.c               |   31 +-
 portaudio/src/common/pa_hostapi.h             |   16 +-
 portaudio/src/common/pa_memorybarrier.h       |  127 +
 portaudio/src/common/pa_process.c             |  197 +-
 portaudio/src/common/pa_process.h             |    6 +-
 portaudio/src/common/pa_ringbuffer.c          |  184 +-
 portaudio/src/common/pa_ringbuffer.h          |  117 +-
 portaudio/src/common/pa_skeleton.c            |    8 +-
 portaudio/src/common/pa_stream.c              |   10 +-
 portaudio/src/common/pa_stream.h              |    8 +-
 portaudio/src/common/pa_trace.c               |    4 +-
 portaudio/src/common/pa_trace.h               |   32 +-
 portaudio/src/common/pa_util.h                |    7 +-
 portaudio/src/hostapi/alsa/pa_linux_alsa.c    |  623 ++-
 .../hostapi/asio/iasiothiscallresolver.cpp    |   31 +-
 .../src/hostapi/asio/iasiothiscallresolver.h  |    2 +-
 portaudio/src/hostapi/asio/pa_asio.cpp        | 1544 +++++-
 portaudio/src/hostapi/coreaudio/notes.txt     |   22 +-
 portaudio/src/hostapi/coreaudio/pa_mac_core.c |  449 +-
 .../hostapi/coreaudio/pa_mac_core_blocking.c  |   88 +-
 .../hostapi/coreaudio/pa_mac_core_blocking.h  |    9 +-
 .../hostapi/coreaudio/pa_mac_core_internal.h  |   20 +-
 .../hostapi/coreaudio/pa_mac_core_utilities.c |  272 +-
 .../hostapi/coreaudio/pa_mac_core_utilities.h |   43 +-
 portaudio/src/hostapi/dsound/pa_win_ds.c      | 2864 +++++++++++
 .../src/hostapi/dsound/pa_win_ds_dynlink.c    |  224 +
 .../src/hostapi/dsound/pa_win_ds_dynlink.h    |  106 +
 portaudio/src/hostapi/jack/pa_jack.c          |   25 +-
 portaudio/src/hostapi/oss/pa_unix_oss.c       |  178 +-
 .../wasapi/mingw-include/AudioSessionTypes.h  |   94 +
 .../FunctionDiscoveryKeys_devpkey.h           |  186 +
 .../wasapi/mingw-include/audioclient.h        | 1177 +++++
 .../wasapi/mingw-include/devicetopology.h     | 3275 ++++++++++++
 .../wasapi/mingw-include/endpointvolume.h     |  620 +++
 .../mingw-include/functiondiscoverykeys.h     |  255 +
 .../src/hostapi/wasapi/mingw-include/ks.h     | 3666 +++++++++++++
 .../src/hostapi/wasapi/mingw-include/ksguid.h |   28 +
 .../hostapi/wasapi/mingw-include/ksmedia.h    | 4551 +++++++++++++++++
 .../hostapi/wasapi/mingw-include/ksproxy.h    |  639 +++
 .../hostapi/wasapi/mingw-include/ksuuids.h    |  159 +
 .../wasapi/mingw-include/mmdeviceapi.h        |  929 ++++
 .../hostapi/wasapi/mingw-include/propidl.h    | 1275 +++++
 .../hostapi/wasapi/mingw-include/propkey.h    | 4274 ++++++++++++++++
 .../hostapi/wasapi/mingw-include/propkeydef.h |   26 +
 .../hostapi/wasapi/mingw-include/propsys.h    | 3605 +++++++++++++
 .../src/hostapi/wasapi/mingw-include/rpcsal.h |  113 +
 .../src/hostapi/wasapi/mingw-include/sal.h    |  252 +
 .../hostapi/wasapi/mingw-include/sdkddkver.h  |  225 +
 .../hostapi/wasapi/mingw-include/shtypes.h    |  468 ++
 .../wasapi/mingw-include/structuredquery.h    | 2478 +++++++++
 portaudio/src/hostapi/wasapi/pa_win_wasapi.c  | 4457 ++++++++++++++++
 portaudio/src/hostapi/wasapi/readme.txt       |   25 +
 portaudio/src/hostapi/wdmks/pa_win_wdmks.c    | 3304 ++++++++++++
 portaudio/src/hostapi/wdmks/readme.txt        |   82 +
 portaudio/src/hostapi/wmme/pa_win_wmme.c      |  627 ++-
 portaudio/src/os/unix/pa_unix_hostapis.c      |   29 +-
 portaudio/src/os/unix/pa_unix_util.c          |   66 +-
 portaudio/src/os/win/pa_win_hostapis.c        |   14 +-
 portaudio/src/os/win/pa_win_util.c            |   10 +-
 portaudio/src/os/win/pa_win_waveformat.c      |  154 +
 portaudio/src/os/win/pa_win_wdmks_utils.c     |  297 ++
 portaudio/src/os/win/pa_win_wdmks_utils.h     |   65 +
 .../src/os/win/pa_x86_plain_converters.c      |    4 +-
 portmidi/CHANGELOG.txt                        |   10 +
 portmidi/README.txt                           |   15 +-
 portmidi/license.txt                          |    4 +-
 portmidi/pm_common/pminternal.h               |   16 +-
 portmidi/pm_common/pmutil.c                   |   62 +-
 portmidi/pm_common/pmutil.h                   |    3 +
 portmidi/pm_common/portmidi.c                 | 2308 ++++-----
 portmidi/pm_common/portmidi.h                 |  268 +-
 portmidi/pm_linux/README_LINUX.txt            |   18 +
 portmidi/pm_linux/pmlinux.c                   |    0
 portmidi/pm_linux/pmlinux.h                   |    0
 portmidi/pm_linux/pmlinuxalsa.c               |    2 -
 portmidi/pm_linux/pmlinuxalsa.h               |    0
 portmidi/pm_mac/finddefault.c                 |   55 +
 portmidi/pm_mac/pmmac.c                       |   25 +-
 portmidi/pm_mac/pmmac.h                       |    0
 portmidi/pm_mac/pmmacosxcm.c                  |   36 +-
 portmidi/pm_mac/pmmacosxcm.h                  |    4 +-
 portmidi/pm_mac/readbinaryplist.c             | 1079 ++++
 portmidi/pm_mac/readbinaryplist.h             |   88 +
 portmidi/pm_win/README_WIN.txt                |  148 +-
 portmidi/pm_win/copy-dll.bat                  |    0
 portmidi/pm_win/debugging_dlls.txt            |    0
 portmidi/pm_win/pm_dll.dsp                    |    0
 portmidi/pm_win/pmdll.c                       |    0
 portmidi/pm_win/pmdll.h                       |    0
 portmidi/pm_win/pmwin.c                       |  101 +-
 portmidi/pm_win/pmwinmm.c                     |  126 +-
 portmidi/pm_win/pmwinmm.h                     |    0
 portmidi/porttime/porttime.c                  |    0
 portmidi/porttime/porttime.dsp                |    0
 portmidi/porttime/porttime.h                  |   46 +-
 portmidi/porttime/ptlinux.c                   |    8 +-
 portmidi/porttime/ptmacosx_cf.c               |    5 +
 portmidi/porttime/ptmacosx_mach.c             |    6 +
 portmidi/porttime/ptwinmm.c                   |   11 +-
 src/acinclude.m4                              | 1050 ++++
 src/config.h.in                               |  220 +
 src/configure.in                              |   30 +-
 src/d_delay.c                                 |   30 +-
 src/d_math.c                                  |    2 +
 src/d_soundfile.c                             |   31 +-
 src/d_ugen.c                                  |    5 +
 src/g_all_guis.c                              |   18 +-
 src/g_array.c                                 |   26 +-
 src/g_bang.c                                  |   20 +-
 src/g_canvas.c                                |  116 +-
 src/g_editor.c                                |  157 +-
 src/g_graph.c                                 |   27 +-
 src/g_hdial.c                                 |   19 +-
 src/g_hslider.c                               |   25 +-
 src/g_mycanvas.c                              |   17 +-
 src/g_numbox.c                                |   23 +-
 src/g_readwrite.c                             |    7 +-
 src/g_rtext.c                                 |   14 +-
 src/g_scalar.c                                |    2 +-
 src/g_template.c                              |    4 +-
 src/g_text.c                                  |  115 +-
 src/g_toggle.c                                |   18 +-
 src/g_vdial.c                                 |    9 +-
 src/g_vslider.c                               |   17 +-
 src/g_vumeter.c                               |   42 +-
 src/helpbrowser.tcl                           |  270 +
 src/import.c                                  |  176 +
 src/m_atom.c                                  |    8 +
 src/m_binbuf.c                                |  187 +-
 src/m_class.c                                 |   66 +-
 src/m_conf.c                                  |    4 +
 src/m_glob.c                                  |    6 +-
 src/m_imp.h                                   |    2 +
 src/m_obj.c                                   |   54 +-
 src/m_pd.c                                    |    6 +
 src/m_pd.h                                    |   36 +-
 src/m_sched.c                                 |    7 +-
 src/makefile.in                               |  118 +-
 src/makefile.mingw                            |  337 ++
 src/makefile.nt                               |  184 -
 src/notes.txt                                 |    4 +
 src/pd.ico                                    |  Bin 0 -> 25214 bytes
 src/pd.rc                                     |   25 +
 src/{u_main.tk => pd.tk}                      | 2979 +++++++----
 src/pkgIndex.tcl                              |    3 +
 src/s_audio.c                                 |    5 +-
 src/s_audio_alsa.c                            |    4 +-
 src/s_audio_jack.c                            |   58 +-
 src/s_file.c                                  |  104 +-
 src/s_inter.c                                 |  124 +-
 src/s_loader.c                                |   25 +-
 src/s_main.c                                  |   95 +-
 src/s_midi.c                                  |   13 +-
 src/s_midi_alsa.c                             |    6 +-
 src/s_midi_oss.c                              |    4 +-
 src/s_midi_pm.c                               |    4 +-
 src/s_path.c                                  |   99 +-
 src/s_print.c                                 |    1 +
 src/s_stuff.h                                 |   11 +-
 src/t_tkcmd.c                                 |   42 +-
 src/x_arithmetic.c                            |   35 +-
 src/x_connective.c                            |    3 +-
 src/x_gui.c                                   |   18 +-
 src/x_interface.c                             |   37 +-
 src/x_list.c                                  |   10 +-
 src/x_midi.c                                  |    8 -
 src/x_misc.c                                  |   79 +-
 src/x_qlist.c                                 |    8 +-
 223 files changed, 53333 insertions(+), 5370 deletions(-)
 delete mode 100644 doc/3.audio.examples/output~.pd
 delete mode 100644 doc/4.data.structures/output~.pd
 create mode 100644 doc/5.reference/about.pd
 create mode 100644 doc/5.reference/import-help.pd
 create mode 100644 extra/output~-help.pd
 create mode 100644 extra/output~.pd
 create mode 100644 extra/pd~/z.pd
 delete mode 100644 linux/README.txt
 delete mode 100755 linux/clone-pd
 delete mode 100755 linux/cp-to-max.sh
 delete mode 100755 linux/detab-src.sh
 delete mode 100755 linux/get-tgz.sh
 delete mode 100755 linux/git-add-pd.sh
 delete mode 100755 linux/make-nodoc
 delete mode 100755 linux/make-release
 delete mode 100644 linux/rpmspec
 delete mode 100644 linux/rpmspec-alsa
 delete mode 100644 msw/FESource.exe
 delete mode 100644 msw/MakeSFX.exe
 delete mode 100644 msw/build-nt.bat
 delete mode 100755 msw/get-msw.sh
 delete mode 100644 msw/makesfx.bat
 delete mode 100644 msw/pdprototype.tgz
 delete mode 100755 msw/send-msw.sh
 delete mode 100755 msw/send-nodoc.sh
 delete mode 100644 msw/textconvert.c
 create mode 100644 portaudio/include/pa_win_ds.h
 create mode 100644 portaudio/include/pa_win_wasapi.h
 create mode 100644 portaudio/include/pa_win_waveformat.h
 create mode 100644 portaudio/src/common/pa_memorybarrier.h
 create mode 100644 portaudio/src/hostapi/dsound/pa_win_ds.c
 create mode 100644 portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c
 create mode 100644 portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/audioclient.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/ks.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/ksguid.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/propidl.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/propkey.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/propsys.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/sal.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/shtypes.h
 create mode 100644 portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h
 create mode 100644 portaudio/src/hostapi/wasapi/pa_win_wasapi.c
 create mode 100644 portaudio/src/hostapi/wasapi/readme.txt
 create mode 100644 portaudio/src/hostapi/wdmks/pa_win_wdmks.c
 create mode 100644 portaudio/src/hostapi/wdmks/readme.txt
 create mode 100644 portaudio/src/os/win/pa_win_waveformat.c
 create mode 100644 portaudio/src/os/win/pa_win_wdmks_utils.c
 create mode 100644 portaudio/src/os/win/pa_win_wdmks_utils.h
 mode change 100755 => 100644 portmidi/README.txt
 mode change 100755 => 100644 portmidi/pm_common/pminternal.h
 mode change 100755 => 100644 portmidi/pm_common/pmutil.c
 mode change 100755 => 100644 portmidi/pm_common/pmutil.h
 mode change 100755 => 100644 portmidi/pm_common/portmidi.c
 mode change 100755 => 100644 portmidi/pm_common/portmidi.h
 mode change 100755 => 100644 portmidi/pm_linux/README_LINUX.txt
 mode change 100755 => 100644 portmidi/pm_linux/pmlinux.c
 mode change 100755 => 100644 portmidi/pm_linux/pmlinux.h
 mode change 100755 => 100644 portmidi/pm_linux/pmlinuxalsa.c
 mode change 100755 => 100644 portmidi/pm_linux/pmlinuxalsa.h
 create mode 100644 portmidi/pm_mac/finddefault.c
 mode change 100755 => 100644 portmidi/pm_mac/pmmac.c
 mode change 100755 => 100644 portmidi/pm_mac/pmmac.h
 mode change 100755 => 100644 portmidi/pm_mac/pmmacosxcm.c
 mode change 100755 => 100644 portmidi/pm_mac/pmmacosxcm.h
 create mode 100644 portmidi/pm_mac/readbinaryplist.c
 create mode 100644 portmidi/pm_mac/readbinaryplist.h
 mode change 100755 => 100644 portmidi/pm_win/README_WIN.txt
 mode change 100755 => 100644 portmidi/pm_win/copy-dll.bat
 mode change 100755 => 100644 portmidi/pm_win/debugging_dlls.txt
 mode change 100755 => 100644 portmidi/pm_win/pm_dll.dsp
 mode change 100755 => 100644 portmidi/pm_win/pmdll.c
 mode change 100755 => 100644 portmidi/pm_win/pmdll.h
 mode change 100755 => 100644 portmidi/pm_win/pmwin.c
 mode change 100755 => 100644 portmidi/pm_win/pmwinmm.c
 mode change 100755 => 100644 portmidi/pm_win/pmwinmm.h
 mode change 100755 => 100644 portmidi/porttime/porttime.c
 mode change 100755 => 100644 portmidi/porttime/porttime.dsp
 mode change 100755 => 100644 portmidi/porttime/porttime.h
 mode change 100755 => 100644 portmidi/porttime/ptlinux.c
 mode change 100755 => 100644 portmidi/porttime/ptmacosx_cf.c
 mode change 100755 => 100644 portmidi/porttime/ptmacosx_mach.c
 mode change 100755 => 100644 portmidi/porttime/ptwinmm.c
 create mode 100644 src/acinclude.m4
 create mode 100644 src/helpbrowser.tcl
 create mode 100644 src/import.c
 create mode 100755 src/makefile.mingw
 delete mode 100644 src/makefile.nt
 create mode 100755 src/pd.ico
 create mode 100644 src/pd.rc
 rename src/{u_main.tk => pd.tk} (60%)
 create mode 100644 src/pkgIndex.tcl

diff --git a/doc/1.manual/x1.htm b/doc/1.manual/x1.htm
index 00fa7da13..f1f884d1d 100644
--- a/doc/1.manual/x1.htm
+++ b/doc/1.manual/x1.htm
@@ -73,7 +73,7 @@ To get started writing your own C extensions, refer to chapter 4 of this manual.
 <P> There is a new Pd community web site,
 <a href="http://www.pure-data.info/"> pure-data.info</a>, which aims to be the
 central resource for Pd, from documentation and
-downloads; to forums, member pages, and a patch exchange.
+downloads; to forums, member pages, a patch exchange.
 
 <P> There is a growing number of Pd-related projects hosted at 
 <A HREF="http://pure-data.sf.net">SourceForge</A>.  This is open to all Pd
diff --git a/doc/1.manual/x2.htm b/doc/1.manual/x2.htm
index 05b4d84b0..9879078eb 100644
--- a/doc/1.manual/x2.htm
+++ b/doc/1.manual/x2.htm
@@ -110,7 +110,7 @@ In this case the object will be the kind that carries out addition,
 and the "13" initializes the amount to add.
 
 <P> Atoms are either numbers or <I>
-symbols </I> like "+".  Anything that is not a valid number is considered a
+symbols </I> like "+".  Anything that is not a valid number os considered a
 symbol.   Valid numbers may or may not have a decimal point (for instance, 12,
 15.6, -.456), or may be
 written in exponential notation (such as "4.5e6", which means "4.5 multiplied
diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm
index c07d48ddd..671d967d9 100644
--- a/doc/1.manual/x5.htm
+++ b/doc/1.manual/x5.htm
@@ -20,32 +20,7 @@
 
 <H3> <A name="s2"> 5.1. release notes </A> </H3>
 
-<P> ------------------ 0.42-5 ---------------------------
-
-<P> broken abs~ and log~ fixed
-
-<P> pd~ -ninsig 0 hang fixed
-
-<P> testtone updated and 16ch version added
-
-<P> lrshift~ bug fix
-
-<P> 32 channel limit removed for portaudio (ASIO/Windows and Mac)
-
-<P> ------------------ 0.42-4 ---------------------------
-
-<P> added -noautopatch startup argument to defeat auto-connecting to
-new objects (some folks like it and others hate it)
-
-<P> gfxstub bug fix
-
-<P> fixed crash on deleting "s" objects with no args
-
-<P> re-fixed seteuid(0 problem
-
-<P> fixed crash on "find $1" (still not useful though)
-
-<P> ------------------ 0.42.1-3 ---------------------------
+<P> ------------------ 0.42.1 ---------------------------
 
 <P> Bug fix on Windows(cancelling window close deactivated window).
 
diff --git a/doc/3.audio.examples/output~.pd b/doc/3.audio.examples/output~.pd
deleted file mode 100644
index 81ad3b7fe..000000000
--- a/doc/3.audio.examples/output~.pd
+++ /dev/null
@@ -1,66 +0,0 @@
-#N canvas 0 0 615 578 12;
-#X obj 353 490 t b;
-#X obj 353 437 f;
-#X obj 353 515 f;
-#X msg 467 514 0;
-#X obj 353 467 moses 1;
-#X obj 467 486 t b f;
-#X obj 433 447 moses 1;
-#X obj 29 97 dbtorms;
-#X obj 85 170 inlet~;
-#X msg 299 310 \; pd dsp 1;
-#X obj 29 170 line~;
-#X obj 64 242 *~;
-#X obj 64 272 dac~;
-#X obj 29 127 pack 0 50;
-#X text 121 146 audio in;
-#X text 138 464 test if less than 1 -->;
-#X text 104 491 if true convert to bang -->;
-#X text 100 96 <-- convert from dB to linear units;
-#X floatatom 323 219 3 0 100 0 dB - -;
-#X obj 350 240 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144
--1 -1;
-#X text 118 126 <-- make a ramp to avoid clicks or zipper noise;
-#X obj 148 170 inlet~;
-#X obj 154 241 *~;
-#X text 373 378 MUTE logic:;
-#X obj 323 174 r \$0-master-lvl;
-#X obj 353 541 s \$0-master-lvl;
-#X obj 323 279 s \$0-master-out;
-#X obj 29 71 r \$0-master-out;
-#X obj 433 418 r \$0-master-out;
-#X text 60 10 Level control abstraction \, used in many of the Pd example
-patches. The "level" and "mute" controls show up on the parent \, calling
-patch.;
-#X text 66 517 previous nonzero master-lvl -->;
-#X text 138 421 recall previous;
-#X text 138 439 value of master-lvl -->;
-#X text 39 319 automatically start DSP -->;
-#X obj 85 192 hip~ 3;
-#X obj 147 192 hip~ 3;
-#X connect 0 0 2 0;
-#X connect 1 0 4 0;
-#X connect 2 0 25 0;
-#X connect 3 0 25 0;
-#X connect 4 0 0 0;
-#X connect 4 1 5 0;
-#X connect 5 0 3 0;
-#X connect 6 1 2 1;
-#X connect 7 0 13 0;
-#X connect 8 0 34 0;
-#X connect 10 0 22 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 13 0 10 0;
-#X connect 18 0 9 0;
-#X connect 18 0 26 0;
-#X connect 19 0 1 0;
-#X connect 21 0 35 0;
-#X connect 22 0 12 1;
-#X connect 24 0 18 0;
-#X connect 27 0 7 0;
-#X connect 28 0 1 1;
-#X connect 28 0 6 0;
-#X connect 34 0 11 1;
-#X connect 35 0 22 1;
-#X coords 0 0 1 1 65 55 1 300 200;
diff --git a/doc/4.data.structures/output~.pd b/doc/4.data.structures/output~.pd
deleted file mode 100644
index 07fb59f8b..000000000
--- a/doc/4.data.structures/output~.pd
+++ /dev/null
@@ -1,66 +0,0 @@
-#N canvas 0 0 757 616 12;
-#X obj 516 522 t b;
-#X obj 516 469 f;
-#X obj 516 547 f;
-#X msg 630 546 0;
-#X obj 516 499 moses 1;
-#X obj 630 518 t b f;
-#X obj 596 479 moses 1;
-#X obj 29 97 dbtorms;
-#X obj 85 170 inlet~;
-#X msg 278 300 \; pd dsp 1;
-#X obj 29 170 line~;
-#X obj 64 242 *~;
-#X obj 64 272 dac~;
-#X obj 29 127 pack 0 50;
-#X text 121 146 audio in;
-#X text 301 496 test if less than 1 -->;
-#X text 267 523 if true convert to bang -->;
-#X text 100 96 <-- convert from dB to linear units;
-#X floatatom 278 221 3 0 100 0 dB - -;
-#X obj 516 449 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144
--1 -1;
-#X text 118 126 <-- make a ramp to avoid clicks or zipper noise;
-#X obj 148 170 inlet~;
-#X obj 154 241 *~;
-#X text 502 399 MUTE logic:;
-#X obj 278 193 r \$0-master-lvl;
-#X obj 516 573 s \$0-master-lvl;
-#X obj 293 247 s \$0-master-out;
-#X obj 29 71 r \$0-master-out;
-#X obj 596 450 r \$0-master-out;
-#X text 60 10 Level control abstraction \, used in many of the Pd example
-patches. The "level" and "mute" controls show up on the parent \, calling
-patch.;
-#X text 229 549 previous nonzero master-lvl -->;
-#X text 301 453 recall previous;
-#X text 301 471 value of master-lvl -->;
-#X text 16 310 automatically start DSP -->;
-#X obj 85 192 hip~ 3;
-#X obj 147 192 hip~ 3;
-#X connect 0 0 2 0;
-#X connect 1 0 4 0;
-#X connect 2 0 25 0;
-#X connect 3 0 25 0;
-#X connect 4 0 0 0;
-#X connect 4 1 5 0;
-#X connect 5 0 3 0;
-#X connect 6 1 2 1;
-#X connect 7 0 13 0;
-#X connect 8 0 34 0;
-#X connect 10 0 22 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 13 0 10 0;
-#X connect 18 0 9 0;
-#X connect 18 0 26 0;
-#X connect 19 0 1 0;
-#X connect 21 0 35 0;
-#X connect 22 0 12 1;
-#X connect 24 0 18 0;
-#X connect 27 0 7 0;
-#X connect 28 0 1 1;
-#X connect 28 0 6 0;
-#X connect 34 0 11 1;
-#X connect 35 0 22 1;
-#X coords 0 0 1 1 65 55 1;
diff --git a/doc/5.reference/about.pd b/doc/5.reference/about.pd
new file mode 100644
index 000000000..2a053b3ef
--- /dev/null
+++ b/doc/5.reference/about.pd
@@ -0,0 +1,423 @@
+#N canvas 40 40 426 466 10;
+#X obj 16 439 bng 15 150 50 0 \$0-credits-bng \$0-credits-bng empty
+20 7 0 12 -262144 -66577 -262144;
+#N canvas 0 22 450 300 \$0-gop 0;
+#X coords 0 0 20 320 20 320 2 0 0;
+#X restore 9 118 pd \$0-gop;
+#X obj 10 10 bng 25 250 50 0 empty \$0-nothing-at-all empty 17 7 0
+10 -2882 -1 -1;
+#X obj 35 211 pddp/pddplink ../manuals/Pd/License.html -text License.html
+;
+#X text 35 237 Reference documentation for Pd is available in html
+format:;
+#X obj 35 261 pddp/pddplink ../1.manual/index.htm -text Local copy
+of Pd Manual;
+#X obj 35 281 pddp/pddplink http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm
+-text http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm;
+#X text 35 307 Much more documentation and other resources can be found
+at:;
+#X obj 35 327 pddp/pddplink http://www.puredata.info;
+#X obj 35 377 pddp/pddplink http://iem.kug.ac.at/mailinglists/pd-list/
+;
+#X text 35 357 The Pd mailing list archive can be found at:;
+#X text 35 397 Many more useful links are listed in the HTML documentation
+\, section 1.2.;
+#X obj 115 131 pddp/print;
+#N canvas 146 26 531 400 (subpatch) 0;
+#X obj 340 153 hcs/version;
+#X obj 313 101 loadbang;
+#X obj 313 126 t b b;
+#X obj 313 262 hcs/tcl_version;
+#X obj 313 306 print Tcl Version;
+#X msg 340 175 \$1.\$2.\$3-\$4;
+#X obj 340 202 print Pd Version;
+#N canvas 469 100 450 300 \$0-spark 0;
+#X obj 35 46 struct \$0-spark float x float y float coefx float coefy
+float active float c;
+#X obj 48 104 drawpolygon c 1 0 0 1 0 1 1 0 0 0 1;
+#X restore 197 41 pd \$0-spark;
+#N canvas 0 22 450 300 \$0-sparks 0;
+#X obj 40 77 plot a 0 0 0 0 0;
+#X obj 40 40 struct \$0-sparks float x float y array a \$0-spark;
+#X restore 197 68 pd \$0-sparks;
+#N canvas 494 145 450 300 \$0-line 0;
+#X text 274 228 <- hide GOP rectangle;
+#X obj 104 149 drawpolygon 333 1 10 a 10 b;
+#X obj 87 79 struct \$0-line float a float b;
+#X obj 4 229 drawpolygon 999 1 0 0 20 0 20 320 0 320 0 0;
+#X restore 197 14 pd \$0-line;
+#X obj 447 345 outlet;
+#N canvas 509 85 419 460 \$0-logo 0;
+#X obj 22 19 struct \$0-logo;
+#X text 35 418 hide gop-border;
+#X obj 55 393 filledpolygon 999 999 1 0 0 112 0 112 72 0 72 0 0;
+#X text 6 125 P;
+#X obj 29 114 drawcurve 0 5 10 15 10 45 10 45 5 45 21 45 12 45 12 45
+12 15 12 15 5 15 10 19 10 19 12 15 12 15 26 15 33 24 27 34 13 34 13
+34 14 34 14 32 26 32 29 24 25 16 14 17;
+#X obj 32 225 drawpolygon 0 6 63 25 63 13 55 13 64 13 64 45 71 45;
+#X obj 49 340 drawpolygon 777 2 6 71 111 71 111 6;
+#X obj 47 291 drawpolygon 555 2 2 67 107 67 107 2;
+#X obj 49 314 drawpolygon 666 2 4 69 109 69 109 4;
+#X text 7 200 D;
+#X text 1 315 shadow;
+#X obj 22 59 drawpolygon 0 2 105 59 85 59 85 65 20 65 20 59 0 59 0
+6 20 6 20 0 85 0 85 6 105 6 105 0 0 0 0 65 105 65 105 0;
+#X obj 36 183 filledpolygon 0 0 25 52 35 53 35 53 36 52 36 52 35;
+#X obj 34 203 filledpolygon 999 999 13 53 35 54 35 54 36 53 36 53 35
+;
+#X restore 57 103 pd \$0-logo;
+#X msg 205 188 scalar \$1-logo;
+#X obj 205 163 f \$0;
+#X obj 205 213 s pd-\$0-logo-gop;
+#N canvas 284 86 198 93 \$0-logo-gop 0;
+#X coords 0 0 112 72 112 72 2 0 0;
+#X restore 10 10 pd \$0-logo-gop;
+#X obj 15 348 outlet;
+#X obj 8 103 inlet;
+#N canvas 490 84 450 300 \$0-circle 0;
+#X obj 113 80 struct \$0-circle float x float y float c float c1;
+#X obj 113 107 filledpolygon 0 c1 13 0 0 1 0 1 1 0 1;
+#X obj 113 137 filledpolygon 0 c 11 0 0 1 0 1 1 0 1;
+#X restore 197 97 pd \$0-circle;
+#X obj 97 322 bng 20 250 50 0 empty empty Click_before_saving... 25
+7 0 10 -262144 -1 -1;
+#N canvas 0 22 398 312 clear 0;
+#X obj 68 37 inlet;
+#X obj 68 85 t b b b;
+#X msg 107 110 clear;
+#X obj 87 183 s \$0-br;
+#X msg 87 161 stop;
+#X msg 68 215 label \, color 0 2 0 \, label_pos 20 7;
+#X obj 68 239 s \$0-credits-bng;
+#X obj 107 136 s pd-\$0-gop;
+#X obj 186 136 s pd-\$0-logo-gop;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 4 0;
+#X connect 1 2 2 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X restore 97 348 pd clear;
+#N canvas 280 28 514 563 credits-animation 0;
+#X obj 279 255 pointer;
+#N canvas 0 26 450 658 burn 0;
+#X obj 157 8 inlet;
+#X obj 46 8 inlet;
+#X obj 46 143 f;
+#X obj 80 143 + 1;
+#X obj 46 116 until;
+#X obj 46 62 t a b;
+#X obj 96 116 0;
+#X obj 46 299 +;
+#X obj 83 299 +;
+#X obj 46 196 t a a;
+#X obj 235 243 sel 0;
+#N canvas 0 22 450 300 spigot 0;
+#X obj 65 31 inlet;
+#X obj 135 31 inlet;
+#X obj 225 31 inlet;
+#X obj 54 103 spigot;
+#X obj 124 103 spigot;
+#X obj 54 141 outlet;
+#X obj 134 141 outlet;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 2 0 3 1;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X restore 46 326 pd spigot;
+#X obj 235 293 random 100;
+#X obj 235 317 moses 20;
+#X msg 235 339 1;
+#X obj 235 267 t b b;
+#X msg 277 266 0;
+#X floatatom 91 8 5 0 0 0 - - -;
+#X obj 46 413 t a a;
+#X obj 73 467 sel 0;
+#X obj 73 553 * 6.28319;
+#X obj 73 533 / 360;
+#X obj 73 597 sin;
+#X obj 100 597 cos;
+#X obj 73 575 t a a b;
+#X msg 46 89 10;
+#X obj 46 373 expr if (abs($f1)>$f3 || abs($f2)>$f3 \, 0 \, $f1) \;
+if (abs($f1)>$f3 || abs($f2)>$f3 \, 0 \, $f2);
+#X floatatom 344 338 5 0 0 0 - - -;
+#X obj 73 489 random 180;
+#X obj 73 511 - 90;
+#X obj 151 488 random 360;
+#X obj 163 600 random 50;
+#X obj 325 283 loadbang;
+#X msg 325 310 12;
+#X obj 46 217 get \$0-spark x coefx y coefy active;
+#X obj 46 441 set \$0-spark x y active;
+#X obj 73 622 set \$0-spark coefx coefy c;
+#X obj 46 170 element \$0-sparks a;
+#X obj 46 35 metro 30;
+#X connect 0 0 37 1;
+#X connect 1 0 38 0;
+#X connect 2 0 3 0;
+#X connect 2 0 37 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 25 0;
+#X connect 5 1 6 0;
+#X connect 6 0 2 1;
+#X connect 7 0 11 0;
+#X connect 8 0 11 1;
+#X connect 9 0 34 0;
+#X connect 9 1 35 3;
+#X connect 9 1 36 3;
+#X connect 10 0 15 0;
+#X connect 10 1 11 2;
+#X connect 11 0 26 0;
+#X connect 11 1 26 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 2;
+#X connect 14 0 35 2;
+#X connect 15 0 12 0;
+#X connect 15 1 16 0;
+#X connect 16 0 11 2;
+#X connect 17 0 38 1;
+#X connect 18 0 35 0;
+#X connect 18 1 19 0;
+#X connect 19 0 28 0;
+#X connect 19 0 30 0;
+#X connect 20 0 24 0;
+#X connect 21 0 20 0;
+#X connect 22 0 36 0;
+#X connect 23 0 36 1;
+#X connect 24 0 22 0;
+#X connect 24 1 23 0;
+#X connect 24 2 31 0;
+#X connect 25 0 4 0;
+#X connect 26 0 18 0;
+#X connect 26 1 35 1;
+#X connect 27 0 26 2;
+#X connect 28 0 29 0;
+#X connect 30 0 21 0;
+#X connect 31 0 36 2;
+#X connect 32 0 33 0;
+#X connect 33 0 26 2;
+#X connect 34 0 7 0;
+#X connect 34 1 7 1;
+#X connect 34 2 8 0;
+#X connect 34 3 8 1;
+#X connect 34 4 10 0;
+#X connect 37 0 9 0;
+#X connect 38 0 5 0;
+#X restore 170 331 pd burn;
+#X obj 140 94 f \$0;
+#X obj 140 138 pointer;
+#X msg 140 116 traverse pd-\$1-gop \, bang;
+#X obj 279 207 f \$0;
+#X msg 279 229 traverse pd-\$1-gop \, bang;
+#X msg 279 280 10 0 \$1;
+#X obj 95 283 0;
+#X obj 40 463 s \$0-credits-bng;
+#X msg 279 359 10 \$1;
+#X obj 65 259 del 6001;
+#X msg 99 322 500;
+#X obj 140 10 loadbang;
+#X obj 279 384 setsize \$0-sparks a;
+#X obj 128 384 set \$0-sparks y;
+#X obj 140 183 append \$0-line a b;
+#X obj 65 411 set \$0-line a;
+#X obj 279 304 append \$0-sparks x y;
+#X obj 128 357 line 0 40;
+#X obj 65 122 inlet;
+#X msg 128 259 0 \, 320 6000;
+#X msg 65 322 320;
+#N canvas 60 65 683 470 credits-loop 0;
+#X msg 11 399 label_pos \$1 7;
+#X obj 11 426 s \$0-credits-bng;
+#X obj 11 344 * 500;
+#X obj 297 37 loadbang;
+#X obj 91 161 list;
+#X obj 197 192 list length;
+#X obj 130 205 f;
+#X obj 130 230 + 1;
+#X obj 182 219 mod;
+#X msg 130 257 set label \, adddollar \$1;
+#X obj 91 183 t b a b;
+#X msg 297 64 list Miller_Puckette Jamie_Tittle Gerard_van_Dongen Hans-Christoph_Steiner
IOhannes_m_zmölnig Dave_Sabine Yves_Degoyon Thomas_Musil Thomas_Grill
Tim_Blechmann Mark_Danks Joseph_Sarlo Martin_Peach Cyrille_Henry Thomas_O_Fredericks
Bryan_Jurish Nicolas_Montgermont Alexandre_Quessy B.Bogart Winfried_Ritsch dmotd
lluís_gómez_i_bigordà Chris_McCormick chunlee David_Merrill Mathieu_Bouchard
Tom_Schouten Ed_Kelly Frank_Barknecht Franz_Zotter Günter_Geiger Georg_Holzmann
carmen_rocco Vibeke_Sorensen Rand_Steiger jasch Jonathan_Wilkes João_Pais
Krzysztof_Czaja Luke_Iannini mescalinum Michael_McGonagle Davide_Morelli
Sergi_Lario_Loyo Olaf_Matthes David_Plans_Casal Jamie_Bullock Rich_E
Russell_Bryant Ben_Saylor Fernando_Lopez-Lezcano Adam_Lindsay Karl_MacMillan
Toshinori_Ohkouchi Harry_Castle Christian_Feldbauer Kerry_Hagan Trevor_Johnson
Gerda_Strobl John_Harrison Paloma_Oliveira Alexandre_Castonguay Alexandre_Porres
+Andrew_Brouse Marc_Fournel Darsha_Hewitt Kyd_Campbell;
#X obj 11 371 + 20;
+#X obj 11 288 line;
+#X obj 91 7 r \$0-credits-bng;
+#X obj 91 34 route bang;
+#X obj 91 56 t b b;
+#X msg 11 148 0;
+#X obj 91 135 del 900;
+#X obj 18 195 del 200;
+#X msg 18 221 0 \, 1 800;
+#X msg 27 254 1 \, 0 2250;
+#X obj 11 317 pow 3;
+#X obj 279 355 del 2200;
+#X obj 91 332 del 3500;
+#N canvas 294 26 449 469 drip-animation 0;
+#X obj 192 139 f \$0;
+#X obj 192 187 pointer;
+#X msg 192 164 traverse pd-\$1-gop \, bang;
+#X obj 50 156 line;
+#X obj 31 23 inlet;
+#X obj 255 89 0;
+#X obj 192 111 t b b;
+#X obj 192 89 spigot 1;
+#X obj 50 181 pow 2.5;
+#X msg 50 129 0 \, 1 1250;
+#X obj 50 211 expr $f1*320;
+#X obj 31 101 del 1251;
+#X obj 31 45 t b b b;
+#X obj 172 426 s \$0-credits-bng;
+#X obj 109 258 random 999;
+#X msg 172 407 color 0 \$1 2;
+#X obj 192 258 append \$0-circle x y;
+#X msg 192 233 15 10 \$1;
+#X obj 173 387 expr -65536 * $i1 - 256 * $i2 - $i3 - 1;
+#X obj 173 325 expr min(int($f1/100)%10 \, 8)/8*255 \; min(int($f1/10)%10
+\, 8)/8*255 \; min($f1%10 \, 8)/8*255;
+#X obj 31 325 set \$0-circle y c c1;
+#X msg 109 298 0;
+#X msg 31 258 50 999 999;
+#X connect 0 0 2 0;
+#X connect 1 0 17 0;
+#X connect 2 0 1 0;
+#X connect 3 0 8 0;
+#X connect 4 0 12 0;
+#X connect 5 0 7 1;
+#X connect 6 0 0 0;
+#X connect 6 1 5 0;
+#X connect 7 0 6 0;
+#X connect 8 0 10 0;
+#X connect 9 0 3 0;
+#X connect 10 0 20 0;
+#X connect 11 0 22 0;
+#X connect 12 0 11 0;
+#X connect 12 1 9 0;
+#X connect 12 2 7 0;
+#X connect 12 2 14 0;
+#X connect 14 0 19 0;
+#X connect 14 0 20 1;
+#X connect 14 0 21 0;
+#X connect 15 0 13 0;
+#X connect 16 0 20 3;
+#X connect 17 0 16 0;
+#X connect 18 0 15 0;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 2 18 2;
+#X connect 21 0 20 2;
+#X connect 22 0 20 0;
+#X restore 279 382 pd drip-animation;
+#X msg 118 81 stop;
+#X obj 118 103 s \$0-br;
+#X obj 151 332 r \$0-br;
+#X obj 148 135 r \$0-br;
+#X msg 110 287 label \$40;
+#X connect 0 0 1 0;
+#X connect 2 0 12 0;
+#X connect 3 0 11 0;
+#X connect 4 0 10 0;
+#X connect 5 0 8 1;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 6 1;
+#X connect 9 0 30 0;
+#X connect 10 0 21 0;
+#X connect 10 0 24 0;
+#X connect 10 1 30 0;
+#X connect 10 2 6 0;
+#X connect 11 0 4 1;
+#X connect 11 0 5 0;
+#X connect 12 0 0 0;
+#X connect 13 0 22 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 16 0 18 0;
+#X connect 16 0 19 0;
+#X connect 16 1 26 0;
+#X connect 17 0 13 0;
+#X connect 18 0 4 0;
+#X connect 18 0 23 0;
+#X connect 19 0 20 0;
+#X connect 20 0 13 0;
+#X connect 21 0 13 0;
+#X connect 22 0 2 0;
+#X connect 23 0 25 0;
+#X connect 24 0 1 0;
+#X connect 26 0 27 0;
+#X connect 28 0 24 0;
+#X connect 29 0 18 0;
+#X connect 30 0 1 0;
+#X restore 40 496 pd credits-loop;
+#X msg 40 441 label_pos 20 7 \, label Credits! \, color 0 2 2 \, bang
+;
+#X obj 140 37 t b b;
+#X obj 170 306 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+320;
+#X msg 140 160 1 319 \$1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 0 27 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 7 0 18 0;
+#X connect 8 0 26 0;
+#X connect 10 0 14 0;
+#X connect 11 0 8 0;
+#X connect 11 0 24 0;
+#X connect 11 0 22 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 25 0;
+#X connect 16 0 17 1;
+#X connect 18 0 1 1;
+#X connect 18 0 15 1;
+#X connect 18 0 10 0;
+#X connect 19 0 15 0;
+#X connect 19 0 17 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 19 0;
+#X connect 21 0 26 0;
+#X connect 22 0 17 0;
+#X connect 24 0 9 0;
+#X connect 25 0 2 0;
+#X connect 25 1 5 0;
+#X connect 26 0 1 0;
+#X connect 27 0 16 0;
+#X restore 8 267 pd credits-animation;
+#X msg 313 284 \$1.\$2.\$3;
+#X connect 0 0 5 0;
+#X connect 1 0 13 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 3 0 22 0;
+#X connect 5 0 6 0;
+#X connect 5 0 10 0;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 17 0 21 0;
+#X connect 19 0 20 0;
+#X connect 22 0 4 0;
+#X coords 0 -1 1 1 112 72 2 10 10;
+#X restore 10 46 pd;
+#X text 9 31 |;
+#X text 131 48 A real-time graphical programming environment;
+#X text 131 65 for live interactive computer music \, Pd works;
+#X text 131 82 on SGI machines \, Microsoft Windows \, Linux \,;
+#X text 131 99 and Mac OSX.;
+#X text 36 165 Pd is copyrighted but is free for you to use for any
+reasonable purpose under the GNU GPL version 3 . Follow the link for
+more details about the license:;
+#X connect 2 0 13 0;
+#X connect 13 1 12 0;
diff --git a/doc/5.reference/help-intro.pd b/doc/5.reference/help-intro.pd
index 1315f27c5..cfaffddfd 100644
--- a/doc/5.reference/help-intro.pd
+++ b/doc/5.reference/help-intro.pd
@@ -291,9 +291,9 @@
 #X obj 18 4338 append;
 #X text 118 4338 - add an element to a list;
 #X obj 18 4368 sublist;
-#X obj 14 4449 scalar;
+#X text 14 4449 scalar;
 #X text 104 4448 - draw a scalar on parent;
-#X obj 15 4479 scope~;
+#X text 15 4479 [scope~];
 #X text 115 4479 (use tabwrite~ now);
 #X obj 15 4509 namecanvas;
 #X obj 15 4539 template;
diff --git a/doc/5.reference/import-help.pd b/doc/5.reference/import-help.pd
new file mode 100644
index 000000000..8e62f3040
--- /dev/null
+++ b/doc/5.reference/import-help.pd
@@ -0,0 +1,19 @@
+#N canvas 121 22 423 338 10;
+#X declare -lib ext13 -lib memento -lib rradical;
+#X msg 21 102 bang;
+#X obj 21 150 import ext13 memento rradical;
+#X symbolatom 32 176 0 0 0 0 - - -;
+#X obj 21 202 print;
+#X text 68 101 get next item in list of loaded libs;
+#X text 80 125 start at the top of the list again;
+#X text 29 239 Sending bangs to [import] makes it output the loaded
+libraries one at a time.;
+#X msg 33 126 rewind;
+#X text 18 22 [import] loads libraries from the patch. On Pd 0.40.
+or greater \, it loads the library into the patch's local namespace.
+On older versions \, it loads the libraries into the global namespace.
+;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 3 0;
+#X connect 7 0 1 0;
diff --git a/doc/5.reference/readsf~-help.pd b/doc/5.reference/readsf~-help.pd
index 29c90988b..a8634fb3f 100644
--- a/doc/5.reference/readsf~-help.pd
+++ b/doc/5.reference/readsf~-help.pd
@@ -1,11 +1,11 @@
-#N canvas 113 157 888 480 12;
-#X msg 561 8 \; pd dsp 1;
-#X msg 39 240 1;
-#X msg 39 261 0;
+#N canvas 340 118 785 483 12;
+#X msg 606 63 \; pd dsp 1;
+#X msg 99 240 1;
+#X msg 99 261 0;
 #X obj 516 359 print didit;
 #X obj 139 361 env~ 16384;
 #X floatatom 139 380 0 0 0 0 - - -;
-#X msg 40 283 print;
+#X msg 100 283 print;
 #X obj 20 393 dac~;
 #X obj 233 360 env~ 16384;
 #X floatatom 233 379 0 0 0 0 - - -;
@@ -35,12 +35,14 @@ send a "1" to start playback. A "0" stops it.;
 automatically \, although only 2- 3- and 4- byte samples are accepted
 (4 bytes implies floating point and is not available in aiff format.)
 ;
-#X text 647 450 Updated for version 0.37;
-#X obj 116 452 soundfiler;
-#X text 24 452 see also:;
-#X obj 216 452 readsf~;
-#X text 94 238 1 starts playback;
-#X text 97 261 0 stops it;
+#X obj 116 442 soundfiler;
+#X text 24 442 see also:;
+#X msg 39 239 start;
+#X msg 39 262 stop;
+#X text 577 440 Updated for version 0.42-4;
+#X text 144 238 starts playback;
+#X text 144 260 stops it;
+#X obj 216 442 writesf~;
 #X connect 1 0 10 0;
 #X connect 2 0 10 0;
 #X connect 4 0 5 0;
@@ -61,3 +63,5 @@ automatically \, although only 2- 3- and 4- byte samples are accepted
 #X connect 16 0 7 1;
 #X connect 17 0 7 0;
 #X connect 19 0 10 0;
+#X connect 28 0 10 0;
+#X connect 29 0 10 0;
diff --git a/doc/6.externs/makefile b/doc/6.externs/makefile
index 5f78fb1d3..8a5657fea 100644
--- a/doc/6.externs/makefile
+++ b/doc/6.externs/makefile
@@ -61,7 +61,7 @@ LINUXINCLUDE =  -I../../src
 
 .c.pd_linux:
 	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld -shared -o $*.pd_linux $*.o -lc -lm
+	ld -export_dynamic  -shared -o $*.pd_linux $*.o -lc -lm
 	strip --strip-unneeded $*.pd_linux
 	rm $*.o
 
diff --git a/extra/bonk~/bonk~.c b/extra/bonk~/bonk~.c
index 6776b2e20..dfd5a66d6 100644
--- a/extra/bonk~/bonk~.c
+++ b/extra/bonk~/bonk~.c
@@ -53,7 +53,7 @@ decay and other times in msec
 #include <stdio.h>
 #include <string.h>
 
-#ifdef NT
+#ifdef _MSC_VER
 #pragma warning (disable: 4305 4244)
 #endif
  
@@ -82,7 +82,12 @@ static t_class *bonk_class;
 #endif
 
 #ifndef _MSC_VER
-#include <alloca.h>
+# ifdef __MINGW32__
+/* alloca is in malloc.h in MinGW */
+#  include <malloc.h>
+# else
+#  include <alloca.h>
+# endif
 #endif
 
 /* ------------------------ bonk~ ----------------------------- */
diff --git a/extra/expr~/makefile b/extra/expr~/makefile
index 4c6481407..15593d390 100644
--- a/extra/expr~/makefile
+++ b/extra/expr~/makefile
@@ -88,7 +88,7 @@ LINUXINCLUDE =  -I../../src
 	$(CC) -g $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.pd_linux_o -c $*.c
 
 expr.pd_linux: $(LINUXOBJ)
-	$(CC)  -shared -o expr.pd_linux $(LINUXOBJ) -lc -lm
+	$(CC) -shared -o expr.pd_linux $(LINUXOBJ) -lc -lm
 	strip --strip-unneeded expr.pd_linux
 
 expr~.pd_linux: expr.pd_linux
diff --git a/extra/expr~/vexp.c b/extra/expr~/vexp.c
index 7d4d7b521..659bd2973 100644
--- a/extra/expr~/vexp.c
+++ b/extra/expr~/vexp.c
@@ -1103,7 +1103,7 @@ abort();
         case ET_LB:
         default:
                 post_error((fts_object_t *) expr,
-                        "expr: ex_eval: unexpected type %d\n", eptr->ex_type);
+                        "expr: ex_eval: unexpected type %ld\n", eptr->ex_type);
                 return (exNULL);
         }
         if (!eptr[1].ex_type) {
@@ -1185,7 +1185,7 @@ abort();
         case OP_COMMA:
         case OP_SEMI:
         default:
-                post_error((fts_object_t *) expr, "expr: ex_print: bad op 0x%x\n", eptr->ex_op);
+                post_error((fts_object_t *) expr, "expr: ex_print: bad op 0x%lx\n", eptr->ex_op);
                 return (exNULL);
         }
 
diff --git a/extra/fiddle~/fiddle~.c b/extra/fiddle~/fiddle~.c
index d959b00f4..ea4886d90 100644
--- a/extra/fiddle~/fiddle~.c
+++ b/extra/fiddle~/fiddle~.c
@@ -28,7 +28,7 @@
  *
  */
 
-#ifdef NT
+#ifdef _MSC_VER /* this is only needed with Microsoft's compiler */
 #define flog log
 #define fexp exp
 #define fsqrt sqrt
diff --git a/extra/makefile b/extra/makefile
index ee028616a..a844eaa65 100644
--- a/extra/makefile
+++ b/extra/makefile
@@ -49,7 +49,7 @@ d_fat: $(NAME).d_fat
 .SUFFIXES: .d_ppc .d_fat
 
 DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
+    -Wno-unused -Wno-parentheses -Wno-switch $(OPT_CFLAGS)
 
 .c.d_ppc:
 	$(CC) $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
@@ -59,7 +59,7 @@ DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
 .c.d_fat:
 	$(CC) -arch i386 -arch ppc $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
 	$(CC) -arch i386 -arch ppc -bundle -undefined suppress -flat_namespace \
-	    -o $*.d_fat $*.o 
+	    -o $*.pd_darwin $*.o 
 	rm -f $*.o
 
 # ----------------------------------------------------------
diff --git a/extra/output~-help.pd b/extra/output~-help.pd
new file mode 100644
index 000000000..cd4883646
--- /dev/null
+++ b/extra/output~-help.pd
@@ -0,0 +1,11 @@
+#N canvas 103 48 450 300 10;
+#X obj 104 118 osc~ 200;
+#X obj 241 122 noise~;
+#X text 38 28 a GUI replacement for [dac~] with controls for "compute
+audio" \, volume \, and a mute button.;
+#X obj 91 166 output~;
+#X obj 220 165 output~;
+#X connect 0 0 3 0;
+#X connect 0 0 3 1;
+#X connect 1 0 4 1;
+#X connect 1 0 4 0;
diff --git a/extra/output~.pd b/extra/output~.pd
new file mode 100644
index 000000000..ee2df2d58
--- /dev/null
+++ b/extra/output~.pd
@@ -0,0 +1,124 @@
+#N canvas 508 22 548 407 10;
+#X obj 13 107 hsl 42 23 0.01 1 1 0 \$0-v \$0-v volume 7 13 1 9 -245500
+-13381 -1 0 0;
+#X obj 57 94 tgl 18 0 THIS_IS_HERE_TO_GET_RID_OF_THE_OUTLET \$0-dsp-toggle
+dsp 2 9 1 9 -225271 -195568 -33289 1 1;
+#N canvas 366 514 482 356 dsp 0;
+#X obj 11 7 inlet;
+#X obj 92 226 select 0 1;
+#X msg 125 248 6;
+#X obj 92 57 route dsp;
+#X obj 92 36 receive pd;
+#X obj 206 138 loadbang;
+#X msg 11 220 dsp \$1;
+#X obj 11 245 send pd;
+#X msg 206 278 set \$1;
+#X obj 206 174 value GLOBAL_PDDP_DSP;
+#X msg 109 278 color \$1 20 12;
+#X obj 180 309 send \$0-dsp-toggle;
+#X obj 92 115 change;
+#X msg 92 247 0;
+#X connect 0 0 6 0;
+#X connect 0 0 12 0;
+#X connect 1 0 13 0;
+#X connect 1 1 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 12 0;
+#X connect 4 0 3 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 8 0 11 0;
+#X connect 9 0 8 0;
+#X connect 9 0 1 0;
+#X connect 10 0 11 0;
+#X connect 12 0 8 0;
+#X connect 12 0 1 0;
+#X connect 12 0 9 0;
+#X connect 13 0 10 0;
+#X restore 112 128 pd dsp logic;
+#X obj 315 12 inlet;
+#X obj 57 112 bng 18 1000 50 0 THIS_IS_HERE_TO_GET_RID_OF_THE_OUTLET
+\$0-MUTE_TOGGLE empty 0 9 2 8 -261689 -258699 -195568;
+#X obj 191 12 inlet~;
+#X obj 86 283 line~;
+#X obj 186 343 *~;
+#X obj 206 373 dac~;
+#X text 203 32 audio in;
+#X obj 254 12 inlet~;
+#X obj 248 342 *~;
+#X obj 201 83 hip~ 3;
+#X obj 263 83 hip~ 3;
+#X obj 12 298 send pd;
+#X msg 12 277 dsp 1;
+#X obj 248 372 outlet~;
+#X obj 148 372 outlet~;
+#X obj 330 372 outlet;
+#N canvas 679 297 361 328 mute 0;
+#X obj 23 20 inlet;
+#X obj 173 20 inlet;
+#X obj 222 208 float;
+#X obj 265 121 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 222 162 spigot;
+#X obj 172 41 trigger bang bang;
+#X obj 254 263 outlet;
+#X msg 274 208 0;
+#X obj 274 163 select 0;
+#X obj 127 64 bang;
+#X msg 127 85 set 1;
+#X obj 65 304 send \$0-MUTE_TOGGLE;
+#X msg 65 283 color \$1 13 20;
+#X obj 65 235 bang;
+#X msg 65 255 0;
+#X msg 98 255 3;
+#X connect 0 0 2 1;
+#X connect 0 0 9 0;
+#X connect 1 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 13 0;
+#X connect 3 0 4 1;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
+#X connect 5 1 3 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 8 0 15 0;
+#X connect 9 0 10 0;
+#X connect 9 0 13 0;
+#X connect 10 0 3 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 0;
+#X restore 86 156 pd mute;
+#X obj 86 262 pack 0 50;
+#X text 153 261 <-- make a ramp to avoid clicks or zipper noise;
+#X msg 86 227 0;
+#X obj 86 204 moses 0.011;
+#X text 307 84 filter out DC;
+#X connect 0 0 15 0;
+#X connect 0 0 19 0;
+#X connect 0 0 18 0;
+#X connect 0 0 23 0;
+#X connect 1 0 2 0;
+#X connect 3 0 0 0;
+#X connect 4 0 19 1;
+#X connect 5 0 12 0;
+#X connect 6 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 17 0;
+#X connect 10 0 13 0;
+#X connect 11 0 8 1;
+#X connect 11 0 16 0;
+#X connect 12 0 7 1;
+#X connect 13 0 11 1;
+#X connect 15 0 14 0;
+#X connect 19 0 0 0;
+#X connect 19 0 23 0;
+#X connect 20 0 6 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 23 1 20 0;
+#X coords 0 0 1 1 65 44 1 10 90;
diff --git a/extra/pd~/pd~.c b/extra/pd~/pd~.c
index 165065f8a..c6ff72cf2 100644
--- a/extra/pd~/pd~.c
+++ b/extra/pd~/pd~.c
@@ -512,7 +512,7 @@ static void *pd_tilde_new(t_symbol *s, int argc, t_atom *argv)
     int ninsig = 2, noutsig = 2, j, fifo = 5;
     float sr = sys_getsr();
     t_sample **g;
-    t_symbol *pddir = sys_guidir,
+    t_symbol *pddir = sys_libdir,
         *scheddir = gensym(class_gethelpdir(pd_tilde_class));
     /* fprintf(stderr, "pd %s, sched %s\n", pddir->s_name, scheddir->s_name); */
     while (argc > 0)
diff --git a/extra/pd~/z.pd b/extra/pd~/z.pd
new file mode 100644
index 000000000..373201dae
--- /dev/null
+++ b/extra/pd~/z.pd
@@ -0,0 +1,15 @@
+#N canvas 686 241 450 300 10;
+#X obj 65 58 r foo;
+#X obj 62 100 print foo;
+#X obj 244 59 adc~;
+#X obj 238 102 env~ 8192;
+#X floatatom 236 140 5 0 0 0 - - -;
+#X obj 155 234 dac~;
+#X obj 155 191 osc~ 440;
+#X obj 287 204 stdout;
+#X msg 307 153 a b c;
+#X connect 0 0 1 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
diff --git a/extra/pique/pique.c b/extra/pique/pique.c
index f4cae5e19..2d14a5533 100644
--- a/extra/pique/pique.c
+++ b/extra/pique/pique.c
@@ -7,7 +7,7 @@ combustible materiel, or as part of any life support system or weapon. */
 #include "m_pd.h"
 #include <math.h>
 #include <stdio.h>
-#ifdef NT
+#ifdef _MSC_VER /* this is only needed with Microsoft's compiler */
 #pragma warning( disable : 4244 )
 #pragma warning( disable : 4305 )
 #endif
diff --git a/extra/sigmund~/sigmund~.c b/extra/sigmund~/sigmund~.c
index 0f8b9283e..c63967660 100644
--- a/extra/sigmund~/sigmund~.c
+++ b/extra/sigmund~/sigmund~.c
@@ -13,7 +13,7 @@
 and usable in other contexts.  The one external requirement is a real
 single-precision FFT, invoked as in the Mayer one: */
 
-#ifdef NT
+#ifdef _MSC_VER /* this is only needed with Microsoft's compiler */
 __declspec(dllimport) extern
 #endif
 void mayer_realfft(int npoints, float *buf);
@@ -26,13 +26,13 @@ for example, defines this in the file d_fft_mayer.c or d_fft_fftsg.c. */
 #include <math.h>
 #include <stdio.h>
 #include <string.h>
-#ifdef NT
+#ifdef _WIN32
 #include <malloc.h>
 #else
 #include <alloca.h>
 #endif
 #include <stdlib.h>
-#ifdef NT
+#ifdef _MSC_VER /* this is only needed with Microsoft's compiler */
 #pragma warning( disable : 4244 )
 #pragma warning( disable : 4305 )
 #endif
diff --git a/linux/README.txt b/linux/README.txt
deleted file mode 100644
index fb8645adc..000000000
--- a/linux/README.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-release checklist
-    version string in s_main.c
-    test OSS and ALSA
-    release notes
-    ./make-release 0.35-0  or 0.35-test11, etc
-    rsync -n -avzl --delete /home/msp/pd/doc/1.manual/ \
-	crca.ucsd.edu:public_html/Pd_documentation
-    copy README.txt to web page
-    mail release notice from ../attic/pd-release
-    git tags (to see existing tags)
-
-rpm building (inactive)
-    update rpmspec version number
-    as root:
-    rpmbuild -ba rpmspec
-    rpmbuild -bb rpmspec-alsa
-    check size of compressed files:
-    	/usr/src/redhat/SRPMS/pd-0.36-0.src.rpm
-    	/usr/src/redhat/RPMS/i386/pd-0.36-0.i386.rpm 
-    	/usr/src/redhat/RPMS/i386/pd-alsa-0.36-0.i386.rpm
-    copy from /usr/src/redhat/RPMS/i386 and /usr/src/redhat/SRPMS
diff --git a/linux/clone-pd b/linux/clone-pd
deleted file mode 100755
index 74f7ca206..000000000
--- a/linux/clone-pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-#usage: ./clone-pd <new directory>
-
-if test x$1 == x
-then
-   echo usage: ./clone ~/tmp/pd1
-   exit 1
-fi
-
-if mkdir $1;
-then
-    cp -a ../src ../obj ../bin $1/
-fi
diff --git a/linux/cp-to-max.sh b/linux/cp-to-max.sh
deleted file mode 100755
index 3a32fde71..000000000
--- a/linux/cp-to-max.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-cd /home/msp/pd/extra
-tar czf /tmp/z.tgz \
-   pd~/pd~.c pd~/pd~-help.pd pd~/pd~-subprocess.pd \
-   sigmund~/sigmund~.c sigmund~/sigmund~-help.pd \
-   bonk~/bonk~.c bonk~/bonk~-help.pd
-
-ls -l /tmp/z.tgz
-
-
diff --git a/linux/detab-src.sh b/linux/detab-src.sh
deleted file mode 100755
index 05f8a5d3d..000000000
--- a/linux/detab-src.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#! /bin/sh
-for i  in `find . -name "*.[ch]" -o -name "*.tk"`  ; do
-expand $i > /tmp/expanded-src
-if ( ! cmp -s $i /tmp/expanded-src ) ; then 
-    echo detabbing: $i
-    cp /tmp/expanded-src $i
-fi
-done
diff --git a/linux/get-tgz.sh b/linux/get-tgz.sh
deleted file mode 100755
index bb7ddc776..000000000
--- a/linux/get-tgz.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-#usage: ./get-tgz /tmp/x.tgz /tmp/sent-one.tgz
-if test x$1 == x
-then
-   echo usage: ./get-tgz /tmp/x.tgz  /tmp/sent-one.tgz
-   exit 1
-fi
-
-rm -rf /tmp/image
-mkdir /tmp/image
-cd /tmp/image
-tar xzf $1
-
-find . -type f \( -name "*.o" -o -name "*.d_fat" -o -name "*.d_ppc" \
-    -o -perm -0100 \) \
-    -exec echo rm {} \;
-
-echo "****************** NEW FILES *******************"
-
-find . -type f -newer $2
-
diff --git a/linux/git-add-pd.sh b/linux/git-add-pd.sh
deleted file mode 100755
index b59f93d8b..000000000
--- a/linux/git-add-pd.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-(cd src; sh ../linux/detab-src.sh)
-
-git add INSTALL.txt LICENSE.txt README.txt doc extra man \
-    portaudio portmidi src msw linux
diff --git a/linux/make-nodoc b/linux/make-nodoc
deleted file mode 100755
index 7a1282dc7..000000000
--- a/linux/make-nodoc
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-
-#usage: ./make-nodoc 0.34-0 or 0.35-0test11 or 0.37-1test6
-if test x$1 == x
-then
-   echo usage: ./make-nodoc 0.34-0 or 0.35-0test11 or 0.37-1test6
-   exit 1
-fi
-
-set -x
-cd ..
-ROOTDIR=`pwd`
-find . \( -name ".[a-zA-Z]*" -o -name "core*" -o -name "*.cache" \) \
-    -ok rm -r {} \;
-
-cd src
-sh ../linux/detab-src.sh
-cd ../extra
-sh ../linux/detab-src.sh
-cd ..
-
-TMPPD=/tmp/pd-$1
-rm -rf /tmp/pd $TMPPD
-mkdir $TMPPD
-cp -a README.txt LICENSE.txt INSTALL.txt src extra man \
-    portaudio portmidi $TMPPD
-mkdir $TMPPD/doc
-mkdir $TMPPD/doc/7.stuff
-mkdir $TMPPD/doc/7.stuff/tools
-cp doc/7.stuff/tools/testtone.pd $TMPPD/doc/7.stuff/tools
-
-mkdir $TMPPD/obj $TMPPD/bin
-cd $TMPPD/src
-autoconf
-make distclean
-rm -rf autom4te.cache
-rm *.pd
-cd /tmp
-tar cf - pd-$1 | gzip > $ROOTDIR/archive/dist/pd-$1.src.tar.gz
-mv pd-$1 pd
-tar cf - pd | gzip > /usr/src/redhat/SOURCES/pd.tar.gz
-# rm -rf /tmp/pd $TMPPD
-ls -l $ROOTDIR/archive/dist/pd-$1.src.tar.gz
diff --git a/linux/make-release b/linux/make-release
deleted file mode 100755
index 7a073f9ce..000000000
--- a/linux/make-release
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-#usage: ./make-release <version>
-if test x$1 == x
-then
-   echo usage: ./make-release 0.34-0 or 0.35-0test11 or ...
-   exit 1
-fi
-
-# set -x
-cd ..
-ROOTDIR=`pwd`
-find . \( -name ".[azA-Z]*" \! -name ".git" \
-    -o -name "core" -o -name "core.*" -o -name "*.cache" \) \
-    -ok rm -r {} \;
-
-cd src
-sh ../linux/detab-src.sh
-cd ../extra
-sh ../linux/detab-src.sh
-cd ..
-
-TMPPD=/tmp/pd-$1
-rm -rf /tmp/pd $TMPPD
-mkdir $TMPPD
-cp -pR README.txt LICENSE.txt INSTALL.txt src doc extra man \
-    portaudio portmidi $TMPPD
-mkdir $TMPPD/obj $TMPPD/bin
-cd $TMPPD/src
-autoconf
-make distclean
-rm -rf autom4te.cache
-rm -f *.pd
-cd /tmp
-tar czf pd-$1.src.tar.gz pd-$1
-rm -rf $TMPPD
-mv -i pd-$1.src.tar.gz $ROOTDIR/archive/dist/ && \
-ls -l $ROOTDIR/archive/dist/pd-$1.src.tar.gz
-
diff --git a/linux/rpmspec b/linux/rpmspec
deleted file mode 100644
index 230fb6ad8..000000000
--- a/linux/rpmspec
+++ /dev/null
@@ -1,64 +0,0 @@
-Summary:   Real-time patchable audio and multimedia processor.
-Name:      pd
-Version:   0.37
-Release:   0
-Copyright: BSD
-Group:     Applications/Multimedia
-Source:    pd.tar.gz
-BuildRoot: /var/tmp/%{name}-buildroot
-Prefix:    %{_prefix}
-
-%description
-Pd gives you a canvas for patching together modules that analyze, process,
-and synthesize sounds, together with a rich palette of real-time control  
-and I/O possibilities.  Similar to Max (Cycling74) and JMAX (IRCAM).  A   
-related software package named Gem extends Pd's capabilities to include   
-graphical rendering.
-
-%prep
-%setup -n pd
-
-%build
-cd src
-./configure --disable-alsa --prefix=%{prefix} --mandir=%{_mandir}
-make depend 
-make 
-
-%install
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT%{prefix}/bin
-mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
-mkdir -p $RPM_BUILD_ROOT%{prefix}/lib/pd/include
-mkdir -p $RPM_BUILD_ROOT%{prefix}/lib/pd/bin
-
-install -m 644 man/* $RPM_BUILD_ROOT%{_mandir}/man1
-install -s -m 4755 bin/pd $RPM_BUILD_ROOT%{prefix}/bin/pd
-install -s bin/pd-gui bin/pd-watchdog $RPM_BUILD_ROOT%{prefix}/lib/pd/bin/
-install -s bin/pdsend bin/pdreceive $RPM_BUILD_ROOT%{prefix}/bin/
-install bin/pd.tk $RPM_BUILD_ROOT%{prefix}/lib/pd/bin/
-cp -pr doc $RPM_BUILD_ROOT%{prefix}/lib/pd/
-cp -pr extra $RPM_BUILD_ROOT%{prefix}/lib/pd/
-install README.txt LICENSE.txt $RPM_BUILD_ROOT%{prefix}/lib/pd/
-install src/*.h $RPM_BUILD_ROOT%{prefix}/lib/pd/include
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-
-%{prefix}/bin/pd
-%{prefix}/bin/pdsend
-%{prefix}/bin/pdreceive
-%{prefix}/lib/pd
-%{_mandir}/man1/pd.1.gz
-%{_mandir}/man1/pdsend.1.gz
-%{_mandir}/man1/pdreceive.1.gz
-
-%changelog
-
-* Tue Apr 14 2001 Fernando Lopez-Lezcano <nando@ccrma.stanford.edu>
-- added %{prefix}, added %{_mandir} so that the man pages go into the
-  correct man directory for redhat
-- added %{alsa} for automatic detection of the installed alsa library
-- decoupled pd release (ie: PATCH2) from the rpm release 
diff --git a/linux/rpmspec-alsa b/linux/rpmspec-alsa
deleted file mode 100644
index 8800c7f43..000000000
--- a/linux/rpmspec-alsa
+++ /dev/null
@@ -1,64 +0,0 @@
-Summary:   Real-time patchable audio and multimedia processor.
-Name:      pd-alsa
-Version:   0.37
-Release:   0
-Copyright: free for any use
-Group:     Applications/Multimedia
-Source:    pd.tar.gz
-BuildRoot: /var/tmp/%{name}-buildroot
-Prefix:    %{_prefix}
-
-%description
-Pd gives you a canvas for patching together modules that analyze, process,
-and synthesize sounds, together with a rich palette of real-time control  
-and I/O possibilities.  Similar to Max (Cycling74) and JMAX (IRCAM).  A   
-related software package named Gem extends Pd's capabilities to include   
-graphical rendering.
-
-%prep
-%setup -n pd
-
-%build
-cd src
-./configure --prefix=%{prefix} --mandir=%{_mandir}
-make depend 
-make 
-
-%install
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT%{prefix}/bin
-mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
-mkdir -p $RPM_BUILD_ROOT%{prefix}/lib/pd/include
-mkdir -p $RPM_BUILD_ROOT%{prefix}/lib/pd/bin
-
-install -m 644 man/* $RPM_BUILD_ROOT%{_mandir}/man1
-install -s -m 4755 bin/pd $RPM_BUILD_ROOT%{prefix}/bin/pd
-install -s bin/pd-gui bin/pd-watchdog $RPM_BUILD_ROOT%{prefix}/lib/pd/bin/
-install -s bin/pdsend bin/pdreceive $RPM_BUILD_ROOT%{prefix}/bin/
-install bin/pd.tk $RPM_BUILD_ROOT%{prefix}/lib/pd/bin/
-cp -pr doc $RPM_BUILD_ROOT%{prefix}/lib/pd/
-cp -pr extra $RPM_BUILD_ROOT%{prefix}/lib/pd/
-install README.txt LICENSE.txt $RPM_BUILD_ROOT%{prefix}/lib/pd/
-install src/*.h $RPM_BUILD_ROOT%{prefix}/lib/pd/include
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-
-%{prefix}/bin/pd
-%{prefix}/bin/pdsend
-%{prefix}/bin/pdreceive
-%{prefix}/lib/pd
-%{_mandir}/man1/pd.1.gz
-%{_mandir}/man1/pdsend.1.gz
-%{_mandir}/man1/pdreceive.1.gz
-
-%changelog
-
-* Tue Apr 14 2001 Fernando Lopez-Lezcano <nando@ccrma.stanford.edu>
-- added %{prefix}, added %{_mandir} so that the man pages go into the
-  correct man directory for redhat
-- added %{alsa} for automatic detection of the installed alsa library
-- decoupled pd release (ie: PATCH2) from the rpm release 
diff --git a/msw/FESource.exe b/msw/FESource.exe
deleted file mode 100644
index d4e91cb159c99ff90e6ae52e46ae5700402b6395..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 309742
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
X5QPK!0SM#*{6_&?w+v$kybbz4zeH>s

diff --git a/msw/MakeSFX.exe b/msw/MakeSFX.exe
deleted file mode 100644
index e8f21defb0ba43e21273b1043fa0b98d5634f38f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 31744
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

diff --git a/msw/build-nt.bat b/msw/build-nt.bat
deleted file mode 100644
index 352993c94..000000000
--- a/msw/build-nt.bat
+++ /dev/null
@@ -1,22 +0,0 @@
-nmake
-cd ..\extra
-del *.dll
-cd bonk~
-nmake /NOLOGO pd_nt
-cd ..\choice
-nmake /NOLOGO pd_nt
-cd ..\expr~
-nmake /NOLOGO pd_nt
-cd ..\fiddle~
-nmake /NOLOGO pd_nt
-cd ..\loop~
-nmake /NOLOGO pd_nt
-cd ..\lrshift~
-nmake /NOLOGO pd_nt
-cd ..\pique
-nmake /NOLOGO pd_nt
-cd ..\sigmund~
-nmake /NOLOGO pd_nt
-cd ..
-
-
diff --git a/msw/get-msw.sh b/msw/get-msw.sh
deleted file mode 100755
index 8c56ec90d..000000000
--- a/msw/get-msw.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/tcsh
-
-rm -rf /tmp/image
-mkdir /tmp/image
-cd /tmp/image
-unzip -q /tmp/pdout.zip
-find . \( -name "*.lib" -o -name "*.exe" -o -name "*.dll" -o -name "*.obj" \
-    -o -name "*.exp"  \) \
-    -exec rm {} \;
-
-echo "****************** NEW FILES *******************"
-
-find . -type f -newer /tmp/pd.zip
-
-foreach i (`find . -name "*.c" -o -name "*.h"  -o -name "*.cpp" \
-	-o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" \
-	-o -name "*.html" -o -name "*.tk"`)
-	textconvert w u < $i > /tmp/xxx
-	mv /tmp/xxx $i
-end
-
diff --git a/msw/makesfx.bat b/msw/makesfx.bat
deleted file mode 100644
index 5e54224c9..000000000
--- a/msw/makesfx.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-zip -r pd-0.41-0test09.msw.zip pd
-
-makesfx /zip=pd-0.41-0test09.msw.zip /sfx=pd-0.41-0test09.msw.exe /title=Pd /website=crca.ucsd.edu/~msp /defaultpath=$programfiles$
-
-pscp pd-0.41-0test09.msw.zip pd-0.41-0test09.msw.exe msp@crca.ucsd.edu:public_html/Software
diff --git a/msw/pdprototype.tgz b/msw/pdprototype.tgz
deleted file mode 100644
index 8c6c8e615c046e93dae9678e316c969461f7bc4c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1269272
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%0D7L!{oRr#0+>~zDHsFOBh{h}4
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%0Dvwc6|*&?`HcHIjKvwCjN?+%HBU|}
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%0DCo%@Z;m?07OzKdJ%-W
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%0DfBA5hz5(i$gf6hnVd>hNt_FX($8X)+Sfm
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%0Dh32c#R
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

diff --git a/msw/send-msw.sh b/msw/send-msw.sh
deleted file mode 100755
index 649cf166f..000000000
--- a/msw/send-msw.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/tcsh
-set PDDIR=`pwd`/..
-set MSWDIR=`pwd`
-
-cd $PDDIR
-find . -name ".[a-zA-Z]*" -o -name core -ok rm {} \;
-rm -rf /tmp/pd /tmp/pd.zip
-cd /tmp
-tar xzf $MSWDIR/pdprototype.tgz
-cd $PDDIR
-cp src/*.{c,h} src/notes.txt /tmp/pd/src
-textconvert u w < src/u_main.tk > /tmp/pd/src/u_main.tk
-cp src/makefile.nt /tmp/pd/src/makefile
-textconvert u w < $MSWDIR/build-nt.bat > /tmp/pd/src/build.bat
-cp -a portaudio  /tmp/pd/portaudio
-cp -a portmidi /tmp/pd/portmidi
-cp -a doc/ INSTALL.txt LICENSE.txt /tmp/pd/
-cp -a extra/ /tmp/pd/extra
-
-cd /tmp/pd
-find . -name "*.pd_linux" -exec rm {} \;
-
-foreach i (`find . -name "*.c" -o -name "*.h"  -o -name "*.cpp" \
-    -o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" \
-    -o -name "*.html" | grep -v asio | grep -v portmidi | grep -v portaudio \
-    | grep -v include/X11`)
-	textconvert u w < $i > /tmp/xxx
-	mv /tmp/xxx $i
-end
-foreach i (`find lib/asio -name "*.c" -o -name "*.h"  -o -name "*.cpp" -o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" -o -name "*.html"`)
-        echo FOO----- $i
-	textconvert w u < $i > /tmp/xxx
-	textconvert u w < /tmp/xxx > $i
-end
-
-
-cd ..
-rm -f pd.zip
-zip -q -r pd.zip pd
-ls -l /tmp/pd.zip
-
diff --git a/msw/send-nodoc.sh b/msw/send-nodoc.sh
deleted file mode 100755
index 93b85beff..000000000
--- a/msw/send-nodoc.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/tcsh
-set PDDIR=`pwd`/..
-set MSWDIR=`pwd`
-
-cd $PDDIR
-find . -name ".[a-zA-Z]*" -o -name core -ok rm {} \;
-rm -rf /tmp/pd /tmp/pd.zip
-cd /tmp
-tar xzf $MSWDIR/pdprototype.tgz
-cd $PDDIR
-cp src/*.{c,h} src/notes.txt /tmp/pd/src
-textconvert u w < src/u_main.tk > /tmp/pd/src/u_main.tk
-cp src/makefile.nt /tmp/pd/src/makefile
-textconvert u w < $MSWDIR/build-nt.bat > /tmp/pd/src/build.bat
-cp -a portaudio  /tmp/pd/portaudio
-cp -a portmidi /tmp/pd/portmidi
-cp -a INSTALL.txt LICENSE.txt /tmp/pd/
-mkdir /tmp/pd/doc
-mkdir /tmp/pd/doc/7.stuff
-mkdir /tmp/pd/doc/7.stuff/tools
-cp doc/7.stuff/tools/testtone.pd /tmp/pd/doc/7.stuff/tools
-cp -a extra/ /tmp/pd/extra
-
-cd /tmp/pd
-find . -name "*.pd_linux" -exec rm {} \;
-
-foreach i (`find . -name "*.c" -o -name "*.h"  -o -name "*.cpp" \
-    -o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" \
-    -o -name "*.html" | grep -v asio | grep -v portmidi | grep -v portaudio \
-    | grep -v include/X11`)
-	textconvert u w < $i > /tmp/xxx
-	mv /tmp/xxx $i
-end
-foreach i (`find lib/asio -name "*.c" -o -name "*.h"  -o -name "*.cpp" -o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" -o -name "*.html"`)
-        echo FOO----- $i
-	textconvert w u < $i > /tmp/xxx
-	textconvert u w < /tmp/xxx > $i
-end
-
-cd ..
-rm -f pd.zip
-zip -q -r pd.zip pd
-ls -l /tmp/pd.zip
-
diff --git a/msw/textconvert.c b/msw/textconvert.c
deleted file mode 100644
index c12f939e8..000000000
--- a/msw/textconvert.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Text file conversion unix/max/windows. duh. */
-
-#include <stdio.h>
-
-int main(int argc, char **argv)
-{
-    FILE *infile;
-    int lastchar = 0, c;
-    int from, to;
-    if (argc < 3 || argc > 4) goto usage;
-    from = argv[1][0];
-    to = argv[2][0];
-    if (argc == 4)
-    {
-    	if (!(infile = fopen(argv[3], "r")))
-	{
-	    perror(argv[3]);
-	    exit(1);
-    	}
-    }
-    else infile = stdin;
-    if (from != 'u' && from != 'm' && from != 'w'
-    	|| to != 'u' && to != 'm' && to != 'w')
-	    goto usage;
-    while ((c = getc(infile)) != EOF)
-    {
-    	if (from == 'u' && to == 'm')
-	{
-	    if (c == '\n')
-	    	c = '\r';
-	    putchar(c);
-	}
-    	else if (from == 'u' && to == 'w')
-	{
-	    if (c == '\n')
-	    	putchar('\r');
-	    putchar(c);
-	}
-    	else if (from == 'm' && to == 'u')
-	{
-	    if (c == '\r')
-	    	c = '\n';
-	    putchar(c);
-	}
-    	else if (from == 'm' && to == 'w')
-	{
-	    putchar(c);
-	    if (c == '\r')
-	    	putchar('\n');
-	}
-    	else if (from == 'w' && to == 'u')
-	{
-	    if (c != '\r')
-	    	putchar(c);
-	}
-    	else if (from == 'w' && to == 'm')
-	{
-	    if (c != '\n')
-	    	putchar(c);
-	}
-	else putchar(c);
-    }
-    exit(0);
-usage:
-    fprintf(stderr, "usage: textconvert <sysfrom> <systo> [file]\n");
-    fprintf(stderr, "systems are u[nix], m[ac], w[indows].\n");
-    exit (1);
-}
diff --git a/portaudio/include/pa_asio.h b/portaudio/include/pa_asio.h
index 21f50ddac..64d1bd4e7 100644
--- a/portaudio/include/pa_asio.h
+++ b/portaudio/include/pa_asio.h
@@ -1,7 +1,7 @@
 #ifndef PA_ASIO_H
 #define PA_ASIO_H
 /*
- * $Id: pa_asio.h 1083 2006-08-23 07:30:49Z rossb $
+ * $Id: pa_asio.h 1400 2009-01-21 10:20:42Z rossb $
  * PortAudio Portable Real-Time Audio Library
  * ASIO specific extensions
  *
@@ -40,6 +40,7 @@
 
 
 /** @file
+ @ingroup public_header
  @brief ASIO-specific PortAudio API extension header file.
 */
 
@@ -99,6 +100,19 @@ PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
         const char** channelName );
 
 
+/** Set the sample rate of an open paASIO stream.
+ 
+ @param stream The stream to operate on.
+ @param sampleRate The new sample rate. 
+
+ Note that this function may fail if the stream is alredy running and the 
+ ASIO driver does not support switching the sample rate of a running stream.
+
+ Returns paIncompatibleStreamHostApi if stream is not a paASIO stream.
+*/
+PaError PaAsio_SetStreamSampleRate( PaStream* stream, double sampleRate );
+
+
 #define paAsioUseChannelSelectors      (0x01)
 
 typedef struct PaAsioStreamInfo{
diff --git a/portaudio/include/pa_jack.h b/portaudio/include/pa_jack.h
index c4eca1d6f..ba2aeb9c0 100644
--- a/portaudio/include/pa_jack.h
+++ b/portaudio/include/pa_jack.h
@@ -40,7 +40,8 @@
  */
 
 /** @file
- * JACK-specific PortAudio API extension header file.
+ *  @ingroup public_header
+ *  @brief JACK-specific PortAudio API extension header file.
  */
 #include "portaudio.h"
 
diff --git a/portaudio/include/pa_linux_alsa.h b/portaudio/include/pa_linux_alsa.h
index 7db633aea..de89ae9bf 100644
--- a/portaudio/include/pa_linux_alsa.h
+++ b/portaudio/include/pa_linux_alsa.h
@@ -2,7 +2,7 @@
 #define PA_LINUX_ALSA_H
 
 /*
- * $Id: pa_linux_alsa.h 1236 2007-06-24 20:39:26Z aknudsen $
+ * $Id: pa_linux_alsa.h 1414 2009-05-24 17:02:10Z aknudsen $
  * PortAudio Portable Real-Time Audio Library
  * ALSA-specific extensions
  *
@@ -40,7 +40,8 @@
  */
 
 /** @file
- * ALSA-specific PortAudio API extension header file.
+ *  @ingroup public_header
+ *  @brief ALSA-specific PortAudio API extension header file.
  */
 #include "portaudio.h"
 
@@ -86,6 +87,11 @@ PaError PaAlsa_GetStreamOutputCard( PaStream *s, int *card );
  */
 PaError PaAlsa_SetNumPeriods( int numPeriods );
 
+/** Set the maximum number of times to retry opening busy device (sleeping for a
+ * short interval inbetween).
+ */
+PaError PaAlsa_SetRetriesBusy( int retries );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/portaudio/include/pa_mac_core.h b/portaudio/include/pa_mac_core.h
index 783e3bc97..b0921b3c7 100644
--- a/portaudio/include/pa_mac_core.h
+++ b/portaudio/include/pa_mac_core.h
@@ -38,6 +38,11 @@
  * license above.
  */
 
+/** @file
+ *  @ingroup public_header
+ *  @brief CoreAudio-specific PortAudio API extension header file.
+ */
+
 #include <AudioUnit/AudioUnit.h>
 //#include <AudioToolbox/AudioToolbox.h>
 
diff --git a/portaudio/include/pa_win_ds.h b/portaudio/include/pa_win_ds.h
new file mode 100644
index 000000000..47e1d722c
--- /dev/null
+++ b/portaudio/include/pa_win_ds.h
@@ -0,0 +1,101 @@
+#ifndef PA_WIN_DS_H
+#define PA_WIN_DS_H
+/*
+ * $Id:  $
+ * PortAudio Portable Real-Time Audio Library
+ * DirectSound specific extensions
+ *
+ * Copyright (c) 1999-2007 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief DirectSound-specific PortAudio API extension header file.
+*/
+
+
+#include "portaudio.h"
+#include "pa_win_waveformat.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+#define paWinDirectSoundUseLowLevelLatencyParameters            (0x01)
+#define paWinDirectSoundUseChannelMask                          (0x04)
+
+
+typedef struct PaWinDirectSoundStreamInfo{
+    unsigned long size;             /**< sizeof(PaWinDirectSoundStreamInfo) */
+    PaHostApiTypeId hostApiType;    /**< paDirectSound */
+    unsigned long version;          /**< 1 */
+
+    unsigned long flags;
+
+    /* low-level latency setting support
+        TODO ** NOT IMPLEMENTED **
+        These settings control the number and size of host buffers in order
+        to set latency. They will be used instead of the generic parameters
+        to Pa_OpenStream() if flags contains the paWinDirectSoundUseLowLevelLatencyParameters
+        flag.
+
+        If PaWinDirectSoundStreamInfo structures with paWinDirectSoundUseLowLevelLatencyParameters
+        are supplied for both input and output in a full duplex stream, then the
+        input and output framesPerBuffer must be the same, or the larger of the
+        two must be a multiple of the smaller, otherwise a
+        paIncompatibleHostApiSpecificStreamInfo error will be returned from
+        Pa_OpenStream().
+
+    unsigned long framesPerBuffer;
+    */
+
+    /*
+        support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
+        paWinDirectSoundUseChannelMask this allows you to specify which speakers 
+        to address in a multichannel stream. Constants for channelMask
+        are specified in pa_win_waveformat.h
+
+    */
+    PaWinWaveFormatChannelMask channelMask;
+
+}PaWinDirectSoundStreamInfo;
+
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_DS_H */                                  
diff --git a/portaudio/include/pa_win_wasapi.h b/portaudio/include/pa_win_wasapi.h
new file mode 100644
index 000000000..64eb49b02
--- /dev/null
+++ b/portaudio/include/pa_win_wasapi.h
@@ -0,0 +1,391 @@
+#ifndef PA_WIN_WASAPI_H
+#define PA_WIN_WASAPI_H
+/*
+ * $Id:  $
+ * PortAudio Portable Real-Time Audio Library
+ * DirectSound specific extensions
+ *
+ * Copyright (c) 1999-2007 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief WASAPI-specific PortAudio API extension header file.
+*/
+
+#include "portaudio.h"
+#include "pa_win_waveformat.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+/* Setup flags */
+typedef enum PaWasapiFlags
+{
+    /* puts WASAPI into exclusive mode */
+    paWinWasapiExclusive                = (1 << 0),
+
+    /* allows to skip internal PA processing completely */
+    paWinWasapiRedirectHostProcessor    = (1 << 1),
+
+    /* assigns custom channel mask */
+    paWinWasapiUseChannelMask           = (1 << 2),
+
+    /* selects non-Event driven method of data read/write
+       Note: WASAPI Event driven core is capable of 2ms latency!!!, but Polling
+             method can only provide 15-20ms latency. */
+    paWinWasapiPolling                  = (1 << 3),
+
+    /* forces custom thread priority setting. must be used if PaWasapiStreamInfo::threadPriority 
+       is set to custom value. */
+    paWinWasapiThreadPriority           = (1 << 4)
+}
+PaWasapiFlags;
+#define paWinWasapiExclusive             (paWinWasapiExclusive)
+#define paWinWasapiRedirectHostProcessor (paWinWasapiRedirectHostProcessor)
+#define paWinWasapiUseChannelMask        (paWinWasapiUseChannelMask)
+#define paWinWasapiPolling               (paWinWasapiPolling)
+#define paWinWasapiThreadPriority        (paWinWasapiThreadPriority)
+
+
+/* Host processor. Allows to skip internal PA processing completely. 
+   You must set paWinWasapiRedirectHostProcessor flag to PaWasapiStreamInfo::flags member
+   in order to have host processor redirected to your callback.
+   Use with caution! inputFrames and outputFrames depend solely on final device setup.
+   To query maximal values of inputFrames/outputFrames use PaWasapi_GetFramesPerHostBuffer.
+*/
+typedef void (*PaWasapiHostProcessorCallback) (void *inputBuffer,  long inputFrames,
+                                               void *outputBuffer, long outputFrames,
+                                               void *userData);
+
+/* Device role */
+typedef enum PaWasapiDeviceRole
+{
+    eRoleRemoteNetworkDevice = 0,
+    eRoleSpeakers,
+    eRoleLineLevel,
+    eRoleHeadphones,
+    eRoleMicrophone,
+    eRoleHeadset,
+    eRoleHandset,
+    eRoleUnknownDigitalPassthrough,
+    eRoleSPDIF,
+    eRoleHDMI,
+    eRoleUnknownFormFactor
+}
+PaWasapiDeviceRole;
+
+
+/* Jack connection type */
+typedef enum PaWasapiJackConnectionType
+{
+    eJackConnTypeUnknown,
+    eJackConnType3Point5mm,
+    eJackConnTypeQuarter,
+    eJackConnTypeAtapiInternal,
+    eJackConnTypeRCA,
+    eJackConnTypeOptical,
+    eJackConnTypeOtherDigital,
+    eJackConnTypeOtherAnalog,
+    eJackConnTypeMultichannelAnalogDIN,
+    eJackConnTypeXlrProfessional,
+    eJackConnTypeRJ11Modem,
+    eJackConnTypeCombination
+} 
+PaWasapiJackConnectionType;
+
+
+/* Jack geometric location */
+typedef enum PaWasapiJackGeoLocation
+{
+	eJackGeoLocUnk = 0,
+    eJackGeoLocRear = 0x1, /* matches EPcxGeoLocation::eGeoLocRear */
+    eJackGeoLocFront,
+    eJackGeoLocLeft,
+    eJackGeoLocRight,
+    eJackGeoLocTop,
+    eJackGeoLocBottom,
+    eJackGeoLocRearPanel,
+    eJackGeoLocRiser,
+    eJackGeoLocInsideMobileLid,
+    eJackGeoLocDrivebay,
+    eJackGeoLocHDMI,
+    eJackGeoLocOutsideMobileLid,
+    eJackGeoLocATAPI,
+    eJackGeoLocReserved5,
+    eJackGeoLocReserved6,
+} 
+PaWasapiJackGeoLocation;
+
+
+/* Jack general location */
+typedef enum PaWasapiJackGenLocation
+{
+    eJackGenLocPrimaryBox = 0,
+    eJackGenLocInternal,
+    eJackGenLocSeparate,
+    eJackGenLocOther
+} 
+PaWasapiJackGenLocation;
+
+
+/* Jack's type of port */
+typedef enum PaWasapiJackPortConnection
+{
+    eJackPortConnJack = 0,
+    eJackPortConnIntegratedDevice,
+    eJackPortConnBothIntegratedAndJack,
+    eJackPortConnUnknown
+} 
+PaWasapiJackPortConnection;
+
+
+/* Thread priority */
+typedef enum PaWasapiThreadPriority
+{
+    eThreadPriorityNone = 0,
+    eThreadPriorityAudio,            //!< Default for Shared mode.
+    eThreadPriorityCapture,
+    eThreadPriorityDistribution,
+    eThreadPriorityGames,
+    eThreadPriorityPlayback,
+    eThreadPriorityProAudio,        //!< Default for Exclusive mode.
+    eThreadPriorityWindowManager
+}
+PaWasapiThreadPriority;
+
+
+/* Stream descriptor. */
+typedef struct PaWasapiJackDescription 
+{
+    unsigned long              channelMapping;
+    unsigned long              color; /* derived from macro: #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))) */
+    PaWasapiJackConnectionType connectionType;
+    PaWasapiJackGeoLocation    geoLocation;
+    PaWasapiJackGenLocation    genLocation;
+    PaWasapiJackPortConnection portConnection;
+    unsigned int               isConnected;
+}
+PaWasapiJackDescription;
+
+
+/* Stream descriptor. */
+typedef struct PaWasapiStreamInfo 
+{
+    unsigned long size;             /**< sizeof(PaWasapiStreamInfo) */
+    PaHostApiTypeId hostApiType;    /**< paWASAPI */
+    unsigned long version;          /**< 1 */
+
+    unsigned long flags;            /**< collection of PaWasapiFlags */
+
+    /* Support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
+       paWinWasapiUseChannelMask this allows you to specify which speakers 
+       to address in a multichannel stream. Constants for channelMask
+       are specified in pa_win_waveformat.h. Will be used only if 
+       paWinWasapiUseChannelMask flag is specified.
+    */
+    PaWinWaveFormatChannelMask channelMask;
+
+    /* Delivers raw data to callback obtained from GetBuffer() methods skipping 
+       internal PortAudio processing inventory completely. userData parameter will 
+       be the same that was passed to Pa_OpenStream method. Will be used only if 
+       paWinWasapiRedirectHostProcessor flag is specified.
+    */
+    PaWasapiHostProcessorCallback hostProcessorOutput;
+    PaWasapiHostProcessorCallback hostProcessorInput;
+
+    /* Specifies thread priority explicitly. Will be used only if paWinWasapiThreadPriority flag
+       is specified.
+
+       Please note, if Input/Output streams are opened simultaniously (Full-Duplex mode)
+       you shall specify same value for threadPriority or othervise one of the values will be used
+       to setup thread priority.
+    */
+    PaWasapiThreadPriority threadPriority;
+} 
+PaWasapiStreamInfo;
+
+
+/** Returns default sound format for device. Format is represented by PaWinWaveFormat or 
+    WAVEFORMATEXTENSIBLE structure.
+
+ @param pFormat Pointer to PaWinWaveFormat or WAVEFORMATEXTENSIBLE structure.
+ @param nFormatSize Size of PaWinWaveFormat or WAVEFORMATEXTENSIBLE structure in bytes.
+ @param nDevice Device index.
+
+ @return Non-negative value indicating the number of bytes copied into format decriptor
+         or, a PaErrorCode (which are always negative) if PortAudio is not initialized
+         or an error is encountered.
+*/
+int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int nFormatSize, PaDeviceIndex nDevice );
+
+
+/** Returns device role (PaWasapiDeviceRole enum).
+
+ @param nDevice device index.
+
+ @return Non-negative value indicating device role or, a PaErrorCode (which are always negative)
+         if PortAudio is not initialized or an error is encountered.
+*/
+int/*PaWasapiDeviceRole*/ PaWasapi_GetDeviceRole( PaDeviceIndex nDevice );
+
+
+/** Boost thread priority of calling thread (MMCSS). Use it for Blocking Interface only for thread
+    which makes calls to Pa_WriteStream/Pa_ReadStream.
+
+ @param hTask Handle to pointer to priority task. Must be used with PaWasapi_RevertThreadPriority
+              method to revert thread priority to initial state.
+
+ @param nPriorityClass Id of thread priority of PaWasapiThreadPriority type. Specifying 
+                       eThreadPriorityNone does nothing.
+
+ @return Error code indicating success or failure.
+ @see    PaWasapi_RevertThreadPriority
+*/
+PaError PaWasapi_ThreadPriorityBoost( void **hTask, PaWasapiThreadPriority nPriorityClass );
+
+
+/** Boost thread priority of calling thread (MMCSS). Use it for Blocking Interface only for thread
+    which makes calls to Pa_WriteStream/Pa_ReadStream.
+
+ @param  hTask Task handle obtained by PaWasapi_BoostThreadPriority method.
+ @return Error code indicating success or failure.
+ @see    PaWasapi_BoostThreadPriority
+*/
+PaError PaWasapi_ThreadPriorityRevert( void *hTask );
+
+
+/** Get number of frames per host buffer. This is maximal value of frames of WASAPI buffer which 
+    can be locked for operations. Use this method as helper to findout maximal values of 
+    inputFrames/outputFrames of PaWasapiHostProcessorCallback.
+
+ @param  pStream Pointer to PaStream to query.
+ @param  nInput  Pointer to variable to receive number of input frames. Can be NULL.
+ @param  nOutput Pointer to variable to receive number of output frames. Can be NULL.
+ @return Error code indicating success or failure.
+ @see    PaWasapiHostProcessorCallback
+*/
+PaError PaWasapi_GetFramesPerHostBuffer( PaStream *pStream, unsigned int *nInput, unsigned int *nOutput );
+
+
+/** Get number of jacks associated with a WASAPI device.  Use this method to determine if
+    there are any jacks associated with the provided WASAPI device.  Not all audio devices
+	will support this capability.  This is valid for both input and output devices.
+ @param  nDevice  device index.
+ @param  jcount   Number of jacks is returned in this variable
+ @return Error code indicating success or failure
+ @see PaWasapi_GetJackDescription
+ */
+PaError PaWasapi_GetJackCount(PaDeviceIndex nDevice, int *jcount);
+
+
+/** Get the jack description associated with a WASAPI device and jack number
+    Before this function is called, use PaWasapi_GetJackCount to determine the
+	number of jacks associated with device.  If jcount is greater than zero, then
+	each jack from 0 to jcount can be queried with this function to get the jack
+	description.
+ @param  nDevice  device index.
+ @param  jindex   Which jack to return information
+ @param  KSJACK_DESCRIPTION This structure filled in on success.
+ @return Error code indicating success or failure
+ @see PaWasapi_GetJackCount
+ */
+PaError PaWasapi_GetJackDescription(PaDeviceIndex nDevice, int jindex, PaWasapiJackDescription *pJackDescription);
+
+
+/*
+    IMPORTANT:
+
+    WASAPI is implemented for Callback and Blocking interfaces. It supports Shared and Exclusive
+    share modes. 
+    
+    Exclusive Mode:
+
+        Exclusive mode allows to deliver audio data directly to hardware bypassing
+        software mixing.
+        Exclusive mode is specified by 'paWinWasapiExclusive' flag.
+
+    Callback Interface:
+
+        Provides best audio quality with low latency. Callback interface is implemented in 
+        two versions:
+
+        1) Event-Driven:
+        This is the most powerful WASAPI implementation which provides glitch-free
+        audio at around 3ms latency in Exclusive mode. Lowest possible latency for this mode is 
+        3 ms for HD Audio class audio chips. For the Shared mode latency can not be 
+		lower than 20 ms.
+
+        2) Poll-Driven:
+        Polling is another 2-nd method to operate with WASAPI. It is less efficient than Event-Driven
+        and provides latency at around 10-13ms. Polling must be used to overcome a system bug
+        under Windows Vista x64 when application is WOW64(32-bit) and Event-Driven method simply 
+        times out (event handle is never signalled on buffer completion). Please note, such WOW64 bug 
+        does not exist in Vista x86 or Windows 7.
+        Polling can be setup by speciying 'paWinWasapiPolling' flag. Our WASAPI implementation detects
+        WOW64 bug and sets 'paWinWasapiPolling' automatically.
+
+    Thread priority:
+
+        Normally thread priority is set automatically and does not require modification. Although
+        if user wants some tweaking thread priority can be modified by setting 'paWinWasapiThreadPriority'
+        flag and specifying 'PaWasapiStreamInfo::threadPriority' with value from PaWasapiThreadPriority 
+        enum.
+
+    Blocking Interface:
+
+        Blocking interface is implemented but due to above described Poll-Driven method can not
+        deliver lowest possible latency. Specifying too low latency in Shared mode will result in 
+        distorted audio although Exclusive mode adds stability.
+
+    Pa_IsFormatSupported:
+
+        To check format with correct Share Mode (Exclusive/Shared) you must supply
+        PaWasapiStreamInfo with flags paWinWasapiExclusive set through member of 
+        PaStreamParameters::hostApiSpecificStreamInfo structure.
+
+    Pa_OpenStream:
+
+        To set desired Share Mode (Exclusive/Shared) you must supply
+        PaWasapiStreamInfo with flags paWinWasapiExclusive set through member of 
+        PaStreamParameters::hostApiSpecificStreamInfo structure.
+*/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WASAPI_H */                                  
diff --git a/portaudio/include/pa_win_waveformat.h b/portaudio/include/pa_win_waveformat.h
new file mode 100644
index 000000000..dce18c0d9
--- /dev/null
+++ b/portaudio/include/pa_win_waveformat.h
@@ -0,0 +1,199 @@
+#ifndef PA_WIN_WAVEFORMAT_H
+#define PA_WIN_WAVEFORMAT_H
+
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WAVEFORMAT* data structure utilities
+ * portaudio.h should be included before this file.
+ *
+ * Copyright (c) 2007 Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief Windows specific PortAudio API extension and utilities header file.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+	The following #defines for speaker channel masks are the same
+	as those in ksmedia.h, except with PAWIN_ prepended, KSAUDIO_ removed
+	in some cases, and casts to PaWinWaveFormatChannelMask added.
+*/
+
+typedef unsigned long PaWinWaveFormatChannelMask;
+
+/* Speaker Positions: */
+#define PAWIN_SPEAKER_FRONT_LEFT				((PaWinWaveFormatChannelMask)0x1)
+#define PAWIN_SPEAKER_FRONT_RIGHT				((PaWinWaveFormatChannelMask)0x2)
+#define PAWIN_SPEAKER_FRONT_CENTER				((PaWinWaveFormatChannelMask)0x4)
+#define PAWIN_SPEAKER_LOW_FREQUENCY				((PaWinWaveFormatChannelMask)0x8)
+#define PAWIN_SPEAKER_BACK_LEFT					((PaWinWaveFormatChannelMask)0x10)
+#define PAWIN_SPEAKER_BACK_RIGHT				((PaWinWaveFormatChannelMask)0x20)
+#define PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER		((PaWinWaveFormatChannelMask)0x40)
+#define PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER		((PaWinWaveFormatChannelMask)0x80)
+#define PAWIN_SPEAKER_BACK_CENTER				((PaWinWaveFormatChannelMask)0x100)
+#define PAWIN_SPEAKER_SIDE_LEFT					((PaWinWaveFormatChannelMask)0x200)
+#define PAWIN_SPEAKER_SIDE_RIGHT				((PaWinWaveFormatChannelMask)0x400)
+#define PAWIN_SPEAKER_TOP_CENTER				((PaWinWaveFormatChannelMask)0x800)
+#define PAWIN_SPEAKER_TOP_FRONT_LEFT			((PaWinWaveFormatChannelMask)0x1000)
+#define PAWIN_SPEAKER_TOP_FRONT_CENTER			((PaWinWaveFormatChannelMask)0x2000)
+#define PAWIN_SPEAKER_TOP_FRONT_RIGHT			((PaWinWaveFormatChannelMask)0x4000)
+#define PAWIN_SPEAKER_TOP_BACK_LEFT				((PaWinWaveFormatChannelMask)0x8000)
+#define PAWIN_SPEAKER_TOP_BACK_CENTER			((PaWinWaveFormatChannelMask)0x10000)
+#define PAWIN_SPEAKER_TOP_BACK_RIGHT			((PaWinWaveFormatChannelMask)0x20000)
+
+/* Bit mask locations reserved for future use */
+#define PAWIN_SPEAKER_RESERVED					((PaWinWaveFormatChannelMask)0x7FFC0000)
+
+/* Used to specify that any possible permutation of speaker configurations */
+#define PAWIN_SPEAKER_ALL						((PaWinWaveFormatChannelMask)0x80000000)
+
+/* DirectSound Speaker Config */
+#define PAWIN_SPEAKER_DIRECTOUT					0
+#define PAWIN_SPEAKER_MONO						(PAWIN_SPEAKER_FRONT_CENTER)
+#define PAWIN_SPEAKER_STEREO					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT)
+#define PAWIN_SPEAKER_QUAD						(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_BACK_LEFT  | PAWIN_SPEAKER_BACK_RIGHT)
+#define PAWIN_SPEAKER_SURROUND					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_BACK_CENTER)
+#define PAWIN_SPEAKER_5POINT1					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT  | PAWIN_SPEAKER_BACK_RIGHT)
+#define PAWIN_SPEAKER_7POINT1					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
+												PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER | PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER)
+#define PAWIN_SPEAKER_5POINT1_SURROUND			(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_SIDE_LEFT  | PAWIN_SPEAKER_SIDE_RIGHT)
+#define PAWIN_SPEAKER_7POINT1_SURROUND			(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
+												PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT)
+/*
+ According to the Microsoft documentation:
+ The following are obsolete 5.1 and 7.1 settings (they lack side speakers).  Note this means
+ that the default 5.1 and 7.1 settings (KSAUDIO_SPEAKER_5POINT1 and KSAUDIO_SPEAKER_7POINT1 are
+ similarly obsolete but are unchanged for compatibility reasons).
+*/
+#define PAWIN_SPEAKER_5POINT1_BACK				PAWIN_SPEAKER_5POINT1
+#define PAWIN_SPEAKER_7POINT1_WIDE				PAWIN_SPEAKER_7POINT1
+
+/* DVD Speaker Positions */
+#define PAWIN_SPEAKER_GROUND_FRONT_LEFT			PAWIN_SPEAKER_FRONT_LEFT
+#define PAWIN_SPEAKER_GROUND_FRONT_CENTER		PAWIN_SPEAKER_FRONT_CENTER
+#define PAWIN_SPEAKER_GROUND_FRONT_RIGHT		PAWIN_SPEAKER_FRONT_RIGHT
+#define PAWIN_SPEAKER_GROUND_REAR_LEFT			PAWIN_SPEAKER_BACK_LEFT
+#define PAWIN_SPEAKER_GROUND_REAR_RIGHT			PAWIN_SPEAKER_BACK_RIGHT
+#define PAWIN_SPEAKER_TOP_MIDDLE				PAWIN_SPEAKER_TOP_CENTER
+#define PAWIN_SPEAKER_SUPER_WOOFER				PAWIN_SPEAKER_LOW_FREQUENCY
+
+
+/*
+	PaWinWaveFormat is defined here to provide compatibility with
+	compilation environments which don't have headers defining 
+	WAVEFORMATEXTENSIBLE (e.g. older versions of MSVC, Borland C++ etc.
+
+	The fields for WAVEFORMATEX and WAVEFORMATEXTENSIBLE are declared as an
+    unsigned char array here to avoid clients who include this file having 
+    a dependency on windows.h and mmsystem.h, and also to to avoid having
+    to write separate packing pragmas for each compiler.
+*/
+#define PAWIN_SIZEOF_WAVEFORMATEX   18
+#define PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE (PAWIN_SIZEOF_WAVEFORMATEX + 22)
+
+typedef struct{
+    unsigned char fields[ PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE ];
+    unsigned long extraLongForAlignment; /* ensure that compiler aligns struct to DWORD */ 
+} PaWinWaveFormat;
+
+/*
+    WAVEFORMATEXTENSIBLE fields:
+    
+    union  {
+	    WORD  wValidBitsPerSample;    
+	    WORD  wSamplesPerBlock;    
+	    WORD  wReserved;  
+    } Samples;
+    DWORD  dwChannelMask;  
+    GUID  SubFormat;
+*/
+
+#define PAWIN_INDEXOF_WVALIDBITSPERSAMPLE	(PAWIN_SIZEOF_WAVEFORMATEX+0)
+#define PAWIN_INDEXOF_DWCHANNELMASK			(PAWIN_SIZEOF_WAVEFORMATEX+2)
+#define PAWIN_INDEXOF_SUBFORMAT				(PAWIN_SIZEOF_WAVEFORMATEX+6)
+
+
+/*
+    Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and
+    PaWin_InitializeWaveFormatExtensible functions below. These must match
+    the standard Windows WAVE_FORMAT_* values.
+*/
+#define PAWIN_WAVE_FORMAT_PCM               (1)
+#define PAWIN_WAVE_FORMAT_IEEE_FLOAT        (3)
+#define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF   (0x0092)
+#define PAWIN_WAVE_FORMAT_WMA_SPDIF         (0x0164)
+
+
+/*
+    returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT
+    depending on the sampleFormat parameter.
+*/
+int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat );
+
+/*
+	Use the following two functions to initialize the waveformat structure.
+*/
+
+void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate );
+
+
+void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
+	    PaWinWaveFormatChannelMask channelMask );
+
+
+/* Map a channel count to a speaker channel mask */
+PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels );
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WAVEFORMAT_H */
\ No newline at end of file
diff --git a/portaudio/include/pa_win_wmme.h b/portaudio/include/pa_win_wmme.h
index 2e90233a3..deffd1006 100644
--- a/portaudio/include/pa_win_wmme.h
+++ b/portaudio/include/pa_win_wmme.h
@@ -1,7 +1,7 @@
 #ifndef PA_WIN_WMME_H
 #define PA_WIN_WMME_H
 /*
- * $Id: pa_win_wmme.h 1115 2006-09-06 15:39:48Z rossb $
+ * $Id: pa_win_wmme.h 1405 2009-03-08 08:10:55Z rossb $
  * PortAudio Portable Real-Time Audio Library
  * MME specific extensions
  *
@@ -39,11 +39,13 @@
  */
 
 /** @file
+ @ingroup public_header
  @brief WMME-specific PortAudio API extension header file.
 */
 
 
 #include "portaudio.h"
+#include "pa_win_waveformat.h"
 
 #ifdef __cplusplus
 extern "C"
@@ -51,9 +53,13 @@ extern "C"
 #endif /* __cplusplus */
 
 
+/* The following are flags which can be set in 
+  PaWinMmeStreamInfo's flags field.
+*/
+
 #define paWinMmeUseLowLevelLatencyParameters            (0x01)
 #define paWinMmeUseMultipleDevices                      (0x02)  /* use mme specific multiple device feature */
-
+#define paWinMmeUseChannelMask                          (0x04)
 
 /* By default, the mme implementation drops the processing thread's priority
     to THREAD_PRIORITY_NORMAL and sleeps the thread if the CPU load exceeds 100%
@@ -62,6 +68,11 @@ extern "C"
 */
 #define paWinMmeDontThrottleOverloadedProcessingThread  (0x08)
 
+/*  Flags for non-PCM spdif passthrough.
+*/
+#define paWinMmeWaveFormatDolbyAc3Spdif                 (0x10)
+#define paWinMmeWaveFormatWmaSpdif                      (0x20)
+
 
 typedef struct PaWinMmeDeviceAndChannelCount{
     PaDeviceIndex device;
@@ -106,6 +117,15 @@ typedef struct PaWinMmeStreamInfo{
     PaWinMmeDeviceAndChannelCount *devices;
     unsigned long deviceCount;
 
+    /*
+        support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
+        paWinMmeUseChannelMask this allows you to specify which speakers 
+        to address in a multichannel stream. Constants for channelMask
+        are specified in pa_win_waveformat.h
+
+    */
+    PaWinWaveFormatChannelMask channelMask;
+
 }PaWinMmeStreamInfo;
 
 
diff --git a/portaudio/include/portaudio.h b/portaudio/include/portaudio.h
index 67fa2ea40..89964ab3e 100644
--- a/portaudio/include/portaudio.h
+++ b/portaudio/include/portaudio.h
@@ -1,8 +1,7 @@
-
 #ifndef PORTAUDIO_H
 #define PORTAUDIO_H
 /*
- * $Id: portaudio.h 1195 2007-04-22 17:34:45Z aknudsen $
+ * $Id: portaudio.h 1337 2008-02-15 07:32:09Z rossb $
  * PortAudio Portable Real-Time Audio Library
  * PortAudio API Header File
  * Latest version available at: http://www.portaudio.com/
@@ -41,7 +40,8 @@
  */
 
 /** @file
- @brief The PortAudio API.
+ @ingroup public_header
+ @brief The portable PortAudio API.
 */
 
 
diff --git a/portaudio/src/common/pa_allocation.h b/portaudio/src/common/pa_allocation.h
index b265b016f..811dd72e0 100644
--- a/portaudio/src/common/pa_allocation.h
+++ b/portaudio/src/common/pa_allocation.h
@@ -1,12 +1,12 @@
 #ifndef PA_ALLOCATION_H
 #define PA_ALLOCATION_H
 /*
- * $Id: pa_allocation.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_allocation.h 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library allocation context header
  * memory allocation context for tracking allocation groups
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -43,12 +43,12 @@
  @ingroup common_src
 
  @brief Allocation Group prototypes. An Allocation Group makes it easy to
- allocate multiple blocks of memory and free them all simultanously.
+ allocate multiple blocks of memory and free them all at once.
  
  An allocation group is useful for keeping track of multiple blocks
  of memory which are allocated at the same time (such as during initialization)
  and need to be deallocated at the same time. The allocation group maintains
- a list of allocated blocks, and can deallocate them all simultaneously which
+ a list of allocated blocks, and can free all allocations at once. This
  can be usefull for cleaning up after a partially initialized object fails.
 
  The allocation group implementation is built on top of the lower
diff --git a/portaudio/src/common/pa_converters.c b/portaudio/src/common/pa_converters.c
index 3b98c858a..009149c68 100644
--- a/portaudio/src/common/pa_converters.c
+++ b/portaudio/src/common/pa_converters.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_converters.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_converters.c 1495 2010-04-17 07:43:00Z dmitrykos $
  * Portable Audio I/O Library sample conversion mechanism
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -39,7 +39,7 @@
 /** @file
  @ingroup common_src
 
- @brief Conversion functions implementations.
+ @brief Conversion function implementations.
  
  If the C9x function lrintf() is available, define PA_USE_C99_LRINTF to use it
 
@@ -1073,13 +1073,13 @@ static void Int24_To_Float32(
     {
 
 #if defined(PA_LITTLE_ENDIAN)
-        temp = (((long)src[0]) << 8);  
-        temp = temp | (((long)src[1]) << 16);
-        temp = temp | (((long)src[2]) << 24);
+        temp = (((PaInt32)src[0]) << 8);  
+        temp = temp | (((PaInt32)src[1]) << 16);
+        temp = temp | (((PaInt32)src[2]) << 24);
 #elif defined(PA_BIG_ENDIAN)
-        temp = (((long)src[0]) << 24);
-        temp = temp | (((long)src[1]) << 16);
-        temp = temp | (((long)src[2]) << 8);
+        temp = (((PaInt32)src[0]) << 24);
+        temp = temp | (((PaInt32)src[1]) << 16);
+        temp = temp | (((PaInt32)src[2]) << 8);
 #endif
 
         *dest = (float) ((double)temp * const_1_div_2147483648_);
@@ -1106,13 +1106,13 @@ static void Int24_To_Int32(
     {
 
 #if defined(PA_LITTLE_ENDIAN)
-        temp = (((long)src[0]) << 8);  
-        temp = temp | (((long)src[1]) << 16);
-        temp = temp | (((long)src[2]) << 24);
+        temp = (((PaInt32)src[0]) << 8);  
+        temp = temp | (((PaInt32)src[1]) << 16);
+        temp = temp | (((PaInt32)src[2]) << 24);
 #elif defined(PA_BIG_ENDIAN)
-        temp = (((long)src[0]) << 24);
-        temp = temp | (((long)src[1]) << 16);
-        temp = temp | (((long)src[2]) << 8);
+        temp = (((PaInt32)src[0]) << 24);
+        temp = temp | (((PaInt32)src[1]) << 16);
+        temp = temp | (((PaInt32)src[2]) << 8);
 #endif
 
         *dest = temp;
@@ -1163,15 +1163,39 @@ static void Int24_To_Int16_Dither(
     void *sourceBuffer, signed int sourceStride,
     unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
 {
-    (void) destinationBuffer; /* unused parameters */
-    (void) destinationStride; /* unused parameters */
-    (void) sourceBuffer; /* unused parameters */
-    (void) sourceStride; /* unused parameters */
-    (void) count; /* unused parameters */
-    (void) ditherGenerator; /* unused parameters */
-    /* IMPLEMENT ME */
+	#define _PA_CNV_RESCALE(__max_from,__max_to,g) ((1.0f/(float)(__max_from/2+1))*((float)((__max_to/2+1)+g)))
+#ifndef PA_BIG_ENDIAN
+	#define _PA_INT24_TO_INT32(v)   ((int)(((int)v[2] << 24)|((int)v[1] << 16)|((int)v[0] << 8)) >> 8)
+#else
+	#define _PA_INT24_TO_INT32(v)   ((int)(((int)v[0] << 24)|((int)v[1] << 16)|((int)v[2] << 8)) >> 8)
+#endif
+	#define _PA_INT24_TO_FLOAT(v,g) ((float)(_PA_INT24_TO_INT32(v)) * _PA_CNV_RESCALE(0xffffff,0xffff,g))
+
+    unsigned char *src = (unsigned char *)sourceBuffer;
+    PaInt16 *dest = (PaInt16 *)destinationBuffer;
+	float dither, dithered;
+
+    while( count-- )
+    {
+        dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator );
+
+		/* downscale 24-bit int to 16-bit int placed into 32-bit float container, 
+		   16-bit scaler is decreased by 2 to leave space for dither in order not to overflow
+		*/
+		dithered = _PA_INT24_TO_FLOAT(src, -2.0f) + dither;
+
+#ifdef PA_USE_C99_LRINTF
+        *dest = lrintf(dithered-0.5f);
+#else
+        *dest = (PaInt16) dithered;
+#endif
+
+        src += sourceStride * 3;
+        dest += destinationStride;
+    }
 }
 
+
 /* -------------------------------------------------------------------------- */
 
 static void Int24_To_Int8(
diff --git a/portaudio/src/common/pa_debugprint.c b/portaudio/src/common/pa_debugprint.c
index 33fcf32e7..7ee8f7f23 100644
--- a/portaudio/src/common/pa_debugprint.c
+++ b/portaudio/src/common/pa_debugprint.c
@@ -53,17 +53,21 @@
     @todo Consider reentrancy and possibly corrupted strdump buffer.
 */
 
-
 #include <stdio.h>
 #include <stdarg.h>
 
 #include "pa_debugprint.h"
 
+// for OutputDebugStringA
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)
+	#define WIN32_LEAN_AND_MEAN // exclude rare headers
+	#include "windows.h"
+#endif
 
+// User callback
+static PaUtilLogCallback userCB = NULL;
 
-static PaUtilLogCallback userCB=0;
-
-
+// Sets user callback
 void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb)
 {
     userCB = cb;
@@ -72,36 +76,51 @@ void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb)
 /*
  If your platform doesn’t have vsnprintf, you are stuck with a
  VERY dangerous alternative, vsprintf (with no n)
- */
-
-#if (_MSC_VER) && (_MSC_VER < 1400)
-#define VSNPRINTF  _vsnprintf
+*/
+#if _MSC_VER
+	/* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully).
+	   According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC.
+	*/
+	#define VSNPRINTF  _vsnprintf 
 #else
-#define VSNPRINTF  vsnprintf
+	#define VSNPRINTF  vsnprintf
 #endif
 
-#define SIZEDUMP 1024
-
-static char strdump[SIZEDUMP];
+#define PA_LOG_BUF_SIZE 2048
 
 void PaUtil_DebugPrint( const char *format, ... )
 {
+	// Optional logging into Output console of Visual Studio
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)
+	{
+		char buf[PA_LOG_BUF_SIZE];
+		va_list ap;
+		va_start(ap, format);
+		VSNPRINTF(buf, sizeof(buf), format, ap);
+		buf[sizeof(buf)-1] = 0;
+		OutputDebugStringA(buf);
+		va_end(ap);
+	}
+#endif
 
-    if (userCB)
+	// Output to User-Callback
+    if (userCB != NULL)
     {
+        char strdump[PA_LOG_BUF_SIZE];
         va_list ap;
-        va_start( ap, format );
-        VSNPRINTF( strdump, SIZEDUMP, format, ap );
+        va_start(ap, format);
+        VSNPRINTF(strdump, sizeof(strdump), format, ap);
+        strdump[sizeof(strdump)-1] = 0;
         userCB(strdump);
-        va_end( ap ); 
+        va_end(ap);
     }
     else
+	// Standard output to stderr
     {
         va_list ap;
-        va_start( ap, format );
-        vfprintf( stderr, format, ap );
-        va_end( ap );
-        fflush( stderr );
+        va_start(ap, format);
+        vfprintf(stderr, format, ap);
+        va_end(ap);
+        fflush(stderr);
     }
-
 }
diff --git a/portaudio/src/common/pa_dither.c b/portaudio/src/common/pa_dither.c
index 6f6c9a1a6..7a1b13125 100644
--- a/portaudio/src/common/pa_dither.c
+++ b/portaudio/src/common/pa_dither.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_dither.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_dither.c 1418 2009-10-12 21:00:53Z philburk $
  * Portable Audio I/O Library triangular dither generator
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -42,9 +42,14 @@
  @brief Functions for generating dither noise
 */
 
-
-#include "pa_dither.h"
 #include "pa_types.h"
+#include "pa_dither.h"
+
+
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
 
 #define PA_DITHER_BITS_   (15)
 
@@ -57,9 +62,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *st
 }
 
 
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
 {
-    signed long current, highPass;
+    PaInt32 current, highPass;
 
     /* Generate two random numbers. */
     state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -69,9 +74,10 @@ signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerato
      * Shift before adding to prevent overflow which would skew the distribution.
      * Also shift an extra bit for the high pass filter. 
      */
-#define DITHER_SHIFT_  ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
-    current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
-              (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+#define DITHER_SHIFT_  ((sizeof(PaInt32)*8 - PA_DITHER_BITS_) + 1)
+	
+    current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+              (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
 
     /* High pass filter to reduce audibility. */
     highPass = current - state->previous;
@@ -86,7 +92,7 @@ static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;
 
 float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *state )
 {
-    signed long current, highPass;
+    PaInt32 current, highPass;
 
     /* Generate two random numbers. */
     state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -96,9 +102,8 @@ float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *sta
      * Shift before adding to prevent overflow which would skew the distribution.
      * Also shift an extra bit for the high pass filter. 
      */
-#define DITHER_SHIFT_  ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
-    current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
-              (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+    current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+              (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
 
     /* High pass filter to reduce audibility. */
     highPass = current - state->previous;
diff --git a/portaudio/src/common/pa_dither.h b/portaudio/src/common/pa_dither.h
index e77ce470d..a5131b27f 100644
--- a/portaudio/src/common/pa_dither.h
+++ b/portaudio/src/common/pa_dither.h
@@ -1,7 +1,7 @@
 #ifndef PA_DITHER_H
 #define PA_DITHER_H
 /*
- * $Id: pa_dither.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_dither.h 1418 2009-10-12 21:00:53Z philburk $
  * Portable Audio I/O Library triangular dither generator
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -44,18 +44,24 @@
  @brief Functions for generating dither noise
 */
 
+#include "pa_types.h"
+
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif /* __cplusplus */
 
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
 
 /** @brief State needed to generate a dither signal */
 typedef struct PaUtilTriangularDitherGenerator{
-    unsigned long previous;
-    unsigned long randSeed1;
-    unsigned long randSeed2;
+    PaUint32 previous;
+    PaUint32 randSeed1;
+    PaUint32 randSeed2;
 } PaUtilTriangularDitherGenerator;
 
 
@@ -73,9 +79,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *di
     signed short out = (signed short)(((in>>1) + dither) >> 15);
 </pre>
  @return
- A signed long with a range of +32767 to -32768
+ A signed 32-bit integer with a range of +32767 to -32768
 */
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
 
 
 /**
diff --git a/portaudio/src/common/pa_endianness.h b/portaudio/src/common/pa_endianness.h
index bdcc74f79..84e904ca7 100644
--- a/portaudio/src/common/pa_endianness.h
+++ b/portaudio/src/common/pa_endianness.h
@@ -1,7 +1,7 @@
 #ifndef PA_ENDIANNESS_H
 #define PA_ENDIANNESS_H
 /*
- * $Id: pa_endianness.h 1216 2007-06-10 09:26:00Z aknudsen $
+ * $Id: pa_endianness.h 1324 2008-01-27 02:03:30Z bjornroche $
  * Portable Audio I/O Library current platform endianness macros
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -120,18 +120,22 @@ extern "C"
  and raises an assertion if they don't match. <assert.h> must be included in
  the context in which this macro is used.
 */
-#if defined(PA_LITTLE_ENDIAN)
-    #define PA_VALIDATE_ENDIANNESS \
-    { \
-        const long nativeOne = 1; \
-        assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 1 ); \
-    }
-#elif defined(PA_BIG_ENDIAN)
-    #define PA_VALIDATE_ENDIANNESS \
-    { \
-        const long nativeOne = 1; \
-        assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 0 ); \
-    }
+#if defined(NDEBUG)
+    #define PA_VALIDATE_ENDIANNESS
+#else
+    #if defined(PA_LITTLE_ENDIAN)
+        #define PA_VALIDATE_ENDIANNESS \
+        { \
+            const long nativeOne = 1; \
+            assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 1 ); \
+        }
+    #elif defined(PA_BIG_ENDIAN)
+        #define PA_VALIDATE_ENDIANNESS \
+        { \
+            const long nativeOne = 1; \
+            assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 0 ); \
+        }
+    #endif
 #endif
 
 
diff --git a/portaudio/src/common/pa_front.c b/portaudio/src/common/pa_front.c
index 5af90d45c..28f0c60e8 100644
--- a/portaudio/src/common/pa_front.c
+++ b/portaudio/src/common/pa_front.c
@@ -1,10 +1,10 @@
 /*
- * $Id: pa_front.c 1229 2007-06-15 16:11:11Z rossb $
+ * $Id: pa_front.c 1396 2008-11-03 19:31:30Z philburk $
  * Portable Audio I/O Library Multi-Host API front end
  * Validate function parameters and manage multiple host APIs.
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -40,17 +40,20 @@
 /** @file
  @ingroup common_src
 
- @brief Implements public PortAudio API, checks some errors, forwards to
- host API implementations.
+ @brief Implements PortAudio API functions defined in portaudio.h, checks 
+ some errors, delegates platform-specific behavior to host API implementations.
  
- Implements the functions defined in the PortAudio API, checks for
- some parameter and state inconsistencies and forwards API requests to
- specific Host API implementations (via the interface declared in
- pa_hostapi.h), and Streams (via the interface declared in pa_stream.h).
+ Implements the functions defined in the PortAudio API (portaudio.h), 
+ validates some parameters and checks for state inconsistencies before 
+ forwarding API requests to specific Host API implementations (via the 
+ interface declared in pa_hostapi.h), and Streams (via the interface 
+ declared in pa_stream.h).
 
- This file handles initialization and termination of Host API
- implementations via initializers stored in the paHostApiInitializers
- global variable.
+ This file manages initialization and termination of Host API
+ implementations via initializer functions stored in the paHostApiInitializers
+ global array (usually defined in an os-specific pa_[os]_hostapis.c file).
+
+ This file maintains a list of all open streams and closes them at Pa_Terminate().
 
  Some utility functions declared in pa_util.h are implemented in this file.
 
@@ -87,7 +90,7 @@
 
 
 #define PA_VERSION_  1899
-#define PA_VERSION_TEXT_ "PortAudio V19-devel (built " __DATE__  ")"
+#define PA_VERSION_TEXT_ "PortAudio V19-devel (built " __DATE__  " " __TIME__ ")"
 
 
 
@@ -405,6 +408,8 @@ const char *Pa_GetErrorText( PaError errorCode )
     case paCanNotWriteToACallbackStream:        result = "Can't write to a callback stream"; break;
     case paCanNotReadFromAnOutputOnlyStream:    result = "Can't read from an output only stream"; break;
     case paCanNotWriteToAnInputOnlyStream:      result = "Can't write to an input only stream"; break;
+    case paIncompatibleStreamHostApi: result = "Incompatible stream host API"; break;
+    case paBadBufferPtr:             result = "Bad buffer pointer"; break;
     default:                         
 		if( errorCode > 0 )
 			result = "Invalid error code (value greater than zero)"; 
@@ -1501,7 +1506,7 @@ const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream )
         result = 0;
 
         PA_LOGAPI(("Pa_GetStreamInfo returned:\n" ));
-        PA_LOGAPI(("\tconst PaStreamInfo*: 0 [PaError error:%d ( %s )]\n", result, error, Pa_GetErrorText( error ) ));
+        PA_LOGAPI(("\tconst PaStreamInfo*: 0 [PaError error:%d ( %s )]\n", error, Pa_GetErrorText( error ) ));
 
     }
     else
diff --git a/portaudio/src/common/pa_hostapi.h b/portaudio/src/common/pa_hostapi.h
index 5a86d4e94..5462d4439 100644
--- a/portaudio/src/common/pa_hostapi.h
+++ b/portaudio/src/common/pa_hostapi.h
@@ -1,12 +1,12 @@
 #ifndef PA_HOSTAPI_H
 #define PA_HOSTAPI_H
 /*
- * $Id: pa_hostapi.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_hostapi.h 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library
  * host api representation
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -42,8 +42,8 @@
 /** @file
  @ingroup common_src
 
- @brief Interface used by pa_front to virtualize functions which operate on
- host APIs.
+ @brief Interfaces and representation structures used by pa_front.c 
+ to manage and communicate with host API implementations.
 */
 
 
@@ -224,13 +224,19 @@ typedef struct PaUtilHostApiRepresentation {
 /** Prototype for the initialization function which must be implemented by every
  host API.
  
+ This function should only return an error other than paNoError if it encounters 
+ an unexpected and fatal error (memory allocation error for example). In general, 
+ there may be conditions under which it returns a NULL interface pointer and also 
+ returns paNoError. For example, if the ASIO implementation detects that ASIO is 
+ not installed, it should return a NULL interface, and paNoError.
+
  @see paHostApiInitializers
 */
 typedef PaError PaUtilHostApiInitializer( PaUtilHostApiRepresentation**, PaHostApiIndex );
 
 
 /** paHostApiInitializers is a NULL-terminated array of host API initialization
- functions. These functions are called by pa_front to initialize the host APIs
+ functions. These functions are called by pa_front.c to initialize the host APIs
  when the client calls Pa_Initialize().
 
  There is a platform specific file which defines paHostApiInitializers for that
diff --git a/portaudio/src/common/pa_memorybarrier.h b/portaudio/src/common/pa_memorybarrier.h
new file mode 100644
index 000000000..f68962220
--- /dev/null
+++ b/portaudio/src/common/pa_memorybarrier.h
@@ -0,0 +1,127 @@
+/*
+ * $Id: pa_memorybarrier.h 1240 2007-07-17 13:05:07Z bjornroche $
+ * Portable Audio I/O Library
+ * Memory barrier utilities
+ *
+ * Author: Bjorn Roche, XO Audio, LLC
+ *
+ * This program uses the PortAudio Portable Audio Library.
+ * For more information see: http://www.portaudio.com
+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/**
+ @file pa_memorybarrier.h
+ @ingroup common_src
+*/
+
+/****************
+ * Some memory barrier primitives based on the system.
+ * right now only OS X, FreeBSD, and Linux are supported. In addition to providing
+ * memory barriers, these functions should ensure that data cached in registers
+ * is written out to cache where it can be snooped by other CPUs. (ie, the volatile
+ * keyword should not be required)
+ *
+ * the primitives that must be defined are:
+ *
+ * PaUtil_FullMemoryBarrier()
+ * PaUtil_ReadMemoryBarrier()
+ * PaUtil_WriteMemoryBarrier()
+ *
+ ****************/
+
+#if defined(__APPLE__)
+#   include <libkern/OSAtomic.h>
+    /* Here are the memory barrier functions. Mac OS X only provides
+       full memory barriers, so the three types of barriers are the same,
+       however, these barriers are superior to compiler-based ones. */
+#   define PaUtil_FullMemoryBarrier()  OSMemoryBarrier()
+#   define PaUtil_ReadMemoryBarrier()  OSMemoryBarrier()
+#   define PaUtil_WriteMemoryBarrier() OSMemoryBarrier()
+#elif defined(__GNUC__)
+    /* GCC >= 4.1 has built-in intrinsics. We'll use those */
+#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
+#      define PaUtil_FullMemoryBarrier()  __sync_synchronize()
+#      define PaUtil_ReadMemoryBarrier()  __sync_synchronize()
+#      define PaUtil_WriteMemoryBarrier() __sync_synchronize()
+    /* as a fallback, GCC understands volatile asm and "memory" to mean it
+     * should not reorder memory read/writes */
+    /* Note that it is not clear that any compiler actually defines __PPC__,
+     * it can probably removed safely. */
+#   elif defined( __ppc__ ) || defined( __powerpc__) || defined( __PPC__ )
+#      define PaUtil_FullMemoryBarrier()  asm volatile("sync":::"memory")
+#      define PaUtil_ReadMemoryBarrier()  asm volatile("sync":::"memory")
+#      define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory")
+#   elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || \
+         defined( __i686__ ) || defined( __x86_64__ )
+#      define PaUtil_FullMemoryBarrier()  asm volatile("mfence":::"memory")
+#      define PaUtil_ReadMemoryBarrier()  asm volatile("lfence":::"memory")
+#      define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory")
+#   else
+#      ifdef ALLOW_SMP_DANGERS
+#         warning Memory barriers not defined on this system or system unknown
+#         warning For SMP safety, you should fix this.
+#         define PaUtil_FullMemoryBarrier()
+#         define PaUtil_ReadMemoryBarrier()
+#         define PaUtil_WriteMemoryBarrier()
+#      else
+#         error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
+#      endif
+#   endif
+#elif (_MSC_VER >= 1400) && !defined(_WIN32_WCE)
+#   include <intrin.h>
+#   pragma intrinsic(_ReadWriteBarrier)
+#   pragma intrinsic(_ReadBarrier)
+#   pragma intrinsic(_WriteBarrier)
+#   define PaUtil_FullMemoryBarrier()  _ReadWriteBarrier()
+#   define PaUtil_ReadMemoryBarrier()  _ReadBarrier()
+#   define PaUtil_WriteMemoryBarrier() _WriteBarrier()
+#elif defined(_WIN32_WCE)
+#   define PaUtil_FullMemoryBarrier()
+#   define PaUtil_ReadMemoryBarrier()
+#   define PaUtil_WriteMemoryBarrier()
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+#   define PaUtil_FullMemoryBarrier()  _asm { lock add    [esp], 0 }
+#   define PaUtil_ReadMemoryBarrier()  _asm { lock add    [esp], 0 }
+#   define PaUtil_WriteMemoryBarrier() _asm { lock add    [esp], 0 }
+#else
+#   ifdef ALLOW_SMP_DANGERS
+#      warning Memory barriers not defined on this system or system unknown
+#      warning For SMP safety, you should fix this.
+#      define PaUtil_FullMemoryBarrier()
+#      define PaUtil_ReadMemoryBarrier()
+#      define PaUtil_WriteMemoryBarrier()
+#   else
+#      error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
+#   endif
+#endif
diff --git a/portaudio/src/common/pa_process.c b/portaudio/src/common/pa_process.c
index fac474d55..e176670aa 100644
--- a/portaudio/src/common/pa_process.c
+++ b/portaudio/src/common/pa_process.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_process.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_process.c 1523 2010-07-10 17:41:25Z dmitrykos $
  * Portable Audio I/O Library
  * streamCallback <-> host buffer processing adapter
  *
@@ -56,8 +56,6 @@
 
     @todo Consider cache tilings for intereave<->deinterleave.
 
-    @todo implement timeInfo->currentTime int PaUtil_BeginBufferProcessing()
-
     @todo specify and implement some kind of logical policy for handling the
         underflow and overflow stream flags when the underflow/overflow overlaps
         multiple user buffers/callbacks.
@@ -265,7 +263,10 @@ PaError PaUtil_InitializeBufferProcessor( PaUtilBufferProcessor* bp,
         bp->inputZeroer = PaUtil_SelectZeroer( hostInputSampleFormat );
             
         bp->userInputIsInterleaved = (userInputSampleFormat & paNonInterleaved)?0:1;
+		
+        bp->hostInputIsInterleaved = (hostInputSampleFormat & paNonInterleaved)?0:1;
 
+        bp->userInputSampleFormatIsEqualToHost = ((userInputSampleFormat & ~paNonInterleaved) == (hostInputSampleFormat & ~paNonInterleaved));
 
         tempInputBufferSize =
             bp->framesPerTempBuffer * bp->bytesPerUserInputSample * inputChannelCount;
@@ -333,6 +334,10 @@ PaError PaUtil_InitializeBufferProcessor( PaUtilBufferProcessor* bp,
 
         bp->userOutputIsInterleaved = (userOutputSampleFormat & paNonInterleaved)?0:1;
 
+        bp->hostOutputIsInterleaved = (hostOutputSampleFormat & paNonInterleaved)?0:1;
+
+        bp->userOutputSampleFormatIsEqualToHost = ((userOutputSampleFormat & ~paNonInterleaved) == (hostOutputSampleFormat & ~paNonInterleaved));
+
         tempOutputBufferSize =
                 bp->framesPerTempBuffer * bp->bytesPerUserOutputSample * outputChannelCount;
 
@@ -497,6 +502,7 @@ void PaUtil_SetInterleavedInputChannels( PaUtilBufferProcessor* bp,
 
     assert( firstChannel < bp->inputChannelCount );
     assert( firstChannel + channelCount <= bp->inputChannelCount );
+    assert( bp->hostInputIsInterleaved );
 
     for( i=0; i< channelCount; ++i )
     {
@@ -511,6 +517,7 @@ void PaUtil_SetNonInterleavedInputChannel( PaUtilBufferProcessor* bp,
         unsigned int channel, void *data )
 {
     assert( channel < bp->inputChannelCount );
+    assert( !bp->hostInputIsInterleaved );
     
     bp->hostInputChannels[0][channel].data = data;
     bp->hostInputChannels[0][channel].stride = 1;
@@ -546,6 +553,7 @@ void PaUtil_Set2ndInterleavedInputChannels( PaUtilBufferProcessor* bp,
 
     assert( firstChannel < bp->inputChannelCount );
     assert( firstChannel + channelCount <= bp->inputChannelCount );
+    assert( bp->hostInputIsInterleaved );
     
     for( i=0; i< channelCount; ++i )
     {
@@ -560,6 +568,7 @@ void PaUtil_Set2ndNonInterleavedInputChannel( PaUtilBufferProcessor* bp,
         unsigned int channel, void *data )
 {
     assert( channel < bp->inputChannelCount );
+    assert( !bp->hostInputIsInterleaved );
     
     bp->hostInputChannels[1][channel].data = data;
     bp->hostInputChannels[1][channel].stride = 1;
@@ -607,6 +616,7 @@ void PaUtil_SetInterleavedOutputChannels( PaUtilBufferProcessor* bp,
 
     assert( firstChannel < bp->outputChannelCount );
     assert( firstChannel + channelCount <= bp->outputChannelCount );
+    assert( bp->hostOutputIsInterleaved );
     
     for( i=0; i< channelCount; ++i )
     {
@@ -620,6 +630,7 @@ void PaUtil_SetNonInterleavedOutputChannel( PaUtilBufferProcessor* bp,
         unsigned int channel, void *data )
 {
     assert( channel < bp->outputChannelCount );
+    assert( !bp->hostOutputIsInterleaved );
 
     PaUtil_SetOutputChannel( bp, channel, data, 1 );
 }
@@ -655,6 +666,7 @@ void PaUtil_Set2ndInterleavedOutputChannels( PaUtilBufferProcessor* bp,
 
     assert( firstChannel < bp->outputChannelCount );
     assert( firstChannel + channelCount <= bp->outputChannelCount );
+    assert( bp->hostOutputIsInterleaved );
     
     for( i=0; i< channelCount; ++i )
     {
@@ -668,6 +680,7 @@ void PaUtil_Set2ndNonInterleavedOutputChannel( PaUtilBufferProcessor* bp,
         unsigned int channel, void *data )
 {
     assert( channel < bp->outputChannelCount );
+    assert( !bp->hostOutputIsInterleaved );
     
     PaUtil_Set2ndOutputChannel( bp, channel, data, 1 );
 }
@@ -683,7 +696,9 @@ void PaUtil_BeginBufferProcessing( PaUtilBufferProcessor* bp,
         
     bp->timeInfo->inputBufferAdcTime -= bp->framesInTempInputBuffer * bp->samplePeriod;
     
-    bp->timeInfo->currentTime = 0; /** FIXME: @todo time info currentTime not implemented */
+    /* We just pass through timeInfo->currentTime provided by the caller. This is
+        not strictly conformant to the word of the spec, since the buffer processor 
+        might call the callback multiple times, and we never refresh currentTime. */
 
     /* the first streamCallback will be called to generate samples which will be
         outputted after the frames currently in the output buffer have been
@@ -722,6 +737,8 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
     unsigned long frameCount;
     unsigned long framesToGo = framesToProcess;
     unsigned long framesProcessed = 0;
+    int skipOutputConvert = 0;
+    int skipInputConvert = 0;
 
 
     if( *streamCallbackResult == paContinue )
@@ -738,18 +755,25 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
             }
             else /* there are input channels */
             {
-                /*
-                    could use more elaborate logic here and sometimes process
-                    buffers in-place.
-                */
-            
+                
                 destBytePtr = (unsigned char *)bp->tempInputBuffer;
 
                 if( bp->userInputIsInterleaved )
                 {
                     destSampleStrideSamples = bp->inputChannelCount;
                     destChannelStrideBytes = bp->bytesPerUserInputSample;
-                    userInput = bp->tempInputBuffer;
+
+                    /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */
+                    if( bp->userInputSampleFormatIsEqualToHost && bp->hostInputIsInterleaved )
+                    {
+                        userInput = hostInputChannels[0].data;
+                        destBytePtr = (unsigned char *)hostInputChannels[0].data;
+                        skipInputConvert = 1;
+                    }
+                    else
+                    {
+                        userInput = bp->tempInputBuffer;
+                    }
                 }
                 else /* user input is not interleaved */
                 {
@@ -757,10 +781,21 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
                     destChannelStrideBytes = frameCount * bp->bytesPerUserInputSample;
 
                     /* setup non-interleaved ptrs */
-                    for( i=0; i<bp->inputChannelCount; ++i )
+                    if( bp->userInputSampleFormatIsEqualToHost && !bp->hostInputIsInterleaved )
                     {
-                        bp->tempInputBufferPtrs[i] = ((unsigned char*)bp->tempInputBuffer) +
-                            i * bp->bytesPerUserInputSample * frameCount;
+                        for( i=0; i<bp->inputChannelCount; ++i )
+                        {
+                            bp->tempInputBufferPtrs[i] = hostInputChannels[i].data;
+                        }
+                        skipInputConvert = 1;
+                    }
+                    else
+                    {
+                        for( i=0; i<bp->inputChannelCount; ++i )
+                        {
+                            bp->tempInputBufferPtrs[i] = ((unsigned char*)bp->tempInputBuffer) +
+                                i * bp->bytesPerUserInputSample * frameCount;
+                        }
                     }
                 
                     userInput = bp->tempInputBufferPtrs;
@@ -778,19 +813,31 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
                     }
                 }
                 else
-                {
-                    for( i=0; i<bp->inputChannelCount; ++i )
+	            {
+                    if( skipInputConvert )
                     {
-                        bp->inputConverter( destBytePtr, destSampleStrideSamples,
-                                                hostInputChannels[i].data,
-                                                hostInputChannels[i].stride,
-                                                frameCount, &bp->ditherGenerator );
-
-                        destBytePtr += destChannelStrideBytes;  /* skip to next destination channel */
-
-                        /* advance src ptr for next iteration */
-                        hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) +
-                                frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample;
+                        for( i=0; i<bp->inputChannelCount; ++i )
+                        {
+                            /* advance src ptr for next iteration */
+                            hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) +
+                                    frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample;
+                        }
+                    }
+                    else
+                    {
+                        for( i=0; i<bp->inputChannelCount; ++i )
+                        {
+                            bp->inputConverter( destBytePtr, destSampleStrideSamples,
+                                                    hostInputChannels[i].data,
+                                                    hostInputChannels[i].stride,
+                                                    frameCount, &bp->ditherGenerator );
+
+                            destBytePtr += destChannelStrideBytes;  /* skip to next destination channel */
+
+                            /* advance src ptr for next iteration */
+                            hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) +
+                                    frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample;
+                        }
                     }
                 }
             }
@@ -805,14 +852,34 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
             {
                 if( bp->userOutputIsInterleaved )
                 {
-                    userOutput = bp->tempOutputBuffer;
+                    /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */
+                    if( bp->userOutputSampleFormatIsEqualToHost && bp->hostOutputIsInterleaved )
+                    {
+                        userOutput = hostOutputChannels[0].data;
+                        skipOutputConvert = 1;
+                    }
+                    else
+                    {
+                        userOutput = bp->tempOutputBuffer;
+                    }
                 }
                 else /* user output is not interleaved */
                 {
-                    for( i = 0; i < bp->outputChannelCount; ++i )
+                    if( bp->userOutputSampleFormatIsEqualToHost && !bp->hostOutputIsInterleaved )
                     {
-                        bp->tempOutputBufferPtrs[i] = ((unsigned char*)bp->tempOutputBuffer) +
-                            i * bp->bytesPerUserOutputSample * frameCount;
+                        for( i=0; i<bp->outputChannelCount; ++i )
+                        {
+                            bp->tempOutputBufferPtrs[i] = hostOutputChannels[i].data;
+                        }
+                        skipOutputConvert = 1;
+                    }
+                    else
+                    {
+                        for( i=0; i<bp->outputChannelCount; ++i )
+                        {
+                            bp->tempOutputBufferPtrs[i] = ((unsigned char*)bp->tempOutputBuffer) +
+                                i * bp->bytesPerUserOutputSample * frameCount;
+                        }
                     }
 
                     userOutput = bp->tempOutputBufferPtrs;
@@ -836,37 +903,45 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
                 
                 if( bp->outputChannelCount != 0 && bp->hostOutputChannels[0][0].data )
                 {
-                    /*
-                        could use more elaborate logic here and sometimes process
-                        buffers in-place.
-                    */
-            
-                    srcBytePtr = (unsigned char *)bp->tempOutputBuffer;
-
-                    if( bp->userOutputIsInterleaved )
-                    {
-                        srcSampleStrideSamples = bp->outputChannelCount;
-                        srcChannelStrideBytes = bp->bytesPerUserOutputSample;
-                    }
-                    else /* user output is not interleaved */
-                    {
-                        srcSampleStrideSamples = 1;
-                        srcChannelStrideBytes = frameCount * bp->bytesPerUserOutputSample;
-                    }
-
-                    for( i=0; i<bp->outputChannelCount; ++i )
-                    {
-                        bp->outputConverter(    hostOutputChannels[i].data,
-                                                hostOutputChannels[i].stride,
-                                                srcBytePtr, srcSampleStrideSamples,
-                                                frameCount, &bp->ditherGenerator );
-
-                        srcBytePtr += srcChannelStrideBytes;  /* skip to next source channel */
-
-                        /* advance dest ptr for next iteration */
-                        hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) +
-                                frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample;
-                    }
+                    if( skipOutputConvert )
+					{
+						for( i=0; i<bp->outputChannelCount; ++i )
+                    	{
+                        	/* advance dest ptr for next iteration */
+                        	hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) +
+                            	    frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample;
+                    	}
+					}
+					else
+					{
+
+                    	srcBytePtr = (unsigned char *)bp->tempOutputBuffer;
+
+                    	if( bp->userOutputIsInterleaved )
+                    	{
+                        	srcSampleStrideSamples = bp->outputChannelCount;
+                        	srcChannelStrideBytes = bp->bytesPerUserOutputSample;
+                    	}
+                    	else /* user output is not interleaved */
+                    	{
+                        	srcSampleStrideSamples = 1;
+                        	srcChannelStrideBytes = frameCount * bp->bytesPerUserOutputSample;
+                    	}
+
+                    	for( i=0; i<bp->outputChannelCount; ++i )
+                    	{
+                        	bp->outputConverter(    hostOutputChannels[i].data,
+                                                	hostOutputChannels[i].stride,
+                                                	srcBytePtr, srcSampleStrideSamples,
+                                                	frameCount, &bp->ditherGenerator );
+
+                        	srcBytePtr += srcChannelStrideBytes;  /* skip to next source channel */
+
+                        	/* advance dest ptr for next iteration */
+                        	hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) +
+                                		frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample;
+                    	}
+					}
                 }
              
                 framesProcessed += frameCount;
@@ -997,7 +1072,7 @@ static unsigned long AdaptingInputOnlyProcess( PaUtilBufferProcessor *bp,
                         bp->framesPerUserBuffer, bp->timeInfo,
                         bp->callbackStatusFlags, bp->userData );
 
-                bp->timeInfo->inputBufferAdcTime += frameCount * bp->samplePeriod;
+                bp->timeInfo->inputBufferAdcTime += bp->framesPerUserBuffer * bp->samplePeriod;
             }
             
             bp->framesInTempInputBuffer = 0;
diff --git a/portaudio/src/common/pa_process.h b/portaudio/src/common/pa_process.h
index 89584bc07..12274eecf 100644
--- a/portaudio/src/common/pa_process.h
+++ b/portaudio/src/common/pa_process.h
@@ -1,7 +1,7 @@
 #ifndef PA_PROCESS_H
 #define PA_PROCESS_H
 /*
- * $Id: pa_process.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_process.h 1523 2010-07-10 17:41:25Z dmitrykos $
  * Portable Audio I/O Library callback buffer processing adapters
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -256,6 +256,8 @@ typedef struct {
 
     PaUtilHostBufferSizeMode hostBufferSizeMode;
     int useNonAdaptingProcess;
+    int userOutputSampleFormatIsEqualToHost;
+    int userInputSampleFormatIsEqualToHost;
     unsigned long framesPerTempBuffer;
 
     unsigned int inputChannelCount;
@@ -287,12 +289,14 @@ typedef struct {
 
     PaStreamCallbackFlags callbackStatusFlags;
 
+    int hostInputIsInterleaved;
     unsigned long hostInputFrameCount[2];
     PaUtilChannelDescriptor *hostInputChannels[2]; /**< pointers to arrays of channel descriptors.
                                                         pointers are NULL for half-duplex output processing.
                                                         hostInputChannels[i].data is NULL when the caller
                                                         calls PaUtil_SetNoInput()
                                                         */
+    int hostOutputIsInterleaved;
     unsigned long hostOutputFrameCount[2];
     PaUtilChannelDescriptor *hostOutputChannels[2]; /**< pointers to arrays of channel descriptors.
                                                          pointers are NULL for half-duplex input processing.
diff --git a/portaudio/src/common/pa_ringbuffer.c b/portaudio/src/common/pa_ringbuffer.c
index f4e1201a6..310d719f2 100644
--- a/portaudio/src/common/pa_ringbuffer.c
+++ b/portaudio/src/common/pa_ringbuffer.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_ringbuffer.c 1240 2007-07-17 13:05:07Z bjornroche $
+ * $Id: pa_ringbuffer.c 1421 2009-11-18 16:09:05Z bjornroche $
  * Portable Audio I/O Library
  * Ring Buffer utility.
  *
@@ -7,6 +7,8 @@
  * modified for SMP safety on Mac OS X by Bjorn Roche
  * modified for SMP safety on Linux by Leland Lucius
  * also, allowed for const where possible
+ * modified for multiple-byte-sized data elements by Sven Fischer 
+ *
  * Note that this is safe only for a single-thread reader and a
  * single-thread writer.
  *
@@ -55,94 +57,34 @@
 #include <math.h>
 #include "pa_ringbuffer.h"
 #include <string.h>
-
-/****************
- * First, we'll define some memory barrier primitives based on the system.
- * right now only OS X, FreeBSD, and Linux are supported. In addition to providing
- * memory barriers, these functions should ensure that data cached in registers
- * is written out to cache where it can be snooped by other CPUs. (ie, the volatile
- * keyword should not be required)
- *
- * the primitives that must be defined are:
- *
- * PaUtil_FullMemoryBarrier()
- * PaUtil_ReadMemoryBarrier()
- * PaUtil_WriteMemoryBarrier()
- *
- ****************/
-
-#if defined(__APPLE__)
-#   include <libkern/OSAtomic.h>
-    /* Here are the memory barrier functions. Mac OS X only provides
-       full memory barriers, so the three types of barriers are the same,
-       however, these barriers are superior to compiler-based ones. */
-#   define PaUtil_FullMemoryBarrier()  OSMemoryBarrier()
-#   define PaUtil_ReadMemoryBarrier()  OSMemoryBarrier()
-#   define PaUtil_WriteMemoryBarrier() OSMemoryBarrier()
-#elif defined(__GNUC__)
-    /* GCC >= 4.1 has built-in intrinsics. We'll use those */
-#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
-#      define PaUtil_FullMemoryBarrier()  __sync_synchronize()
-#      define PaUtil_ReadMemoryBarrier()  __sync_synchronize()
-#      define PaUtil_WriteMemoryBarrier() __sync_synchronize()
-    /* as a fallback, GCC understands volatile asm and "memory" to mean it
-     * should not reorder memory read/writes */
-#   elif defined( __PPC__ )
-#      define PaUtil_FullMemoryBarrier()  asm volatile("sync":::"memory")
-#      define PaUtil_ReadMemoryBarrier()  asm volatile("sync":::"memory")
-#      define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory")
-#   elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || defined( __i686__ ) || defined( __x86_64__ )
-#      define PaUtil_FullMemoryBarrier()  asm volatile("mfence":::"memory")
-#      define PaUtil_ReadMemoryBarrier()  asm volatile("lfence":::"memory")
-#      define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory")
-#   else
-#      ifdef ALLOW_SMP_DANGERS
-#         warning Memory barriers not defined on this system or system unknown
-#         warning For SMP safety, you should fix this.
-#         define PaUtil_FullMemoryBarrier()
-#         define PaUtil_ReadMemoryBarrier()
-#         define PaUtil_WriteMemoryBarrier()
-#      else
-#         error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
-#      endif
-#   endif
-#else
-#   ifdef ALLOW_SMP_DANGERS
-#      warning Memory barriers not defined on this system or system unknown
-#      warning For SMP safety, you should fix this.
-#      define PaUtil_FullMemoryBarrier()
-#      define PaUtil_ReadMemoryBarrier()
-#      define PaUtil_WriteMemoryBarrier()
-#   else
-#      error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
-#   endif
-#endif
+#include "pa_memorybarrier.h"
 
 /***************************************************************************
  * Initialize FIFO.
- * numBytes must be power of 2, returns -1 if not.
+ * elementCount must be power of 2, returns -1 if not.
  */
-long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long numBytes, void *dataPtr )
+ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr )
 {
-    if( ((numBytes-1) & numBytes) != 0) return -1; /* Not Power of two. */
-    rbuf->bufferSize = numBytes;
+    if( ((elementCount-1) & elementCount) != 0) return -1; /* Not Power of two. */
+    rbuf->bufferSize = elementCount;
     rbuf->buffer = (char *)dataPtr;
     PaUtil_FlushRingBuffer( rbuf );
-    rbuf->bigMask = (numBytes*2)-1;
-    rbuf->smallMask = (numBytes)-1;
+    rbuf->bigMask = (elementCount*2)-1;
+    rbuf->smallMask = (elementCount)-1;
+    rbuf->elementSizeBytes = elementSizeBytes;
     return 0;
 }
 
 /***************************************************************************
-** Return number of bytes available for reading. */
-long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf )
+** Return number of elements available for reading. */
+ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf )
 {
     PaUtil_ReadMemoryBarrier();
     return ( (rbuf->writeIndex - rbuf->readIndex) & rbuf->bigMask );
 }
 /***************************************************************************
-** Return number of bytes available for writing. */
-long PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf )
+** Return number of elements available for writing. */
+ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf )
 {
     /* Since we are calling PaUtil_GetRingBufferReadAvailable, we don't need an aditional MB */
     return ( rbuf->bufferSize - PaUtil_GetRingBufferReadAvailable(rbuf));
@@ -159,126 +101,126 @@ void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf )
 ** Get address of region(s) to which we can write data.
 ** If the region is contiguous, size2 will be zero.
 ** If non-contiguous, size2 will be the size of second region.
-** Returns room available to be written or numBytes, whichever is smaller.
+** Returns room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long numBytes,
-                                       void **dataPtr1, long *sizePtr1,
-                                       void **dataPtr2, long *sizePtr2 )
+ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                       void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                       void **dataPtr2, ring_buffer_size_t *sizePtr2 )
 {
-    long   index;
-    long   available = PaUtil_GetRingBufferWriteAvailable( rbuf );
-    if( numBytes > available ) numBytes = available;
+    ring_buffer_size_t   index;
+    ring_buffer_size_t   available = PaUtil_GetRingBufferWriteAvailable( rbuf );
+    if( elementCount > available ) elementCount = available;
     /* Check to see if write is not contiguous. */
     index = rbuf->writeIndex & rbuf->smallMask;
-    if( (index + numBytes) > rbuf->bufferSize )
+    if( (index + elementCount) > rbuf->bufferSize )
     {
         /* Write data in two blocks that wrap the buffer. */
-        long   firstHalf = rbuf->bufferSize - index;
-        *dataPtr1 = &rbuf->buffer[index];
+        ring_buffer_size_t   firstHalf = rbuf->bufferSize - index;
+        *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
         *sizePtr1 = firstHalf;
         *dataPtr2 = &rbuf->buffer[0];
-        *sizePtr2 = numBytes - firstHalf;
+        *sizePtr2 = elementCount - firstHalf;
     }
     else
     {
-        *dataPtr1 = &rbuf->buffer[index];
-        *sizePtr1 = numBytes;
+        *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
+        *sizePtr1 = elementCount;
         *dataPtr2 = NULL;
         *sizePtr2 = 0;
     }
-    return numBytes;
+    return elementCount;
 }
 
 
 /***************************************************************************
 */
-long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long numBytes )
+ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount )
 {
     /* we need to ensure that previous writes are seen before we update the write index */
     PaUtil_WriteMemoryBarrier();
-    return rbuf->writeIndex = (rbuf->writeIndex + numBytes) & rbuf->bigMask;
+    return rbuf->writeIndex = (rbuf->writeIndex + elementCount) & rbuf->bigMask;
 }
 
 /***************************************************************************
 ** Get address of region(s) from which we can read data.
 ** If the region is contiguous, size2 will be zero.
 ** If non-contiguous, size2 will be the size of second region.
-** Returns room available to be written or numBytes, whichever is smaller.
+** Returns room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long numBytes,
-                                void **dataPtr1, long *sizePtr1,
-                                void **dataPtr2, long *sizePtr2 )
+ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                void **dataPtr2, ring_buffer_size_t *sizePtr2 )
 {
-    long   index;
-    long   available = PaUtil_GetRingBufferReadAvailable( rbuf );
-    if( numBytes > available ) numBytes = available;
+    ring_buffer_size_t   index;
+    ring_buffer_size_t   available = PaUtil_GetRingBufferReadAvailable( rbuf );
+    if( elementCount > available ) elementCount = available;
     /* Check to see if read is not contiguous. */
     index = rbuf->readIndex & rbuf->smallMask;
-    if( (index + numBytes) > rbuf->bufferSize )
+    if( (index + elementCount) > rbuf->bufferSize )
     {
         /* Write data in two blocks that wrap the buffer. */
-        long firstHalf = rbuf->bufferSize - index;
-        *dataPtr1 = &rbuf->buffer[index];
+        ring_buffer_size_t firstHalf = rbuf->bufferSize - index;
+        *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
         *sizePtr1 = firstHalf;
         *dataPtr2 = &rbuf->buffer[0];
-        *sizePtr2 = numBytes - firstHalf;
+        *sizePtr2 = elementCount - firstHalf;
     }
     else
     {
-        *dataPtr1 = &rbuf->buffer[index];
-        *sizePtr1 = numBytes;
+        *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
+        *sizePtr1 = elementCount;
         *dataPtr2 = NULL;
         *sizePtr2 = 0;
     }
-    return numBytes;
+    return elementCount;
 }
 /***************************************************************************
 */
-long PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, long numBytes )
+ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount )
 {
     /* we need to ensure that previous writes are always seen before updating the index. */
     PaUtil_WriteMemoryBarrier();
-    return rbuf->readIndex = (rbuf->readIndex + numBytes) & rbuf->bigMask;
+    return rbuf->readIndex = (rbuf->readIndex + elementCount) & rbuf->bigMask;
 }
 
 /***************************************************************************
-** Return bytes written. */
-long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long numBytes )
+** Return elements written. */
+ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount )
 {
-    long size1, size2, numWritten;
+    ring_buffer_size_t size1, size2, numWritten;
     void *data1, *data2;
-    numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, numBytes, &data1, &size1, &data2, &size2 );
+    numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );
     if( size2 > 0 )
     {
 
-        memcpy( data1, data, size1 );
-        data = ((char *)data) + size1;
-        memcpy( data2, data, size2 );
+        memcpy( data1, data, size1*rbuf->elementSizeBytes );
+        data = ((char *)data) + size1*rbuf->elementSizeBytes;
+        memcpy( data2, data, size2*rbuf->elementSizeBytes );
     }
     else
     {
-        memcpy( data1, data, size1 );
+        memcpy( data1, data, size1*rbuf->elementSizeBytes );
     }
     PaUtil_AdvanceRingBufferWriteIndex( rbuf, numWritten );
     return numWritten;
 }
 
 /***************************************************************************
-** Return bytes read. */
-long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long numBytes )
+** Return elements read. */
+ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount )
 {
-    long size1, size2, numRead;
+    ring_buffer_size_t size1, size2, numRead;
     void *data1, *data2;
-    numRead = PaUtil_GetRingBufferReadRegions( rbuf, numBytes, &data1, &size1, &data2, &size2 );
+    numRead = PaUtil_GetRingBufferReadRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );
     if( size2 > 0 )
     {
-        memcpy( data, data1, size1 );
-        data = ((char *)data) + size1;
-        memcpy( data, data2, size2 );
+        memcpy( data, data1, size1*rbuf->elementSizeBytes );
+        data = ((char *)data) + size1*rbuf->elementSizeBytes;
+        memcpy( data, data2, size2*rbuf->elementSizeBytes );
     }
     else
     {
-        memcpy( data, data1, size1 );
+        memcpy( data, data1, size1*rbuf->elementSizeBytes );
     }
     PaUtil_AdvanceRingBufferReadIndex( rbuf, numRead );
     return numRead;
diff --git a/portaudio/src/common/pa_ringbuffer.h b/portaudio/src/common/pa_ringbuffer.h
index b38088981..7efd1914d 100644
--- a/portaudio/src/common/pa_ringbuffer.h
+++ b/portaudio/src/common/pa_ringbuffer.h
@@ -1,13 +1,15 @@
 #ifndef PA_RINGBUFFER_H
 #define PA_RINGBUFFER_H
 /*
- * $Id: pa_ringbuffer.h 1151 2006-11-29 02:11:16Z leland_lucius $
+ * $Id: pa_ringbuffer.h 1421 2009-11-18 16:09:05Z bjornroche $
  * Portable Audio I/O Library
  * Ring Buffer utility.
  *
  * Author: Phil Burk, http://www.softsynth.com
  * modified for SMP safety on OS X by Bjorn Roche.
  * also allowed for const where possible.
+ * modified for multiple-byte-sized data elements by Sven Fischer 
+ *
  * Note that this is safe only for a single-thread reader
  * and a single-thread writer.
  *
@@ -48,8 +50,38 @@
 
 /** @file
  @ingroup common_src
+ @brief Single-reader single-writer lock-free ring buffer
+
+ PaUtilRingBuffer is a ring buffer used to transport samples between
+ different execution contexts (threads, OS callbacks, interrupt handlers)
+ without requiring the use of any locks. This only works when there is
+ a single reader and a single writer (ie. one thread or callback writes
+ to the ring buffer, another thread or callback reads from it).
+
+ The PaUtilRingBuffer structure manages a ring buffer containing N 
+ elements, where N must be a power of two. An element may be any size 
+ (specified in bytes).
+
+ The memory area used to store the buffer elements must be allocated by 
+ the client prior to calling PaUtil_InitializeRingBuffer() and must outlive
+ the use of the ring buffer.
 */
 
+#if defined(__APPLE__)
+#include <sys/types.h>
+typedef int32_t ring_buffer_size_t;
+#elif defined( __GNUC__ )
+typedef long ring_buffer_size_t;
+#elif (_MSC_VER >= 1400)
+typedef long ring_buffer_size_t;
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+typedef long ring_buffer_size_t;
+#else
+typedef long ring_buffer_size_t;
+#endif
+
+
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -57,26 +89,29 @@ extern "C"
 
 typedef struct PaUtilRingBuffer
 {
-    long   bufferSize; /* Number of bytes in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */
-    long   writeIndex; /* Index of next writable byte. Set by PaUtil_AdvanceRingBufferWriteIndex. */
-    long   readIndex;  /* Index of next readable byte. Set by PaUtil_AdvanceRingBufferReadIndex. */
-    long   bigMask;    /* Used for wrapping indices with extra bit to distinguish full/empty. */
-    long   smallMask;  /* Used for fitting indices to buffer. */
-    char  *buffer;
+    ring_buffer_size_t  bufferSize; /**< Number of elements in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */
+    ring_buffer_size_t  writeIndex; /**< Index of next writable element. Set by PaUtil_AdvanceRingBufferWriteIndex. */
+    ring_buffer_size_t  readIndex;  /**< Index of next readable element. Set by PaUtil_AdvanceRingBufferReadIndex. */
+    ring_buffer_size_t  bigMask;    /**< Used for wrapping indices with extra bit to distinguish full/empty. */
+    ring_buffer_size_t  smallMask;  /**< Used for fitting indices to buffer. */
+    ring_buffer_size_t  elementSizeBytes; /**< Number of bytes per element. */
+    char  *buffer;    /**< Pointer to the buffer containing the actual data. */
 }PaUtilRingBuffer;
 
 /** Initialize Ring Buffer.
 
  @param rbuf The ring buffer.
 
- @param numBytes The number of bytes in the buffer and must be power of 2.
+ @param elementSizeBytes The size of a single data element in bytes.
+
+ @param elementCount The number of elements in the buffer (must be power of 2).
 
  @param dataPtr A pointer to a previously allocated area where the data
- will be maintained.  It must be numBytes long.
+ will be maintained.  It must be elementCount*elementSizeBytes long.
 
- @return -1 if numBytes is not a power of 2, otherwise 0.
+ @return -1 if elementCount is not a power of 2, otherwise 0.
 */
-long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long numBytes, void *dataPtr );
+ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr );
 
 /** Clear buffer. Should only be called when buffer is NOT being read.
 
@@ -84,21 +119,21 @@ long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long numBytes, void *d
 */
 void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf );
 
-/** Retrieve the number of bytes available in the ring buffer for writing.
+/** Retrieve the number of elements available in the ring buffer for writing.
 
  @param rbuf The ring buffer.
 
- @return The number of bytes available for writing.
+ @return The number of elements available for writing.
 */
-long PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf );
+ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf );
 
-/** Retrieve the number of bytes available in the ring buffer for reading.
+/** Retrieve the number of elements available in the ring buffer for reading.
 
  @param rbuf The ring buffer.
 
- @return The number of bytes available for reading.
+ @return The number of elements available for reading.
 */
-long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
+ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
 
 /** Write data to the ring buffer.
 
@@ -106,11 +141,11 @@ long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
 
  @param data The address of new data to write to the buffer.
 
- @param numBytes The number of bytes to be written.
+ @param elementCount The number of elements to be written.
 
- @return The number of bytes written.
+ @return The number of elements written.
 */
-long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long numBytes );
+ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount );
 
 /** Read data from the ring buffer.
 
@@ -118,17 +153,17 @@ long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long numB
 
  @param data The address where the data should be stored.
 
- @param numBytes The number of bytes to be read.
+ @param elementCount The number of elements to be read.
 
- @return The number of bytes read.
+ @return The number of elements read.
 */
-long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long numBytes );
+ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount );
 
 /** Get address of region(s) to which we can write data.
 
  @param rbuf The ring buffer.
 
- @param numBytes The number of bytes desired.
+ @param elementCount The number of elements desired.
 
  @param dataPtr1 The address where the first (or only) region pointer will be
  stored.
@@ -137,32 +172,32 @@ long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long numBytes );
  stored.
 
  @param dataPtr2 The address where the second region pointer will be stored if
- the first region is too small to satisfy numBytes.
+ the first region is too small to satisfy elementCount.
 
  @param sizePtr2 The address where the second region length will be stored if
- the first region is too small to satisfy numBytes.
+ the first region is too small to satisfy elementCount.
 
- @return The room available to be written or numBytes, whichever is smaller.
+ @return The room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long numBytes,
-                                       void **dataPtr1, long *sizePtr1,
-                                       void **dataPtr2, long *sizePtr2 );
+ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                       void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                       void **dataPtr2, ring_buffer_size_t *sizePtr2 );
 
 /** Advance the write index to the next location to be written.
 
  @param rbuf The ring buffer.
 
- @param numBytes The number of bytes to advance.
+ @param elementCount The number of elements to advance.
 
  @return The new position.
 */
-long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long numBytes );
+ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );
 
 /** Get address of region(s) from which we can write data.
 
  @param rbuf The ring buffer.
 
- @param numBytes The number of bytes desired.
+ @param elementCount The number of elements desired.
 
  @param dataPtr1 The address where the first (or only) region pointer will be
  stored.
@@ -171,26 +206,26 @@ long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long numBytes )
  stored.
 
  @param dataPtr2 The address where the second region pointer will be stored if
- the first region is too small to satisfy numBytes.
+ the first region is too small to satisfy elementCount.
 
  @param sizePtr2 The address where the second region length will be stored if
- the first region is too small to satisfy numBytes.
+ the first region is too small to satisfy elementCount.
 
- @return The number of bytes available for reading.
+ @return The number of elements available for reading.
 */
-long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long numBytes,
-                                      void **dataPtr1, long *sizePtr1,
-                                      void **dataPtr2, long *sizePtr2 );
+ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                      void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                      void **dataPtr2, ring_buffer_size_t *sizePtr2 );
 
 /** Advance the read index to the next location to be read.
 
  @param rbuf The ring buffer.
 
- @param numBytes The number of bytes to advance.
+ @param elementCount The number of elements to advance.
 
  @return The new position.
 */
-long PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, long numBytes );
+ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );
 
 #ifdef __cplusplus
 }
diff --git a/portaudio/src/common/pa_skeleton.c b/portaudio/src/common/pa_skeleton.c
index e229b07ba..d5cb52d82 100644
--- a/portaudio/src/common/pa_skeleton.c
+++ b/portaudio/src/common/pa_skeleton.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_skeleton.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_skeleton.c 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library skeleton implementation
  * demonstrates how to use the common functions to implement support
  * for a host API
@@ -43,8 +43,10 @@
 
  @brief Skeleton implementation of support for a host API.
 
- @note This file is provided as a starting point for implementing support for
- a new host API. IMPLEMENT ME comments are used to indicate functionality
+ This file is provided as a starting point for implementing support for
+ a new host API. It provides examples of how the common code can be used.
+
+ @note IMPLEMENT ME comments are used to indicate functionality
  which much be customised for each implementation.
 */
 
diff --git a/portaudio/src/common/pa_stream.c b/portaudio/src/common/pa_stream.c
index 172e7d26b..ea91821f8 100644
--- a/portaudio/src/common/pa_stream.c
+++ b/portaudio/src/common/pa_stream.c
@@ -1,10 +1,10 @@
 /*
- * $Id: pa_stream.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_stream.c 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library
- * 
+ * stream interface
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 2002 Ross Bencina
+ * Copyright (c) 2008 Ross Bencina
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -40,8 +40,8 @@
 /** @file
  @ingroup common_src
 
- @brief Interface used by pa_front to virtualize functions which operate on
- streams.
+ @brief Stream interfaces, representation structures and helper functions
+ used to interface between pa_front.c host API implementations.
 */
 
 
diff --git a/portaudio/src/common/pa_stream.h b/portaudio/src/common/pa_stream.h
index f5363b3e1..8d707b79c 100644
--- a/portaudio/src/common/pa_stream.h
+++ b/portaudio/src/common/pa_stream.h
@@ -1,12 +1,12 @@
 #ifndef PA_STREAM_H
 #define PA_STREAM_H
 /*
- * $Id: pa_stream.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_stream.h 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library
  * stream interface
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -42,8 +42,8 @@
 /** @file
  @ingroup common_src
 
- @brief Interface used by pa_front to virtualize functions which operate on
- streams.
+ @brief Stream interfaces, representation structures and helper functions
+ used to interface between pa_front.c host API implementations.
 */
 
 
diff --git a/portaudio/src/common/pa_trace.c b/portaudio/src/common/pa_trace.c
index 583d3ae9f..24305003f 100644
--- a/portaudio/src/common/pa_trace.c
+++ b/portaudio/src/common/pa_trace.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_trace.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_trace.c 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library Trace Facility
  * Store trace information in real-time for later printing.
  *
@@ -40,7 +40,7 @@
 /** @file
  @ingroup common_src
 
- @brief Event trace mechanism for debugging.
+ @brief Real-time safe event trace logging facility for debugging.
 */
 
 
diff --git a/portaudio/src/common/pa_trace.h b/portaudio/src/common/pa_trace.h
index a4d2a3314..b11509e0e 100644
--- a/portaudio/src/common/pa_trace.h
+++ b/portaudio/src/common/pa_trace.h
@@ -1,7 +1,7 @@
 #ifndef PA_TRACE_H
 #define PA_TRACE_H
 /*
- * $Id: pa_trace.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_trace.h 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library Trace Facility
  * Store trace information in real-time for later printing.
  *
@@ -42,14 +42,36 @@
 /** @file
  @ingroup common_src
 
- @brief Event trace mechanism for debugging.
+ @brief Real-time safe event trace logging facility for debugging.
 
- Allows data to be written to the buffer at interrupt time and dumped later.
+ Allows data to be logged to a fixed size trace buffer in a real-time
+ execution context (such as at interrupt time). Each log entry consists 
+ of a message comprising a string pointer and an int.  The trace buffer 
+ may be dumped to stdout later.
+
+ This facility is only active if PA_TRACE_REALTIME_EVENTS is set to 1,
+ otherwise the trace functions expand to no-ops.
+
+ @fn PaUtil_ResetTraceMessages
+ @brief Clear the trace buffer.
+
+ @fn PaUtil_AddTraceMessage
+ @brief Add a message to the trace buffer. A message consists of string and an int.
+ @param msg The string pointer must remain valid until PaUtil_DumpTraceMessages 
+    is called. As a result, usually only string literals should be passed as 
+    the msg parameter.
+
+ @fn PaUtil_DumpTraceMessages
+ @brief Print all messages in the trace buffer to stdout and clear the trace buffer.
 */
 
+#ifndef PA_TRACE_REALTIME_EVENTS
+#define PA_TRACE_REALTIME_EVENTS     (0)   /**< Set to 1 to enable logging using the trace functions defined below */
+#endif
 
-#define PA_TRACE_REALTIME_EVENTS     (0)   /* Keep log of various real-time events. */
-#define PA_MAX_TRACE_RECORDS      (2048)
+#ifndef PA_MAX_TRACE_RECORDS
+#define PA_MAX_TRACE_RECORDS      (2048)   /**< Maximum number of records stored in trace buffer */   
+#endif
 
 #ifdef __cplusplus
 extern "C"
diff --git a/portaudio/src/common/pa_util.h b/portaudio/src/common/pa_util.h
index 55eaa1388..95ea6789a 100644
--- a/portaudio/src/common/pa_util.h
+++ b/portaudio/src/common/pa_util.h
@@ -1,12 +1,12 @@
 #ifndef PA_UTIL_H
 #define PA_UTIL_H
 /*
- * $Id: pa_util.h 1229 2007-06-15 16:11:11Z rossb $
+ * $Id: pa_util.h 1339 2008-02-15 07:50:33Z rossb $
  * Portable Audio I/O Library implementation utilities header
  * common implementation utilities and interfaces
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -44,6 +44,9 @@
 
     @brief Prototypes for utility functions used by PortAudio implementations.
 
+    Some functions declared here are defined in pa_front.c while others
+    are implemented separately for each platform.
+
     @todo Document and adhere to the alignment guarantees provided by
     PaUtil_AllocateMemory().
 */
diff --git a/portaudio/src/hostapi/alsa/pa_linux_alsa.c b/portaudio/src/hostapi/alsa/pa_linux_alsa.c
index 06b17ac13..86baf2286 100644
--- a/portaudio/src/hostapi/alsa/pa_linux_alsa.c
+++ b/portaudio/src/hostapi/alsa/pa_linux_alsa.c
@@ -1,11 +1,12 @@
 /*
- * $Id: pa_linux_alsa.c 1236 2007-06-24 20:39:26Z aknudsen $
+ * $Id: pa_linux_alsa.c 1533 2010-08-02 10:37:18Z dmitrykos $
  * PortAudio Portable Real-Time Audio Library
  * Latest Version at: http://www.portaudio.com
  * ALSA implementation by Joshua Haberman and Arve Knudsen
  *
  * Copyright (c) 2002 Joshua Haberman <joshua@haberman.com>
- * Copyright (c) 2005-2006 Arve Knudsen <aknuds-1@broadpark.no>
+ * Copyright (c) 2005-2009 Arve Knudsen <arve.knudsen@gmail.com>
+ * Copyright (c) 2008 Kevin Kofler <kevin.kofler@chello.at>
  *
  * Based on the Open Source API proposed by Ross Bencina
  * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
@@ -31,13 +32,13 @@
  */
 
 /*
- * The text above constitutes the entire PortAudio license; however, 
+ * The text above constitutes the entire PortAudio license; however,
  * the PortAudio community also makes the following non-binding requests:
  *
  * Any person wishing to distribute modifications to the Software is
  * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also 
- * requested that these non-binding requests be included along with the 
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
  * license above.
  */
 
@@ -62,6 +63,7 @@
 #include <sys/mman.h>
 #include <signal.h> /* For sig_atomic_t */
 
+#include "portaudio.h"
 #include "pa_util.h"
 #include "pa_unix_util.h"
 #include "pa_allocation.h"
@@ -98,6 +100,7 @@
 
 static int aErr_;               /* Used with ENSURE_ */
 static int numPeriods_ = 4;
+static int busyRetries_ = 100;
 
 int PaAlsa_SetNumPeriods( int numPeriods )
 {
@@ -117,6 +120,9 @@ typedef struct
     unsigned long framesPerBuffer;
     int numUserChannels, numHostChannels;
     int userInterleaved, hostInterleaved;
+    int canMmap;
+    void *nonMmapBuffer;
+    unsigned int nonMmapBufferSize;
     PaDeviceIndex device;     /* Keep the device index */
 
     snd_pcm_t *pcm;
@@ -143,7 +149,7 @@ typedef struct PaAlsaStream
 
     int primeBuffers;
     int callbackMode;              /* bool: are we running in callback mode? */
-    int pcmsSynced;	            /* Have we successfully synced pcms */
+    int pcmsSynced;                /* Have we successfully synced pcms */
     int rtSched;
 
     /* the callback thread uses these to poll the sound device(s), waiting
@@ -315,12 +321,12 @@ static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 
 /** Determine max channels and default latencies.
  *
- * This function provides functionality to grope an opened (might be opened for capture or playback) pcm device for 
+ * This function provides functionality to grope an opened (might be opened for capture or playback) pcm device for
  * traits like max channels, suitable default latencies and default sample rate. Upon error, max channels is set to zero,
  * and a suitable result returned. The device is closed before returning.
  */
 static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, int openBlocking,
-        PaAlsaDeviceInfo* devInfo, int* canMmap )
+        PaAlsaDeviceInfo* devInfo )
 {
     PaError result = paNoError;
     snd_pcm_hw_params_t *hwParams;
@@ -353,9 +359,6 @@ static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, in
     snd_pcm_hw_params_alloca( &hwParams );
     snd_pcm_hw_params_any( pcm, hwParams );
 
-    *canMmap = snd_pcm_hw_params_test_access( pcm, hwParams, SND_PCM_ACCESS_MMAP_INTERLEAVED ) >= 0 ||
-            snd_pcm_hw_params_test_access( pcm, hwParams, SND_PCM_ACCESS_MMAP_NONINTERLEAVED ) >= 0;
-
     if( defaultSr >= 0 )
     {
         /* Could be that the device opened in one mode supports samplerates that the other mode wont have,
@@ -377,7 +380,7 @@ static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, in
         }
         ENSURE_( GetExactSampleRate( hwParams, &defaultSr ), paUnanticipatedHostError );
     }
-    
+
     ENSURE_( snd_pcm_hw_params_get_channels_min( hwParams, &minChans ), paUnanticipatedHostError );
     ENSURE_( snd_pcm_hw_params_get_channels_max( hwParams, &maxChans ), paUnanticipatedHostError );
     assert( maxChans <= INT_MAX );
@@ -413,7 +416,7 @@ static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, in
     ENSURE_( snd_pcm_hw_params_set_buffer_size_near( pcm, hwParams, &lowLatency ), paUnanticipatedHostError );
 
     /* Have to reset hwParams, to set new buffer size */
-    ENSURE_( snd_pcm_hw_params_any( pcm, hwParams ), paUnanticipatedHostError ); 
+    ENSURE_( snd_pcm_hw_params_any( pcm, hwParams ), paUnanticipatedHostError );
     ENSURE_( snd_pcm_hw_params_set_buffer_size_near( pcm, hwParams, &highLatency ), paUnanticipatedHostError );
 
     *minChannels = (int)minChans;
@@ -483,10 +486,10 @@ static const HwDevInfo *FindDeviceName( const char *name )
 
     for( i = 0; predefinedNames[i].alsaName; i++ )
     {
-	if( strcmp( name, predefinedNames[i].alsaName ) == 0 )
-	{
-	    return &predefinedNames[i];
-	}
+        if( strcmp( name, predefinedNames[i].alsaName ) == 0 )
+        {
+            return &predefinedNames[i];
+        }
     }
 
     return NULL;
@@ -538,7 +541,7 @@ static int IgnorePlugin( const char *pluginId )
  **/
 static int OpenPcm( snd_pcm_t **pcmp, const char *name, snd_pcm_stream_t stream, int mode, int waitOnBusy )
 {
-    int tries = 0, maxTries = waitOnBusy ? 100 : 0;
+    int tries = 0, maxTries = waitOnBusy ? busyRetries_ : 0;
     int ret = snd_pcm_open( pcmp, name, stream, mode );
     for( tries = 0; tries < maxTries && -EBUSY == ret; ++tries )
     {
@@ -565,7 +568,6 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
     PaError result = 0;
     PaDeviceInfo *baseDeviceInfo = &devInfo->baseDeviceInfo;
     snd_pcm_t *pcm;
-    int canMmap = -1;
     PaUtilHostApiRepresentation *baseApi = &alsaApi->baseHostApiRep;
 
     /* Zero fields */
@@ -579,8 +581,7 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
             OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_CAPTURE, blocking, 0 )
             >= 0 )
     {
-        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_In, blocking, devInfo,
-                    &canMmap ) != paNoError )
+        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_In, blocking, devInfo ) != paNoError )
         {
             /* Error */
             PA_DEBUG(("%s: Failed groping %s for capture\n", __FUNCTION__, deviceName->alsaName));
@@ -593,8 +594,7 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
             OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_PLAYBACK, blocking, 0 )
             >= 0 )
     {
-        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_Out, blocking, devInfo,
-                    &canMmap ) != paNoError )
+        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_Out, blocking, devInfo ) != paNoError )
         {
             /* Error */
             PA_DEBUG(("%s: Failed groping %s for playback\n", __FUNCTION__, deviceName->alsaName));
@@ -602,12 +602,6 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
         }
     }
 
-    if( 0 == canMmap )
-    {
-        PA_DEBUG(("%s: Device %s doesn't support mmap\n", __FUNCTION__, deviceName->alsaName));
-        goto end;
-    }
-
     baseDeviceInfo->structVersion = 2;
     baseDeviceInfo->hostApi = alsaApi->hostApiIndex;
     baseDeviceInfo->name = deviceName->name;
@@ -620,8 +614,12 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
     if( baseDeviceInfo->maxInputChannels > 0 || baseDeviceInfo->maxOutputChannels > 0 )
     {
         /* Make device default if there isn't already one or it is the ALSA "default" device */
-        if( baseApi->info.defaultInputDevice == paNoDevice && baseDeviceInfo->maxInputChannels > 0 )
+        if( (baseApi->info.defaultInputDevice == paNoDevice || !strcmp(deviceName->alsaName,
+                        "default" )) && baseDeviceInfo->maxInputChannels > 0 )
+        {
             baseApi->info.defaultInputDevice = *devIdx;
+            PA_DEBUG(("Default input device: %s\n", deviceName->name));
+        }
         if( (baseApi->info.defaultOutputDevice == paNoDevice || !strcmp(deviceName->alsaName,
                         "default" )) && baseDeviceInfo->maxOutputChannels > 0 )
         {
@@ -709,7 +707,7 @@ static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi )
             {
                 hasCapture = 1;
             }
-            
+
             snd_pcm_info_set_stream( pcmInfo, SND_PCM_STREAM_PLAYBACK );
             if( snd_ctl_pcm_info( ctl, pcmInfo ) >= 0 )
             {
@@ -767,7 +765,7 @@ static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi )
             int err = 0;
 
             char *alsaDeviceName, *deviceName;
-	    const HwDevInfo *predefined = NULL;
+            const HwDevInfo *predefined = NULL;
             snd_config_t *n = snd_config_iterator_entry( i ), * tp = NULL;;
 
             if( (err = snd_config_search( n, "type", &tp )) < 0 )
@@ -777,7 +775,7 @@ static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi )
                     ENSURE_(err, paUnanticipatedHostError);
                 }
             }
-            else 
+            else
             {
                 ENSURE_( snd_config_get_string( tp, &tpStr ), paUnanticipatedHostError );
             }
@@ -804,24 +802,22 @@ static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi )
                         paInsufficientMemory );
             }
 
-	    predefined = FindDeviceName( alsaDeviceName );
+            predefined = FindDeviceName( alsaDeviceName );
 
             hwDevInfos[numDeviceNames - 1].alsaName = alsaDeviceName;
             hwDevInfos[numDeviceNames - 1].name = deviceName;
             hwDevInfos[numDeviceNames - 1].isPlug = 1;
 
-	    if( predefined )
-	    {
-		hwDevInfos[numDeviceNames - 1].hasPlayback =
-		    predefined->hasPlayback;
-		hwDevInfos[numDeviceNames - 1].hasCapture =
-		    predefined->hasCapture;
-	    }
-	    else
-	    {
-		hwDevInfos[numDeviceNames - 1].hasPlayback = 1;
-		hwDevInfos[numDeviceNames - 1].hasCapture = 1;
-	    }
+            if( predefined )
+            {
+                hwDevInfos[numDeviceNames - 1].hasPlayback = predefined->hasPlayback;
+                hwDevInfos[numDeviceNames - 1].hasCapture = predefined->hasCapture;
+            }
+            else
+            {
+                hwDevInfos[numDeviceNames - 1].hasPlayback = 1;
+                hwDevInfos[numDeviceNames - 1].hasCapture = 1;
+            }
         }
     }
     else
@@ -989,7 +985,7 @@ static snd_pcm_format_t Pa2AlsaFormat( PaSampleFormat paFormat )
 }
 
 /** Open an ALSA pcm handle.
- * 
+ *
  * The device to be open can be specified in a custom PaAlsaStreamInfo struct, or it will be a device number. In case of a
  * device number, it maybe specified through an env variable (PA_ALSA_PLUGHW) that we should open the corresponding plugin
  * device.
@@ -1008,7 +1004,7 @@ static PaError AlsaOpen( const PaUtilHostApiRepresentation *hostApi, const PaStr
     {
         int usePlug = 0;
         deviceInfo = GetDeviceInfo( hostApi, params->device );
-        
+
         /* If device name starts with hw: and PA_ALSA_PLUGHW is 1, we open the plughw device instead */
         if( !strncmp( "hw:", deviceInfo->alsaName, 3 ) && getenv( "PA_ALSA_PLUGHW" ) )
             usePlug = atoi( getenv( "PA_ALSA_PLUGHW" ) );
@@ -1048,7 +1044,7 @@ static PaError TestParameters( const PaUtilHostApiRepresentation *hostApi, const
     PaSampleFormat hostFormat;
     snd_pcm_hw_params_t *hwParams;
     snd_pcm_hw_params_alloca( &hwParams );
-    
+
     if( !parameters->hostApiSpecificStreamInfo )
     {
         const PaAlsaDeviceInfo *devInfo = GetDeviceInfo( hostApi, parameters->device );
@@ -1192,6 +1188,9 @@ static PaError PaAlsaStreamComponent_Initialize( PaAlsaStreamComponent *self, Pa
     self->hostInterleaved = self->userInterleaved = !(userSampleFormat & paNonInterleaved);
     self->numUserChannels = params->channelCount;
     self->streamDir = streamDir;
+    self->canMmap = 0;
+    self->nonMmapBuffer = NULL;
+    self->nonMmapBufferSize = 0;
 
     if( !callbackMode && !self->userInterleaved )
     {
@@ -1252,14 +1251,43 @@ static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *se
 
     if( self->userInterleaved )
     {
-        accessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED;
+        accessMode          = SND_PCM_ACCESS_MMAP_INTERLEAVED;
         alternateAccessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
+
+        /* test if MMAP supported */
+        self->canMmap = snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ||
+                        snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0;
+
+        PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_INTERLEAVED: %s\n", __FUNCTION__, (snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ? "YES" : "NO")));
+        PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_NONINTERLEAVED: %s\n", __FUNCTION__, (snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0 ? "YES" : "NO")));
+
+        if (!self->canMmap)
+        {
+            accessMode          = SND_PCM_ACCESS_RW_INTERLEAVED;
+            alternateAccessMode = SND_PCM_ACCESS_RW_NONINTERLEAVED;
+        }
     }
     else
     {
-        accessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
+        accessMode          = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
         alternateAccessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED;
+
+        /* test if MMAP supported */
+        self->canMmap = snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ||
+                        snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0;
+
+        PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_NONINTERLEAVED: %s\n", __FUNCTION__, (snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ? "YES" : "NO")));
+        PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_INTERLEAVED: %s\n", __FUNCTION__, (snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0 ? "YES" : "NO")));
+
+        if (!self->canMmap)
+        {
+            accessMode          = SND_PCM_ACCESS_RW_NONINTERLEAVED;
+            alternateAccessMode = SND_PCM_ACCESS_RW_INTERLEAVED;
+        }
     }
+
+    PA_DEBUG(("%s: device can MMAP: %s\n", __FUNCTION__, (self->canMmap ? "YES" : "NO")));
+
     /* If requested access mode fails, try alternate mode */
     if( snd_pcm_hw_params_set_access( pcm, hwParams, accessMode ) < 0 )
     {
@@ -1267,14 +1295,7 @@ static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *se
         if( (err = snd_pcm_hw_params_set_access( pcm, hwParams, alternateAccessMode )) < 0)
         {
             result = paUnanticipatedHostError;
-            if( -EINVAL == err )
-            {
-                PaUtil_SetLastHostErrorInfo( paALSA, err, "PA ALSA requires that a device supports mmap access" );
-            }
-            else
-            {
-                PaUtil_SetLastHostErrorInfo( paALSA, err, snd_strerror( err ) );
-            }
+            PaUtil_SetLastHostErrorInfo( paALSA, err, snd_strerror( err ) );
             goto error;
         }
         /* Flip mode */
@@ -1288,7 +1309,7 @@ static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *se
     /* reject if there's no sample rate within 1% of the one requested */
     if( (fabs( *sampleRate - sr ) / *sampleRate) > 0.01 )
     {
-        PA_DEBUG(("%s: Wanted %f, closest sample rate was %d\n", __FUNCTION__, sampleRate, sr ));                 
+        PA_DEBUG(("%s: Wanted %f, closest sample rate was %d\n", __FUNCTION__, sampleRate, sr ));
         PA_ENSURE( paInvalidSampleRate );
     }
 
@@ -1353,10 +1374,10 @@ static PaError PaAlsaStreamComponent_FinishConfigure( PaAlsaStreamComponent *sel
         ENSURE_( snd_pcm_sw_params_set_silence_threshold( self->pcm, swParams, 0 ), paUnanticipatedHostError );
         ENSURE_( snd_pcm_sw_params_set_silence_size( self->pcm, swParams, boundary ), paUnanticipatedHostError );
     }
-        
+
     ENSURE_( snd_pcm_sw_params_set_avail_min( self->pcm, swParams, self->framesPerBuffer ), paUnanticipatedHostError );
     ENSURE_( snd_pcm_sw_params_set_xfer_align( self->pcm, swParams, 1 ), paUnanticipatedHostError );
-    ENSURE_( snd_pcm_sw_params_set_tstamp_mode( self->pcm, swParams, SND_PCM_TSTAMP_MMAP ), paUnanticipatedHostError );
+    ENSURE_( snd_pcm_sw_params_set_tstamp_mode( self->pcm, swParams, SND_PCM_TSTAMP_ENABLE ), paUnanticipatedHostError );
 
     /* Set the parameters! */
     ENSURE_( snd_pcm_sw_params( self->pcm, swParams ), paUnanticipatedHostError );
@@ -1453,6 +1474,40 @@ static int CalculatePollTimeout( const PaAlsaStream *stream, unsigned long frame
     return (int)ceil( 1000 * frames / stream->streamRepresentation.streamInfo.sampleRate );
 }
 
+/** Align value in backward direction.
+ *
+ * @param v: Value to align.
+ * @param align: Alignment.
+ */
+static unsigned long PaAlsa_AlignBackward(unsigned long v, unsigned long align)
+{
+	return ((v - (align ? v % align : 0)));
+}
+
+/** Align value in forward direction.
+ *
+ * @param v: Value to align.
+ * @param align: Alignment.
+ */
+static unsigned long PaAlsa_AlignForward(unsigned long v, unsigned long align)
+{
+	unsigned long remainder = (align ? (v % align) : 0);
+	return (remainder != 0 ? v + (align - remainder) : v);
+}
+
+/** Get size of host buffer maintained from the number of user frames, sample rate and suggested latency. Minimum double buffering
+ *  is maintained to allow 100% CPU usage inside user callback.
+ *
+ * @param userFramesPerBuffer: User buffer size in number of frames.
+ * @param suggestedLatency: User provided desired latency.
+ * @param sampleRate: Sample rate.
+ */
+static unsigned long PaAlsa_GetFramesPerHostBuffer(unsigned long userFramesPerBuffer, PaTime suggestedLatency, double sampleRate)
+{
+	unsigned long frames = userFramesPerBuffer + PA_MAX( userFramesPerBuffer, (unsigned long)(suggestedLatency * sampleRate) );
+	return frames;
+}
+
 /** Determine size per host buffer.
  *
  * During this method call, the component's framesPerBuffer attribute gets computed, and the corresponding period size
@@ -1463,18 +1518,20 @@ static PaError PaAlsaStreamComponent_DetermineFramesPerBuffer( PaAlsaStreamCompo
         unsigned long framesPerUserBuffer, double sampleRate, snd_pcm_hw_params_t* hwParams, int* accurate )
 {
     PaError result = paNoError;
-    unsigned long bufferSize = params->suggestedLatency * sampleRate, framesPerHostBuffer;
+    unsigned long bufferSize, framesPerHostBuffer;
     int dir = 0;
-    
-    {
-        snd_pcm_uframes_t tmp;
-        snd_pcm_hw_params_get_buffer_size_min( hwParams, &tmp );
-        bufferSize = PA_MAX( bufferSize, tmp );
-        snd_pcm_hw_params_get_buffer_size_max( hwParams, &tmp );
-        bufferSize = PA_MIN( bufferSize, tmp );
-    }
 
-    assert( bufferSize > 0 );
+    /* Calculate host buffer size */
+    bufferSize = PaAlsa_GetFramesPerHostBuffer(framesPerUserBuffer, params->suggestedLatency, sampleRate);
+
+    /* Log */
+    PA_DEBUG(( "%s: user-buffer (frames)           = %lu\n", __FUNCTION__, framesPerUserBuffer ));
+    PA_DEBUG(( "%s: user-buffer (sec)              = %f\n",  __FUNCTION__, (double)(framesPerUserBuffer / sampleRate) ));
+    PA_DEBUG(( "%s: suggested latency (sec)        = %f\n",  __FUNCTION__, params->suggestedLatency ));
+    PA_DEBUG(( "%s: suggested host buffer (frames) = %lu\n", __FUNCTION__, bufferSize ));
+    PA_DEBUG(( "%s: suggested host buffer (sec)    = %f\n",  __FUNCTION__, (double)(bufferSize / sampleRate) ));
+
+#ifdef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC
 
     if( framesPerUserBuffer != paFramesPerBufferUnspecified )
     {
@@ -1516,15 +1573,62 @@ static PaError PaAlsaStreamComponent_DetermineFramesPerBuffer( PaAlsaStreamCompo
         }
     }
 
-    /* Using the base number of periods, we try to approximate the suggested latency (+1 period),
-       finding a combination of period/buffer size which best fits these constraints */
-    {
-        unsigned numPeriods = numPeriods_, maxPeriods = 0;
+#endif
+
+	{
+        unsigned numPeriods = numPeriods_, maxPeriods = 0, minPeriods = numPeriods_;
+
         /* It may be that the device only supports 2 periods for instance */
         dir = 0;
+        ENSURE_( snd_pcm_hw_params_get_periods_min( hwParams, &minPeriods, &dir ), paUnanticipatedHostError )
         ENSURE_( snd_pcm_hw_params_get_periods_max( hwParams, &maxPeriods, &dir ), paUnanticipatedHostError );
         assert( maxPeriods > 1 );
-        numPeriods = PA_MIN( maxPeriods, numPeriods );
+
+        /* Clamp to min/max */
+        numPeriods = PA_MIN(maxPeriods, PA_MAX(minPeriods, numPeriods));
+
+        PA_DEBUG(( "%s: periods min = %lu, max = %lu, req = %lu \n", __FUNCTION__, minPeriods, maxPeriods, numPeriods ));
+
+#ifndef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC
+
+        /* Calculate period size */
+        framesPerHostBuffer = (bufferSize / numPeriods);
+
+        /* Align & test size */
+        if( framesPerUserBuffer != paFramesPerBufferUnspecified )
+        {
+            /* Align to user buffer size */
+            framesPerHostBuffer = PaAlsa_AlignForward(framesPerHostBuffer, framesPerUserBuffer);
+
+            /* Test (borrowed from older implementation) */
+            if( framesPerHostBuffer < framesPerUserBuffer )
+            {
+                assert( framesPerUserBuffer % framesPerHostBuffer == 0 );
+                if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 )
+                {
+                    if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer * 2, 0 ) == 0 )
+                        framesPerHostBuffer *= 2;
+                    else 
+                    if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer / 2, 0 ) == 0 )
+                        framesPerHostBuffer /= 2;
+                }
+            }
+            else
+            {
+                assert( framesPerHostBuffer % framesPerUserBuffer == 0 );
+                if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 )
+                {
+                    if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer + framesPerUserBuffer, 0 ) == 0 )
+                        framesPerHostBuffer += framesPerUserBuffer;
+                    else 
+                    if( snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer - framesPerUserBuffer, 0 ) == 0 )
+                        framesPerHostBuffer -= framesPerUserBuffer;
+                }
+            }
+        }
+#endif
+
+#ifdef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC
 
         if( framesPerUserBuffer != paFramesPerBufferUnspecified )
         {
@@ -1582,37 +1686,49 @@ static PaError PaAlsaStreamComponent_DetermineFramesPerBuffer( PaAlsaStreamCompo
         {
             framesPerHostBuffer = bufferSize / numPeriods;
         }
-    }
 
-    assert( framesPerHostBuffer > 0 );
+        /* non-mmap mode needs a reasonably-sized buffer or it'll stutter */
+        if( !self->canMmap && framesPerHostBuffer < 2048 )
+            framesPerHostBuffer = 2048;
+#endif
+        PA_DEBUG(( "%s: suggested host buffer period   = %lu \n", __FUNCTION__, framesPerHostBuffer ));
+	}
+
     {
-        snd_pcm_uframes_t min = 0, max = 0;
+        /* Get min/max period sizes and adjust our chosen */
+        snd_pcm_uframes_t min = 0, max = 0, minmax_diff;
         ENSURE_( snd_pcm_hw_params_get_period_size_min( hwParams, &min, NULL ), paUnanticipatedHostError );
         ENSURE_( snd_pcm_hw_params_get_period_size_max( hwParams, &max, NULL ), paUnanticipatedHostError );
+        minmax_diff = max - min;
 
         if( framesPerHostBuffer < min )
         {
-            PA_DEBUG(( "%s: The determined period size (%lu) is less than minimum (%lu)\n", __FUNCTION__,
-                        framesPerHostBuffer, min ));
-            framesPerHostBuffer = min;
+            PA_DEBUG(( "%s: The determined period size (%lu) is less than minimum (%lu)\n", __FUNCTION__, framesPerHostBuffer, min ));
+            framesPerHostBuffer = ((minmax_diff == 2) ? min + 1 : min);
         }
-        else if( framesPerHostBuffer > max )
+        else 
+        if( framesPerHostBuffer > max )
         {
-            PA_DEBUG(( "%s: The determined period size (%lu) is greater than maximum (%lu)\n", __FUNCTION__,
-                        framesPerHostBuffer, max ));
-            framesPerHostBuffer = max;
+            PA_DEBUG(( "%s: The determined period size (%lu) is greater than maximum (%lu)\n", __FUNCTION__, framesPerHostBuffer, max ));
+            framesPerHostBuffer = ((minmax_diff == 2) ? max - 1 : max);
         }
 
-        assert( framesPerHostBuffer >= min && framesPerHostBuffer <= max );
+		PA_DEBUG(( "%s: device period minimum          = %lu\n", __FUNCTION__, min ));
+		PA_DEBUG(( "%s: device period maximum          = %lu\n", __FUNCTION__, max ));
+		PA_DEBUG(( "%s: host buffer period             = %lu\n", __FUNCTION__, framesPerHostBuffer ));
+		PA_DEBUG(( "%s: host buffer period latency     = %f\n", __FUNCTION__, (double)(framesPerHostBuffer / sampleRate) ));
+
+        /* Try setting period size */
         dir = 0;
-        ENSURE_( snd_pcm_hw_params_set_period_size_near( self->pcm, hwParams, &framesPerHostBuffer, &dir ),
-                paUnanticipatedHostError );
+        ENSURE_( snd_pcm_hw_params_set_period_size_near( self->pcm, hwParams, &framesPerHostBuffer, &dir ), paUnanticipatedHostError );
         if( dir != 0 )
         {
             PA_DEBUG(( "%s: The configured period size is non-integer.\n", __FUNCTION__, dir ));
             *accurate = 0;
         }
     }
+
+    /* Set result */
     self->framesPerBuffer = framesPerHostBuffer;
 
 error:
@@ -1641,7 +1757,7 @@ error:
  * buffer size, this method tries it best to determine a period size which is a multiple of the user buffer size.
  *
  * The framesPerBuffer attributes of the individual capture and playback components of the stream are set to corresponding
- * values determined here. Since these should be reported as 
+ * values determined here. Since these should be reported as
  *
  * This is one of those blocks of code that will just take a lot of
  * refinement to be any good.
@@ -1725,12 +1841,15 @@ static PaError PaAlsaStream_DetermineFramesPerBuffer( PaAlsaStream* self, double
 
             while( optimalPeriodSize >= periodSize )
             {
-                if( snd_pcm_hw_params_test_period_size( self->capture.pcm, hwParamsCapture, optimalPeriodSize, 0 ) < 0 )
-                    continue;
-                if( snd_pcm_hw_params_test_period_size( self->playback.pcm, hwParamsPlayback, optimalPeriodSize, 0 ) >= 0 )
+                if( snd_pcm_hw_params_test_period_size( self->capture.pcm, hwParamsCapture, optimalPeriodSize, 0 )
+                        >= 0 && snd_pcm_hw_params_test_period_size( self->playback.pcm, hwParamsPlayback,
+                            optimalPeriodSize, 0 ) >= 0 )
+                {
                     break;
+                }
                 optimalPeriodSize /= 2;
             }
+
             if( optimalPeriodSize > periodSize )
                 periodSize = optimalPeriodSize;
 
@@ -1823,12 +1942,13 @@ static PaError PaAlsaStream_DetermineFramesPerBuffer( PaAlsaStream* self, double
     PA_UNLESS( framesPerHostBuffer != 0, paInternalError );
     self->maxFramesPerHostBuffer = framesPerHostBuffer;
 
-    if( !accurate )
+    if( !self->playback.canMmap || !accurate )
     {
         /* Don't know the exact size per host buffer */
         *hostBufferSizeMode = paUtilBoundedHostBufferSize;
         /* Raise upper bound */
-        ++self->maxFramesPerHostBuffer;
+        if( !accurate )
+            ++self->maxFramesPerHostBuffer;
     }
 
 error:
@@ -1976,8 +2096,8 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
     PA_ENSURE( PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer,
                 &inputLatency, &outputLatency, &hostBufferSizeMode ) );
-    hostInputSampleFormat = stream->capture.hostSampleFormat;
-    hostOutputSampleFormat = stream->playback.hostSampleFormat;
+    hostInputSampleFormat = stream->capture.hostSampleFormat | (!stream->capture.hostInterleaved ? paNonInterleaved : 0);
+    hostOutputSampleFormat = stream->playback.hostSampleFormat | (!stream->playback.hostInterleaved ? paNonInterleaved : 0);
 
     PA_ENSURE( PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
                     numInputChannels, inputSampleFormat, hostInputSampleFormat,
@@ -1987,11 +2107,13 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
     /* Ok, buffer processor is initialized, now we can deduce it's latency */
     if( numInputChannels > 0 )
-        stream->streamRepresentation.streamInfo.inputLatency = inputLatency + PaUtil_GetBufferProcessorInputLatency(
-                &stream->bufferProcessor );
+        stream->streamRepresentation.streamInfo.inputLatency = inputLatency + (PaTime)(
+                PaUtil_GetBufferProcessorInputLatency( &stream->bufferProcessor ) / sampleRate);
     if( numOutputChannels > 0 )
-        stream->streamRepresentation.streamInfo.outputLatency = outputLatency + PaUtil_GetBufferProcessorOutputLatency(
-                &stream->bufferProcessor );
+        stream->streamRepresentation.streamInfo.outputLatency = outputLatency + (PaTime)(
+                PaUtil_GetBufferProcessorOutputLatency( &stream->bufferProcessor ) / sampleRate);
+
+    PA_DEBUG(( "%s: Stream: framesPerBuffer = %lu, maxFramesPerHostBuffer = %lu, latency = i(%f)/o(%f), \n", __FUNCTION__, framesPerBuffer, stream->maxFramesPerHostBuffer, stream->streamRepresentation.streamInfo.inputLatency, stream->streamRepresentation.streamInfo.outputLatency));
 
     *s = (PaStream*)stream;
 
@@ -2035,7 +2157,7 @@ static void SilenceBuffer( PaAlsaStream *stream )
  * Depending on wether the stream is in callback or blocking mode, we will respectively start or simply
  * prepare the playback pcm. If the buffer has _not_ been primed, we will in callback mode prepare and
  * silence the buffer before starting playback. In blocking mode we simply prepare, as the playback will
- * be started automatically as the user writes to output. 
+ * be started automatically as the user writes to output.
  *
  * The capture pcm, however, will simply be prepared and started.
  */
@@ -2051,9 +2173,11 @@ static PaError AlsaStart( PaAlsaStream *stream, int priming )
             {
                 /* Buffer isn't primed, so prepare and silence */
                 ENSURE_( snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError );
-                SilenceBuffer( stream );
+                if( stream->playback.canMmap )
+                    SilenceBuffer( stream );
             }
-            ENSURE_( snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError );
+            if( stream->playback.canMmap )
+                ENSURE_( snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError );
         }
         else
             ENSURE_( snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError );
@@ -2142,7 +2266,7 @@ error:
         AbortStream( stream );
     }
     stream->isActive = 0;
-    
+
     goto end;
 }
 
@@ -2151,7 +2275,9 @@ error:
 static PaError AlsaStop( PaAlsaStream *stream, int abort )
 {
     PaError result = paNoError;
-    /* XXX: Seems that draining the dmix device may trigger a race condition in ALSA */
+    /* XXX: snd_pcm_drain tends to lock up, avoid it until we find out more */
+    abort = 1;
+    /*
     if( stream->capture.pcm && !strcmp( Pa_GetDeviceInfo( stream->capture.device )->name,
                 "dmix" ) )
     {
@@ -2162,6 +2288,7 @@ static PaError AlsaStop( PaAlsaStream *stream, int abort )
     {
         abort = 1;
     }
+    */
 
     if( abort )
     {
@@ -2317,6 +2444,7 @@ static double GetStreamCpuLoad( PaStream* s )
 
 static int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwParams, double sampleRate )
 {
+    PaError result = paNoError;
     unsigned long approx = (unsigned long) sampleRate;
     int dir = 0;
     double fraction = sampleRate - approx;
@@ -2334,14 +2462,29 @@ static int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwPara
             dir = 1;
     }
 
-    return snd_pcm_hw_params_set_rate( pcm, hwParams, approx, dir );
+    ENSURE_( snd_pcm_hw_params_set_rate( pcm, hwParams, approx, dir ), paUnanticipatedHostError );
+
+end:
+    return result;
+
+error:
+
+    /* Log */
+    {
+        unsigned int _min = 0, _max = 0; int _dir = 0;
+        ENSURE_( snd_pcm_hw_params_get_rate_min( hwParams, &_min, &_dir ), paUnanticipatedHostError );
+        ENSURE_( snd_pcm_hw_params_get_rate_max( hwParams, &_max, &_dir ), paUnanticipatedHostError );
+        PA_DEBUG(( "%s: SR min = %d, max = %d, req = %lu\n", __FUNCTION__, _min, _max, approx ));
+    }
+
+    goto end;
 }
 
 /* Return exact sample rate in param sampleRate */
 static int GetExactSampleRate( snd_pcm_hw_params_t *hwParams, double *sampleRate )
 {
     unsigned int num, den;
-    int err; 
+    int err;
 
     assert( hwParams );
 
@@ -2379,6 +2522,7 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
     snd_pcm_status_t *st;
     PaTime now = PaUtil_GetTime();
     snd_timestamp_t t;
+    int restartAlsa = 0; /* do not restart Alsa by default */
 
     snd_pcm_status_alloca( &st );
 
@@ -2389,6 +2533,17 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
         {
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->underrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
+
+            if (!self->playback.canMmap)
+            {
+                if (snd_pcm_recover( self->playback.pcm, -EPIPE, 0 ) < 0)
+                {
+                    PA_DEBUG(( "%s: [playback] non-MMAP-PCM failed recovering from XRUN, will restart Alsa\n", __FUNCTION__ ));
+                    ++ restartAlsa; /* did not manage to recover */
+                }
+            }
+            else
+                ++ restartAlsa; /* always restart MMAPed device */
         }
     }
     if( self->capture.pcm )
@@ -2398,10 +2553,25 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
         {
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->overrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
+
+            if (!self->capture.canMmap)
+            {
+                if (snd_pcm_recover( self->capture.pcm, -EPIPE, 0 ) < 0)
+                {
+                    PA_DEBUG(( "%s: [capture] non-MMAP-PCM failed recovering from XRUN, will restart Alsa\n", __FUNCTION__ ));
+                    ++ restartAlsa; /* did not manage to recover */
+                }
+            }
+            else
+                ++ restartAlsa; /* always restart MMAPed device */
         }
     }
 
-    PA_ENSURE( AlsaRestart( self ) );
+    if( restartAlsa )
+    {
+        PA_DEBUG(( "%s: restarting Alsa to recover from XRUN\n", __FUNCTION__ ));
+        PA_ENSURE( AlsaRestart( self ) );
+    }
 
 end:
     return result;
@@ -2410,7 +2580,7 @@ error:
 }
 
 /** Decide if we should continue polling for specified direction, eventually adjust the poll timeout.
- * 
+ *
  */
 static PaError ContinuePoll( const PaAlsaStream *stream, StreamDirection streamDir, int *pollTimeout, int *continuePoll )
 {
@@ -2481,7 +2651,7 @@ static void OnExit( void *data )
     stream->callback_finished = 1;  /* Let the outside world know stream was stopped in callback */
     PA_DEBUG(( "%s: Stopping ALSA handles\n", __FUNCTION__ ));
     AlsaStop( stream, stream->callbackAbort );
-    
+
     PA_DEBUG(( "%s: Stoppage\n", __FUNCTION__ ));
 
     /* Eventually notify user all buffers have played */
@@ -2552,7 +2722,7 @@ static void CalculateTimeInfo( PaAlsaStream *stream, PaStreamCallbackTimeInfo *t
 static PaError PaAlsaStreamComponent_EndProcessing( PaAlsaStreamComponent *self, unsigned long numFrames, int *xrun )
 {
     PaError result = paNoError;
-    int res;
+    int res = 0;
 
     /* @concern FullDuplex It is possible that only one direction is marked ready after polling, and processed
      * afterwards
@@ -2560,7 +2730,36 @@ static PaError PaAlsaStreamComponent_EndProcessing( PaAlsaStreamComponent *self,
     if( !self->ready )
         goto end;
 
-    res = snd_pcm_mmap_commit( self->pcm, self->offset, numFrames );
+    if( !self->canMmap && StreamDirection_Out == self->streamDir )
+    {
+        /* Play sound */
+        if( self->hostInterleaved )
+            res = snd_pcm_writei( self->pcm, self->nonMmapBuffer, numFrames );
+        else
+        {
+            void *bufs[self->numHostChannels];
+            int bufsize = snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 );
+            unsigned char *buffer = self->nonMmapBuffer;
+            int i;
+            for( i = 0; i < self->numHostChannels; ++i )
+            {
+                bufs[i] = buffer;
+                buffer += bufsize;
+            }
+            res = snd_pcm_writen( self->pcm, bufs, numFrames );
+        }
+    }
+
+    if( self->canMmap )
+        res = snd_pcm_mmap_commit( self->pcm, self->offset, numFrames );
+    else
+    {
+        /* using realloc for optimisation
+        free( self->nonMmapBuffer );
+        self->nonMmapBuffer = NULL;
+        */
+    }
+
     if( res == -EPIPE || res == -ESTRPIPE )
     {
         *xrun = 1;
@@ -2600,7 +2799,7 @@ static PaError PaAlsaStreamComponent_DoChannelAdaption( PaAlsaStreamComponent *s
     if( self->hostInterleaved )
     {
         int swidth = snd_pcm_format_size( self->nativeFormat, 1 );
-        unsigned char *buffer = ExtractAddress( self->channelAreas, self->offset );
+        unsigned char *buffer = self->canMmap ? ExtractAddress( self->channelAreas, self->offset ) : self->nonMmapBuffer;
 
         /* Start after the last user channel */
         p = buffer + self->numUserChannels * swidth;
@@ -2731,6 +2930,12 @@ static PaError PaAlsaStreamComponent_EndPolling( PaAlsaStreamComponent* self, st
         {
             *xrun = 1;
         }
+        else
+        if( revents & POLLHUP )
+        {
+            *xrun = 1;
+            PA_DEBUG(( "%s: revents has POLLHUP, processing as XRUN\n", __FUNCTION__ ));
+        }
         else
             self->ready = 1;
 
@@ -2807,13 +3012,14 @@ error:
  *
  * @param framesAvail Return the number of available frames
  * @param xrunOccurred Return whether an xrun has occurred
- */ 
+ */
 static PaError PaAlsaStream_WaitForFrames( PaAlsaStream *self, unsigned long *framesAvail, int *xrunOccurred )
 {
     PaError result = paNoError;
     int pollPlayback = self->playback.pcm != NULL, pollCapture = self->capture.pcm != NULL;
     int pollTimeout = self->pollTimeout;
-    int xrun = 0;
+    int xrun = 0, timeouts = 0;
+    int pollResults;
 
     assert( self );
     assert( framesAvail );
@@ -2859,32 +3065,68 @@ static PaError PaAlsaStream_WaitForFrames( PaAlsaStream *self, unsigned long *fr
             PA_ENSURE( PaAlsaStreamComponent_BeginPolling( &self->playback, playbackPfds ) );
             totalFds += self->playback.nfds;
         }
-        
-        if( poll( self->pfds, totalFds, pollTimeout ) < 0 )
+
+        pollResults = poll( self->pfds, totalFds, pollTimeout );
+
+        if( pollResults < 0 )
         {
             /*  XXX: Depend on preprocessor condition? */
             if( errno == EINTR )
             {
                 /* gdb */
+                Pa_Sleep( 1 ); /* avoid hot loop */
                 continue;
             }
 
             /* TODO: Add macro for checking system calls */
             PA_ENSURE( paInternalError );
         }
-
-        /* check the return status of our pfds */
-        if( pollCapture )
-        {
-            PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->capture, capturePfds, &pollCapture, &xrun ) );
-        }
-        if( pollPlayback )
+        else
+        if (pollResults == 0)
         {
-            PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->playback, playbackPfds, &pollPlayback, &xrun ) );
+
+           /* Suspended, paused or failed device can provide 0 poll results. To avoid deadloop in such situation
+            * we simply run counter 'timeouts' which detects 0 poll result and accumulates. As soon as 64 timouts
+            * are achieved we simply fail function with paTimedOut to notify waiting methods that device is not capable
+            * of providing audio data anymore and needs some corresponding recovery action.
+            * Note that 'timeouts' is reset to 0 if poll() managed to return non 0 results.
+            */
+
+            /*PA_DEBUG(( "%s: poll == 0 results, timed out, %d times left\n", __FUNCTION__, 64 - timeouts ));*/
+
+            ++ timeouts;
+            if (timeouts > 1) /* sometimes device times out, but normally once, so we do not sleep any time */
+            {
+                Pa_Sleep( 1 ); /* avoid hot loop */
+            }
+            /* not else ! */
+            if (timeouts >= 64) /* audio device not working, shall return error to notify waiters */
+            {
+				*framesAvail = 0; /* no frames available for processing */
+
+                PA_DEBUG(( "%s: poll timed out, returning error\n", __FUNCTION__, timeouts ));
+                PA_ENSURE( paTimedOut );
+            }
         }
-        if( xrun )
+        else
+        if (pollResults > 0)
         {
-            break;
+            /* reset timouts counter */
+            timeouts = 0;
+
+            /* check the return status of our pfds */
+            if( pollCapture )
+            {
+                PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->capture, capturePfds, &pollCapture, &xrun ) );
+            }
+            if( pollPlayback )
+            {
+                PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->playback, playbackPfds, &pollPlayback, &xrun ) );
+            }
+            if( xrun )
+            {
+                break;
+            }
         }
 
         /* @concern FullDuplex If only one of two pcms is ready we may want to compromise between the two.
@@ -2958,7 +3200,7 @@ error:
  *
  * Mmapped buffer space is acquired from ALSA, and registered with the buffer processor. Differences between the
  * number of host and user channels is taken into account.
- * 
+ *
  * @param numFrames On entrance the number of requested frames, on exit the number of contiguously accessible frames.
  */
 static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* self, PaUtilBufferProcessor* bp,
@@ -2980,13 +3222,31 @@ static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* se
         goto end;
     }
 
-    ENSURE_( snd_pcm_mmap_begin( self->pcm, &areas, &self->offset, numFrames ), paUnanticipatedHostError );
+    if( self->canMmap )
+    {
+        ENSURE_( snd_pcm_mmap_begin( self->pcm, &areas, &self->offset, numFrames ), paUnanticipatedHostError );
+        /* @concern ChannelAdaption Buffer address is recorded so we can do some channel adaption later */
+        self->channelAreas = (snd_pcm_channel_area_t *)areas;
+    }
+    else
+    {
+        unsigned int bufferSize = self->numHostChannels * snd_pcm_format_size( self->nativeFormat, *numFrames );
+        if (bufferSize > self->nonMmapBufferSize)
+        {
+            self->nonMmapBuffer = realloc(self->nonMmapBuffer, (self->nonMmapBufferSize = bufferSize));
+            if (!self->nonMmapBuffer)
+            {
+                result = paInsufficientMemory;
+                goto error;
+            }
+        }
+    }
 
     if( self->hostInterleaved )
     {
         int swidth = snd_pcm_format_size( self->nativeFormat, 1 );
 
-        p = buffer = ExtractAddress( areas, self->offset );
+        p = buffer = self->canMmap ? ExtractAddress( areas, self->offset ) : self->nonMmapBuffer;
         for( i = 0; i < self->numUserChannels; ++i )
         {
             /* We're setting the channels up to userChannels, but the stride will be hostChannels samples */
@@ -2996,16 +3256,52 @@ static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* se
     }
     else
     {
-        for( i = 0; i < self->numUserChannels; ++i )
+        if( self->canMmap )
         {
-            area = areas + i;
-            buffer = ExtractAddress( area, self->offset );
-            setChannel( bp, i, buffer, 1 );
+            for( i = 0; i < self->numUserChannels; ++i )
+            {
+                area = areas + i;
+                buffer = ExtractAddress( area, self->offset );
+                setChannel( bp, i, buffer, 1 );
+            }
+        }
+        else
+        {
+            unsigned int buf_per_ch_size = self->nonMmapBufferSize / self->numHostChannels;
+            buffer = self->nonMmapBuffer;
+            for( i = 0; i < self->numUserChannels; ++i )
+            {
+                setChannel( bp, i, buffer, 1 );
+                buffer += buf_per_ch_size;
+            }
         }
     }
 
-    /* @concern ChannelAdaption Buffer address is recorded so we can do some channel adaption later */
-    self->channelAreas = (snd_pcm_channel_area_t *)areas;
+    if( !self->canMmap && StreamDirection_In == self->streamDir )
+    {
+        /* Read sound */
+        int res;
+        if( self->hostInterleaved )
+            res = snd_pcm_readi( self->pcm, self->nonMmapBuffer, *numFrames );
+        else
+        {
+            void *bufs[self->numHostChannels];
+            unsigned int buf_per_ch_size = self->nonMmapBufferSize / self->numHostChannels;
+            unsigned char *buffer = self->nonMmapBuffer;
+            int i;
+            for( i = 0; i < self->numHostChannels; ++i )
+            {
+                bufs[i] = buffer;
+                buffer += buf_per_ch_size;
+            }
+            res = snd_pcm_readn( self->pcm, bufs, *numFrames );
+        }
+        if( res == -EPIPE || res == -ESTRPIPE )
+        {
+            *xrun = 1;
+            *numFrames = 0;
+        }
+    }
 
 end:
 error:
@@ -3042,13 +3338,13 @@ static PaError PaAlsaStream_SetUpBuffers( PaAlsaStream* self, unsigned long* num
     if( self->capture.pcm && self->capture.ready )
     {
         captureFrames = *numFrames;
-        PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->capture, &self->bufferProcessor, &captureFrames, 
+        PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->capture, &self->bufferProcessor, &captureFrames,
                     &xrun ) );
     }
     if( self->playback.pcm && self->playback.ready )
     {
         playbackFrames = *numFrames;
-        PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->playback, &self->bufferProcessor, &playbackFrames, 
+        PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->playback, &self->bufferProcessor, &playbackFrames,
                     &xrun ) );
     }
     if( xrun )
@@ -3073,7 +3369,7 @@ static PaError PaAlsaStream_SetUpBuffers( PaAlsaStream* self, unsigned long* num
         {
             PA_DEBUG(( "%s: playbackFrames: %lu, playback.ready: %d\n", __FUNCTION__, playbackFrames, self->playback.ready ));
         }
-        
+
         commonFrames = 0;
         goto end;
     }
@@ -3110,7 +3406,7 @@ static PaError PaAlsaStream_SetUpBuffers( PaAlsaStream* self, unsigned long* num
             PaUtil_SetNoOutput( &self->bufferProcessor );
         }
     }
-    
+
 end:
     *numFrames = commonFrames;
 error:
@@ -3156,7 +3452,7 @@ static void *CallbackThreadFunc( void *userData )
     if( stream->primeBuffers )
     {
         snd_pcm_sframes_t avail;
-        
+
         if( stream->playback.pcm )
             ENSURE_( snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError );
         if( stream->capture.pcm && !stream->pcmsSynced )
@@ -3199,7 +3495,7 @@ static void *CallbackThreadFunc( void *userData )
             stream->callbackAbort = (paAbort == callbackResult);
             if( stream->callbackAbort ||
                     /** @concern BlockAdaption: Go on if adaption buffers are empty */
-                    PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) 
+                    PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) )
             {
                 goto end;
             }
@@ -3386,7 +3682,7 @@ static PaError WriteStream( PaStream* s, const void *buffer, unsigned long frame
     snd_pcm_uframes_t framesGot, framesAvail;
     const void *userBuffer;
     snd_pcm_t *save = stream->capture.pcm;
-    
+
     assert( stream );
 
     PA_UNLESS( stream->playback.pcm, paCanNotWriteToAnInputOnlyStream );
@@ -3519,10 +3815,31 @@ void PaAlsa_EnableWatchdog( PaStream *s, int enable )
 }
 #endif
 
+static PaError GetAlsaStreamPointer( PaStream* s, PaAlsaStream** stream )
+{
+    PaError result = paNoError;
+    PaUtilHostApiRepresentation* hostApi;
+    PaAlsaHostApiRepresentation* alsaHostApi;
+
+    PA_ENSURE( PaUtil_ValidateStreamPointer( s ) );
+    PA_ENSURE( PaUtil_GetHostApiRepresentation( &hostApi, paALSA ) );
+    alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi;
+
+    PA_UNLESS( PA_STREAM_REP( s )->streamInterface == &alsaHostApi->callbackStreamInterface
+            || PA_STREAM_REP( s )->streamInterface == &alsaHostApi->blockingStreamInterface,
+        paIncompatibleStreamHostApi );
+
+    *stream = (PaAlsaStream*)s;
+error:
+    return paNoError;
+}
+
 PaError PaAlsa_GetStreamInputCard(PaStream* s, int* card) {
-    PaAlsaStream *stream = (PaAlsaStream *) s;
-    snd_pcm_info_t* pcmInfo;
+    PaAlsaStream *stream;
     PaError result = paNoError;
+    snd_pcm_info_t* pcmInfo;
+
+    PA_ENSURE( GetAlsaStreamPointer( s, &stream ) );
 
     /* XXX: More descriptive error? */
     PA_UNLESS( stream->capture.pcm, paDeviceUnavailable );
@@ -3536,9 +3853,11 @@ error:
 }
 
 PaError PaAlsa_GetStreamOutputCard(PaStream* s, int* card) {
-    PaAlsaStream *stream = (PaAlsaStream *) s;
-    snd_pcm_info_t* pcmInfo;
+    PaAlsaStream *stream;
     PaError result = paNoError;
+    snd_pcm_info_t* pcmInfo;
+
+    PA_ENSURE( GetAlsaStreamPointer( s, &stream ) );
 
     /* XXX: More descriptive error? */
     PA_UNLESS( stream->playback.pcm, paDeviceUnavailable );
@@ -3550,3 +3869,9 @@ PaError PaAlsa_GetStreamOutputCard(PaStream* s, int* card) {
 error:
     return result;
 }
+
+PaError PaAlsa_SetRetriesBusy( int retries )
+{
+    busyRetries_ = retries;
+    return paNoError;
+}
diff --git a/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp b/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
index 8dfefbd67..08c55eacf 100644
--- a/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
+++ b/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
@@ -156,7 +156,7 @@
 // We only need IASIOThiscallResolver at all if we are on Win32. For other
 // platforms we simply bypass the IASIOThiscallResolver definition to allow us
 // to be safely #include'd whatever the platform to keep client code portable
-#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64)
 
 
 // If microsoft compiler we can call IASIO directly so IASIOThiscallResolver
@@ -276,6 +276,7 @@ extern IASIO* theAsioDriver;
                           "call *"#funcOffset"(%%edx)\n\t"                  \
                           :"=a"(resultName) /* Output Operands */           \
                           :"c"(thisPtr)     /* Input Operands */            \
+                          : "%edx" /* Clobbered Registers */                \
                          );                                                 \
 
 
@@ -286,6 +287,7 @@ extern IASIO* theAsioDriver;
                           :                 /* Output Operands */           \
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
+                          : "%edx" /* Clobbered Registers */                \
                          );                                                 \
 
 
@@ -296,20 +298,25 @@ extern IASIO* theAsioDriver;
                           :"=a"(resultName) /* Output Operands */           \
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
+                          : "%edx" /* Clobbered Registers */                \
                           );                                                \
 
 
 #define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 )   \
-    __asm__ __volatile__ ("pushl 4(%1)\n\t"                                 \
-                          "pushl (%1)\n\t"                                  \
-                          "movl (%2), %%edx\n\t"                            \
-                          "call *"#funcOffset"(%%edx);\n\t"                 \
-                          :"=a"(resultName) /* Output Operands */           \
-                          :"a"(&param1),    /* Input Operands */            \
-                           /* Note: Using "r" above instead of "a" fails */ \
-                           /* when using GCC 3.3.3, and maybe later versions*/\
-                           "c"(thisPtr)                                     \
-                          );                                                \
+    do {                                                                    \
+    double param1f64 = param1; /* Cast explicitly to double */              \
+    double *param1f64Ptr = &param1f64; /* Make pointer to address */        \
+     __asm__ __volatile__ ("pushl 4(%1)\n\t"                                \
+                           "pushl (%1)\n\t"                                 \
+                           "movl (%2), %%edx\n\t"                           \
+                           "call *"#funcOffset"(%%edx);\n\t"                \
+                           : "=a"(resultName) /* Output Operands */         \
+                           : "r"(param1f64Ptr),  /* Input Operands */       \
+                           "c"(thisPtr),                                    \
+                           "m"(*param1f64Ptr) /* Using address */           \
+                           : "%edx" /* Clobbered Registers */               \
+                           );                                               \
+    } while (0);                                                            \
 
 
 #define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 )  \
@@ -321,6 +328,7 @@ extern IASIO* theAsioDriver;
                           :"r"(param2),     /* Input Operands */            \
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
+                          : "%edx" /* Clobbered Registers */                \
                           );                                                \
 
 
@@ -337,6 +345,7 @@ extern IASIO* theAsioDriver;
                            "r"(param2),                                     \
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
+                          : "%edx" /* Clobbered Registers */                \
                           );                                                \
 
 #endif
diff --git a/portaudio/src/hostapi/asio/iasiothiscallresolver.h b/portaudio/src/hostapi/asio/iasiothiscallresolver.h
index 2ecfed799..21d53b320 100644
--- a/portaudio/src/hostapi/asio/iasiothiscallresolver.h
+++ b/portaudio/src/hostapi/asio/iasiothiscallresolver.h
@@ -111,7 +111,7 @@
 // We only need IASIOThiscallResolver at all if we are on Win32. For other
 // platforms we simply bypass the IASIOThiscallResolver definition to allow us
 // to be safely #include'd whatever the platform to keep client code portable
-#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64)
 
 
 // If microsoft compiler we can call IASIO directly so IASIOThiscallResolver
diff --git a/portaudio/src/hostapi/asio/pa_asio.cpp b/portaudio/src/hostapi/asio/pa_asio.cpp
index 4b3fb68e0..f4786ee3e 100644
--- a/portaudio/src/hostapi/asio/pa_asio.cpp
+++ b/portaudio/src/hostapi/asio/pa_asio.cpp
@@ -1,10 +1,12 @@
 /*
- * $Id: pa_asio.cpp 1230 2007-06-15 16:16:33Z rossb $
+ * $Id: pa_asio.cpp 1525 2010-07-14 06:45:25Z rossb $
  * Portable Audio I/O Library for ASIO Drivers
  *
  * Author: Stephane Letz
  * Based on the Open Source API proposed by Ross Bencina
  * Copyright (c) 2000-2002 Stephane Letz, Phil Burk, Ross Bencina
+ * Blocking i/o implementation by Sven Fischer, Institute of Hearing
+ * Technology and Audiology (www.hoertechnik-audiologie.de)
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -71,18 +73,18 @@
 */
 
 /** @file
-	@ingroup hostapi_src
+    @ingroup hostapi_src
 
     Note that specific support for paInputUnderflow, paOutputOverflow and
     paNeverDropInput is not necessary or possible with this driver due to the
     synchronous full duplex double-buffered architecture of ASIO.
 
-    @todo check that CoInitialize()/CoUninitialize() are always correctly
-        paired, even in error cases.
-
     @todo implement host api specific extension to set i/o buffer sizes in frames
 
-    @todo implement ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable
+    @todo review ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable
+
+    @todo review Blocking i/o latency computations in OpenStream(), changing ring 
+          buffer to a non-power-of-two structure could reduce blocking i/o latency.
 
     @todo implement IsFormatSupported
 
@@ -120,6 +122,7 @@
 #include <assert.h>
 #include <string.h>
 //#include <values.h>
+#include <new>
 
 #include <windows.h>
 #include <mmsystem.h>
@@ -133,6 +136,7 @@
 #include "pa_cpuload.h"
 #include "pa_process.h"
 #include "pa_debugprint.h"
+#include "pa_ringbuffer.h"
 
 /* This version of pa_asio.cpp is currently only targetted at Win32,
    It would require a few tweaks to work with pre-OS X Macintosh.
@@ -164,16 +168,30 @@
 #endif
 */
 
-/* external references */
-extern AsioDrivers* asioDrivers ;
-bool loadAsioDriver(char *name);
 
+/* winmm.lib is needed for timeGetTime() (this is in winmm.a if you're using gcc) */
+#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
+#pragma comment(lib, "winmm.lib")
+#endif
 
-/* We are trying to be compatible with CARBON but this has not been thoroughly tested. */
-/* not tested at all since new code was introduced. */
-#define CARBON_COMPATIBLE  (0)
+
+/* external reference to ASIO SDK's asioDrivers.
+
+ This is a bit messy because we want to explicitly manage 
+ allocation/deallocation of this structure, but some layers of the SDK 
+ which we currently use (eg the implementation in asio.cpp) still
+ use this global version.
+
+ For now we keep it in sync with our local instance in the host
+ API representation structure, but later we should be able to remove
+ all dependence on it.
+*/
+extern AsioDrivers* asioDrivers;
 
 
+/* We are trying to be compatible with CARBON but this has not been thoroughly tested. */
+/* not tested at all since new V19 code was introduced. */
+#define CARBON_COMPATIBLE  (0)
 
 
 /* prototypes for functions declared in this file */
@@ -206,6 +224,14 @@ static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long
 static signed long GetStreamReadAvailable( PaStream* stream );
 static signed long GetStreamWriteAvailable( PaStream* stream );
 
+/* Blocking i/o callback function. */
+static int BlockingIoPaCallback(const void                     *inputBuffer    ,
+                                      void                     *outputBuffer   ,
+                                      unsigned long             framesPerBuffer,
+                                const PaStreamCallbackTimeInfo *timeInfo       ,
+                                      PaStreamCallbackFlags     statusFlags    ,
+                                      void                     *userData       );
+
 /* our ASIO callback functions */
 
 static void bufferSwitch(long index, ASIOBool processNow);
@@ -270,12 +296,12 @@ static const char* PaAsio_GetAsioErrorText( ASIOError asioError )
 
 // Atomic increment and decrement operations
 #if MAC
-	/* need to be implemented on Mac */
-	inline long PaAsio_AtomicIncrement(volatile long* v) {return ++(*const_cast<long*>(v));}
-	inline long PaAsio_AtomicDecrement(volatile long* v) {return --(*const_cast<long*>(v));}
+    /* need to be implemented on Mac */
+    inline long PaAsio_AtomicIncrement(volatile long* v) {return ++(*const_cast<long*>(v));}
+    inline long PaAsio_AtomicDecrement(volatile long* v) {return --(*const_cast<long*>(v));}
 #elif WINDOWS
-	inline long PaAsio_AtomicIncrement(volatile long* v) {return InterlockedIncrement(const_cast<long*>(v));}
-	inline long PaAsio_AtomicDecrement(volatile long* v) {return InterlockedDecrement(const_cast<long*>(v));}
+    inline long PaAsio_AtomicIncrement(volatile long* v) {return InterlockedIncrement(const_cast<long*>(v));}
+    inline long PaAsio_AtomicDecrement(volatile long* v) {return InterlockedDecrement(const_cast<long*>(v));}
 #endif
 
 
@@ -300,6 +326,7 @@ typedef struct
 
     PaUtilAllocationGroup *allocations;
 
+    AsioDrivers *asioDrivers;
     void *systemSpecific;
     
     /* the ASIO C API only allows one ASIO driver to be open at a time,
@@ -323,7 +350,7 @@ PaAsioHostApiRepresentation;
     Retrieve <driverCount> driver names from ASIO, returned in a char**
     allocated in <group>.
 */
-static char **GetAsioDriverNames( PaUtilAllocationGroup *group, long driverCount )
+static char **GetAsioDriverNames( PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount )
 {
     char **result = 0;
     int i;
@@ -341,7 +368,7 @@ static char **GetAsioDriverNames( PaUtilAllocationGroup *group, long driverCount
     for( i=0; i<driverCount; ++i )
         result[i] = result[0] + (32 * i);
 
-    asioDrivers->getDriverNames( result, driverCount );
+    asioHostApi->asioDrivers->getDriverNames( result, driverCount );
 
 error:
     return result;
@@ -917,7 +944,7 @@ PaAsioDeviceInfo;
 
 
 PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device,
-		long *minLatency, long *maxLatency, long *preferredLatency, long *granularity )
+        long *minLatency, long *maxLatency, long *preferredLatency, long *granularity )
 {
     PaError result;
     PaUtilHostApiRepresentation *hostApi;
@@ -944,23 +971,45 @@ PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device,
     return result;
 }
 
-
+/* Unload whatever we loaded in LoadAsioDriver().
+   Also balance the call to CoInitialize(0).
+*/
+static void UnloadAsioDriver( void )
+{
+	ASIOExit();
+	CoUninitialize();
+}
 
 /*
     load the asio driver named by <driverName> and return statistics about
     the driver in info. If no error occurred, the driver will remain open
-    and must be closed by the called by calling ASIOExit() - if an error
-    is returned the driver will already be closed.
+    and must be closed by the called by calling UnloadAsioDriver() - if an error
+    is returned the driver will already be unloaded.
 */
-static PaError LoadAsioDriver( const char *driverName,
+static PaError LoadAsioDriver( PaAsioHostApiRepresentation *asioHostApi, const char *driverName,
         PaAsioDriverInfo *driverInfo, void *systemSpecific )
 {
     PaError result = paNoError;
     ASIOError asioError;
     int asioIsInitialized = 0;
 
-    if( !loadAsioDriver( const_cast<char*>(driverName) ) )
+    /* 
+	ASIO uses CoCreateInstance() to load a driver. That requires that
+	CoInitialize(0) be called for every thread that loads a driver.
+	It is OK to call CoInitialize(0) multiple times form one thread as long
+	as it is balanced by a call to CoUninitialize(). See UnloadAsioDriver().
+
+	The V18 version called CoInitialize() starting on 2/19/02.
+	That was removed from PA V19 for unknown reasons.
+	Phil Burk added it back on 6/27/08 so that JSyn would work.
+    */
+	CoInitialize( 0 );
+
+    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(driverName) ) )
     {
+		/* If this returns an error then it might be because CoInitialize(0) was removed.
+		  It should be called right before this.
+	    */
         result = paUnanticipatedHostError;
         PA_ASIO_SET_LAST_HOST_ERROR( 0, "Failed to load ASIO driver" );
         goto error;
@@ -1006,8 +1055,10 @@ static PaError LoadAsioDriver( const char *driverName,
 
 error:
     if( asioIsInitialized )
-        ASIOExit();
-
+	{
+		ASIOExit();
+	}
+	CoUninitialize();
     return result;
 }
 
@@ -1039,6 +1090,8 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
         goto error;
     }
 
+    asioHostApi->asioDrivers = 0; /* avoid surprises in our error handler below */
+
     asioHostApi->allocations = PaUtil_CreateAllocationGroup();
     if( !asioHostApi->allocations )
     {
@@ -1046,6 +1099,25 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
         goto error;
     }
 
+    /* Allocate the AsioDrivers() driver list (class from ASIO SDK) */
+    try
+    {
+        asioHostApi->asioDrivers = new AsioDrivers(); /* calls CoInitialize(0) */
+    } 
+    catch (std::bad_alloc)
+    {
+        asioHostApi->asioDrivers = 0;
+    }
+    /* some implementations of new (ie MSVC, see http://support.microsoft.com/?kbid=167733)
+       don't throw std::bad_alloc, so we also explicitly test for a null return. */
+    if( asioHostApi->asioDrivers == 0 )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    asioDrivers = asioHostApi->asioDrivers; /* keep SDK global in sync until we stop depending on it */
+
     asioHostApi->systemSpecific = 0;
     asioHostApi->openAsioDeviceIndex = paNoDevice;
 
@@ -1059,23 +1131,19 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     #ifdef WINDOWS
         /* use desktop window as system specific ptr */
         asioHostApi->systemSpecific = GetDesktopWindow();
-        CoInitialize(NULL);
     #endif
 
-    /* MUST BE CHECKED : to force fragments loading on Mac */
-    loadAsioDriver( "dummy" ); 
-
     /* driverCount is the number of installed drivers - not necessarily
         the number of installed physical devices. */
     #if MAC
-        driverCount = asioDrivers->getNumFragments();
+        driverCount = asioHostApi->asioDrivers->getNumFragments();
     #elif WINDOWS
-        driverCount = asioDrivers->asioGetNumDev();
+        driverCount = asioHostApi->asioDrivers->asioGetNumDev();
     #endif
 
     if( driverCount > 0 )
     {
-        names = GetAsioDriverNames( asioHostApi->allocations, driverCount );
+        names = GetAsioDriverNames( asioHostApi, asioHostApi->allocations, driverCount );
         if( !names )
         {
             result = paInsufficientMemory;
@@ -1102,7 +1170,7 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
             goto error;
         }
 
-		IsDebuggerPresent_ = GetProcAddress( LoadLibrary( "Kernel32.dll" ), "IsDebuggerPresent" );
+        IsDebuggerPresent_ = (IsDebuggerPresentPtr)GetProcAddress( LoadLibrary( "Kernel32.dll" ), "IsDebuggerPresent" );
 
         for( i=0; i < driverCount; ++i )
         {
@@ -1120,7 +1188,6 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 || strcmp (names[i],"ASIO Multimedia Driver")          == 0
                 || strncmp(names[i],"Premiere",8)                      == 0   //"Premiere Elements Windows Sound 1.0"
                 || strncmp(names[i],"Adobe",5)                         == 0   //"Adobe Default Windows Sound 1.5"
-                || strncmp(names[i],"ReaRoute ASIO",13)                == 0   //Reaper www.reaper.fm <- fix your stuff man.
                )
             {
                 PA_DEBUG(("BLACKLISTED!!!\n"));
@@ -1141,7 +1208,7 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
 
 
             /* Attempt to load the asio driver... */
-            if( LoadAsioDriver( names[i], &paAsioDriverInfo, asioHostApi->systemSpecific ) == paNoError )
+            if( LoadAsioDriver( asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific ) == paNoError )
             {
                 PaAsioDeviceInfo *asioDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ];
                 PaDeviceInfo *deviceInfo = &asioDeviceInfo->commonDeviceInfo;
@@ -1233,7 +1300,7 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 if( !asioDeviceInfo->asioChannelInfos )
                 {
                     result = paInsufficientMemory;
-                    goto error;
+                    goto error_unload;
                 }
 
                 int a;
@@ -1246,7 +1313,7 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     {
                         result = paUnanticipatedHostError;
                         PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
-                        goto error;
+                        goto error_unload;
                     }
                 }
 
@@ -1259,13 +1326,13 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     {
                         result = paUnanticipatedHostError;
                         PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
-                        goto error;
+                        goto error_unload;
                     }
                 }
 
 
                 /* unload the driver */
-                ASIOExit();
+                UnloadAsioDriver();
 
                 (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo;
                 ++(*hostApi)->info.deviceCount;
@@ -1302,6 +1369,9 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
 
     return result;
 
+error_unload:
+	UnloadAsioDriver();
+
 error:
     if( asioHostApi )
     {
@@ -1311,6 +1381,9 @@ error:
             PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
         }
 
+        delete asioHostApi->asioDrivers;
+        asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
+
         PaUtil_FreeMemory( asioHostApi );
     }
     return result;
@@ -1323,7 +1396,7 @@ static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 
     /*
         IMPLEMENT ME:
-            - clean up any resources not handled by the allocation group
+            - clean up any resources not handled by the allocation group (need to review if there are any)
     */
 
     if( asioHostApi->allocations )
@@ -1332,6 +1405,9 @@ static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
         PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
     }
 
+    delete asioHostApi->asioDrivers; /* calls CoUninitialize() */
+    asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
+
     PaUtil_FreeMemory( asioHostApi );
 }
 
@@ -1418,7 +1494,7 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
     /* if an ASIO device is open we can only get format information for the currently open device */
 
     if( asioHostApi->openAsioDeviceIndex != paNoDevice 
-			&& asioHostApi->openAsioDeviceIndex != asioDeviceIndex )
+            && asioHostApi->openAsioDeviceIndex != asioDeviceIndex )
     {
         return paDeviceUnavailable;
     }
@@ -1430,7 +1506,7 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
     /* open the device if it's not already open */
     if( asioHostApi->openAsioDeviceIndex == paNoDevice )
     {
-        result = LoadAsioDriver( asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+        result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
                 driverInfo, asioHostApi->systemSpecific );
         if( result != paNoError )
             return result;
@@ -1468,7 +1544,7 @@ done:
     /* close the device if it wasn't already open */
     if( asioHostApi->openAsioDeviceIndex == paNoDevice )
     {
-        ASIOExit(); /* not sure if we should check for errors here */
+        UnloadAsioDriver(); /* not sure if we should check for errors here */
     }
 
     if( result == paNoError )
@@ -1479,6 +1555,40 @@ done:
 
 
 
+/** A data structure specifically for storing blocking i/o related data. */
+typedef struct PaAsioStreamBlockingState
+{
+    int stopFlag; /**< Flag indicating that block processing is to be stopped. */
+
+    unsigned long writeBuffersRequested; /**< The number of available output buffers, requested by the #WriteStream() function. */
+    unsigned long readFramesRequested;   /**< The number of available input frames, requested by the #ReadStream() function. */
+
+    int writeBuffersRequestedFlag; /**< Flag to indicate that #WriteStream() has requested more output buffers to be available. */
+    int readFramesRequestedFlag;   /**< Flag to indicate that #ReadStream() requires more input frames to be available. */
+
+    HANDLE writeBuffersReadyEvent; /**< Event to signal that requested output buffers are available. */
+    HANDLE readFramesReadyEvent;   /**< Event to signal that requested input frames are available. */
+
+    void *writeRingBufferData; /**< The actual ring buffer memory, used by the output ring buffer. */
+    void *readRingBufferData;  /**< The actual ring buffer memory, used by the input ring buffer. */
+
+    PaUtilRingBuffer writeRingBuffer; /**< Frame-aligned blocking i/o ring buffer to store output data (interleaved user format). */
+    PaUtilRingBuffer readRingBuffer;  /**< Frame-aligned blocking i/o ring buffer to store input data (interleaved user format). */
+
+    long writeRingBufferInitialFrames; /**< The initial number of silent frames within the output ring buffer. */
+
+    const void **writeStreamBuffer; /**< Temp buffer, used by #WriteStream() for handling non-interleaved data. */
+    void **readStreamBuffer; /**< Temp buffer, used by #ReadStream() for handling non-interleaved data. */
+
+    PaUtilBufferProcessor bufferProcessor; /**< Buffer processor, used to handle the blocking i/o ring buffers. */
+
+    int outputUnderflowFlag; /**< Flag to signal an output underflow from within the callback function. */
+    int inputOverflowFlag; /**< Flag to signal an input overflow from within the callback function. */
+}
+PaAsioStreamBlockingState;
+
+
+
 /* PaAsioStream - a stream data structure specifically for this implementation */
 
 typedef struct PaAsioStream
@@ -1515,6 +1625,7 @@ typedef struct PaAsioStream
     HANDLE completedBuffersPlayedEvent;
 
     bool streamFinishedCallbackCalled;
+    int isStopped;
     volatile int isActive;
     volatile bool zeroOutput; /* all future calls to the callback will output silence */
 
@@ -1522,6 +1633,8 @@ typedef struct PaAsioStream
     volatile long reenterError;
 
     PaStreamCallbackFlags callbackFlags;
+
+    PaAsioStreamBlockingState *blockingState; /**< Blocking i/o data struct, or NULL when using callback interface. */
 }
 PaAsioStream;
 
@@ -1621,15 +1734,15 @@ static PaError ValidateAsioSpecificStreamInfo(
         int deviceChannelCount,
         int **channelSelectors )
 {
-	if( streamInfo )
-	{
-	    if( streamInfo->size != sizeof( PaAsioStreamInfo )
-	            || streamInfo->version != 1 )
-	    {
-	        return paIncompatibleHostApiSpecificStreamInfo;
-	    }
+    if( streamInfo )
+    {
+        if( streamInfo->size != sizeof( PaAsioStreamInfo )
+                || streamInfo->version != 1 )
+        {
+            return paIncompatibleHostApiSpecificStreamInfo;
+        }
 
-	    if( streamInfo->flags & paAsioUseChannelSelectors )
+        if( streamInfo->flags & paAsioUseChannelSelectors )
             *channelSelectors = streamInfo->channelSelectors;
 
         if( !(*channelSelectors) )
@@ -1641,9 +1754,101 @@ static PaError ValidateAsioSpecificStreamInfo(
                 return paInvalidChannelCount;
              }           
         }
-	}
+    }
+
+    return paNoError;
+}
+
 
-	return paNoError;
+static bool IsUsingExternalClockSource()
+{
+    bool result = false;
+    ASIOError asioError;
+    ASIOClockSource clocks[32];
+    long numSources=32;
+
+    /* davidv: listing ASIO Clock sources. there is an ongoing investigation by
+       me about whether or not to call ASIOSetSampleRate if an external Clock is
+       used. A few drivers expected different things here */
+    
+    asioError = ASIOGetClockSources(clocks, &numSources);
+    if( asioError != ASE_OK ){
+        PA_DEBUG(("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    }else{
+        PA_DEBUG(("INFO ASIOGetClockSources listing %d clocks\n", numSources ));
+        for (int i=0;i<numSources;++i){
+            PA_DEBUG(("ASIOClockSource%d %s current:%d\n", i, clocks[i].name, clocks[i].isCurrentSource ));
+           
+            if (clocks[i].isCurrentSource)
+                result = true;
+        }
+    }
+
+    return result;
+}
+
+
+static PaError ValidateAndSetSampleRate( double sampleRate )
+{
+    PaError result = paNoError;
+    ASIOError asioError;
+
+    // check that the device supports the requested sample rate 
+
+    asioError = ASIOCanSampleRate( sampleRate );
+    PA_DEBUG(("ASIOCanSampleRate(%f):%d\n", sampleRate, asioError ));
+
+    if( asioError != ASE_OK )
+    {
+        result = paInvalidSampleRate;
+        PA_DEBUG(("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        goto error;
+    }
+
+    // retrieve the current sample rate, we only change to the requested
+    // sample rate if the device is not already in that rate.
+
+    ASIOSampleRate oldRate;
+    asioError = ASIOGetSampleRate(&oldRate);
+    if( asioError != ASE_OK )
+    {
+        result = paInvalidSampleRate;
+        PA_DEBUG(("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        goto error;
+    }
+    PA_DEBUG(("ASIOGetSampleRate:%f\n",oldRate));
+
+    if (oldRate != sampleRate){
+        /* Set sample rate */
+
+        PA_DEBUG(("before ASIOSetSampleRate(%f)\n",sampleRate));
+
+        /*
+            If you have problems with some drivers when externally clocked, 
+            try switching on the following line and commenting out the one after it.
+            See IsUsingExternalClockSource() for more info.
+        */
+        //if( IsUsingExternalClockSource() ){
+        if( false ){
+            asioError = ASIOSetSampleRate( 0 );
+        }else{
+            asioError = ASIOSetSampleRate( sampleRate );
+        }
+        if( asioError != ASE_OK )
+        {
+            result = paInvalidSampleRate;
+            PA_DEBUG(("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+            goto error;
+        }
+        PA_DEBUG(("after ASIOSetSampleRate(%f)\n",sampleRate));
+    }
+    else
+    {
+        PA_DEBUG(("No Need to change SR\n"));
+    }
+
+error:
+    return result;
 }
 
 
@@ -1678,23 +1883,38 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     PaAsioDriverInfo *driverInfo;
     int *inputChannelSelectors = 0;
     int *outputChannelSelectors = 0;
-    bool isExternal = false;
+
+    /* Are we using blocking i/o interface? */
+    int usingBlockingIo = ( !streamCallback ) ? TRUE : FALSE;
+    /* Blocking i/o stuff */
+    long lBlockingBufferSize     = 0; /* Desired ring buffer size in samples. */
+    long lBlockingBufferSizePow2 = 0; /* Power-of-2 rounded ring buffer size. */
+    long lBytesPerFrame          = 0; /* Number of bytes per input/output frame. */
+    int blockingWriteBuffersReadyEventInitialized = 0; /* Event init flag. */
+    int blockingReadFramesReadyEventInitialized   = 0; /* Event init flag. */
+
+    int callbackBufferProcessorInited = FALSE;
+    int blockingBufferProcessorInited = FALSE;
 
     /* unless we move to using lower level ASIO calls, we can only have
         one device open at a time */
-    if( asioHostApi->openAsioDeviceIndex != paNoDevice ){
+    if( asioHostApi->openAsioDeviceIndex != paNoDevice )
+    {
         PA_DEBUG(("OpenStream paDeviceUnavailable\n"));
         return paDeviceUnavailable;
     }
 
+    assert( theAsioStream == 0 );
+
     if( inputParameters && outputParameters )
     {
         /* full duplex ASIO stream must use the same device for input and output */
 
-        if( inputParameters->device != outputParameters->device ){
+        if( inputParameters->device != outputParameters->device )
+        {
             PA_DEBUG(("OpenStream paBadIODeviceCombination\n"));
             return paBadIODeviceCombination;
-    }
+        }
     }
 
     if( inputParameters )
@@ -1762,12 +1982,12 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     /* NOTE: we load the driver and use its current settings
         rather than the ones in our device info structure which may be stale */
 
-    result = LoadAsioDriver( asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+    result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
             driverInfo, asioHostApi->systemSpecific );
     if( result == paNoError )
         asioIsInitialized = 1;
     else{
-        PA_DEBUG(("OpenStream ERROR1\n"));
+        PA_DEBUG(("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result));
         goto error;
     }
 
@@ -1793,76 +2013,9 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         }
     }
 
-
-    /* davidv: listing ASIO Clock sources, there is an ongoing investigation by
-       me about whether or not call ASIOSetSampleRate if an external Clock is
-       used. A few drivers expected different things here */
-    {
-        ASIOClockSource clocks[32];
-        long numSources=32;
-        asioError = ASIOGetClockSources(clocks, &numSources);
-        if( asioError != ASE_OK ){
-            PA_DEBUG(("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText(asioError) ));
-        }else{
-            PA_DEBUG(("INFO ASIOGetClockSources listing %d clocks\n", numSources ));
-            for (int i=0;i<numSources;++i){
-                PA_DEBUG(("ASIOClockSource%d %s current:%d\n", i,clocks[i].name, clocks[i].isCurrentSource ));
-               
-                /*
-                  If you have problems with some drivers when externally clocked, 
-                  uncomment the next two lines
-                 */
-                //if (clocks[i].isCurrentSource)
-                //    isExternal = true;
-            }
-        }
-    }
-
-    // check that the device supports the requested sample rate 
-
-    asioError = ASIOCanSampleRate( sampleRate );
-    PA_DEBUG(("ASIOCanSampleRate(%f):%d\n",sampleRate, asioError ));
-
-    if( asioError != ASE_OK )
-    {
-        result = paInvalidSampleRate;
-        PA_DEBUG(("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
-        goto error;
-    }
-
-
-    // retrieve the current sample rate, we only change to the requested
-    // sample rate if the device is not already in that rate.
-
-    ASIOSampleRate oldRate;
-    asioError = ASIOGetSampleRate(&oldRate);
-    if( asioError != ASE_OK )
-    {
-        result = paInvalidSampleRate;
-        PA_DEBUG(("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    result = ValidateAndSetSampleRate( sampleRate );
+    if( result != paNoError )
         goto error;
-    }
-    PA_DEBUG(("ASIOGetSampleRate:%f\n",oldRate));
-
-    if (oldRate != sampleRate){
-
-        PA_DEBUG(("before ASIOSetSampleRate(%f)\n",sampleRate));
-
-        asioError = ASIOSetSampleRate( isExternal?0:sampleRate );
-        /* Set sample rate */
-        if( asioError != ASE_OK )
-        {
-            result = paInvalidSampleRate;
-            PA_DEBUG(("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
-            goto error;
-        }
-        PA_DEBUG(("after ASIOSetSampleRate(%f)\n",sampleRate));
-    }
-    else
-    {
-        PA_DEBUG(("No Need to change SR\n"));
-    }
-
 
     /*
         IMPLEMENT ME:
@@ -1884,6 +2037,8 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         PA_DEBUG(("OpenStream ERROR5\n"));
         goto error;
     }
+    stream->blockingState = NULL; /* Blocking i/o not initialized, yet. */
+
 
     stream->completedBuffersPlayedEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
     if( stream->completedBuffersPlayedEvent == NULL )
@@ -1900,15 +2055,19 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->asioChannelInfos = 0; /* for deallocation in error */
     stream->bufferPtrs = 0; /* for deallocation in error */
 
-    if( streamCallback )
+    /* Using blocking i/o interface... */
+    if( usingBlockingIo )
     {
+        /* Blocking i/o is implemented by running callback mode, using a special blocking i/o callback. */
+        streamCallback = BlockingIoPaCallback; /* Setup PA to use the ASIO blocking i/o callback. */
+        userData       = &theAsioStream;       /* The callback user data will be the PA ASIO stream. */
         PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &asioHostApi->callbackStreamInterface, streamCallback, userData );
+                                               &asioHostApi->blockingStreamInterface, streamCallback, userData );
     }
-    else
+    else /* Using callback interface... */
     {
         PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &asioHostApi->blockingStreamInterface, streamCallback, userData );
+                                               &asioHostApi->callbackStreamInterface, streamCallback, userData );
     }
 
 
@@ -1959,13 +2118,24 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     }
 
 
-    framesPerHostBuffer = SelectHostBufferSize(
-            (( suggestedInputLatencyFrames > suggestedOutputLatencyFrames )
-                    ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
-            driverInfo );
+    /* Using blocking i/o interface... */
+    if( usingBlockingIo )
+    {
+/** @todo REVIEW selection of host buffer size for blocking i/o */
+        /* Use default host latency for blocking i/o. */
+        framesPerHostBuffer = SelectHostBufferSize( 0, driverInfo );
+
+    }
+    else /* Using callback interface... */
+    {
+        framesPerHostBuffer = SelectHostBufferSize(
+                (( suggestedInputLatencyFrames > suggestedOutputLatencyFrames )
+                        ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
+                driverInfo );
+    }
 
 
-	PA_DEBUG(("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
+    PA_DEBUG(("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
 
     asioError = ASIOCreateBuffers( stream->asioBufferInfos,
             inputChannelCount+outputChannelCount,
@@ -2103,43 +2273,302 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         stream->outputBufferConverter = 0;
     }
 
-    result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
-                    inputChannelCount, inputSampleFormat, hostInputSampleFormat,
-                    outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
-                    sampleRate, streamFlags, framesPerBuffer,
-                    framesPerHostBuffer, paUtilFixedHostBufferSize,
-                    streamCallback, userData );
-    if( result != paNoError ){
-        PA_DEBUG(("OpenStream ERROR13\n"));
-        goto error;
-    }
-
 
     ASIOGetLatencies( &stream->inputLatency, &stream->outputLatency );
 
-    stream->streamRepresentation.streamInfo.inputLatency =
-            (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
-                + stream->inputLatency) / sampleRate;   // seconds
-    stream->streamRepresentation.streamInfo.outputLatency =
-            (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
-                + stream->outputLatency) / sampleRate; // seconds
-    stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
-
-    // the code below prints the ASIO latency which doesn't include the
-    // buffer processor latency. it reports the added latency separately
-    PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-            stream->inputLatency,
-            (long)((stream->inputLatency*1000)/ sampleRate),  
-            PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
-            (long)((PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
-            ));
-
-    PA_DEBUG(("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-            stream->outputLatency,
-            (long)((stream->outputLatency*1000)/ sampleRate), 
-            PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
-            (long)((PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
-            ));
+
+    /* Using blocking i/o interface... */
+    if( usingBlockingIo )
+    {
+        /* Allocate the blocking i/o input ring buffer memory. */
+        stream->blockingState = (PaAsioStreamBlockingState*)PaUtil_AllocateMemory( sizeof(PaAsioStreamBlockingState) );
+        if( !stream->blockingState )
+        {
+            result = paInsufficientMemory;
+            PA_DEBUG(("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n"));
+            goto error;
+        }
+
+        /* Initialize blocking i/o interface struct. */
+        stream->blockingState->readFramesReadyEvent   = NULL; /* Uninitialized, yet. */
+        stream->blockingState->writeBuffersReadyEvent = NULL; /* Uninitialized, yet. */
+        stream->blockingState->readRingBufferData     = NULL; /* Uninitialized, yet. */
+        stream->blockingState->writeRingBufferData    = NULL; /* Uninitialized, yet. */
+        stream->blockingState->readStreamBuffer       = NULL; /* Uninitialized, yet. */
+        stream->blockingState->writeStreamBuffer      = NULL; /* Uninitialized, yet. */
+        stream->blockingState->stopFlag               = TRUE; /* Not started, yet. */
+
+
+        /* If the user buffer is unspecified */
+        if( framesPerBuffer == paFramesPerBufferUnspecified )
+        {
+            /* Make the user buffer the same size as the host buffer. */
+            framesPerBuffer = framesPerHostBuffer;
+        }
+
+
+        /* Initialize callback buffer processor. */
+        result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor               ,
+                                                    inputChannelCount                     ,
+                                                    inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                                                    hostInputSampleFormat                 , /* Host format. */
+                                                    outputChannelCount                    ,
+                                                    outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                                                    hostOutputSampleFormat                , /* Host format. */
+                                                    sampleRate                            ,
+                                                    streamFlags                           ,
+                                                    framesPerBuffer                       , /* Frames per ring buffer block. */
+                                                    framesPerHostBuffer                   , /* Frames per asio buffer. */
+                                                    paUtilFixedHostBufferSize             ,
+                                                    streamCallback                        ,
+                                                    userData                               );
+        if( result != paNoError ){
+            PA_DEBUG(("OpenStream ERROR13\n"));
+            goto error;
+        }
+        callbackBufferProcessorInited = TRUE;
+
+        /* Initialize the blocking i/o buffer processor. */
+        result = PaUtil_InitializeBufferProcessor(&stream->blockingState->bufferProcessor,
+                                                   inputChannelCount                     ,
+                                                   inputSampleFormat                     , /* User format. */
+                                                   inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                                                   outputChannelCount                    ,
+                                                   outputSampleFormat                    , /* User format. */
+                                                   outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                                                   sampleRate                            ,
+                                                   paClipOff | paDitherOff               , /* Don't use dither nor clipping. */
+                                                   framesPerBuffer                       , /* Frames per user buffer. */
+                                                   framesPerBuffer                       , /* Frames per ring buffer block. */
+                                                   paUtilBoundedHostBufferSize           ,
+                                                   NULL, NULL                            );/* No callback! */
+        if( result != paNoError ){
+            PA_DEBUG(("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n"));
+            goto error;
+        }
+        blockingBufferProcessorInited = TRUE;
+
+        /* If input is requested. */
+        if( inputChannelCount )
+        {
+            /* Create the callback sync-event. */
+            stream->blockingState->readFramesReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
+            if( stream->blockingState->readFramesReadyEvent == NULL )
+            {
+                result = paUnanticipatedHostError;
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_DEBUG(("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n"));
+                goto error;
+            }
+            blockingReadFramesReadyEventInitialized = 1;
+
+
+            /* Create pointer buffer to access non-interleaved data in ReadStream() */
+            stream->blockingState->readStreamBuffer = (void**)PaUtil_AllocateMemory( sizeof(void*) * inputChannelCount );
+            if( !stream->blockingState->readStreamBuffer )
+            {
+                result = paInsufficientMemory;
+                PA_DEBUG(("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n"));
+                goto error;
+            }
+
+            /* The ring buffer should store as many data blocks as needed
+               to achieve the requested latency. Whereas it must be large
+               enough to store at least two complete data blocks.
+
+               1) Determine the amount of latency to be added to the
+                  prefered ASIO latency.
+               2) Make sure we have at lest one additional latency frame.
+               3) Divide the number of frames by the desired block size to
+                  get the number (rounded up to pure integer) of blocks to
+                  be stored in the buffer.
+               4) Add one additional block for block processing and convert
+                  to samples frames.
+               5) Get the next larger (or equal) power-of-two buffer size.
+             */
+            lBlockingBufferSize = suggestedInputLatencyFrames - stream->inputLatency;
+            lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1;
+            lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer;
+            lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer;
+
+            /* Get the next larger or equal power-of-two buffersize. */
+            lBlockingBufferSizePow2 = 1;
+            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
+            lBlockingBufferSize = lBlockingBufferSizePow2;
+
+            /* Compute total intput latency in seconds */
+            stream->streamRepresentation.streamInfo.inputLatency =
+                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor               )
+                        + PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor)
+                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                        + stream->inputLatency )
+                / sampleRate;
+
+            /* The code below prints the ASIO latency which doesn't include
+               the buffer processor latency nor the blocking i/o latency. It
+               reports the added latency separately.
+            */
+            PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                stream->inputLatency,
+                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
+                (long)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                (long)( (PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
+                ));
+
+            /* Determine the size of ring buffer in bytes. */
+            lBytesPerFrame = inputChannelCount * Pa_GetSampleSize(inputSampleFormat );
+
+            /* Allocate the blocking i/o input ring buffer memory. */
+            stream->blockingState->readRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
+            if( !stream->blockingState->readRingBufferData )
+            {
+                result = paInsufficientMemory;
+                PA_DEBUG(("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n"));
+                goto error;
+            }
+
+            /* Initialize the input ring buffer struct. */
+            PaUtil_InitializeRingBuffer( &stream->blockingState->readRingBuffer    ,
+                                          lBytesPerFrame                           ,
+                                          lBlockingBufferSize                      ,
+                                          stream->blockingState->readRingBufferData );
+        }
+
+        /* If output is requested. */
+        if( outputChannelCount )
+        {
+            stream->blockingState->writeBuffersReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
+            if( stream->blockingState->writeBuffersReadyEvent == NULL )
+            {
+                result = paUnanticipatedHostError;
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_DEBUG(("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n"));
+                goto error;
+            }
+            blockingWriteBuffersReadyEventInitialized = 1;
+
+            /* Create pointer buffer to access non-interleaved data in WriteStream() */
+            stream->blockingState->writeStreamBuffer = (const void**)PaUtil_AllocateMemory( sizeof(const void*) * outputChannelCount );
+            if( !stream->blockingState->writeStreamBuffer )
+            {
+                result = paInsufficientMemory;
+                PA_DEBUG(("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n"));
+                goto error;
+            }
+
+            /* The ring buffer should store as many data blocks as needed
+               to achieve the requested latency. Whereas it must be large
+               enough to store at least two complete data blocks.
+
+               1) Determine the amount of latency to be added to the
+                  prefered ASIO latency.
+               2) Make sure we have at lest one additional latency frame.
+               3) Divide the number of frames by the desired block size to
+                  get the number (rounded up to pure integer) of blocks to
+                  be stored in the buffer.
+               4) Add one additional block for block processing and convert
+                  to samples frames.
+               5) Get the next larger (or equal) power-of-two buffer size.
+             */
+            lBlockingBufferSize = suggestedOutputLatencyFrames - stream->outputLatency;
+            lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1;
+            lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer;
+            lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer;
+
+            /* The buffer size (without the additional block) corresponds
+               to the initial number of silent samples in the output ring
+               buffer. */
+            stream->blockingState->writeRingBufferInitialFrames = lBlockingBufferSize - framesPerBuffer;
+
+            /* Get the next larger or equal power-of-two buffersize. */
+            lBlockingBufferSizePow2 = 1;
+            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
+            lBlockingBufferSize = lBlockingBufferSizePow2;
+
+            /* Compute total output latency in seconds */
+            stream->streamRepresentation.streamInfo.outputLatency =
+                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor               )
+                        + PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor)
+                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                        + stream->outputLatency )
+                / sampleRate;
+
+            /* The code below prints the ASIO latency which doesn't include
+               the buffer processor latency nor the blocking i/o latency. It
+               reports the added latency separately.
+            */
+            PA_DEBUG(("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                stream->outputLatency,
+                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
+                (long)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                (long)( (PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
+                ));
+
+            /* Determine the size of ring buffer in bytes. */
+            lBytesPerFrame = outputChannelCount * Pa_GetSampleSize(outputSampleFormat);
+
+            /* Allocate the blocking i/o output ring buffer memory. */
+            stream->blockingState->writeRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
+            if( !stream->blockingState->writeRingBufferData )
+            {
+                result = paInsufficientMemory;
+                PA_DEBUG(("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n"));
+                goto error;
+            }
+
+            /* Initialize the output ring buffer struct. */
+            PaUtil_InitializeRingBuffer( &stream->blockingState->writeRingBuffer    ,
+                                          lBytesPerFrame                            ,
+                                          lBlockingBufferSize                       ,
+                                          stream->blockingState->writeRingBufferData );
+        }
+
+        stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
+
+
+    }
+    else /* Using callback interface... */
+    {
+        result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
+                        inputChannelCount, inputSampleFormat, (hostInputSampleFormat | paNonInterleaved),
+                        outputChannelCount, outputSampleFormat, (hostOutputSampleFormat | paNonInterleaved),
+                        sampleRate, streamFlags, framesPerBuffer,
+                        framesPerHostBuffer, paUtilFixedHostBufferSize,
+                        streamCallback, userData );
+        if( result != paNoError ){
+            PA_DEBUG(("OpenStream ERROR13\n"));
+            goto error;
+        }
+        callbackBufferProcessorInited = TRUE;
+
+        stream->streamRepresentation.streamInfo.inputLatency =
+                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
+                    + stream->inputLatency) / sampleRate;   // seconds
+        stream->streamRepresentation.streamInfo.outputLatency =
+                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
+                    + stream->outputLatency) / sampleRate; // seconds
+        stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
+
+        // the code below prints the ASIO latency which doesn't include the
+        // buffer processor latency. it reports the added latency separately
+        PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                stream->inputLatency,
+                (long)((stream->inputLatency*1000)/ sampleRate),  
+                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
+                (long)((PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
+                ));
+
+        PA_DEBUG(("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                stream->outputLatency,
+                (long)((stream->outputLatency*1000)/ sampleRate), 
+                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
+                (long)((PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
+                ));
+    }
 
     stream->asioHostApi = asioHostApi;
     stream->framesPerHostCallback = framesPerHostBuffer;
@@ -2147,10 +2576,12 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->inputChannelCount = inputChannelCount;
     stream->outputChannelCount = outputChannelCount;
     stream->postOutput = driverInfo->postOutput;
+    stream->isStopped = 1;
     stream->isActive = 0;
-
+    
     asioHostApi->openAsioDeviceIndex = asioDeviceIndex;
 
+    theAsioStream = stream;
     *s = (PaStream*)stream;
 
     return result;
@@ -2159,6 +2590,31 @@ error:
     PA_DEBUG(("goto errored\n"));
     if( stream )
     {
+        if( stream->blockingState )
+        {
+            if( blockingBufferProcessorInited )
+                PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
+
+            if( stream->blockingState->writeRingBufferData )
+                PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
+            if( stream->blockingState->writeStreamBuffer )
+                PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
+            if( blockingWriteBuffersReadyEventInitialized )
+                CloseHandle( stream->blockingState->writeBuffersReadyEvent );
+
+            if( stream->blockingState->readRingBufferData )
+                PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
+            if( stream->blockingState->readStreamBuffer )
+                PaUtil_FreeMemory( stream->blockingState->readStreamBuffer );
+            if( blockingReadFramesReadyEventInitialized )
+                CloseHandle( stream->blockingState->readFramesReadyEvent );
+
+            PaUtil_FreeMemory( stream->blockingState );
+        }
+
+        if( callbackBufferProcessorInited )
+            PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+
         if( completedBuffersPlayedEventInited )
             CloseHandle( stream->completedBuffersPlayedEvent );
 
@@ -2178,8 +2634,9 @@ error:
         ASIODisposeBuffers();
 
     if( asioIsInitialized )
-        ASIOExit();
-
+	{
+		UnloadAsioDriver();
+	}
     return result;
 }
 
@@ -2205,13 +2662,34 @@ static PaError CloseStream( PaStream* s )
 
     CloseHandle( stream->completedBuffersPlayedEvent );
 
+    /* Using blocking i/o interface... */
+    if( stream->blockingState )
+    {
+        PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
+
+        if( stream->inputChannelCount ) {
+            PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
+            PaUtil_FreeMemory( stream->blockingState->readStreamBuffer  );
+            CloseHandle( stream->blockingState->readFramesReadyEvent );
+        }
+        if( stream->outputChannelCount ) {
+            PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
+            PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
+            CloseHandle( stream->blockingState->writeBuffersReadyEvent );
+        }
+
+        PaUtil_FreeMemory( stream->blockingState );
+    }
+
     PaUtil_FreeMemory( stream->asioBufferInfos );
     PaUtil_FreeMemory( stream->asioChannelInfos );
     PaUtil_FreeMemory( stream->bufferPtrs );
     PaUtil_FreeMemory( stream );
 
     ASIODisposeBuffers();
-    ASIOExit();
+    UnloadAsioDriver();
+
+    theAsioStream = 0;
 
     return result;
 }
@@ -2245,10 +2723,10 @@ static void bufferSwitch(long index, ASIOBool directProcess)
 
 // conversion from 64 bit ASIOSample/ASIOTimeStamp to double float
 #if NATIVE_INT64
-	#define ASIO64toDouble(a)  (a)
+    #define ASIO64toDouble(a)  (a)
 #else
-	const double twoRaisedTo32 = 4294967296.;
-	#define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
+    const double twoRaisedTo32 = 4294967296.;
+    #define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
 #endif
 
 static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool directProcess )
@@ -2430,7 +2908,9 @@ previousIndex = index;
                 paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime - theAsioStream->streamRepresentation.streamInfo.inputLatency;
                 paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime + theAsioStream->streamRepresentation.streamInfo.outputLatency;
                 */
-#if 1
+
+/* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */
+#if 0
 // detect underflows by checking inter-callback time > 2 buffer period
 static double previousTime = -1;
 if( previousTime > 0 ){
@@ -2634,6 +3114,7 @@ static PaError StartStream( PaStream *s )
 {
     PaError result = paNoError;
     PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
     if( stream->outputChannelCount > 0 )
@@ -2658,18 +3139,72 @@ static PaError StartStream( PaStream *s )
         PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
     }
 
-    if( result == paNoError )
+
+    /* Using blocking i/o interface... */
+    if( blockingState )
     {
-        theAsioStream = stream;
-        asioError = ASIOStart();
-        if( asioError == ASE_OK )
+        /* Reset blocking i/o buffer processor. */
+        PaUtil_ResetBufferProcessor( &blockingState->bufferProcessor );
+
+        /* If we're about to process some input data. */
+        if( stream->inputChannelCount )
         {
-            stream->isActive = 1;
-            stream->streamFinishedCallbackCalled = false;
+            /* Reset callback-ReadStream sync event. */
+            if( ResetEvent( blockingState->readFramesReadyEvent ) == 0 )
+            {
+                result = paUnanticipatedHostError;
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+            }
+
+            /* Flush blocking i/o ring buffer. */
+            PaUtil_FlushRingBuffer( &blockingState->readRingBuffer );
+            (*blockingState->bufferProcessor.inputZeroer)( blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize );
         }
-        else
+
+        /* If we're about to process some output data. */
+        if( stream->outputChannelCount )
         {
-            theAsioStream = 0;
+            /* Reset callback-WriteStream sync event. */
+            if( ResetEvent( blockingState->writeBuffersReadyEvent ) == 0 )
+            {
+                result = paUnanticipatedHostError;
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+            }
+
+            /* Flush blocking i/o ring buffer. */
+            PaUtil_FlushRingBuffer( &blockingState->writeRingBuffer );
+            (*blockingState->bufferProcessor.outputZeroer)( blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize );
+
+            /* Initialize the output ring buffer to "silence". */
+            PaUtil_AdvanceRingBufferWriteIndex( &blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames );
+        }
+
+        /* Clear requested frames / buffers count. */
+        blockingState->writeBuffersRequested     = 0;
+        blockingState->readFramesRequested       = 0;
+        blockingState->writeBuffersRequestedFlag = FALSE;
+        blockingState->readFramesRequestedFlag   = FALSE;
+        blockingState->outputUnderflowFlag       = FALSE;
+        blockingState->inputOverflowFlag         = FALSE;
+        blockingState->stopFlag                  = FALSE;
+    }
+
+
+    if( result == paNoError )
+    {
+        assert( theAsioStream == stream ); /* theAsioStream should be set correctly in OpenStream */
+
+        /* initialize these variables before the callback has a chance to be invoked */
+        stream->isStopped = 0;
+        stream->isActive = 1;
+        stream->streamFinishedCallbackCalled = false;
+
+        asioError = ASIOStart();
+        if( asioError != ASE_OK )
+        {
+            stream->isStopped = 1;
+            stream->isActive = 0;
+
             result = paUnanticipatedHostError;
             PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         }
@@ -2678,15 +3213,59 @@ static PaError StartStream( PaStream *s )
     return result;
 }
 
+static void EnsureCallbackHasCompleted( PaAsioStream *stream )
+{
+    // make sure that the callback is not still in-flight after ASIOStop()
+    // returns. This has been observed to happen on the Hoontech DSP24 for
+    // example.
+    int count = 2000;  // only wait for 2 seconds, rather than hanging.
+    while( stream->reenterCount != -1 && count > 0 )
+    {
+        Sleep(1);
+        --count;
+    }
+}
 
 static PaError StopStream( PaStream *s )
 {
     PaError result = paNoError;
     PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
     if( stream->isActive )
     {
+        /* If blocking i/o output is in use */
+        if( blockingState && stream->outputChannelCount )
+        {
+            /* Request the whole output buffer to be available. */
+            blockingState->writeBuffersRequested = blockingState->writeRingBuffer.bufferSize;
+            /* Signalize that additional buffers are need. */
+            blockingState->writeBuffersRequestedFlag = TRUE;
+            /* Set flag to indicate the playback is to be stopped. */
+            blockingState->stopFlag = TRUE;
+
+            /* Wait until requested number of buffers has been freed. Time
+               out after twice the blocking i/o ouput buffer could have
+               been consumed. */
+            DWORD timeout = (DWORD)( 2 * blockingState->writeRingBuffer.bufferSize * 1000
+                                       / stream->streamRepresentation.streamInfo.sampleRate );
+            DWORD waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
+
+            /* If something seriously went wrong... */
+            if( waitResult == WAIT_FAILED )
+            {
+                PA_DEBUG(("WaitForSingleObject() failed in StopStream()\n"));
+                result = paUnanticipatedHostError;
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+            }
+            else if( waitResult == WAIT_TIMEOUT )
+            {
+                PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n"));
+                result = paTimedOut;
+            }
+        }
+
         stream->stopProcessing = true;
 
         /* wait for the stream to finish playing out enqueued buffers.
@@ -2696,22 +3275,26 @@ static PaError StopStream( PaStream *s )
             length is longer than the asio buffer size then that should
             be taken into account.
         */
-        if( WaitForSingleObject( theAsioStream->completedBuffersPlayedEvent,
+        if( WaitForSingleObject( stream->completedBuffersPlayedEvent,
                 (DWORD)(stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.) )
-                    == WAIT_TIMEOUT	 )
+                    == WAIT_TIMEOUT )
         {
             PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n" ));
         }
     }
 
     asioError = ASIOStop();
-    if( asioError != ASE_OK )
+    if( asioError == ASE_OK )
+    {
+        EnsureCallbackHasCompleted( stream );
+    }
+    else
     {
         result = paUnanticipatedHostError;
         PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
     }
 
-    theAsioStream = 0;
+    stream->isStopped = 1;
     stream->isActive = 0;
 
     if( !stream->streamFinishedCallbackCalled )
@@ -2723,7 +3306,6 @@ static PaError StopStream( PaStream *s )
     return result;
 }
 
-
 static PaError AbortStream( PaStream *s )
 {
     PaError result = paNoError;
@@ -2733,31 +3315,17 @@ static PaError AbortStream( PaStream *s )
     stream->zeroOutput = true;
 
     asioError = ASIOStop();
-    if( asioError != ASE_OK )
+    if( asioError == ASE_OK )
     {
-        result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        EnsureCallbackHasCompleted( stream );
     }
     else
     {
-        // make sure that the callback is not still in-flight when ASIOStop()
-        // returns. This has been observed to happen on the Hoontech DSP24 for
-        // example.
-        int count = 2000;  // only wait for 2 seconds, rather than hanging.
-        while( theAsioStream->reenterCount != -1 && count > 0 )
-        {
-            Sleep(1);
-            --count;
-        }
+        result = paUnanticipatedHostError;
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
     }
 
-    /* it is questionable whether we should zero theAsioStream if ASIOStop()
-        returns an error, because the callback could still be active. We assume
-        not - this is based on the fact that ASIOStop is unlikely to fail
-        if the callback is running - it's more likely to fail because the
-        callback is not running. */
-        
-    theAsioStream = 0;
+    stream->isStopped = 1;
     stream->isActive = 0;
 
     if( !stream->streamFinishedCallbackCalled )
@@ -2772,9 +3340,9 @@ static PaError AbortStream( PaStream *s )
 
 static PaError IsStreamStopped( PaStream *s )
 {
-    //PaAsioStream *stream = (PaAsioStream*)s;
-    (void) s; /* unused parameter */
-    return theAsioStream == 0;
+    PaAsioStream *stream = (PaAsioStream*)s;
+    
+    return stream->isStopped;
 }
 
 
@@ -2807,33 +3375,348 @@ static double GetStreamCpuLoad( PaStream* s )
     for blocking streams.
 */
 
-static PaError ReadStream( PaStream* s,
-                           void *buffer,
-                           unsigned long frames )
+static PaError ReadStream( PaStream      *s     ,
+                           void          *buffer,
+                           unsigned long  frames )
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaError result = paNoError; /* Initial return value. */
+    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
 
-    /* IMPLEMENT ME, see portaudio.h for required behavior*/
-    (void) stream; /* unused parameters */
-    (void) buffer;
-    (void) frames;
+    /* Pointer to the blocking i/o data struct. */
+    PaAsioStreamBlockingState *blockingState = stream->blockingState;
 
-    return paNoError;
-}
+    /* Get blocking i/o buffer processor and ring buffer pointers. */
+    PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor;
+    PaUtilRingBuffer      *pRb = &blockingState->readRingBuffer;
+
+    /* Ring buffer segment(s) used for writing. */
+    void *pRingBufferData1st = NULL; /* First segment. (Mandatory) */
+    void *pRingBufferData2nd = NULL; /* Second segment. (Optional) */
+
+    /* Number of frames per ring buffer segment. */
+    long lRingBufferSize1st = 0; /* First segment. (Mandatory) */
+    long lRingBufferSize2nd = 0; /* Second segment. (Optional) */
+
+    /* Get number of frames to be processed per data block. */
+    unsigned long lFramesPerBlock = stream->bufferProcessor.framesPerUserBuffer;
+    /* Actual number of frames that has been copied into the ring buffer. */
+    unsigned long lFramesCopied = 0;
+    /* The number of remaining unprocessed dtat frames. */
+    unsigned long lFramesRemaining = frames;
+
+    /* Copy the input argument to avoid pointer increment! */
+    const void *userBuffer;
+    unsigned int i; /* Just a counter. */
+
+    /* About the time, needed to process 8 data blocks. */
+    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
+    DWORD waitResult = 0;
+
+
+    /* Check if the stream is still available ready to gather new data. */
+    if( blockingState->stopFlag || !stream->isActive )
+    {
+        PA_DEBUG(("Warning! Stream no longer available for reading in ReadStream()\n"));
+        result = paStreamIsStopped;
+        return result;
+    }
+
+    /* If the stream is a input stream. */
+    if( stream->inputChannelCount )
+    {
+        /* Prepare buffer access. */
+        if( !pBp->userOutputIsInterleaved )
+        {
+            userBuffer = blockingState->readStreamBuffer;
+            for( i = 0; i<pBp->inputChannelCount; ++i )
+            {
+                ((void**)userBuffer)[i] = ((void**)buffer)[i];
+            }
+        } /* Use the unchanged buffer. */
+        else { userBuffer = buffer; }
+
+        do /* Internal block processing for too large user data buffers. */
+        {
+            /* Get the size of the current data block to be processed. */
+            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
+                            ? lFramesPerBlock : lFramesRemaining;
+            /* Use predefined block size for as long there are enough
+               buffers available, thereafter reduce the processing block
+               size to match the number of remaining buffers. So the final
+               data block is processed although it may be incomplete. */
+
+            /* If the available amount of data frames is insufficient. */
+            if( PaUtil_GetRingBufferReadAvailable(pRb) < (long) lFramesPerBlock )
+            {
+                /* Make sure, the event isn't already set! */
+                /* ResetEvent( blockingState->readFramesReadyEvent ); */
+
+                /* Set the number of requested buffers. */
+                blockingState->readFramesRequested = lFramesPerBlock;
+
+                /* Signalize that additional buffers are need. */
+                blockingState->readFramesRequestedFlag = TRUE;
 
+                /* Wait until requested number of buffers has been freed. */
+                waitResult = WaitForSingleObject( blockingState->readFramesReadyEvent, timeout );
 
-static PaError WriteStream( PaStream* s,
-                            const void *buffer,
-                            unsigned long frames )
+                /* If something seriously went wrong... */
+                if( waitResult == WAIT_FAILED )
+                {
+                    PA_DEBUG(("WaitForSingleObject() failed in ReadStream()\n"));
+                    result = paUnanticipatedHostError;
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                    return result;
+                }
+                else if( waitResult == WAIT_TIMEOUT )
+                {
+                    PA_DEBUG(("WaitForSingleObject() timed out in ReadStream()\n"));
+
+                    /* If block processing has stopped, abort! */
+                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
+
+                    /* If a timeout is encountered, give up eventually. */
+                    return result = paTimedOut;
+                }
+            }
+            /* Now, the ring buffer contains the required amount of data
+               frames.
+               (Therefor we don't need to check the return argument of
+               PaUtil_GetRingBufferReadRegions(). ;-) )
+            */
+
+            /* Retrieve pointer(s) to the ring buffer's current write
+               position(s). If the first buffer segment is too small to
+               store the requested number of bytes, an additional second
+               segment is returned. Otherwise, i.e. if the first segment
+               is large enough, the second segment's pointer will be NULL.
+            */
+            PaUtil_GetRingBufferReadRegions(pRb                ,
+                                            lFramesPerBlock    ,
+                                            &pRingBufferData1st,
+                                            &lRingBufferSize1st,
+                                            &pRingBufferData2nd,
+                                            &lRingBufferSize2nd);
+
+            /* Set number of frames to be copied from the ring buffer. */
+            PaUtil_SetInputFrameCount( pBp, lRingBufferSize1st ); 
+            /* Setup ring buffer access. */
+            PaUtil_SetInterleavedInputChannels(pBp               ,  /* Buffer processor. */
+                                               0                 ,  /* The first channel's index. */
+                                               pRingBufferData1st,  /* First ring buffer segment. */
+                                               0                 ); /* Use all available channels. */
+
+            /* If a second ring buffer segment is required. */
+            if( lRingBufferSize2nd ) {
+                /* Set number of frames to be copied from the ring buffer. */
+                PaUtil_Set2ndInputFrameCount( pBp, lRingBufferSize2nd );
+                /* Setup ring buffer access. */
+                PaUtil_Set2ndInterleavedInputChannels(pBp               ,  /* Buffer processor. */
+                                                      0                 ,  /* The first channel's index. */
+                                                      pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                      0                 ); /* Use all available channels. */
+            }
+
+            /* Let the buffer processor handle "copy and conversion" and
+               update the ring buffer indices manually. */
+            lFramesCopied = PaUtil_CopyInput( pBp, &buffer, lFramesPerBlock );
+            PaUtil_AdvanceRingBufferReadIndex( pRb, lFramesCopied );
+
+            /* Decrease number of unprocessed frames. */
+            lFramesRemaining -= lFramesCopied;
+
+        } /* Continue with the next data chunk. */
+        while( lFramesRemaining );
+
+
+        /* If there has been an input overflow within the callback */
+        if( blockingState->inputOverflowFlag )
+        {
+            blockingState->inputOverflowFlag = FALSE;
+
+            /* Return the corresponding error code. */
+            result = paInputOverflowed;
+        }
+
+    } /* If this is not an input stream. */
+    else {
+        result = paCanNotReadFromAnOutputOnlyStream;
+    }
+
+    return result;
+}
+
+static PaError WriteStream( PaStream      *s     ,
+                            const void    *buffer,
+                            unsigned long  frames )
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaError result = paNoError; /* Initial return value. */
+    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
 
-    /* IMPLEMENT ME, see portaudio.h for required behavior*/
-    (void) stream; /* unused parameters */
-    (void) buffer;
-    (void) frames;
+    /* Pointer to the blocking i/o data struct. */
+    PaAsioStreamBlockingState *blockingState = stream->blockingState;
 
-    return paNoError;
+    /* Get blocking i/o buffer processor and ring buffer pointers. */
+    PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor;
+    PaUtilRingBuffer      *pRb = &blockingState->writeRingBuffer;
+
+    /* Ring buffer segment(s) used for writing. */
+    void *pRingBufferData1st = NULL; /* First segment. (Mandatory) */
+    void *pRingBufferData2nd = NULL; /* Second segment. (Optional) */
+
+    /* Number of frames per ring buffer segment. */
+    long lRingBufferSize1st = 0; /* First segment. (Mandatory) */
+    long lRingBufferSize2nd = 0; /* Second segment. (Optional) */
+
+    /* Get number of frames to be processed per data block. */
+    unsigned long lFramesPerBlock = stream->bufferProcessor.framesPerUserBuffer;
+    /* Actual number of frames that has been copied into the ring buffer. */
+    unsigned long lFramesCopied = 0;
+    /* The number of remaining unprocessed dtat frames. */
+    unsigned long lFramesRemaining = frames;
+
+    /* About the time, needed to process 8 data blocks. */
+    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
+    DWORD waitResult = 0;
+
+    /* Copy the input argument to avoid pointer increment! */
+    const void *userBuffer;
+    unsigned int i; /* Just a counter. */
+
+
+    /* Check if the stream ist still available ready to recieve new data. */
+    if( blockingState->stopFlag || !stream->isActive )
+    {
+        PA_DEBUG(("Warning! Stream no longer available for writing in WriteStream()\n"));
+        result = paStreamIsStopped;
+        return result;
+    }
+
+    /* If the stream is a output stream. */
+    if( stream->outputChannelCount )
+    {
+        /* Prepare buffer access. */
+        if( !pBp->userOutputIsInterleaved )
+        {
+            userBuffer = blockingState->writeStreamBuffer;
+            for( i = 0; i<pBp->outputChannelCount; ++i )
+            {
+                ((const void**)userBuffer)[i] = ((const void**)buffer)[i];
+            }
+        } /* Use the unchanged buffer. */
+        else { userBuffer = buffer; }
+
+
+        do /* Internal block processing for too large user data buffers. */
+        {
+            /* Get the size of the current data block to be processed. */
+            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
+                            ? lFramesPerBlock : lFramesRemaining;
+            /* Use predefined block size for as long there are enough
+               frames available, thereafter reduce the processing block
+               size to match the number of remaining frames. So the final
+               data block is processed although it may be incomplete. */
+
+            /* If the available amount of buffers is insufficient. */
+            if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) lFramesPerBlock )
+            {
+                /* Make sure, the event isn't already set! */
+                /* ResetEvent( blockingState->writeBuffersReadyEvent ); */
+
+                /* Set the number of requested buffers. */
+                blockingState->writeBuffersRequested = lFramesPerBlock;
+
+                /* Signalize that additional buffers are need. */
+                blockingState->writeBuffersRequestedFlag = TRUE;
+
+                /* Wait until requested number of buffers has been freed. */
+                waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
+
+                /* If something seriously went wrong... */
+                if( waitResult == WAIT_FAILED )
+                {
+                    PA_DEBUG(("WaitForSingleObject() failed in WriteStream()\n"));
+                    result = paUnanticipatedHostError;
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                    return result;
+                }
+                else if( waitResult == WAIT_TIMEOUT )
+                {
+                    PA_DEBUG(("WaitForSingleObject() timed out in WriteStream()\n"));
+
+                    /* If block processing has stopped, abort! */
+                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
+                    
+                    /* If a timeout is encountered, give up eventually. */
+                    return result = paTimedOut;
+                }
+            }
+            /* Now, the ring buffer contains the required amount of free
+               space to store the provided number of data frames.
+               (Therefor we don't need to check the return argument of
+               PaUtil_GetRingBufferWriteRegions(). ;-) )
+            */
+
+            /* Retrieve pointer(s) to the ring buffer's current write
+               position(s). If the first buffer segment is too small to
+               store the requested number of bytes, an additional second
+               segment is returned. Otherwise, i.e. if the first segment
+               is large enough, the second segment's pointer will be NULL.
+            */
+            PaUtil_GetRingBufferWriteRegions(pRb                ,
+                                             lFramesPerBlock    ,
+                                             &pRingBufferData1st,
+                                             &lRingBufferSize1st,
+                                             &pRingBufferData2nd,
+                                             &lRingBufferSize2nd);
+
+            /* Set number of frames to be copied to the ring buffer. */
+            PaUtil_SetOutputFrameCount( pBp, lRingBufferSize1st ); 
+            /* Setup ring buffer access. */
+            PaUtil_SetInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
+                                                0                 ,  /* The first channel's index. */
+                                                pRingBufferData1st,  /* First ring buffer segment. */
+                                                0                 ); /* Use all available channels. */
+
+            /* If a second ring buffer segment is required. */
+            if( lRingBufferSize2nd ) {
+                /* Set number of frames to be copied to the ring buffer. */
+                PaUtil_Set2ndOutputFrameCount( pBp, lRingBufferSize2nd );
+                /* Setup ring buffer access. */
+                PaUtil_Set2ndInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
+                                                       0                 ,  /* The first channel's index. */
+                                                       pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                       0                 ); /* Use all available channels. */
+            }
+
+            /* Let the buffer processor handle "copy and conversion" and
+               update the ring buffer indices manually. */
+            lFramesCopied = PaUtil_CopyOutput( pBp, &userBuffer, lFramesPerBlock );
+            PaUtil_AdvanceRingBufferWriteIndex( pRb, lFramesCopied );
+
+            /* Decrease number of unprocessed frames. */
+            lFramesRemaining -= lFramesCopied;
+
+        } /* Continue with the next data chunk. */
+        while( lFramesRemaining );
+
+
+        /* If there has been an output underflow within the callback */
+        if( blockingState->outputUnderflowFlag )
+        {
+            blockingState->outputUnderflowFlag = FALSE;
+
+            /* Return the corresponding error code. */
+            result = paOutputUnderflowed;
+        }
+
+    } /* If this is not an output stream. */
+    else
+    {
+        result = paCanNotWriteToAnInputOnlyStream;
+    }
+
+    return result;
 }
 
 
@@ -2841,10 +3724,8 @@ static signed long GetStreamReadAvailable( PaStream* s )
 {
     PaAsioStream *stream = (PaAsioStream*)s;
 
-    /* IMPLEMENT ME, see portaudio.h for required behavior*/
-    (void) stream; /* unused parameter */
-
-    return 0;
+    /* Call buffer utility routine to get the number of available frames. */
+    return PaUtil_GetRingBufferReadAvailable( &stream->blockingState->readRingBuffer );
 }
 
 
@@ -2852,20 +3733,130 @@ static signed long GetStreamWriteAvailable( PaStream* s )
 {
     PaAsioStream *stream = (PaAsioStream*)s;
 
-    /* IMPLEMENT ME, see portaudio.h for required behavior*/
-    (void) stream; /* unused parameter */
+    /* Call buffer utility routine to get the number of empty buffers. */
+    return PaUtil_GetRingBufferWriteAvailable( &stream->blockingState->writeRingBuffer );
+}
+
+
+/* This routine will be called by the PortAudio engine when audio is needed.
+** It may called at interrupt level on some machines so don't do anything
+** that could mess up the system like calling malloc() or free().
+*/
+static int BlockingIoPaCallback(const void                     *inputBuffer    ,
+                                      void                     *outputBuffer   ,
+                                      unsigned long             framesPerBuffer,
+                                const PaStreamCallbackTimeInfo *timeInfo       ,
+                                      PaStreamCallbackFlags     statusFlags    ,
+                                      void                     *userData       )
+{
+    PaError result = paNoError; /* Initial return value. */
+    PaAsioStream *stream = *(PaAsioStream**)userData; /* The PA ASIO stream. */
+    PaAsioStreamBlockingState *blockingState = stream->blockingState; /* Persume blockingState is valid, otherwise the callback wouldn't be running. */
+
+    /* Get a pointer to the stream's blocking i/o buffer processor. */
+    PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor;
+    PaUtilRingBuffer      *pRb = NULL;
+
+    /* If output data has been requested. */
+    if( stream->outputChannelCount )
+    {
+        /* If the callback input argument signalizes a output underflow,
+           make sure the WriteStream() function knows about it, too! */
+        if( statusFlags & paOutputUnderflowed ) {
+            blockingState->outputUnderflowFlag = TRUE;
+        }
+
+        /* Access the corresponding ring buffer. */
+        pRb = &blockingState->writeRingBuffer;
+
+        /* If the blocking i/o buffer contains enough output data, */
+        if( PaUtil_GetRingBufferReadAvailable(pRb) >= (long) framesPerBuffer )
+        {
+            /* Extract the requested data from the ring buffer. */
+            PaUtil_ReadRingBuffer( pRb, outputBuffer, framesPerBuffer );
+        }
+        else /* If no output data is available :-( */
+        {
+            /* Signalize a write-buffer underflow. */
+            blockingState->outputUnderflowFlag = TRUE;
+
+            /* Fill the output buffer with silence. */
+            (*pBp->outputZeroer)( outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer );
 
-    return 0;
+            /* If playback is to be stopped */
+            if( blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable(pRb) < (long) framesPerBuffer )
+            {
+                /* Extract all the remaining data from the ring buffer,
+                   whether it is a complete data block or not. */
+                PaUtil_ReadRingBuffer( pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable(pRb) );
+            }
+        }
+
+        /* Set blocking i/o event? */
+        if( blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable(pRb) >= (long) blockingState->writeBuffersRequested )
+        {
+            /* Reset buffer request. */
+            blockingState->writeBuffersRequestedFlag = FALSE;
+            blockingState->writeBuffersRequested     = 0;
+            /* Signalize that requested buffers are ready. */
+            SetEvent( blockingState->writeBuffersReadyEvent );
+            /* What do we do if SetEvent() returns zero, i.e. the event
+               could not be set? How to return errors from within the
+               callback? - S.Fischer */
+        }
+    }
+
+    /* If input data has been supplied. */
+    if( stream->inputChannelCount )
+    {
+        /* If the callback input argument signalizes a input overflow,
+           make sure the ReadStream() function knows about it, too! */
+        if( statusFlags & paInputOverflowed ) {
+            blockingState->inputOverflowFlag = TRUE;
+        }
+
+        /* Access the corresponding ring buffer. */
+        pRb = &blockingState->readRingBuffer;
+
+        /* If the blocking i/o buffer contains not enough input buffers */
+        if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) framesPerBuffer )
+        {
+            /* Signalize a read-buffer overflow. */
+            blockingState->inputOverflowFlag = TRUE;
+
+            /* Remove some old data frames from the buffer. */
+            PaUtil_AdvanceRingBufferReadIndex( pRb, framesPerBuffer );
+        }
+
+        /* Insert the current input data into the ring buffer. */
+        PaUtil_WriteRingBuffer( pRb, inputBuffer, framesPerBuffer );
+
+        /* Set blocking i/o event? */
+        if( blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable(pRb) >= (long) blockingState->readFramesRequested )
+        {
+            /* Reset buffer request. */
+            blockingState->readFramesRequestedFlag = FALSE;
+            blockingState->readFramesRequested     = 0;
+            /* Signalize that requested buffers are ready. */
+            SetEvent( blockingState->readFramesReadyEvent );
+            /* What do we do if SetEvent() returns zero, i.e. the event
+               could not be set? How to return errors from within the
+               callback? - S.Fischer */
+            /** @todo report an error with PA_DEBUG */
+        }
+    }
+
+    return paContinue;
 }
 
 
 PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
 {
-	PaError result = paNoError;
+    PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
     PaDeviceIndex hostApiDevice;
     ASIODriverInfo asioDriverInfo;
-	ASIOError asioError;
+    ASIOError asioError;
     int asioIsInitialized = 0;
     PaAsioHostApiRepresentation *asioHostApi;
     PaAsioDeviceInfo *asioDeviceInfo;
@@ -2896,7 +3887,10 @@ PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
 
     asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
 
-    if( !loadAsioDriver( const_cast<char*>(asioDeviceInfo->commonDeviceInfo.name) ) )
+    /* See notes about CoInitialize(0) in LoadAsioDriver(). */
+	CoInitialize(0);
+
+    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(asioDeviceInfo->commonDeviceInfo.name) ) )
     {
         result = paUnanticipatedHostError;
         goto error;
@@ -2944,15 +3938,19 @@ PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErr
         goto error;
     }
 
+	CoUninitialize();
 PA_DEBUG(("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
 
-	return result;
+    return result;
 
 error:
     if( asioIsInitialized )
-        ASIOExit();
+	{
+		ASIOExit();
+	}
+	CoUninitialize();
 
-	return result;
+    return result;
 }
 
 
@@ -3021,3 +4019,53 @@ PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
 error:
     return result;
 }
+
+
+/* NOTE: the following functions are ASIO-stream specific, and are called directly
+    by client code. We need to check for many more error conditions here because
+    we don't have the benefit of pa_front.c's parameter checking.
+*/
+
+static PaError GetAsioStreamPointer( PaAsioStream **stream, PaStream *s )
+{
+    PaError result;
+    PaUtilHostApiRepresentation *hostApi;
+    PaAsioHostApiRepresentation *asioHostApi;
+    
+    result = PaUtil_ValidateStreamPointer( s );
+    if( result != paNoError )
+        return result;
+
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    if( result != paNoError )
+        return result;
+
+    asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    
+    if( PA_STREAM_REP( s )->streamInterface == &asioHostApi->callbackStreamInterface
+            || PA_STREAM_REP( s )->streamInterface == &asioHostApi->blockingStreamInterface )
+    {
+        /* s is an ASIO  stream */
+        *stream = (PaAsioStream *)s;
+        return paNoError;
+    }
+    else
+    {
+        return paIncompatibleStreamHostApi;
+    }
+}
+
+
+PaError PaAsio_SetStreamSampleRate( PaStream* s, double sampleRate )
+{
+    PaAsioStream *stream;
+    PaError result = GetAsioStreamPointer( &stream, s );
+    if( result != paNoError )
+        return result;
+
+    if( stream != theAsioStream )
+        return paBadStreamPtr;
+
+    return ValidateAndSetSampleRate( sampleRate );
+}
+
diff --git a/portaudio/src/hostapi/coreaudio/notes.txt b/portaudio/src/hostapi/coreaudio/notes.txt
index ffe969625..145afe154 100644
--- a/portaudio/src/hostapi/coreaudio/notes.txt
+++ b/portaudio/src/hostapi/coreaudio/notes.txt
@@ -73,17 +73,24 @@ the stream with it. See below for creating a channel map.
 
 Known issues:
 
-- Latency: Latency settings are ignored in most cases. Exceptions are when
-doing I/O between different devices and as a hint for selecting a realtively
-low or relatively high latency in conjunction with
-paHostFramesPerBufferUnspecified. Latency settings are always automatically
-bound to "safe" values, however, so setting extreme values here should not be
+- Buffering: No buffering beyond that provided by core audio is provided
+except where absolutely needed for the implementation to work. This may cause
+issues with large framesPerBuffer settings and it also means that no additional
+latency will be provided even if a large latency setting is selected.
+
+- Latency: Latency settings are generally ignored. They may be used as a
+hint for buffer size in paHostFramesPerBufferUnspecified, or the value may
+be used in cases where additional buffering is needed, such as doing input and
+output on seperate devices. Latency settings are always automatically bound
+to "safe" values, however, so setting extreme values here should not be
 an issue.
 
 - Buffer Size: paHostFramesPerBufferUnspecified and specific host buffer sizes
 are supported. paHostFramesPerBufferUnspecified works best in "pro" mode,
 where the buffer size and sample rate of the audio device is most likely
-to match the expected values.
+to match the expected values. In the case of paHostFramesPerBuffer, an
+appropriate framesPerBuffer value will be used that guarantees minimum
+requested latency if that's possible.
 
 - Timing info. It reports on stream time, but I'm probably doing something
 wrong since patest_sine_time often reports negative latency numbers. Also,
@@ -111,8 +118,7 @@ render quyality property is used to set the sample rate conversion quality
 as "documented" here:
 http://lists.apple.com/archives/coreaudio-api/2004/Jan/msg00141.html
 
-- x86/Universal Binary: to build a universal binary, be sure to use
-the darwin makefile and not the usual configure && make combo.
+- x86/Universal Binary: Universal binaries can be build.
 
 
 
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core.c b/portaudio/src/hostapi/coreaudio/pa_mac_core.c
index 7c887bd6c..dde93d300 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core.c
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core.c
@@ -65,6 +65,7 @@
 #include "pa_mac_core_internal.h"
 
 #include <string.h> /* strlen(), memcmp() etc. */
+#include <libkern/OSAtomic.h>
 
 #include "pa_mac_core.h"
 #include "pa_mac_core_utilities.h"
@@ -127,6 +128,8 @@ const char *PaMacCore_GetChannelName( int device, int channelIndex, bool input )
    OSStatus error;
    err = PaUtil_GetHostApiRepresentation( &hostApi, paCoreAudio );
    assert(err == paNoError);
+   if( err != paNoError )
+      return NULL;
    PaMacAUHAL *macCoreHostApi = (PaMacAUHAL*)hostApi;
    AudioDeviceID hostApiDevice = macCoreHostApi->devIds[device];
 
@@ -246,7 +249,6 @@ static PaError AbortStream( PaStream *stream );
 static PaError IsStreamStopped( PaStream *s );
 static PaError IsStreamActive( PaStream *stream );
 static PaTime GetStreamTime( PaStream *stream );
-static void setStreamStartTime( PaStream *stream );
 static OSStatus AudioIOProc( void *inRefCon,
                                AudioUnitRenderActionFlags *ioActionFlags,
                                const AudioTimeStamp *inTimeStamp,
@@ -261,11 +263,12 @@ static PaError GetChannelInfo( PaMacAUHAL *auhalHostApi,
                                int isInput);
 
 static PaError OpenAndSetupOneAudioUnit(
+                                   const PaMacCoreStream *stream,
                                    const PaStreamParameters *inStreamParams,
                                    const PaStreamParameters *outStreamParams,
-                                   const unsigned long requestedFramesPerBuffer,
-                                   unsigned long *actualInputFramesPerBuffer,
-                                   unsigned long *actualOutputFramesPerBuffer,
+                                   const UInt32 requestedFramesPerBuffer,
+                                   UInt32 *actualInputFramesPerBuffer,
+                                   UInt32 *actualOutputFramesPerBuffer,
                                    const PaMacAUHAL *auhalHostApi,
                                    AudioUnit *audioUnit,
                                    AudioConverterRef *srConverter,
@@ -277,6 +280,37 @@ static PaError OpenAndSetupOneAudioUnit(
 #define PA_AUHAL_SET_LAST_HOST_ERROR( errorCode, errorText ) \
     PaUtil_SetLastHostErrorInfo( paInDevelopment, errorCode, errorText )
 
+/*
+ * Callback called when starting or stopping a stream.
+ */
+static void startStopCallback(
+   void *               inRefCon,
+   AudioUnit            ci,
+   AudioUnitPropertyID  inID,
+   AudioUnitScope       inScope,
+   AudioUnitElement     inElement )
+{
+   PaMacCoreStream *stream = (PaMacCoreStream *) inRefCon;
+   UInt32 isRunning;
+   UInt32 size = sizeof( isRunning );
+   OSStatus err;
+   err = AudioUnitGetProperty( ci, kAudioOutputUnitProperty_IsRunning, inScope, inElement, &isRunning, &size );
+   assert( !err );
+   if( err )
+      isRunning = false; //it's very unclear what to do in case of error here. There's no real way to notify the user, and crashing seems unreasonable.
+   if( isRunning )
+      return; //We are only interested in when we are stopping
+   // -- if we are using 2 I/O units, we only need one notification!
+   if( stream->inputUnit && stream->outputUnit && stream->inputUnit != stream->outputUnit && ci == stream->inputUnit )
+      return;
+   PaStreamFinishedCallback *sfc = stream->streamRepresentation.streamFinishedCallback;
+   if( stream->state == STOPPING )
+      stream->state = STOPPED ;
+   if( sfc )
+      sfc( stream->streamRepresentation.userData );
+}
+
+
 /*currently, this is only used in initialization, but it might be modified
   to be used when the list of devices changes.*/
 static PaError gatherDeviceInfo(PaMacAUHAL *auhalHostApi)
@@ -495,10 +529,31 @@ PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIn
 {
     PaError result = paNoError;
     int i;
-    PaMacAUHAL *auhalHostApi;
+    PaMacAUHAL *auhalHostApi = NULL;
     PaDeviceInfo *deviceInfoArray;
+    int unixErr;
 
     VVDBUG(("PaMacCore_Initialize(): hostApiIndex=%d\n", hostApiIndex));
+	
+	SInt32 major;
+	SInt32 minor;
+	Gestalt(gestaltSystemVersionMajor, &major);
+	Gestalt(gestaltSystemVersionMinor, &minor);
+	
+	// Starting with 10.6 systems, the HAL notification thread is created internally
+	if (major == 10 && minor >= 6) {
+		CFRunLoopRef theRunLoop = NULL;
+		AudioObjectPropertyAddress theAddress = { kAudioHardwarePropertyRunLoop, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
+		OSStatus osErr = AudioObjectSetPropertyData (kAudioObjectSystemObject, &theAddress, 0, NULL, sizeof(CFRunLoopRef), &theRunLoop);
+		if (osErr != noErr) {
+			goto error;
+		}
+	}
+	
+    unixErr = initializeXRunListenerList();
+    if( 0 != unixErr ) {
+       return UNIX_ERR(unixErr);
+    }
 
     auhalHostApi = (PaMacAUHAL*)PaUtil_AllocateMemory( sizeof(PaMacAUHAL) );
     if( !auhalHostApi )
@@ -618,10 +673,16 @@ error:
 
 static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 {
+    int unixErr;
+
     PaMacAUHAL *auhalHostApi = (PaMacAUHAL*)hostApi;
 
     VVDBUG(("Terminate()\n"));
 
+    unixErr = destroyXRunListenerList();
+    if( 0 != unixErr )
+       UNIX_ERR(unixErr);
+
     /*
         IMPLEMENT ME:
             - clean up any resources not handled by the allocation group
@@ -736,12 +797,82 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
     return paFormatIsSupported;
 }
 
+
+static void UpdateReciprocalOfActualOutputSampleRateFromDeviceProperty( PaMacCoreStream *stream )
+{
+	/* FIXME: not sure if this should be the sample rate of the output device or the output unit */
+	Float64 actualOutputSampleRate = stream->outDeviceSampleRate;
+	UInt32 propSize = sizeof(Float64);
+	OSStatus osErr = AudioDeviceGetProperty( stream->outputDevice, 0, /* isInput = */ FALSE, kAudioDevicePropertyActualSampleRate, &propSize, &actualOutputSampleRate);
+	if( osErr != noErr || actualOutputSampleRate < .01 ) // avoid divide by zero if there's an error
+		actualOutputSampleRate = stream->outDeviceSampleRate;
+	
+	stream->recipricalOfActualOutputSampleRate = 1. / actualOutputSampleRate;
+}
+
+static OSStatus AudioDevicePropertyActualSampleRateListenerProc( AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData )
+{
+	PaMacCoreStream *stream = (PaMacCoreStream*)inClientData;
+	
+	pthread_mutex_lock( &stream->timingInformationMutex );
+	UpdateReciprocalOfActualOutputSampleRateFromDeviceProperty( stream );
+	pthread_mutex_unlock( &stream->timingInformationMutex );
+
+	return noErr;
+}
+
+static void UpdateOutputLatencySamplesFromDeviceProperty( PaMacCoreStream *stream )
+{
+	UInt32 deviceOutputLatencySamples = 0;
+	UInt32 propSize = sizeof(UInt32);
+	OSStatus osErr = AudioDeviceGetProperty( stream->outputDevice, 0, /* isInput= */ FALSE, kAudioDevicePropertyLatency, &propSize, &deviceOutputLatencySamples);
+	if( osErr != noErr )
+		deviceOutputLatencySamples = 0;
+	
+	stream->deviceOutputLatencySamples = deviceOutputLatencySamples;
+}
+
+static OSStatus AudioDevicePropertyOutputLatencySamplesListenerProc( AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData )
+{
+	PaMacCoreStream *stream = (PaMacCoreStream*)inClientData;
+	
+	pthread_mutex_lock( &stream->timingInformationMutex );
+	UpdateOutputLatencySamplesFromDeviceProperty( stream );
+	pthread_mutex_unlock( &stream->timingInformationMutex );
+
+	return noErr;
+}
+
+static void UpdateInputLatencySamplesFromDeviceProperty( PaMacCoreStream *stream )
+{
+	UInt32 deviceInputLatencySamples = 0;
+	UInt32 propSize = sizeof(UInt32);
+	OSStatus osErr = AudioDeviceGetProperty( stream->inputDevice, 0, /* isInput= */ TRUE, kAudioDevicePropertyLatency, &propSize, &deviceInputLatencySamples);
+	if( osErr != noErr )
+		deviceInputLatencySamples = 0;
+	
+	stream->deviceInputLatencySamples = deviceInputLatencySamples;
+}
+
+static OSStatus AudioDevicePropertyInputLatencySamplesListenerProc( AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData )
+{
+	PaMacCoreStream *stream = (PaMacCoreStream*)inClientData;
+	
+	pthread_mutex_lock( &stream->timingInformationMutex );
+	UpdateInputLatencySamplesFromDeviceProperty( stream );
+	pthread_mutex_unlock( &stream->timingInformationMutex );
+
+	return noErr;
+}
+
+
 static PaError OpenAndSetupOneAudioUnit(
+                                   const PaMacCoreStream *stream,
                                    const PaStreamParameters *inStreamParams,
                                    const PaStreamParameters *outStreamParams,
-                                   const unsigned long requestedFramesPerBuffer,
-                                   unsigned long *actualInputFramesPerBuffer,
-                                   unsigned long *actualOutputFramesPerBuffer,
+                                   const UInt32 requestedFramesPerBuffer,
+                                   UInt32 *actualInputFramesPerBuffer,
+                                   UInt32 *actualOutputFramesPerBuffer,
                                    const PaMacAUHAL *auhalHostApi,
                                    AudioUnit *audioUnit,
                                    AudioConverterRef *srConverter,
@@ -753,7 +884,7 @@ static PaError OpenAndSetupOneAudioUnit(
     Component comp;
     /*An Apple TN suggests using CAStreamBasicDescription, but that is C++*/
     AudioStreamBasicDescription desiredFormat;
-    OSErr result = noErr;
+    OSStatus result = noErr;
     PaError paResult = paNoError;
     int line = 0;
     UInt32 callbackKey;
@@ -881,7 +1012,7 @@ static PaError OpenAndSetupOneAudioUnit(
                     audioDevice,
                     sizeof(AudioDeviceID) ) );
     }
-    if( outStreamParams )
+    if( outStreamParams && outStreamParams != inStreamParams )
     {
        *audioDevice = auhalHostApi->devIds[outStreamParams->device] ;
        ERR_WRAP( AudioUnitSetProperty( *audioUnit,
@@ -891,6 +1022,24 @@ static PaError OpenAndSetupOneAudioUnit(
                     audioDevice,
                     sizeof(AudioDeviceID) ) );
     }
+    /* -- add listener for dropouts -- */
+    result = AudioDeviceAddPropertyListener( *audioDevice,
+                                             0,
+                                             outStreamParams ? false : true,
+                                             kAudioDeviceProcessorOverload,
+                                             xrunCallback,
+                                             addToXRunListenerList( (void *)stream ) ) ;
+    if( result == kAudioHardwareIllegalOperationError ) {
+       // -- already registered, we're good
+    } else {
+       // -- not already registered, just check for errors
+       ERR_WRAP( result );
+    }
+    /* -- listen for stream start and stop -- */
+    ERR_WRAP( AudioUnitAddPropertyListener( *audioUnit,
+                                            kAudioOutputUnitProperty_IsRunning,
+                                            startStopCallback,
+                                            (void *)stream ) );
 
     /* -- set format -- */
     bzero( &desiredFormat, sizeof(desiredFormat) );
@@ -1010,7 +1159,7 @@ static PaError OpenAndSetupOneAudioUnit(
                             kAudioUnitScope_Input,
                             OUTPUT_ELEMENT,
                             actualOutputFramesPerBuffer,
-                            sizeof(unsigned long) ) );
+                            sizeof(*actualOutputFramesPerBuffer) ) );
        ERR_WRAP( AudioUnitGetProperty( *audioUnit,
                             kAudioUnitProperty_MaximumFramesPerSlice,
                             kAudioUnitScope_Global,
@@ -1025,7 +1174,7 @@ static PaError OpenAndSetupOneAudioUnit(
                             kAudioUnitScope_Output,
                             INPUT_ELEMENT,
                             actualInputFramesPerBuffer,
-                            sizeof(unsigned long) ) );
+                            sizeof(*actualInputFramesPerBuffer) ) );
 /* Don't know why this causes problems
        ERR_WRAP( AudioUnitGetProperty( *audioUnit,
                             kAudioUnitProperty_MaximumFramesPerSlice,
@@ -1275,6 +1424,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->inputFramesPerBuffer = 0;
     stream->outputFramesPerBuffer = 0;
     stream->bufferProcessorIsInitialized = FALSE;
+	stream->timingInformationMutexIsInitialized = 0;
 
     /* assert( streamCallback ) ; */ /* only callback mode is implemented */
     if( streamCallback )
@@ -1305,7 +1455,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
           /*requested a realtively low latency. make sure this is in range of devices */
           /*try to get the device's min natural buffer size and use that (but no smaller than 64).*/
           AudioValueRange audioRange;
-          size_t size = sizeof( audioRange );
+          UInt32 size = sizeof( audioRange );
           if( inputParameters ) {
              WARNING( result = AudioDeviceGetProperty( auhalHostApi->devIds[inputParameters->device],
                                           0,
@@ -1315,6 +1465,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
              if( result )
                 requested = MAX( requested, audioRange.mMinimum );
           }
+          size = sizeof( audioRange );
           if( outputParameters ) {
              WARNING( result = AudioDeviceGetProperty( auhalHostApi->devIds[outputParameters->device],
                                           0,
@@ -1328,7 +1479,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
           /* requested a realtively high latency. make sure this is in range of devices */
           /*try to get the device's max natural buffer size and use that (but no larger than 1024).*/
           AudioValueRange audioRange;
-          size_t size = sizeof( audioRange );
+          UInt32 size = sizeof( audioRange );
           requested = MIN( requested, 1024 );
           if( inputParameters ) {
              WARNING( result = AudioDeviceGetProperty( auhalHostApi->devIds[inputParameters->device],
@@ -1339,6 +1490,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
              if( result )
                 requested = MIN( requested, audioRange.mMaximum );
           }
+          size = sizeof( audioRange );
           if( outputParameters ) {
              WARNING( result = AudioDeviceGetProperty( auhalHostApi->devIds[outputParameters->device],
                                           0,
@@ -1359,17 +1511,22 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     /* -- Now we actually open and setup streams. -- */
     if( inputParameters && outputParameters && outputParameters->device == inputParameters->device )
     { /* full duplex. One device. */
-       result = OpenAndSetupOneAudioUnit( inputParameters,
+       UInt32 inputFramesPerBuffer  = (UInt32) stream->inputFramesPerBuffer;
+       UInt32 outputFramesPerBuffer = (UInt32) stream->outputFramesPerBuffer;
+       result = OpenAndSetupOneAudioUnit( stream,
+                                          inputParameters,
                                           outputParameters,
                                           framesPerBuffer,
-                                          &(stream->inputFramesPerBuffer),
-                                          &(stream->outputFramesPerBuffer),
+                                          &inputFramesPerBuffer,
+                                          &outputFramesPerBuffer,
                                           auhalHostApi,
                                           &(stream->inputUnit),
                                           &(stream->inputSRConverter),
                                           &(stream->inputDevice),
                                           sampleRate,
                                           stream );
+       stream->inputFramesPerBuffer = inputFramesPerBuffer;
+       stream->outputFramesPerBuffer = outputFramesPerBuffer;
        stream->outputUnit = stream->inputUnit;
        stream->outputDevice = stream->inputDevice;
        if( result != paNoError )
@@ -1377,11 +1534,14 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     }
     else
     { /* full duplex, different devices OR simplex */
-       result = OpenAndSetupOneAudioUnit( NULL,
+       UInt32 outputFramesPerBuffer = (UInt32) stream->outputFramesPerBuffer;
+       UInt32 inputFramesPerBuffer  = (UInt32) stream->inputFramesPerBuffer;
+       result = OpenAndSetupOneAudioUnit( stream,
+                                          NULL,
                                           outputParameters,
                                           framesPerBuffer,
                                           NULL,
-                                          &(stream->outputFramesPerBuffer),
+                                          &outputFramesPerBuffer,
                                           auhalHostApi,
                                           &(stream->outputUnit),
                                           NULL,
@@ -1390,10 +1550,11 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                                           stream );
        if( result != paNoError )
            goto error;
-       result = OpenAndSetupOneAudioUnit( inputParameters,
+       result = OpenAndSetupOneAudioUnit( stream,
+                                          inputParameters,
                                           NULL,
                                           framesPerBuffer,
-                                          &(stream->inputFramesPerBuffer),
+                                          &inputFramesPerBuffer,
                                           NULL,
                                           auhalHostApi,
                                           &(stream->inputUnit),
@@ -1403,6 +1564,8 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                                           stream );
        if( result != paNoError )
            goto error;
+       stream->inputFramesPerBuffer = inputFramesPerBuffer;
+       stream->outputFramesPerBuffer = outputFramesPerBuffer;
     }
 
     if( stream->inputUnit ) {
@@ -1456,8 +1619,16 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
           }
 
           /* now we can initialize the ring buffer */
+          //FIXME: element size whould probably be szfl*inputchan
+          //       but that will require some work all over the
+          //       place to patch up. szfl may be sufficient and would
+          //       be way easier to handle, but it seems clear from the
+          //       discussion that buffer processor compatibility
+          //       requires szfl*inputchan.
+          //       See revision 1346 and discussion:
+          //       http://techweb.rfa.org/pipermail/portaudio/2008-February/008295.html
           PaUtil_InitializeRingBuffer( &stream->inputRingBuffer,
-                                   ringSize*szfl, data ) ;
+                                   1, ringSize*szfl, data ) ;
           /* advance the read point a little, so we are reading from the
              middle of the buffer */
           if( stream->outputUnit )
@@ -1554,7 +1725,39 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->userInChan  = inputChannelCount;
     stream->userOutChan = outputChannelCount;
 
-    stream->isTimeSet   = FALSE;
+	pthread_mutex_init( &stream->timingInformationMutex, NULL );
+	stream->timingInformationMutexIsInitialized = 1;
+	
+	if( stream->outputUnit ) {
+		UpdateReciprocalOfActualOutputSampleRateFromDeviceProperty( stream );
+		stream->recipricalOfActualOutputSampleRate_ioProcCopy = stream->recipricalOfActualOutputSampleRate;
+		
+		AudioDeviceAddPropertyListener( stream->outputDevice, 0, /* isInput = */ FALSE, kAudioDevicePropertyActualSampleRate, 
+									   AudioDevicePropertyActualSampleRateListenerProc, stream );
+									   		
+		UpdateOutputLatencySamplesFromDeviceProperty( stream );
+		stream->deviceOutputLatencySamples_ioProcCopy = stream->deviceOutputLatencySamples;
+		
+		AudioDeviceAddPropertyListener( stream->outputDevice, 0, /* isInput = */ FALSE, kAudioDevicePropertyLatency, 
+									   AudioDevicePropertyOutputLatencySamplesListenerProc, stream );
+		
+	}else{
+		stream->recipricalOfActualOutputSampleRate = 1.;
+		stream->recipricalOfActualOutputSampleRate_ioProcCopy = 0.;
+		stream->deviceOutputLatencySamples_ioProcCopy = 0;
+	}
+	
+	if( stream->inputUnit ) {
+		UpdateInputLatencySamplesFromDeviceProperty( stream );
+		stream->deviceInputLatencySamples_ioProcCopy = stream->deviceInputLatencySamples;
+		
+		AudioDeviceAddPropertyListener( stream->inputDevice, 0, /* isInput = */ TRUE, kAudioDevicePropertyLatency, 
+									   AudioDevicePropertyInputLatencySamplesListenerProc, stream );
+	}else{
+		stream->deviceInputLatencySamples = 0;
+		stream->deviceInputLatencySamples_ioProcCopy = 0;
+	}
+	
     stream->state = STOPPED;
     stream->xrunFlags = 0;
 
@@ -1567,56 +1770,12 @@ error:
     return result;
 }
 
-PaTime GetStreamTime( PaStream *s )
-{
-   /* FIXME: I am not at all sure this timing info stuff is right.
-             patest_sine_time reports negative latencies, which is wierd.*/
-    PaMacCoreStream *stream = (PaMacCoreStream*)s;
-    AudioTimeStamp timeStamp;
-
-    VVDBUG(("GetStreamTime()\n"));
-
-    if ( !stream->isTimeSet )
-        return (PaTime)0;
-
-    if ( stream->outputDevice ) {
-        AudioDeviceGetCurrentTime( stream->outputDevice, &timeStamp);
-        return (PaTime)(timeStamp.mSampleTime - stream->startTime.mSampleTime)/stream->outDeviceSampleRate;
-    } else if ( stream->inputDevice ) {
-        AudioDeviceGetCurrentTime( stream->inputDevice, &timeStamp);
-    return (PaTime)(timeStamp.mSampleTime - stream->startTime.mSampleTime)/stream->inDeviceSampleRate;
-    } else {
-        return (PaTime)0;
-    }
-}
-
-static void setStreamStartTime( PaStream *stream )
-{
-   /* FIXME: I am not at all sure this timing info stuff is right.
-             patest_sine_time reports negative latencies, which is wierd.*/
-   PaMacCoreStream *s = (PaMacCoreStream *) stream;
-   VVDBUG(("setStreamStartTime()\n"));
-   if( s->outputDevice )
-      AudioDeviceGetCurrentTime( s->outputDevice, &s->startTime);
-   else if( s->inputDevice )
-      AudioDeviceGetCurrentTime( s->inputDevice, &s->startTime);
-   else
-      bzero( &s->startTime, sizeof( s->startTime ) );
-
-   //FIXME: we need a memory barier here
-
-   s->isTimeSet = TRUE;
-}
 
+#define HOST_TIME_TO_PA_TIME( x ) ( AudioConvertHostTimeToNanos( (x) ) * 1.0E-09) /* convert to nanoseconds and then to seconds */
 
-static PaTime TimeStampToSecs(PaMacCoreStream *stream, const AudioTimeStamp* timeStamp)
+PaTime GetStreamTime( PaStream *s )
 {
-    VVDBUG(("TimeStampToSecs()\n"));
-    //printf( "ATS: %lu, %g, %g\n", timeStamp->mFlags, timeStamp->mSampleTime, timeStamp->mRateScalar );
-    if (timeStamp->mFlags & kAudioTimeStampSampleTimeValid)
-        return (timeStamp->mSampleTime / stream->sampleRate);
-    else
-        return 0;
+	return HOST_TIME_TO_PA_TIME( AudioGetCurrentHostTime() ); 
 }
 
 #define RING_BUFFER_EMPTY (1000)
@@ -1627,19 +1786,19 @@ static OSStatus ringBufferIOProc( AudioConverterRef inAudioConverter,
                              void*inUserData )
 {
    void *dummyData;
-   long dummySize;
+   ring_buffer_size_t dummySize;
    PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData;
 
    VVDBUG(("ringBufferIOProc()\n"));
 
-   assert( sizeof( UInt32 ) == sizeof( long ) );
    if( PaUtil_GetRingBufferReadAvailable( rb ) == 0 ) {
       *outData = NULL;
       *ioDataSize = 0;
       return RING_BUFFER_EMPTY;
    }
+   assert(sizeof(UInt32) == sizeof(ring_buffer_size_t));
    PaUtil_GetRingBufferReadRegions( rb, *ioDataSize,
-                                    outData, (long *)ioDataSize, 
+                                    outData, (ring_buffer_size_t *)ioDataSize, 
                                     &dummyData, &dummySize );
       
    assert( *ioDataSize );
@@ -1697,24 +1856,68 @@ static OSStatus AudioIOProc( void *inRefCon,
    }
       ----------------------------------------------------------------- */
 
-   if( !stream->isTimeSet )
-      setStreamStartTime( stream );
-
-   if( isRender ) {
-      AudioTimeStamp currentTime;
-      timeInfo.outputBufferDacTime = TimeStampToSecs(stream, inTimeStamp);
-      AudioDeviceGetCurrentTime(stream->outputDevice, &currentTime);
-      timeInfo.currentTime = TimeStampToSecs(stream, &currentTime);
-   }
-   if( isRender && stream->inputUnit == stream->outputUnit )
-      timeInfo.inputBufferAdcTime = TimeStampToSecs(stream, inTimeStamp);
-   if( !isRender ) {
-      AudioTimeStamp currentTime;
-      timeInfo.inputBufferAdcTime = TimeStampToSecs(stream, inTimeStamp);
-      AudioDeviceGetCurrentTime(stream->inputDevice, &currentTime);
-      timeInfo.currentTime = TimeStampToSecs(stream, &currentTime);
-   }
-
+	/* compute PaStreamCallbackTimeInfo */
+	
+	if( pthread_mutex_trylock( &stream->timingInformationMutex ) == 0 ){
+		/* snapshot the ioproc copy of timing information */
+		stream->deviceOutputLatencySamples_ioProcCopy = stream->deviceOutputLatencySamples;
+		stream->recipricalOfActualOutputSampleRate_ioProcCopy = stream->recipricalOfActualOutputSampleRate;
+		stream->deviceInputLatencySamples_ioProcCopy = stream->deviceInputLatencySamples;
+		pthread_mutex_unlock( &stream->timingInformationMutex );
+	}
+	
+	/* For timeInfo.currentTime we could calculate current time backwards from the HAL audio 
+	 output time to give a more accurate impression of the current timeslice but it doesn't 
+	 seem worth it at the moment since other PA host APIs don't do any better.
+	 */
+	timeInfo.currentTime = HOST_TIME_TO_PA_TIME( AudioGetCurrentHostTime() );
+	
+	/*
+	 For an input HAL AU, inTimeStamp is the time the samples are received from the hardware,
+	 for an output HAL AU inTimeStamp is the time the samples are sent to the hardware. 
+	 PA expresses timestamps in terms of when the samples enter the ADC or leave the DAC
+	 so we add or subtract kAudioDevicePropertyLatency below.
+	 */
+	
+	/* FIXME: not sure what to do below if the host timestamps aren't valid (kAudioTimeStampHostTimeValid isn't set)
+	 Could ask on CA mailing list if it is possible for it not to be set. If so, could probably grab a now timestamp
+	 at the top and compute from there (modulo scheduling jitter) or ask on mailing list for other options. */
+	
+	if( isRender )
+	{
+		if( stream->inputUnit ) /* full duplex */
+		{
+			if( stream->inputUnit == stream->outputUnit ) /* full duplex AUHAL IOProc */
+			{
+				/* FIXME: review. i'm not sure this computation of inputBufferAdcTime is correct for a full-duplex AUHAL */
+				timeInfo.inputBufferAdcTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime) 
+						- stream->deviceInputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy; // FIXME should be using input sample rate here?
+				timeInfo.outputBufferDacTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime) 
+						+ stream->deviceOutputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy;
+			}
+			else /* full duplex with ring-buffer from a separate input AUHAL ioproc */
+			{
+				/* FIXME: review. this computation of inputBufferAdcTime is definitely wrong since it doesn't take the ring buffer latency into account */
+				timeInfo.inputBufferAdcTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime) 
+						- stream->deviceInputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy; // FIXME should be using input sample rate here?
+				timeInfo.outputBufferDacTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime)
+						+ stream->deviceOutputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy;
+			}
+		}
+		else /* output only */
+		{
+			timeInfo.inputBufferAdcTime = 0;
+			timeInfo.outputBufferDacTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime)
+					+ stream->deviceOutputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy;
+		}
+	}
+	else /* input only */
+	{
+		timeInfo.inputBufferAdcTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime) 
+				- stream->deviceInputLatencySamples_ioProcCopy * stream->recipricalOfActualOutputSampleRate_ioProcCopy; // FIXME should be using input sample rate here?
+		timeInfo.outputBufferDacTime = 0;
+	}
+	
    //printf( "---%g, %g, %g\n", timeInfo.inputBufferAdcTime, timeInfo.currentTime, timeInfo.outputBufferDacTime );
 
    if( isRender && stream->inputUnit == stream->outputUnit
@@ -1727,14 +1930,14 @@ static OSStatus AudioIOProc( void *inRefCon,
        * we do not use the input SR converter or the input ring buffer.
        *
        */
-      OSErr err = 0;
+      OSStatus err = 0;
       unsigned long frames;
 
       /* -- start processing -- */
       PaUtil_BeginBufferProcessing( &(stream->bufferProcessor),
                                     &timeInfo,
                                     stream->xrunFlags );
-      stream->xrunFlags = 0;
+      stream->xrunFlags = 0; //FIXME: this flag also gets set outside by a callback, which calls the xrunCallback function. It should be in the same thread as the main audio callback, but the apple docs just use the word "usually" so it may be possible to loose an xrun notification, if that callback happens here.
 
       /* -- compute frames. do some checks -- */
       assert( ioData->mNumberBuffers == 1 );
@@ -1748,7 +1951,8 @@ static OSStatus AudioIOProc( void *inRefCon,
                     INPUT_ELEMENT,
                     inNumberFrames,
                     &stream->inputAudioBufferList );
-      /* FEEDBACK: I'm not sure what to do when this call fails */
+      /* FEEDBACK: I'm not sure what to do when this call fails. There's nothing in the PA API to
+       * do about failures in the callback system. */
       assert( !err );
 
       PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames );
@@ -1850,7 +2054,7 @@ static OSStatus AudioIOProc( void *inRefCon,
                because we have to do a little buffer processing that the
                AudioConverter would otherwise handle for us. */
             void *data1, *data2;
-            long size1, size2;
+            ring_buffer_size_t size1, size2;
             PaUtil_GetRingBufferReadRegions( &stream->inputRingBuffer,
                                              inChan*frames*flsz,
                                              &data1, &size1,
@@ -1868,7 +2072,7 @@ static OSStatus AudioIOProc( void *inRefCon,
                PaUtil_AdvanceRingBufferReadIndex(&stream->inputRingBuffer, size1 );
             } else if( ( size1 + size2 ) / ( flsz * inChan ) < frames ) {
                /*we underflowed. take what data we can, zero the rest.*/
-               float data[frames*inChan];
+               unsigned char data[frames*inChan*flsz];
                if( size1 )
                   memcpy( data, data1, size1 );
                if( size2 )
@@ -1922,7 +2126,7 @@ static OSStatus AudioIOProc( void *inRefCon,
        * if this is an input-only stream, we need to process it more,
        * otherwise, we let the output case deal with it.
        */
-      OSErr err = 0;
+      OSStatus err = 0;
       int chan = stream->inputAudioBufferList.mBuffers[0].mNumberChannels ;
       /* FIXME: looping here may not actually be necessary, but it was something I tried in testing. */
       do {
@@ -2025,7 +2229,6 @@ static OSStatus AudioIOProc( void *inRefCon,
    case paContinue: break;
    case paComplete:
    case paAbort:
-      stream->isTimeSet = FALSE;
       stream->state = CALLBACK_STOPPED ;
       if( stream->outputUnit )
          AudioOutputUnitStop(stream->outputUnit);
@@ -2054,6 +2257,37 @@ static PaError CloseStream( PaStream* s )
     VDBUG( ( "Closing stream.\n" ) );
 
     if( stream ) {
+		
+		if( stream->outputUnit ) {
+			AudioDeviceRemovePropertyListener( stream->outputDevice, 0, /* isInput = */ FALSE, kAudioDevicePropertyActualSampleRate, 
+											  AudioDevicePropertyActualSampleRateListenerProc );
+			AudioDeviceRemovePropertyListener( stream->outputDevice, 0, /* isInput = */ FALSE, kAudioDevicePropertyLatency, 
+											  AudioDevicePropertyOutputLatencySamplesListenerProc );
+		}
+		
+		if( stream->inputUnit ) {
+			AudioDeviceRemovePropertyListener( stream->inputDevice, 0, /* isInput = */ TRUE, kAudioDevicePropertyLatency, 
+											  AudioDevicePropertyInputLatencySamplesListenerProc );
+		}
+		
+       if( stream->outputUnit ) {
+          int count = removeFromXRunListenerList( stream );
+          if( count == 0 )
+             AudioDeviceRemovePropertyListener( stream->outputDevice,
+                                                0,
+                                                false,
+                                                kAudioDeviceProcessorOverload,
+                                                xrunCallback );
+       }
+       if( stream->inputUnit && stream->outputUnit != stream->inputUnit ) {
+          int count = removeFromXRunListenerList( stream );
+          if( count == 0 )
+             AudioDeviceRemovePropertyListener( stream->inputDevice,
+                                                0,
+                                                true,
+                                                kAudioDeviceProcessorOverload,
+                                                xrunCallback );
+       }
        if( stream->outputUnit && stream->outputUnit != stream->inputUnit ) {
           AudioUnitUninitialize( stream->outputUnit );
           CloseComponent( stream->outputUnit );
@@ -2082,6 +2316,10 @@ static PaError CloseStream( PaStream* s )
           return result;
        if( stream->bufferProcessorIsInitialized )
           PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+		
+       if( stream->timingInformationMutexIsInitialized )
+          pthread_mutex_destroy( &stream->timingInformationMutex );
+
        PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
        PaUtil_FreeMemory( stream );
     }
@@ -2089,11 +2327,10 @@ static PaError CloseStream( PaStream* s )
     return result;
 }
 
-
 static PaError StartStream( PaStream *s )
 {
     PaMacCoreStream *stream = (PaMacCoreStream*)s;
-    OSErr result = noErr;
+    OSStatus result = noErr;
     VVDBUG(("StartStream()\n"));
     VDBUG( ( "Starting stream.\n" ) );
 
@@ -2112,10 +2349,7 @@ static PaError StartStream( PaStream *s )
     if( stream->outputUnit && stream->outputUnit != stream->inputUnit ) {
        ERR_WRAP( AudioOutputUnitStart(stream->outputUnit) );
     }
-
-    //setStreamStartTime( stream );
-    //stream->isTimeSet = TRUE;
-
+	
     return paNoError;
 #undef ERR_WRAP
 }
@@ -2138,7 +2372,7 @@ static ComponentResult BlockWhileAudioUnitIsRunning( AudioUnit audioUnit, AudioU
 static PaError StopStream( PaStream *s )
 {
     PaMacCoreStream *stream = (PaMacCoreStream*)s;
-    OSErr result = noErr;
+    OSStatus result = noErr;
     PaError paErr;
     VVDBUG(("StopStream()\n"));
 
@@ -2146,7 +2380,6 @@ static PaError StopStream( PaStream *s )
     waitUntilBlioWriteBufferIsFlushed( &stream->blio );
     VDBUG( ( "Stopping stream.\n" ) );
 
-    stream->isTimeSet = FALSE;
     stream->state = STOPPING;
 
 #define ERR_WRAP(mac_err) do { result = mac_err ; if ( result != noErr ) return ERR(result) ; } while(0)
@@ -2194,10 +2427,6 @@ static PaError StopStream( PaStream *s )
     if( paErr )
        return paErr;
 
-/*
-    //stream->isTimeSet = FALSE;
-*/
-
     VDBUG( ( "Stream Stopped.\n" ) );
     return paNoError;
 #undef ERR_WRAP
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c b/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
index 3b81389d3..6d31a713d 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
@@ -53,7 +53,7 @@
 
 /**
  @file
- @ingroup hostaip_src
+ @ingroup hostapi_src
 
  This file contains the implementation
  required for blocking I/O. It is separated from pa_mac_core.c simply to ease
@@ -85,6 +85,22 @@ static size_t computeSampleSizeFromFormat( PaSampleFormat format )
    default: return 0;
    }
 }
+/*
+ * Same as computeSampleSizeFromFormat, except that if
+ * the size is not a power of two, it returns the next power of two up
+ */
+static size_t computeSampleSizeFromFormatPow2( PaSampleFormat format )
+{
+   switch( format ) {
+   case paFloat32: return 4;
+   case paInt32: return 4;
+   case paInt24: return 4;
+   case paInt16: return 2;
+   case paInt8: case paUInt8: return 1;
+   default: return 0;
+   }
+}
+
 
 
 /*
@@ -105,6 +121,7 @@ PaError initializeBlioRingBuffers(
 {
    void *data;
    int result;
+   OSStatus err;
 
    /* zeroify things */
    bzero( blio, sizeof( PaMacBlio ) );
@@ -114,10 +131,14 @@ PaError initializeBlioRingBuffers(
    blio->outputRingBuffer.buffer = NULL;
 
    /* initialize simple data */
+   blio->ringBufferFrames = ringBufferSize;
    blio->inputSampleFormat = inputSampleFormat;
-   blio->inputSampleSize = computeSampleSizeFromFormat(inputSampleFormat);
+   blio->inputSampleSizeActual = computeSampleSizeFromFormat(inputSampleFormat);
+   blio->inputSampleSizePow2 = computeSampleSizeFromFormatPow2(inputSampleFormat);
    blio->outputSampleFormat = outputSampleFormat;
-   blio->outputSampleSize = computeSampleSizeFromFormat(outputSampleFormat);
+   blio->outputSampleSizeActual = computeSampleSizeFromFormat(outputSampleFormat);
+   blio->outputSampleSizePow2 = computeSampleSizeFromFormatPow2(outputSampleFormat);
+
    blio->framesPerBuffer = framesPerBuffer;
    blio->inChan = inChan;
    blio->outChan = outChan;
@@ -142,30 +163,32 @@ PaError initializeBlioRingBuffers(
    result = UNIX_ERR( pthread_cond_init( &(blio->outputCond), NULL ) );
 #endif
    if( inChan ) {
-      data = calloc( ringBufferSize, blio->inputSampleSize );
+      data = calloc( ringBufferSize, blio->inputSampleSizePow2*inChan );
       if( !data )
       {
          result = paInsufficientMemory;
          goto error;
       }
 
-      assert( 0 == PaUtil_InitializeRingBuffer(
+      err = PaUtil_InitializeRingBuffer(
             &blio->inputRingBuffer,
-            ringBufferSize*blio->inputSampleSize,
-            data ) );
+            1, ringBufferSize*blio->inputSampleSizePow2*inChan,
+            data );
+      assert( !err );
    }
    if( outChan ) {
-      data = calloc( ringBufferSize, blio->outputSampleSize );
+      data = calloc( ringBufferSize, blio->outputSampleSizePow2*outChan );
       if( !data )
       {
          result = paInsufficientMemory;
          goto error;
       }
 
-      assert( 0 == PaUtil_InitializeRingBuffer(
+      err = PaUtil_InitializeRingBuffer(
             &blio->outputRingBuffer,
-            ringBufferSize*blio->outputSampleSize,
-            data ) );
+            1, ringBufferSize*blio->outputSampleSizePow2*outChan,
+            data );
+      assert( !err );
    }
 
    result = resetBlioRingBuffers( blio );
@@ -247,7 +270,8 @@ PaError resetBlioRingBuffers( PaMacBlio *blio )
       bzero( blio->outputRingBuffer.buffer,
              blio->outputRingBuffer.bufferSize );
       /* Advance buffer */
-      PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->outputRingBuffer.bufferSize );
+      PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->ringBufferFrames*blio->outputSampleSizeActual*blio->outChan );
+      //PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->outputRingBuffer.bufferSize );
 
       /* Update isOutputFull. */
 #ifdef PA_MAC__BLIO_MUTEX
@@ -323,6 +347,8 @@ int BlioCallback( const void *input, void *output, unsigned long frameCount,
    long avail;
    long toRead;
    long toWrite;
+   long read;
+   long written;
 
    /* set flags returned by OS: */
    OSAtomicOr32( statusFlags, &blio->statusFlags ) ;
@@ -332,14 +358,15 @@ int BlioCallback( const void *input, void *output, unsigned long frameCount,
       avail = PaUtil_GetRingBufferWriteAvailable( &blio->inputRingBuffer );
 
       /* check for underflow */
-      if( avail < frameCount * blio->inputSampleSize * blio->inChan )
+      if( avail < frameCount * blio->inputSampleSizeActual * blio->inChan )
          OSAtomicOr32( paInputOverflow, &blio->statusFlags );
 
-      toRead = MIN( avail, frameCount * blio->inputSampleSize * blio->inChan );
+      toRead = MIN( avail, frameCount * blio->inputSampleSizeActual * blio->inChan );
 
       /* copy the data */
       /*printf( "reading %d\n", toRead );*/
-      assert( toRead == PaUtil_WriteRingBuffer( &blio->inputRingBuffer, input, toRead ) );
+      read = PaUtil_WriteRingBuffer( &blio->inputRingBuffer, input, toRead );
+      assert( toRead == read );
 #ifdef PA_MAC__BLIO_MUTEX
       /* Priority inversion. See notes below. */
       blioSetIsInputEmpty( blio, false );
@@ -352,17 +379,18 @@ int BlioCallback( const void *input, void *output, unsigned long frameCount,
       avail = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer );
 
       /* check for underflow */
-      if( avail < frameCount * blio->outputSampleSize * blio->outChan )
+      if( avail < frameCount * blio->outputSampleSizeActual * blio->outChan )
          OSAtomicOr32( paOutputUnderflow, &blio->statusFlags );
 
-      toWrite = MIN( avail, frameCount * blio->outputSampleSize * blio->outChan );
+      toWrite = MIN( avail, frameCount * blio->outputSampleSizeActual * blio->outChan );
 
-      if( toWrite != frameCount * blio->outputSampleSize * blio->outChan )
+      if( toWrite != frameCount * blio->outputSampleSizeActual * blio->outChan )
          bzero( ((char *)output)+toWrite,
-                frameCount * blio->outputSampleSize * blio->outChan - toWrite );
+                frameCount * blio->outputSampleSizeActual * blio->outChan - toWrite );
       /* copy the data */
       /*printf( "writing %d\n", toWrite );*/
-      assert( toWrite == PaUtil_ReadRingBuffer( &blio->outputRingBuffer, output, toWrite ) );
+      written = PaUtil_ReadRingBuffer( &blio->outputRingBuffer, output, toWrite );
+      assert( toWrite == written );
 #ifdef PA_MAC__BLIO_MUTEX
       /* We have a priority inversion here. However, we will only have to
          wait if this was true and is now false, which means we've got
@@ -413,11 +441,11 @@ PaError ReadStream( PaStream* stream,
 #endif
           }
        } while( avail == 0 );
-       toRead = MIN( avail, frames * blio->inputSampleSize * blio->inChan );
-       toRead -= toRead % blio->inputSampleSize * blio->inChan ;
+       toRead = MIN( avail, frames * blio->inputSampleSizeActual * blio->inChan );
+       toRead -= toRead % blio->inputSampleSizeActual * blio->inChan ;
        PaUtil_ReadRingBuffer( &blio->inputRingBuffer, (void *)cbuf, toRead );
        cbuf += toRead;
-       frames -= toRead / ( blio->inputSampleSize * blio->inChan );
+       frames -= toRead / ( blio->inputSampleSizeActual * blio->inChan );
 
        if( toRead == avail ) {
 #ifdef PA_MAC_BLIO_MUTEX
@@ -443,7 +471,7 @@ PaError ReadStream( PaStream* stream,
 
     /* report underflow only once: */
     if( ret ) {
-       OSAtomicAnd32( ~paInputOverflow, &blio->statusFlags );
+       OSAtomicAnd32( (uint32_t)(~paInputOverflow), &blio->statusFlags );
        ret = paInputOverflowed;
     }
 
@@ -491,11 +519,11 @@ PaError WriteStream( PaStream* stream,
           }
        } while( avail == 0 );
 
-       toWrite = MIN( avail, frames * blio->outputSampleSize * blio->outChan );
-       toWrite -= toWrite % blio->outputSampleSize * blio->outChan ;
+       toWrite = MIN( avail, frames * blio->outputSampleSizeActual * blio->outChan );
+       toWrite -= toWrite % blio->outputSampleSizeActual * blio->outChan ;
        PaUtil_WriteRingBuffer( &blio->outputRingBuffer, (void *)cbuf, toWrite );
        cbuf += toWrite;
-       frames -= toWrite / ( blio->outputSampleSize * blio->outChan );
+       frames -= toWrite / ( blio->outputSampleSizeActual * blio->outChan );
 
 #ifdef PA_MAC_BLIO_MUTEX
        if( toWrite == avail ) {
@@ -520,7 +548,7 @@ PaError WriteStream( PaStream* stream,
 
     /* report underflow only once: */
     if( ret ) {
-      OSAtomicAnd32( ~paOutputUnderflow, &blio->statusFlags );
+      OSAtomicAnd32( (uint32_t)(~paOutputUnderflow), &blio->statusFlags );
       ret = paOutputUnderflowed;
     }
 
@@ -549,7 +577,7 @@ signed long GetStreamReadAvailable( PaStream* stream )
     VVDBUG(("GetStreamReadAvailable()\n"));
 
     return PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer )
-                         / ( blio->outputSampleSize * blio->outChan );
+                         / ( blio->inputSampleSizeActual * blio->inChan );
 }
 
 
@@ -559,6 +587,6 @@ signed long GetStreamWriteAvailable( PaStream* stream )
     VVDBUG(("GetStreamWriteAvailable()\n"));
 
     return PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer )
-                         / ( blio->outputSampleSize * blio->outChan );
+                         / ( blio->outputSampleSizeActual * blio->outChan );
 }
 
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h b/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h
index 8ad79eaa7..971223b3c 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h
@@ -53,7 +53,7 @@
 
 /**
  @file
- @ingroup hostaip_src
+ @ingroup hostapi_src
 */
 
 #ifndef PA_MAC_CORE_BLOCKING_H_
@@ -79,10 +79,13 @@
 typedef struct {
     PaUtilRingBuffer inputRingBuffer;
     PaUtilRingBuffer outputRingBuffer;
+    size_t ringBufferFrames;
     PaSampleFormat inputSampleFormat;
-    size_t inputSampleSize;
+    size_t inputSampleSizeActual;
+    size_t inputSampleSizePow2;
     PaSampleFormat outputSampleFormat;
-    size_t outputSampleSize;
+    size_t outputSampleSizeActual;
+    size_t outputSampleSizePow2;
 
     size_t framesPerBuffer;
 
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h b/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
index 998b819ce..9277321b3 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
@@ -61,10 +61,11 @@
 #ifndef PA_MAC_CORE_INTERNAL_H__
 #define PA_MAC_CORE_INTERNAL_H__
 
+#include <CoreAudio/CoreAudio.h>
+#include <CoreServices/CoreServices.h>
 #include <AudioUnit/AudioUnit.h>
 #include <AudioToolbox/AudioToolbox.h>
 
-
 #include "portaudio.h"
 #include "pa_util.h"
 #include "pa_hostapi.h"
@@ -139,14 +140,15 @@ typedef struct PaMacCoreStream
     /* We need to preallocate an inputBuffer for reading data. */
     AudioBufferList inputAudioBufferList;
     AudioTimeStamp startTime;
+    /* FIXME: instead of volatile, these should be properly memory barriered */
     volatile PaStreamCallbackFlags xrunFlags;
-    volatile bool isTimeSet;
     volatile enum {
        STOPPED          = 0, /* playback is completely stopped,
                                 and the user has called StopStream(). */
        CALLBACK_STOPPED = 1, /* callback has requested stop,
                                 but user has not yet called StopStream(). */
-       STOPPING         = 2, /* The stream is in the process of closing.
+       STOPPING         = 2, /* The stream is in the process of closing
+                                because the user has called StopStream.
                                 This state is just used internally;
                                 externally it is indistinguishable from
                                 ACTIVE.*/
@@ -156,6 +158,18 @@ typedef struct PaMacCoreStream
     //these may be different from the stream sample rate due to SR conversion:
     double outDeviceSampleRate;
     double inDeviceSampleRate;
+	
+	/* data updated by main thread and notifications, protected by timingInformationMutex */
+	int timingInformationMutexIsInitialized;
+	pthread_mutex_t timingInformationMutex;
+	Float64 recipricalOfActualOutputSampleRate;
+	UInt32 deviceOutputLatencySamples;
+	UInt32 deviceInputLatencySamples;
+	
+	/* while the io proc is active, the following values are only accessed and manipulated by the ioproc */
+	Float64 recipricalOfActualOutputSampleRate_ioProcCopy;
+	UInt32 deviceOutputLatencySamples_ioProcCopy;
+	UInt32 deviceInputLatencySamples_ioProcCopy;
 }
 PaMacCoreStream;
 
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c b/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
index 374032513..b58b82202 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
@@ -57,6 +57,11 @@
 */
 
 #include "pa_mac_core_utilities.h"
+#include "pa_mac_core_internal.h"
+#include <libkern/OSAtomic.h>
+#include <strings.h>
+#include <pthread.h>
+#include <sys/time.h>
 
 PaError PaMacCore_SetUnixError( int err, int line )
 {
@@ -199,10 +204,19 @@ PaError PaMacCore_SetError(OSStatus error, int line, int isError)
     else
         errorType = "Warning";
 
-    if ((int)error < -99999 || (int)error > 99999)
-        DBUG(("%s on line %d: err='%4s', msg='%s'\n", errorType, line, (const char *)&error, errorText));
-    else
-        DBUG(("%s on line %d: err=%d, 0x%x, msg='%s'\n", errorType, line, (int)error, (unsigned)error, errorText));
+    char str[20];
+    // see if it appears to be a 4-char-code
+    *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
+    if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4]))
+    {
+        str[0] = str[5] = '\'';
+        str[6] = '\0';
+    } else {
+        // no, format it as an integer
+        sprintf(str, "%d", (int)error);
+    }
+
+    DBUG(("%s on line %d: err='%s', msg=%s\n", errorType, line, str, errorText));
 
     PaUtil_SetLastHostErrorInfo( paCoreAudio, error, errorText );
 
@@ -292,8 +306,13 @@ long computeRingBufferSize( const PaStreamParameters *inputParameters,
 /*
  * Durring testing of core audio, I found that serious crashes could occur
  * if properties such as sample rate were changed multiple times in rapid
- * succession. The function below has some fancy logic to make sure that changes
- * are acknowledged before another is requested. That seems to help a lot.
+ * succession. The function below could be used to with a condition variable.
+ * to prevent propertychanges from happening until the last property
+ * change is acknowledged. Instead, I implemented a busy-wait, which is simpler
+ * to implement b/c in second round of testing (nov '09) property changes occured
+ * quickly and so there was no real way to test the condition variable implementation.
+ * therefore, this function is not used, but it is aluded to in commented code below,
+ * since it represents a theoretically better implementation.
  */
 
 OSStatus propertyProc(
@@ -303,9 +322,7 @@ OSStatus propertyProc(
     AudioDevicePropertyID inPropertyID, 
     void* inClientData )
 {
-   MutexAndBool *mab = (MutexAndBool *) inClientData;
-   mab->once = TRUE;
-   pthread_mutex_unlock( &(mab->mutex) );
+   // this is where we would set the condition variable
    return noErr;
 }
 
@@ -313,7 +330,11 @@ OSStatus propertyProc(
    be acknowledged, and returns the final value, which is not guaranteed
    by this function to be the same as the desired value. Obviously, this
    function can only be used for data whose input and output are the
-   same size and format, and their size and format are known in advance.*/
+   same size and format, and their size and format are known in advance.
+   whether or not the call succeeds, if the data is successfully read,
+   it is returned in outPropertyData. If it is not read successfully,
+   outPropertyData is zeroed, which may or may not be useful in
+   determining if the property was read. */
 PaError AudioDeviceSetPropertyNowAndWaitForChange(
     AudioDeviceID inDevice,
     UInt32 inChannel, 
@@ -324,83 +345,72 @@ PaError AudioDeviceSetPropertyNowAndWaitForChange(
     void *outPropertyData )
 {
    OSStatus macErr;
-   int unixErr;
-   MutexAndBool mab;
    UInt32 outPropertyDataSize = inPropertyDataSize;
 
    /* First, see if it already has that value. If so, return. */
    macErr = AudioDeviceGetProperty( inDevice, inChannel,
                                  isInput, inPropertyID, 
                                  &outPropertyDataSize, outPropertyData );
-   if( macErr )
-      goto failMac2;
+   if( macErr ) {
+      memset( outPropertyData, 0, inPropertyDataSize );
+      goto failMac;
+   }
    if( inPropertyDataSize!=outPropertyDataSize )
       return paInternalError;
    if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) )
       return paNoError;
 
-   /* setup and lock mutex */
-   mab.once = FALSE;
-   unixErr = pthread_mutex_init( &mab.mutex, NULL );
-   if( unixErr )
-      goto failUnix2;
-   unixErr = pthread_mutex_lock( &mab.mutex );
-   if( unixErr )
-      goto failUnix;
+   /* Ideally, we'd use a condition variable to determine changes.
+      we could set that up here. */
 
-   /* add property listener */
+   /* If we were using a cond variable, we'd do something useful here,
+      but for now, this is just to make 10.6 happy. */
    macErr = AudioDeviceAddPropertyListener( inDevice, inChannel, isInput,
                                    inPropertyID, propertyProc,
-                                   &mab ); 
+                                   NULL ); 
    if( macErr )
+      /* we couldn't add a listener. */
       goto failMac;
+
    /* set property */
    macErr  = AudioDeviceSetProperty( inDevice, NULL, inChannel,
                                  isInput, inPropertyID,
                                  inPropertyDataSize, inPropertyData );
-   if( macErr ) {
-      /* we couldn't set the property, so we'll just unlock the mutex
-         and move on. */
-      pthread_mutex_unlock( &mab.mutex );
-   }
-
-   /* wait for property to change */                      
-   unixErr = pthread_mutex_lock( &mab.mutex );
-   if( unixErr )
-      goto failUnix;
-
-   /* now read the property back out */
-   macErr = AudioDeviceGetProperty( inDevice, inChannel,
-                                 isInput, inPropertyID, 
-                                 &outPropertyDataSize, outPropertyData );
    if( macErr )
       goto failMac;
-   /* cleanup */
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
-   unixErr = pthread_mutex_unlock( &mab.mutex );
-   if( unixErr )
-      goto failUnix2;
-   unixErr = pthread_mutex_destroy( &mab.mutex );
-   if( unixErr )
-      goto failUnix2;
 
+   /* busy-wait up to 30 seconds for the property to change */
+   /* busy-wait is justified here only because the correct alternative (condition variable)
+      was hard to test, since most of the waiting ended up being for setting rather than
+      getting in OS X 10.5. This was not the case in earlier OS versions. */
+   struct timeval tv1, tv2;
+   gettimeofday( &tv1, NULL );
+   memcpy( &tv2, &tv1, sizeof( struct timeval ) );
+   while( tv2.tv_sec - tv1.tv_sec < 30 ) {
+      /* now read the property back out */
+      macErr = AudioDeviceGetProperty( inDevice, inChannel,
+                                    isInput, inPropertyID, 
+                                    &outPropertyDataSize, outPropertyData );
+      if( macErr ) {
+         memset( outPropertyData, 0, inPropertyDataSize );
+         goto failMac;
+      }
+      /* and compare... */
+      if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) ) {
+         AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
+         return paNoError;
+      }
+      /* No match yet, so let's sleep and try again. */
+      Pa_Sleep( 100 );
+      gettimeofday( &tv2, NULL );
+   }
+   DBUG( ("Timeout waiting for device setting.\n" ) );
+   
+   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
    return paNoError;
 
- failUnix:
-   pthread_mutex_destroy( &mab.mutex );
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
-
- failUnix2:
-   DBUG( ("Error #%d while setting a device property: %s\n", unixErr, strerror( unixErr ) ) );
-   return paUnanticipatedHostError;
-
  failMac:
-   pthread_mutex_destroy( &mab.mutex );
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
- failMac2:
+   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
    return ERR( macErr );
 }
 
@@ -418,10 +428,6 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
                                     const bool requireExact,
                                     const Float64 desiredSrate )
 {
-   /*FIXME: changing the sample rate is disruptive to other programs using the
-            device, so it might be good to offer a custom flag to not change the
-            sample rate and just do conversion. (in my casual tests, there is
-            no disruption unless the sample rate really does need to change) */
    const bool isInput = isOutput ? 0 : 1;
    Float64 srate;
    UInt32 propsize = sizeof( Float64 );
@@ -433,13 +439,15 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
    VDBUG(("Setting sample rate for device %ld to %g.\n",device,(float)desiredSrate));
 
    /* -- try setting the sample rate -- */
+   srate = 0;
    err = AudioDeviceSetPropertyNowAndWaitForChange(
                                  device, 0, isInput,
                                  kAudioDevicePropertyNominalSampleRate,
                                  propsize, &desiredSrate, &srate );
-   if( err )
-      return err;
 
+   /* -- if the rate agrees, and was changed, we are done -- */
+   if( srate != 0 && srate == desiredSrate )
+      return paNoError;
    /* -- if the rate agrees, and we got no errors, we are done -- */
    if( !err && srate == desiredSrate )
       return paNoError;
@@ -492,19 +500,19 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
 
    /* -- set the sample rate -- */
    propsize = sizeof( best );
+   srate = 0;
    err = AudioDeviceSetPropertyNowAndWaitForChange(
                                  device, 0, isInput,
                                  kAudioDevicePropertyNominalSampleRate,
                                  propsize, &best, &srate );
-   if( err )
-      return err;
 
-   if( err )
-      return ERR( err );
    /* -- if the set rate matches, we are done -- */
-   if( srate == best )
+   if( srate != 0 && srate == best )
       return paNoError;
 
+   if( err )
+      return ERR( err );
+
    /* -- otherwise, something wierd happened: we didn't set the rate, and we got no errors. Just bail. */
    return paInternalError;
 }
@@ -520,9 +528,9 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
    not usually catastrophic.
 */
 PaError setBestFramesPerBuffer( const AudioDeviceID device,
-                                       const bool isOutput,
-                                       unsigned long requestedFramesPerBuffer, 
-                                       unsigned long *actualFramesPerBuffer )
+                                const bool isOutput,
+                                UInt32 requestedFramesPerBuffer, 
+                                UInt32 *actualFramesPerBuffer )
 {
    UInt32 afpb;
    const bool isInput = !isOutput;
@@ -609,3 +617,117 @@ PaError setBestFramesPerBuffer( const AudioDeviceID device,
 
    return paNoError;
 }
+
+/**********************
+ *
+ * XRun stuff
+ *
+ **********************/
+
+struct PaMacXRunListNode_s {
+   PaMacCoreStream *stream;
+   struct PaMacXRunListNode_s *next;
+} ;
+
+typedef struct PaMacXRunListNode_s PaMacXRunListNode;
+
+/** Always empty, so that it can always be the one returned by
+    addToXRunListenerList. note that it's not a pointer. */
+static PaMacXRunListNode firstXRunListNode;
+static int xRunListSize;
+static pthread_mutex_t xrunMutex;
+
+OSStatus xrunCallback(
+    AudioDeviceID inDevice, 
+    UInt32 inChannel, 
+    Boolean isInput, 
+    AudioDevicePropertyID inPropertyID, 
+    void* inClientData)
+{
+   PaMacXRunListNode *node = (PaMacXRunListNode *) inClientData;
+
+   int ret = pthread_mutex_trylock( &xrunMutex ) ;
+
+   if( ret == 0 ) {
+
+      node = node->next ; //skip the first node
+
+      for( ; node; node=node->next ) {
+         PaMacCoreStream *stream = node->stream;
+
+         if( stream->state != ACTIVE )
+            continue; //if the stream isn't active, we don't care if the device is dropping
+
+         if( isInput ) {
+            if( stream->inputDevice == inDevice )
+               OSAtomicOr32( paInputOverflow, (uint32_t *)&(stream->xrunFlags) );
+         } else {
+            if( stream->outputDevice == inDevice )
+               OSAtomicOr32( paOutputUnderflow, (uint32_t *)&(stream->xrunFlags) );
+         }
+      }
+
+      pthread_mutex_unlock( &xrunMutex );
+   }
+
+   return 0;
+}
+
+int initializeXRunListenerList()
+{
+   xRunListSize = 0;
+   bzero( (void *) &firstXRunListNode, sizeof(firstXRunListNode) );
+   return pthread_mutex_init( &xrunMutex, NULL );
+}
+int destroyXRunListenerList()
+{
+   PaMacXRunListNode *node;
+   node = firstXRunListNode.next;
+   while( node ) {
+      PaMacXRunListNode *tmp = node;
+      node = node->next;
+      free( tmp );
+   }
+   xRunListSize = 0;
+   return pthread_mutex_destroy( &xrunMutex );
+}
+
+void *addToXRunListenerList( void *stream )
+{
+   pthread_mutex_lock( &xrunMutex );
+   PaMacXRunListNode *newNode;
+   // setup new node:
+   newNode = (PaMacXRunListNode *) malloc( sizeof( PaMacXRunListNode ) );
+   newNode->stream = (PaMacCoreStream *) stream;
+   newNode->next = firstXRunListNode.next;
+   // insert:
+   firstXRunListNode.next = newNode;
+   pthread_mutex_unlock( &xrunMutex );
+
+   return &firstXRunListNode;
+}
+
+int removeFromXRunListenerList( void *stream )
+{
+   pthread_mutex_lock( &xrunMutex );
+   PaMacXRunListNode *node, *prev;
+   prev = &firstXRunListNode;
+   node = firstXRunListNode.next;
+   while( node ) {
+      if( node->stream == stream ) {
+         //found it:
+         --xRunListSize;
+         prev->next = node->next;
+         free( node );
+         pthread_mutex_unlock( &xrunMutex );
+         return xRunListSize;
+      }
+      prev = prev->next;
+      node = node->next;
+   }
+
+   pthread_mutex_unlock( &xrunMutex );
+   // failure
+   return xRunListSize;
+}
+
diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h b/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
index 8a69c25a6..7c4afe52c 100644
--- a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
+++ b/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
@@ -143,18 +143,6 @@ long computeRingBufferSize( const PaStreamParameters *inputParameters,
                                    long outputFramesPerBuffer,
                                    double sampleRate );
 
-/*
- * Durring testing of core audio, I found that serious crashes could occur
- * if properties such as sample rate were changed multiple times in rapid
- * succession. The function below has some fancy logic to make sure that changes
- * are acknowledged before another is requested. That seems to help a lot.
- */
-
-typedef struct {
-   bool once; /* I didn't end up using this. bdr */
-   pthread_mutex_t mutex;
-} MutexAndBool ;
-
 OSStatus propertyProc(
     AudioDeviceID inDevice, 
     UInt32 inChannel, 
@@ -199,7 +187,32 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
    not usually catastrophic.
 */
 PaError setBestFramesPerBuffer( const AudioDeviceID device,
-                                       const bool isOutput,
-                                       unsigned long requestedFramesPerBuffer, 
-                                       unsigned long *actualFramesPerBuffer );
+                                const bool isOutput,
+                                UInt32 requestedFramesPerBuffer, 
+                                UInt32 *actualFramesPerBuffer );
+
+
+/*********************
+ *
+ *  xrun handling
+ *
+ *********************/
+
+OSStatus xrunCallback(
+    AudioDeviceID inDevice, 
+    UInt32 inChannel, 
+    Boolean isInput, 
+    AudioDevicePropertyID inPropertyID, 
+    void* inClientData ) ;
+
+/** returns zero on success or a unix style error code. */
+int initializeXRunListenerList();
+/** returns zero on success or a unix style error code. */
+int destroyXRunListenerList();
+
+/**Returns the list, so that it can be passed to CorAudio.*/
+void *addToXRunListenerList( void *stream );
+/**Returns the number of Listeners in the list remaining.*/
+int removeFromXRunListenerList( void *stream );
+
 #endif /* PA_MAC_CORE_UTILITIES_H__*/
diff --git a/portaudio/src/hostapi/dsound/pa_win_ds.c b/portaudio/src/hostapi/dsound/pa_win_ds.c
new file mode 100644
index 000000000..913176071
--- /dev/null
+++ b/portaudio/src/hostapi/dsound/pa_win_ds.c
@@ -0,0 +1,2864 @@
+/*
+ * $Id: pa_win_ds.c 1534 2010-08-03 21:02:52Z dmitrykos $
+ * Portable Audio I/O Library DirectSound implementation
+ *
+ * Authors: Phil Burk, Robert Marsanyi & Ross Bencina
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 1999-2007 Ross Bencina, Phil Burk, Robert Marsanyi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup hostapi_src
+
+    @todo implement paInputOverflow callback status flag
+    
+    @todo implement paNeverDropInput.
+
+    @todo implement host api specific extension to set i/o buffer sizes in frames
+
+    @todo implement initialisation of PaDeviceInfo default*Latency fields (currently set to 0.)
+
+    @todo implement ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable
+
+    @todo audit handling of DirectSound result codes - in many cases we could convert a HRESULT into
+        a native portaudio error code. Standard DirectSound result codes are documented at msdn.
+
+    @todo implement IsFormatSupported
+
+    @todo call PaUtil_SetLastHostErrorInfo with a specific error string (currently just "DSound error").
+
+    @todo make sure all buffers have been played before stopping the stream
+        when the stream callback returns paComplete
+
+    @todo retrieve default devices using the DRVM_MAPPER_PREFERRED_GET functions used in the wmme api
+        these wave device ids can be aligned with the directsound devices either by retrieving
+        the system interface device name using DRV_QUERYDEVICEINTERFACE or by using the wave device
+        id retrieved in KsPropertySetEnumerateCallback.
+
+    old TODOs from phil, need to work out if these have been done:
+        O- fix "patest_stop.c"
+*/
+
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h> /* strlen() */
+
+#include <initguid.h> /* make sure ds guids get defined */
+#include <windows.h>
+#include <objbase.h>
+
+/*
+  Use the earliest version of DX required, no need to polute the namespace
+*/
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+#define DIRECTSOUND_VERSION 0x0800
+#else
+#define DIRECTSOUND_VERSION 0x0300
+#endif
+#include <dsound.h>
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+#include <dsconf.h>
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+#include "pa_util.h"
+#include "pa_allocation.h"
+#include "pa_hostapi.h"
+#include "pa_stream.h"
+#include "pa_cpuload.h"
+#include "pa_process.h"
+#include "pa_debugprint.h"
+
+#include "pa_win_ds.h"
+#include "pa_win_ds_dynlink.h"
+#include "pa_win_waveformat.h"
+#include "pa_win_wdmks_utils.h"
+
+
+#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
+#pragma comment( lib, "dsound.lib" )
+#pragma comment( lib, "winmm.lib" )
+#endif
+
+/*
+ provided in newer platform sdks and x64
+ */
+#ifndef DWORD_PTR
+    #if defined(_WIN64)
+        #define DWORD_PTR unsigned __int64
+    #else
+        #define DWORD_PTR unsigned long
+    #endif
+#endif
+
+#define PRINT(x) PA_DEBUG(x);
+#define ERR_RPT(x) PRINT(x)
+#define DBUG(x)   PRINT(x)
+#define DBUGX(x)  PRINT(x)
+
+#define PA_USE_HIGH_LATENCY   (0)
+#if PA_USE_HIGH_LATENCY
+#define PA_WIN_9X_LATENCY     (500)
+#define PA_WIN_NT_LATENCY     (600)
+#else
+#define PA_WIN_9X_LATENCY     (140)
+#define PA_WIN_NT_LATENCY     (280)
+#endif
+
+#define PA_WIN_WDM_LATENCY       (120)
+
+#define SECONDS_PER_MSEC      (0.001)
+#define MSEC_PER_SECOND       (1000)
+
+/* prototypes for functions declared in this file */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                           PaStream** s,
+                           const PaStreamParameters *inputParameters,
+                           const PaStreamParameters *outputParameters,
+                           double sampleRate,
+                           unsigned long framesPerBuffer,
+                           PaStreamFlags streamFlags,
+                           PaStreamCallback *streamCallback,
+                           void *userData );
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                                  const PaStreamParameters *inputParameters,
+                                  const PaStreamParameters *outputParameters,
+                                  double sampleRate );
+static PaError CloseStream( PaStream* stream );
+static PaError StartStream( PaStream *stream );
+static PaError StopStream( PaStream *stream );
+static PaError AbortStream( PaStream *stream );
+static PaError IsStreamStopped( PaStream *s );
+static PaError IsStreamActive( PaStream *stream );
+static PaTime GetStreamTime( PaStream *stream );
+static double GetStreamCpuLoad( PaStream* stream );
+static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
+static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
+static signed long GetStreamReadAvailable( PaStream* stream );
+static signed long GetStreamWriteAvailable( PaStream* stream );
+
+
+/* FIXME: should convert hr to a string */
+#define PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ) \
+    PaUtil_SetLastHostErrorInfo( paDirectSound, hr, "DirectSound error" )
+
+/************************************************* DX Prototypes **********/
+static BOOL CALLBACK CollectGUIDsProc(LPGUID lpGUID,
+                                     LPCTSTR lpszDesc,
+                                     LPCTSTR lpszDrvName,
+                                     LPVOID lpContext );
+
+/************************************************************************************/
+/********************** Structures **************************************************/
+/************************************************************************************/
+/* PaWinDsHostApiRepresentation - host api datastructure specific to this implementation */
+
+typedef struct PaWinDsDeviceInfo
+{
+    PaDeviceInfo        inheritedDeviceInfo;
+    GUID                guid;
+    GUID                *lpGUID;
+    double              sampleRates[3];
+    char deviceInputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/
+    char deviceOutputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/
+} PaWinDsDeviceInfo;
+
+typedef struct
+{
+    PaUtilHostApiRepresentation inheritedHostApiRep;
+    PaUtilStreamInterface    callbackStreamInterface;
+    PaUtilStreamInterface    blockingStreamInterface;
+
+    PaUtilAllocationGroup   *allocations;
+
+    /* implementation specific data goes here */
+
+    char                    comWasInitialized;
+
+} PaWinDsHostApiRepresentation;
+
+
+/* PaWinDsStream - a stream data structure specifically for this implementation */
+
+typedef struct PaWinDsStream
+{
+    PaUtilStreamRepresentation streamRepresentation;
+    PaUtilCpuLoadMeasurer cpuLoadMeasurer;
+    PaUtilBufferProcessor bufferProcessor;
+
+/* DirectSound specific data. */
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+    LPDIRECTSOUNDFULLDUPLEX8 pDirectSoundFullDuplex8;
+#endif
+
+/* Output */
+    LPDIRECTSOUND        pDirectSound;
+    LPDIRECTSOUNDBUFFER  pDirectSoundPrimaryBuffer;
+    LPDIRECTSOUNDBUFFER  pDirectSoundOutputBuffer;
+    DWORD                outputBufferWriteOffsetBytes;     /* last write position */
+    INT                  outputBufferSizeBytes;
+    INT                  bytesPerOutputFrame;
+    /* Try to detect play buffer underflows. */
+    LARGE_INTEGER        perfCounterTicksPerBuffer; /* counter ticks it should take to play a full buffer */
+    LARGE_INTEGER        previousPlayTime;
+    DWORD                previousPlayCursor;
+    UINT                 outputUnderflowCount;
+    BOOL                 outputIsRunning;
+    INT                  finalZeroBytesWritten; /* used to determine when we've flushed the whole buffer */
+
+/* Input */
+    LPDIRECTSOUNDCAPTURE pDirectSoundCapture;
+    LPDIRECTSOUNDCAPTUREBUFFER   pDirectSoundInputBuffer;
+    INT                  bytesPerInputFrame;
+    UINT                 readOffset;      /* last read position */
+    UINT                 inputSize;
+
+    
+    MMRESULT         timerID;
+    int              framesPerDSBuffer;
+    double           framesWritten;
+    double           secondsPerHostByte; /* Used to optimize latency calculation for outTime */
+
+    PaStreamCallbackFlags callbackFlags;
+
+    PaStreamFlags    streamFlags;
+    int              callbackResult;
+    HANDLE           processingCompleted;
+    
+/* FIXME - move all below to PaUtilStreamRepresentation */
+    volatile int     isStarted;
+    volatile int     isActive;
+    volatile int     stopProcessing; /* stop thread once existing buffers have been returned */
+    volatile int     abortProcessing; /* stop thread immediately */
+} PaWinDsStream;
+
+
+/************************************************************************************
+** Duplicate the input string using the allocations allocator.
+** A NULL string is converted to a zero length string.
+** If memory cannot be allocated, NULL is returned.
+**/
+static char *DuplicateDeviceNameString( PaUtilAllocationGroup *allocations, const char* src )
+{
+    char *result = 0;
+    
+    if( src != NULL )
+    {
+        size_t len = strlen(src);
+        result = (char*)PaUtil_GroupAllocateMemory( allocations, (long)(len + 1) );
+        if( result )
+            memcpy( (void *) result, src, len+1 );
+    }
+    else
+    {
+        result = (char*)PaUtil_GroupAllocateMemory( allocations, 1 );
+        if( result )
+            result[0] = '\0';
+    }
+
+    return result;
+}
+
+/************************************************************************************
+** DSDeviceNameAndGUID, DSDeviceNameAndGUIDVector used for collecting preliminary
+** information during device enumeration.
+*/
+typedef struct DSDeviceNameAndGUID{
+    char *name; // allocated from parent's allocations, never deleted by this structure
+    GUID guid;
+    LPGUID lpGUID;
+    void *pnpInterface;  // wchar_t* interface path, allocated using the DS host api's allocation group
+} DSDeviceNameAndGUID;
+
+typedef struct DSDeviceNameAndGUIDVector{
+    PaUtilAllocationGroup *allocations;
+    PaError enumerationError;
+
+    int count;
+    int free;
+    DSDeviceNameAndGUID *items; // Allocated using LocalAlloc()
+} DSDeviceNameAndGUIDVector;
+
+typedef struct DSDeviceNamesAndGUIDs{
+    PaWinDsHostApiRepresentation *winDsHostApi;
+    DSDeviceNameAndGUIDVector inputNamesAndGUIDs;
+    DSDeviceNameAndGUIDVector outputNamesAndGUIDs;
+} DSDeviceNamesAndGUIDs;
+
+static PaError InitializeDSDeviceNameAndGUIDVector(
+        DSDeviceNameAndGUIDVector *guidVector, PaUtilAllocationGroup *allocations )
+{
+    PaError result = paNoError;
+
+    guidVector->allocations = allocations;
+    guidVector->enumerationError = paNoError;
+
+    guidVector->count = 0;
+    guidVector->free = 8;
+    guidVector->items = (DSDeviceNameAndGUID*)LocalAlloc( LMEM_FIXED, sizeof(DSDeviceNameAndGUID) * guidVector->free );
+    if( guidVector->items == NULL )
+        result = paInsufficientMemory;
+    
+    return result;
+}
+
+static PaError ExpandDSDeviceNameAndGUIDVector( DSDeviceNameAndGUIDVector *guidVector )
+{
+    PaError result = paNoError;
+    DSDeviceNameAndGUID *newItems;
+    int i;
+    
+    /* double size of vector */
+    int size = guidVector->count + guidVector->free;
+    guidVector->free += size;
+
+    newItems = (DSDeviceNameAndGUID*)LocalAlloc( LMEM_FIXED, sizeof(DSDeviceNameAndGUID) * size * 2 );
+    if( newItems == NULL )
+    {
+        result = paInsufficientMemory;
+    }
+    else
+    {
+        for( i=0; i < guidVector->count; ++i )
+        {
+            newItems[i].name = guidVector->items[i].name;
+            if( guidVector->items[i].lpGUID == NULL )
+            {
+                newItems[i].lpGUID = NULL;
+            }
+            else
+            {
+                newItems[i].lpGUID = &newItems[i].guid;
+                memcpy( &newItems[i].guid, guidVector->items[i].lpGUID, sizeof(GUID) );;
+            }
+            newItems[i].pnpInterface = guidVector->items[i].pnpInterface;
+        }
+
+        LocalFree( guidVector->items );
+        guidVector->items = newItems;
+    }                                
+
+    return result;
+}
+
+/*
+    it's safe to call DSDeviceNameAndGUIDVector multiple times
+*/
+static PaError TerminateDSDeviceNameAndGUIDVector( DSDeviceNameAndGUIDVector *guidVector )
+{
+    PaError result = paNoError;
+
+    if( guidVector->items != NULL )
+    {
+        if( LocalFree( guidVector->items ) != NULL )
+            result = paInsufficientMemory;              /** @todo this isn't the correct error to return from a deallocation failure */
+
+        guidVector->items = NULL;
+    }
+
+    return result;
+}
+
+/************************************************************************************
+** Collect preliminary device information during DirectSound enumeration 
+*/
+static BOOL CALLBACK CollectGUIDsProc(LPGUID lpGUID,
+                                     LPCTSTR lpszDesc,
+                                     LPCTSTR lpszDrvName,
+                                     LPVOID lpContext )
+{
+    DSDeviceNameAndGUIDVector *namesAndGUIDs = (DSDeviceNameAndGUIDVector*)lpContext;
+    PaError error;
+
+    (void) lpszDrvName; /* unused variable */
+
+    if( namesAndGUIDs->free == 0 )
+    {
+        error = ExpandDSDeviceNameAndGUIDVector( namesAndGUIDs );
+        if( error != paNoError )
+        {
+            namesAndGUIDs->enumerationError = error;
+            return FALSE;
+        }
+    }
+    
+    /* Set GUID pointer, copy GUID to storage in DSDeviceNameAndGUIDVector. */
+    if( lpGUID == NULL )
+    {
+        namesAndGUIDs->items[namesAndGUIDs->count].lpGUID = NULL;
+    }
+    else
+    {
+        namesAndGUIDs->items[namesAndGUIDs->count].lpGUID =
+                &namesAndGUIDs->items[namesAndGUIDs->count].guid;
+      
+        memcpy( &namesAndGUIDs->items[namesAndGUIDs->count].guid, lpGUID, sizeof(GUID) );
+    }
+
+    namesAndGUIDs->items[namesAndGUIDs->count].name =
+            DuplicateDeviceNameString( namesAndGUIDs->allocations, lpszDesc );
+    if( namesAndGUIDs->items[namesAndGUIDs->count].name == NULL )
+    {
+        namesAndGUIDs->enumerationError = paInsufficientMemory;
+        return FALSE;
+    }
+
+    namesAndGUIDs->items[namesAndGUIDs->count].pnpInterface = 0;
+
+    ++namesAndGUIDs->count;
+    --namesAndGUIDs->free;
+    
+    return TRUE;
+}
+
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+
+static void *DuplicateWCharString( PaUtilAllocationGroup *allocations, wchar_t *source )
+{
+    size_t len;
+    wchar_t *result;
+
+    len = wcslen( source );
+    result = (wchar_t*)PaUtil_GroupAllocateMemory( allocations, (long) ((len+1) * sizeof(wchar_t)) );
+    wcscpy( result, source );
+    return result;
+}
+
+static BOOL CALLBACK KsPropertySetEnumerateCallback( PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data, LPVOID context )
+{
+    int i;
+    DSDeviceNamesAndGUIDs *deviceNamesAndGUIDs = (DSDeviceNamesAndGUIDs*)context;
+
+    if( data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER )
+    {
+        for( i=0; i < deviceNamesAndGUIDs->outputNamesAndGUIDs.count; ++i )
+        {
+            if( deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].lpGUID
+                && memcmp( &data->DeviceId, deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].lpGUID, sizeof(GUID) ) == 0 )
+            {
+                deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].pnpInterface = 
+                        (char*)DuplicateWCharString( deviceNamesAndGUIDs->winDsHostApi->allocations, data->Interface );
+                break;
+            }
+        }
+    }
+    else if( data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE )
+    {
+        for( i=0; i < deviceNamesAndGUIDs->inputNamesAndGUIDs.count; ++i )
+        {
+            if( deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].lpGUID
+                && memcmp( &data->DeviceId, deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].lpGUID, sizeof(GUID) ) == 0 )
+            {
+                deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].pnpInterface = 
+                        (char*)DuplicateWCharString( deviceNamesAndGUIDs->winDsHostApi->allocations, data->Interface );
+                break;
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+
+static GUID pawin_CLSID_DirectSoundPrivate = 
+{ 0x11ab3ec0, 0x25ec, 0x11d1, 0xa4, 0xd8, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca };
+
+static GUID pawin_DSPROPSETID_DirectSoundDevice = 
+{ 0x84624f82, 0x25ec, 0x11d1, 0xa4, 0xd8, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca };
+
+static GUID pawin_IID_IKsPropertySet = 
+{ 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93 };
+
+
+/*
+    FindDevicePnpInterfaces fills in the pnpInterface fields in deviceNamesAndGUIDs
+    with UNICODE file paths to the devices. The DS documentation mentions
+    at least two techniques by which these Interface paths can be found using IKsPropertySet on
+    the DirectSound class object. One is using the DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION 
+    property, and the other is using DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE.
+    I tried both methods and only the second worked. I found two postings on the
+    net from people who had the same problem with the first method, so I think the method used here is 
+    more common/likely to work. The probem is that IKsPropertySet_Get returns S_OK
+    but the fields of the device description are not filled in.
+
+    The mechanism we use works by registering an enumeration callback which is called for 
+    every DSound device. Our callback searches for a device in our deviceNamesAndGUIDs list
+    with the matching GUID and copies the pointer to the Interface path.
+    Note that we could have used this enumeration callback to perform the original 
+    device enumeration, however we choose not to so we can disable this step easily.
+
+    Apparently the IKsPropertySet mechanism was added in DirectSound 9c 2004
+    http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.mmedia/2004-12/0099.html
+
+        -- rossb
+*/
+static void FindDevicePnpInterfaces( DSDeviceNamesAndGUIDs *deviceNamesAndGUIDs )
+{
+    IClassFactory *pClassFactory;
+   
+    if( paWinDsDSoundEntryPoints.DllGetClassObject(&pawin_CLSID_DirectSoundPrivate, &IID_IClassFactory, (PVOID *) &pClassFactory) == S_OK ){
+        IKsPropertySet *pPropertySet;
+        if( pClassFactory->lpVtbl->CreateInstance( pClassFactory, NULL, &pawin_IID_IKsPropertySet, (PVOID *) &pPropertySet) == S_OK ){
+            
+            DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data;
+            ULONG bytesReturned;
+
+            data.Callback = KsPropertySetEnumerateCallback;
+            data.Context = deviceNamesAndGUIDs;
+
+            IKsPropertySet_Get( pPropertySet,
+                &pawin_DSPROPSETID_DirectSoundDevice,
+                DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W,
+                NULL,
+                0,
+                &data,
+                sizeof(data),
+                &bytesReturned
+            );
+            
+            IKsPropertySet_Release( pPropertySet );
+        }
+        pClassFactory->lpVtbl->Release( pClassFactory );
+    }
+
+    /*
+        The following code fragment, which I chose not to use, queries for the 
+        device interface for a device with a specific GUID:
+
+        ULONG BytesReturned;
+        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA Property;
+
+        memset (&Property, 0, sizeof(Property));
+        Property.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
+        Property.DeviceId = *lpGUID;  
+
+        hr = IKsPropertySet_Get( pPropertySet,
+            &pawin_DSPROPSETID_DirectSoundDevice,
+            DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W,
+            NULL,
+            0,
+            &Property,
+            sizeof(Property),
+            &BytesReturned
+        );
+
+        if( hr == S_OK )
+        {
+            //pnpInterface = Property.Interface;
+        }
+    */
+}
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+
+/* 
+    GUIDs for emulated devices which we blacklist below.
+    are there more than two of them??
+*/
+
+GUID IID_IRolandVSCEmulated1 = {0xc2ad1800, 0xb243, 0x11ce, 0xa8, 0xa4, 0x00, 0xaa, 0x00, 0x6c, 0x45, 0x01};
+GUID IID_IRolandVSCEmulated2 = {0xc2ad1800, 0xb243, 0x11ce, 0xa8, 0xa4, 0x00, 0xaa, 0x00, 0x6c, 0x45, 0x02};
+
+
+#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_  (13) /* must match array length below */
+static double defaultSampleRateSearchOrder_[] =
+    { 44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0, 192000.0,
+        16000.0, 12000.0, 11025.0, 9600.0, 8000.0 };
+
+/************************************************************************************
+** Extract capabilities from an output device, and add it to the device info list
+** if successful. This function assumes that there is enough room in the
+** device info list to accomodate all entries.
+**
+** The device will not be added to the device list if any errors are encountered.
+*/
+static PaError AddOutputDeviceInfoFromDirectSound(
+        PaWinDsHostApiRepresentation *winDsHostApi, char *name, LPGUID lpGUID, char *pnpInterface )
+{
+    PaUtilHostApiRepresentation  *hostApi = &winDsHostApi->inheritedHostApiRep;
+    PaWinDsDeviceInfo            *winDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[hostApi->info.deviceCount];
+    PaDeviceInfo                 *deviceInfo = &winDsDeviceInfo->inheritedDeviceInfo;
+    HRESULT                       hr;
+    LPDIRECTSOUND                 lpDirectSound;
+    DSCAPS                        caps;
+    int                           deviceOK = TRUE;
+    PaError                       result = paNoError;
+    int                           i;
+
+    /* Copy GUID to the device info structure. Set pointer. */
+    if( lpGUID == NULL )
+    {
+        winDsDeviceInfo->lpGUID = NULL;
+    }
+    else
+    {
+        memcpy( &winDsDeviceInfo->guid, lpGUID, sizeof(GUID) );
+        winDsDeviceInfo->lpGUID = &winDsDeviceInfo->guid;
+    }
+    
+    if( lpGUID )
+    {
+        if (IsEqualGUID (&IID_IRolandVSCEmulated1,lpGUID) ||
+            IsEqualGUID (&IID_IRolandVSCEmulated2,lpGUID) )
+        {
+            PA_DEBUG(("BLACKLISTED: %s \n",name));
+            return paNoError;
+        }
+    }
+
+    /* Create a DirectSound object for the specified GUID
+        Note that using CoCreateInstance doesn't work on windows CE.
+    */
+    hr = paWinDsDSoundEntryPoints.DirectSoundCreate( lpGUID, &lpDirectSound, NULL );
+
+    /** try using CoCreateInstance because DirectSoundCreate was hanging under
+        some circumstances - note this was probably related to the
+        #define BOOL short bug which has now been fixed
+        @todo delete this comment and the following code once we've ensured
+        there is no bug.
+    */
+    /*
+    hr = CoCreateInstance( &CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER,
+            &IID_IDirectSound, (void**)&lpDirectSound );
+
+    if( hr == S_OK )
+    {
+        hr = IDirectSound_Initialize( lpDirectSound, lpGUID );
+    }
+    */
+    
+    if( hr != DS_OK )
+    {
+        if (hr == DSERR_ALLOCATED)
+            PA_DEBUG(("AddOutputDeviceInfoFromDirectSound %s DSERR_ALLOCATED\n",name));
+        DBUG(("Cannot create DirectSound for %s. Result = 0x%x\n", name, hr ));
+        if (lpGUID)
+            DBUG(("%s's GUID: {0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x, 0x%x} \n",
+                 name,
+                 lpGUID->Data1,
+                 lpGUID->Data2,
+                 lpGUID->Data3,
+                 lpGUID->Data4[0],
+                 lpGUID->Data4[1],
+                 lpGUID->Data4[2],
+                 lpGUID->Data4[3],
+                 lpGUID->Data4[4],
+                 lpGUID->Data4[5],
+                 lpGUID->Data4[6],
+                 lpGUID->Data4[7]));
+
+        deviceOK = FALSE;
+    }
+    else
+    {
+        /* Query device characteristics. */
+        memset( &caps, 0, sizeof(caps) ); 
+        caps.dwSize = sizeof(caps);
+        hr = IDirectSound_GetCaps( lpDirectSound, &caps );
+        if( hr != DS_OK )
+        {
+            DBUG(("Cannot GetCaps() for DirectSound device %s. Result = 0x%x\n", name, hr ));
+            deviceOK = FALSE;
+        }
+        else
+        {
+
+#ifndef PA_NO_WMME
+            if( caps.dwFlags & DSCAPS_EMULDRIVER )
+            {
+                /* If WMME supported, then reject Emulated drivers because they are lousy. */
+                deviceOK = FALSE;
+            }
+#endif
+
+            if( deviceOK )
+            {
+                deviceInfo->maxInputChannels = 0;
+                winDsDeviceInfo->deviceInputChannelCountIsKnown = 1;
+
+                /* DS output capabilities only indicate supported number of channels
+                   using two flags which indicate mono and/or stereo.
+                   We assume that stereo devices may support more than 2 channels
+                   (as is the case with 5.1 devices for example) and so
+                   set deviceOutputChannelCountIsKnown to 0 (unknown).
+                   In this case OpenStream will try to open the device
+                   when the user requests more than 2 channels, rather than
+                   returning an error. 
+                */
+                if( caps.dwFlags & DSCAPS_PRIMARYSTEREO )
+                {
+                    deviceInfo->maxOutputChannels = 2;
+                    winDsDeviceInfo->deviceOutputChannelCountIsKnown = 0;
+                }
+                else
+                {
+                    deviceInfo->maxOutputChannels = 1;
+                    winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1;
+                }
+
+                /* Guess channels count from speaker configuration. We do it only when 
+                   pnpInterface is NULL or when PAWIN_USE_WDMKS_DEVICE_INFO is undefined.
+                */
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+                if( !pnpInterface )
+#endif
+                {
+                    DWORD spkrcfg;
+                    if( SUCCEEDED(IDirectSound_GetSpeakerConfig( lpDirectSound, &spkrcfg )) )
+                    {
+                        int count = 0;
+                        switch (DSSPEAKER_CONFIG(spkrcfg))
+                        {
+                            case DSSPEAKER_HEADPHONE:        count = 2; break;
+                            case DSSPEAKER_MONO:             count = 1; break;
+                            case DSSPEAKER_QUAD:             count = 4; break;
+                            case DSSPEAKER_STEREO:           count = 2; break;
+                            case DSSPEAKER_SURROUND:         count = 4; break;
+                            case DSSPEAKER_5POINT1:          count = 6; break;
+                            case DSSPEAKER_7POINT1:          count = 8; break;
+#ifndef DSSPEAKER_7POINT1_SURROUND
+#define DSSPEAKER_7POINT1_SURROUND 0x00000008
+#endif                            
+                            case DSSPEAKER_7POINT1_SURROUND: count = 8; break;
+#ifndef DSSPEAKER_5POINT1_SURROUND
+#define DSSPEAKER_5POINT1_SURROUND 0x00000009
+#endif
+                            case DSSPEAKER_5POINT1_SURROUND: count = 6; break;
+                        }
+                        if( count )
+                        {
+                            deviceInfo->maxOutputChannels = count;
+                            winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1;
+                        }
+                    }
+                }
+
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+                if( pnpInterface )
+                {
+                    int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( pnpInterface, /* isInput= */ 0  );
+                    if( count > 0 )
+                    {
+                        deviceInfo->maxOutputChannels = count;
+                        winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1;
+                    }
+                }
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+                deviceInfo->defaultLowInputLatency = 0.;    /** @todo IMPLEMENT ME */
+                deviceInfo->defaultLowOutputLatency = 0.;   /** @todo IMPLEMENT ME */
+                deviceInfo->defaultHighInputLatency = 0.;   /** @todo IMPLEMENT ME */
+                deviceInfo->defaultHighOutputLatency = 0.;  /** @todo IMPLEMENT ME */
+                
+                /* initialize defaultSampleRate */
+                
+                if( caps.dwFlags & DSCAPS_CONTINUOUSRATE )
+                {
+                    /* initialize to caps.dwMaxSecondarySampleRate incase none of the standard rates match */
+                    deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate;
+
+                    for( i = 0; i < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++i )
+                    {
+                        if( defaultSampleRateSearchOrder_[i] >= caps.dwMinSecondarySampleRate
+                                && defaultSampleRateSearchOrder_[i] <= caps.dwMaxSecondarySampleRate )
+                        {
+                            deviceInfo->defaultSampleRate = defaultSampleRateSearchOrder_[i];
+                            break;
+                        }
+                    }
+                }
+                else if( caps.dwMinSecondarySampleRate == caps.dwMaxSecondarySampleRate )
+                {
+                    if( caps.dwMinSecondarySampleRate == 0 )
+                    {
+                        /*
+                        ** On my Thinkpad 380Z, DirectSoundV6 returns min-max=0 !!
+                        ** But it supports continuous sampling.
+                        ** So fake range of rates, and hope it really supports it.
+                        */
+                        deviceInfo->defaultSampleRate = 44100.0f;
+
+                        DBUG(("PA - Reported rates both zero. Setting to fake values for device #%s\n", name ));
+                    }
+                    else
+                    {
+	                    deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate;
+                    }
+                }
+                else if( (caps.dwMinSecondarySampleRate < 1000.0) && (caps.dwMaxSecondarySampleRate > 50000.0) )
+                {
+                    /* The EWS88MT drivers lie, lie, lie. The say they only support two rates, 100 & 100000.
+                    ** But we know that they really support a range of rates!
+                    ** So when we see a ridiculous set of rates, assume it is a range.
+                    */
+                  deviceInfo->defaultSampleRate = 44100.0f;
+                  DBUG(("PA - Sample rate range used instead of two odd values for device #%s\n", name ));
+                }
+                else deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate;
+
+
+                //printf( "min %d max %d\n", caps.dwMinSecondarySampleRate, caps.dwMaxSecondarySampleRate );
+                // dwFlags | DSCAPS_CONTINUOUSRATE 
+            }
+        }
+
+        IDirectSound_Release( lpDirectSound );
+    }
+
+    if( deviceOK )
+    {
+        deviceInfo->name = name;
+
+        if( lpGUID == NULL )
+            hostApi->info.defaultOutputDevice = hostApi->info.deviceCount;
+            
+        hostApi->info.deviceCount++;
+    }
+
+    return result;
+}
+
+
+/************************************************************************************
+** Extract capabilities from an input device, and add it to the device info list
+** if successful. This function assumes that there is enough room in the
+** device info list to accomodate all entries.
+**
+** The device will not be added to the device list if any errors are encountered.
+*/
+static PaError AddInputDeviceInfoFromDirectSoundCapture(
+        PaWinDsHostApiRepresentation *winDsHostApi, char *name, LPGUID lpGUID, char *pnpInterface )
+{
+    PaUtilHostApiRepresentation  *hostApi = &winDsHostApi->inheritedHostApiRep;
+    PaWinDsDeviceInfo            *winDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[hostApi->info.deviceCount];
+    PaDeviceInfo                 *deviceInfo = &winDsDeviceInfo->inheritedDeviceInfo;
+    HRESULT                       hr;
+    LPDIRECTSOUNDCAPTURE          lpDirectSoundCapture;
+    DSCCAPS                       caps;
+    int                           deviceOK = TRUE;
+    PaError                       result = paNoError;
+    
+    /* Copy GUID to the device info structure. Set pointer. */
+    if( lpGUID == NULL )
+    {
+        winDsDeviceInfo->lpGUID = NULL;
+    }
+    else
+    {
+        winDsDeviceInfo->lpGUID = &winDsDeviceInfo->guid;
+        memcpy( &winDsDeviceInfo->guid, lpGUID, sizeof(GUID) );
+    }
+
+    hr = paWinDsDSoundEntryPoints.DirectSoundCaptureCreate( lpGUID, &lpDirectSoundCapture, NULL );
+
+    /** try using CoCreateInstance because DirectSoundCreate was hanging under
+        some circumstances - note this was probably related to the
+        #define BOOL short bug which has now been fixed
+        @todo delete this comment and the following code once we've ensured
+        there is no bug.
+    */
+    /*
+    hr = CoCreateInstance( &CLSID_DirectSoundCapture, NULL, CLSCTX_INPROC_SERVER,
+            &IID_IDirectSoundCapture, (void**)&lpDirectSoundCapture );
+    */
+    if( hr != DS_OK )
+    {
+        DBUG(("Cannot create Capture for %s. Result = 0x%x\n", name, hr ));
+        deviceOK = FALSE;
+    }
+    else
+    {
+        /* Query device characteristics. */
+        memset( &caps, 0, sizeof(caps) );
+        caps.dwSize = sizeof(caps);
+        hr = IDirectSoundCapture_GetCaps( lpDirectSoundCapture, &caps );
+        if( hr != DS_OK )
+        {
+            DBUG(("Cannot GetCaps() for Capture device %s. Result = 0x%x\n", name, hr ));
+            deviceOK = FALSE;
+        }
+        else
+        {
+#ifndef PA_NO_WMME
+            if( caps.dwFlags & DSCAPS_EMULDRIVER )
+            {
+                /* If WMME supported, then reject Emulated drivers because they are lousy. */
+                deviceOK = FALSE;
+            }
+#endif
+
+            if( deviceOK )
+            {
+                deviceInfo->maxInputChannels = caps.dwChannels;
+                winDsDeviceInfo->deviceInputChannelCountIsKnown = 1;
+
+                deviceInfo->maxOutputChannels = 0;
+                winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1;
+
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+                if( pnpInterface )
+                {
+                    int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( pnpInterface, /* isInput= */ 1  );
+                    if( count > 0 )
+                    {
+                        deviceInfo->maxInputChannels = count;
+                        winDsDeviceInfo->deviceInputChannelCountIsKnown = 1;
+                    }
+                }
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+                deviceInfo->defaultLowInputLatency = 0.;    /** @todo IMPLEMENT ME */
+                deviceInfo->defaultLowOutputLatency = 0.;   /** @todo IMPLEMENT ME */
+                deviceInfo->defaultHighInputLatency = 0.;   /** @todo IMPLEMENT ME */
+                deviceInfo->defaultHighOutputLatency = 0.;  /** @todo IMPLEMENT ME */
+
+/*  constants from a WINE patch by Francois Gouget, see:
+    http://www.winehq.com/hypermail/wine-patches/2003/01/0290.html
+
+    ---
+    Date: Fri, 14 May 2004 10:38:12 +0200 (CEST)
+    From: Francois Gouget <fgouget@ ... .fr>
+    To: Ross Bencina <rbencina@ ... .au>
+    Subject: Re: Permission to use wine 48/96 wave patch in BSD licensed library
+
+    [snip]
+
+    I give you permission to use the patch below under the BSD license.
+    http://www.winehq.com/hypermail/wine-patches/2003/01/0290.html
+
+    [snip]
+*/
+#ifndef WAVE_FORMAT_48M08
+#define WAVE_FORMAT_48M08      0x00001000    /* 48     kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_48S08      0x00002000    /* 48     kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_48M16      0x00004000    /* 48     kHz, Mono,   16-bit */
+#define WAVE_FORMAT_48S16      0x00008000    /* 48     kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_96M08      0x00010000    /* 96     kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_96S08      0x00020000    /* 96     kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_96M16      0x00040000    /* 96     kHz, Mono,   16-bit */
+#define WAVE_FORMAT_96S16      0x00080000    /* 96     kHz, Stereo, 16-bit */
+#endif
+
+                /* defaultSampleRate */
+                if( caps.dwChannels == 2 )
+                {
+                    if( caps.dwFormats & WAVE_FORMAT_4S16 )
+                        deviceInfo->defaultSampleRate = 44100.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_48S16 )
+                        deviceInfo->defaultSampleRate = 48000.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_2S16 )
+                        deviceInfo->defaultSampleRate = 22050.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_1S16 )
+                        deviceInfo->defaultSampleRate = 11025.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_96S16 )
+                        deviceInfo->defaultSampleRate = 96000.0;
+                    else
+                        deviceInfo->defaultSampleRate = 0.;
+                }
+                else if( caps.dwChannels == 1 )
+                {
+                    if( caps.dwFormats & WAVE_FORMAT_4M16 )
+                        deviceInfo->defaultSampleRate = 44100.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_48M16 )
+                        deviceInfo->defaultSampleRate = 48000.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_2M16 )
+                        deviceInfo->defaultSampleRate = 22050.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_1M16 )
+                        deviceInfo->defaultSampleRate = 11025.0;
+                    else if( caps.dwFormats & WAVE_FORMAT_96M16 )
+                        deviceInfo->defaultSampleRate = 96000.0;
+                    else
+                        deviceInfo->defaultSampleRate = 0.;
+                }
+                else deviceInfo->defaultSampleRate = 0.;
+            }
+        }
+        
+        IDirectSoundCapture_Release( lpDirectSoundCapture );
+    }
+
+    if( deviceOK )
+    {
+        deviceInfo->name = name;
+
+        if( lpGUID == NULL )
+            hostApi->info.defaultInputDevice = hostApi->info.deviceCount;
+
+        hostApi->info.deviceCount++;
+    }
+
+    return result;
+}
+
+
+/***********************************************************************************/
+PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+{
+    PaError result = paNoError;
+    int i, deviceCount;
+    PaWinDsHostApiRepresentation *winDsHostApi;
+    DSDeviceNamesAndGUIDs deviceNamesAndGUIDs;
+
+    PaWinDsDeviceInfo *deviceInfoArray;
+    char comWasInitialized = 0;
+
+    /*
+        If COM is already initialized CoInitialize will either return
+        FALSE, or RPC_E_CHANGED_MODE if it was initialised in a different
+        threading mode. In either case we shouldn't consider it an error
+        but we need to be careful to not call CoUninitialize() if 
+        RPC_E_CHANGED_MODE was returned.
+    */
+
+    HRESULT hr = CoInitialize(NULL);
+    if( FAILED(hr) && hr != RPC_E_CHANGED_MODE )
+        return paUnanticipatedHostError;
+
+    if( hr != RPC_E_CHANGED_MODE )
+        comWasInitialized = 1;
+
+    /* initialise guid vectors so they can be safely deleted on error */
+    deviceNamesAndGUIDs.winDsHostApi = NULL;
+    deviceNamesAndGUIDs.inputNamesAndGUIDs.items = NULL;
+    deviceNamesAndGUIDs.outputNamesAndGUIDs.items = NULL;
+
+    PaWinDs_InitializeDSoundEntryPoints();
+
+    winDsHostApi = (PaWinDsHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinDsHostApiRepresentation) );
+    if( !winDsHostApi )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    winDsHostApi->comWasInitialized = comWasInitialized;
+
+    winDsHostApi->allocations = PaUtil_CreateAllocationGroup();
+    if( !winDsHostApi->allocations )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    *hostApi = &winDsHostApi->inheritedHostApiRep;
+    (*hostApi)->info.structVersion = 1;
+    (*hostApi)->info.type = paDirectSound;
+    (*hostApi)->info.name = "Windows DirectSound";
+    
+    (*hostApi)->info.deviceCount = 0;
+    (*hostApi)->info.defaultInputDevice = paNoDevice;
+    (*hostApi)->info.defaultOutputDevice = paNoDevice;
+
+    
+/* DSound - enumerate devices to count them and to gather their GUIDs */
+
+    result = InitializeDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs, winDsHostApi->allocations );
+    if( result != paNoError )
+        goto error;
+
+    result = InitializeDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs, winDsHostApi->allocations );
+    if( result != paNoError )
+        goto error;
+
+    paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA( (LPDSENUMCALLBACK)CollectGUIDsProc, (void *)&deviceNamesAndGUIDs.inputNamesAndGUIDs );
+
+    paWinDsDSoundEntryPoints.DirectSoundEnumerateA( (LPDSENUMCALLBACK)CollectGUIDsProc, (void *)&deviceNamesAndGUIDs.outputNamesAndGUIDs );
+
+    if( deviceNamesAndGUIDs.inputNamesAndGUIDs.enumerationError != paNoError )
+    {
+        result = deviceNamesAndGUIDs.inputNamesAndGUIDs.enumerationError;
+        goto error;
+    }
+
+    if( deviceNamesAndGUIDs.outputNamesAndGUIDs.enumerationError != paNoError )
+    {
+        result = deviceNamesAndGUIDs.outputNamesAndGUIDs.enumerationError;
+        goto error;
+    }
+
+    deviceCount = deviceNamesAndGUIDs.inputNamesAndGUIDs.count + deviceNamesAndGUIDs.outputNamesAndGUIDs.count;
+
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+    if( deviceCount > 0 )
+    {
+        deviceNamesAndGUIDs.winDsHostApi = winDsHostApi;
+        FindDevicePnpInterfaces( &deviceNamesAndGUIDs );
+    }
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+    if( deviceCount > 0 )
+    {
+        /* allocate array for pointers to PaDeviceInfo structs */
+        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
+                winDsHostApi->allocations, sizeof(PaDeviceInfo*) * deviceCount );
+        if( !(*hostApi)->deviceInfos )
+        {
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        /* allocate all PaDeviceInfo structs in a contiguous block */
+        deviceInfoArray = (PaWinDsDeviceInfo*)PaUtil_GroupAllocateMemory(
+                winDsHostApi->allocations, sizeof(PaWinDsDeviceInfo) * deviceCount );
+        if( !deviceInfoArray )
+        {
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        for( i=0; i < deviceCount; ++i )
+        {
+            PaDeviceInfo *deviceInfo = &deviceInfoArray[i].inheritedDeviceInfo;
+            deviceInfo->structVersion = 2;
+            deviceInfo->hostApi = hostApiIndex;
+            deviceInfo->name = 0;
+            (*hostApi)->deviceInfos[i] = deviceInfo;
+        }
+
+        for( i=0; i < deviceNamesAndGUIDs.inputNamesAndGUIDs.count; ++i )
+        {
+            result = AddInputDeviceInfoFromDirectSoundCapture( winDsHostApi,
+                    deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].name,
+                    deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].lpGUID,
+                    deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].pnpInterface );
+            if( result != paNoError )
+                goto error;
+        }
+
+        for( i=0; i < deviceNamesAndGUIDs.outputNamesAndGUIDs.count; ++i )
+        {
+            result = AddOutputDeviceInfoFromDirectSound( winDsHostApi,
+                    deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].name,
+                    deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].lpGUID,
+                    deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].pnpInterface );
+            if( result != paNoError )
+                goto error;
+        }
+    }    
+
+    result = TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs );
+    if( result != paNoError )
+        goto error;
+
+    result = TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs );
+    if( result != paNoError )
+        goto error;
+
+    
+    (*hostApi)->Terminate = Terminate;
+    (*hostApi)->OpenStream = OpenStream;
+    (*hostApi)->IsFormatSupported = IsFormatSupported;
+
+    PaUtil_InitializeStreamInterface( &winDsHostApi->callbackStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, GetStreamCpuLoad,
+                                      PaUtil_DummyRead, PaUtil_DummyWrite,
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
+
+    PaUtil_InitializeStreamInterface( &winDsHostApi->blockingStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, PaUtil_DummyGetCpuLoad,
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
+
+    return result;
+
+error:
+    if( winDsHostApi )
+    {
+        if( winDsHostApi->allocations )
+        {
+            PaUtil_FreeAllAllocations( winDsHostApi->allocations );
+            PaUtil_DestroyAllocationGroup( winDsHostApi->allocations );
+        }
+                
+        PaUtil_FreeMemory( winDsHostApi );
+    }
+
+    TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs );
+    TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs );
+
+    if( comWasInitialized )
+        CoUninitialize();
+
+    return result;
+}
+
+
+/***********************************************************************************/
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
+{
+    PaWinDsHostApiRepresentation *winDsHostApi = (PaWinDsHostApiRepresentation*)hostApi;
+    char comWasInitialized = winDsHostApi->comWasInitialized;
+
+    /*
+        IMPLEMENT ME:
+            - clean up any resources not handled by the allocation group
+    */
+
+    if( winDsHostApi->allocations )
+    {
+        PaUtil_FreeAllAllocations( winDsHostApi->allocations );
+        PaUtil_DestroyAllocationGroup( winDsHostApi->allocations );
+    }
+
+    PaUtil_FreeMemory( winDsHostApi );
+
+    PaWinDs_TerminateDSoundEntryPoints();
+
+    if( comWasInitialized )
+        CoUninitialize();
+}
+
+
+/* Set minimal latency based on whether NT or Win95.
+ * NT has higher latency.
+ */
+static int PaWinDS_GetMinSystemLatency( void )
+{
+    int minLatencyMsec;
+    /* Set minimal latency based on whether NT or other OS.
+     * NT has higher latency.
+     */
+    OSVERSIONINFO osvi;
+	osvi.dwOSVersionInfoSize = sizeof( osvi );
+	GetVersionEx( &osvi );
+    DBUG(("PA - PlatformId = 0x%x\n", osvi.dwPlatformId ));
+    DBUG(("PA - MajorVersion = 0x%x\n", osvi.dwMajorVersion ));
+    DBUG(("PA - MinorVersion = 0x%x\n", osvi.dwMinorVersion ));
+    /* Check for NT */
+	if( (osvi.dwMajorVersion == 4) && (osvi.dwPlatformId == 2) )
+	{
+		minLatencyMsec = PA_WIN_NT_LATENCY;
+	}
+	else if(osvi.dwMajorVersion >= 5)
+	{
+		minLatencyMsec = PA_WIN_WDM_LATENCY;
+	}
+	else
+	{
+		minLatencyMsec = PA_WIN_9X_LATENCY;
+	}
+    return minLatencyMsec;
+}
+
+static PaError ValidateWinDirectSoundSpecificStreamInfo(
+        const PaStreamParameters *streamParameters,
+        const PaWinDirectSoundStreamInfo *streamInfo )
+{
+	if( streamInfo )
+	{
+	    if( streamInfo->size != sizeof( PaWinDirectSoundStreamInfo )
+	            || streamInfo->version != 1 )
+	    {
+	        return paIncompatibleHostApiSpecificStreamInfo;
+	    }
+	}
+
+	return paNoError;
+}
+
+/***********************************************************************************/
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                                  const PaStreamParameters *inputParameters,
+                                  const PaStreamParameters *outputParameters,
+                                  double sampleRate )
+{
+    PaError result;
+    PaWinDsDeviceInfo *inputWinDsDeviceInfo, *outputWinDsDeviceInfo;
+    PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo;
+    int inputChannelCount, outputChannelCount;
+    PaSampleFormat inputSampleFormat, outputSampleFormat;
+    PaWinDirectSoundStreamInfo *inputStreamInfo, *outputStreamInfo;
+
+    if( inputParameters )
+    {
+        inputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ inputParameters->device ];
+        inputDeviceInfo = &inputWinDsDeviceInfo->inheritedDeviceInfo;
+
+        inputChannelCount = inputParameters->channelCount;
+        inputSampleFormat = inputParameters->sampleFormat;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that input device can support inputChannelCount */
+        if( inputWinDsDeviceInfo->deviceInputChannelCountIsKnown
+                && inputChannelCount > inputDeviceInfo->maxInputChannels )
+            return paInvalidChannelCount;
+
+        /* validate inputStreamInfo */
+        inputStreamInfo = (PaWinDirectSoundStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
+		result = ValidateWinDirectSoundSpecificStreamInfo( inputParameters, inputStreamInfo );
+		if( result != paNoError ) return result;
+    }
+    else
+    {
+        inputChannelCount = 0;
+    }
+
+    if( outputParameters )
+    {
+        outputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ outputParameters->device ];
+        outputDeviceInfo = &outputWinDsDeviceInfo->inheritedDeviceInfo;
+
+        outputChannelCount = outputParameters->channelCount;
+        outputSampleFormat = outputParameters->sampleFormat;
+        
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that output device can support inputChannelCount */
+        if( outputWinDsDeviceInfo->deviceOutputChannelCountIsKnown
+                && outputChannelCount > outputDeviceInfo->maxOutputChannels )
+            return paInvalidChannelCount;
+
+        /* validate outputStreamInfo */
+        outputStreamInfo = (PaWinDirectSoundStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
+		result = ValidateWinDirectSoundSpecificStreamInfo( outputParameters, outputStreamInfo );
+		if( result != paNoError ) return result;
+    }
+    else
+    {
+        outputChannelCount = 0;
+    }
+    
+    /*
+        IMPLEMENT ME:
+
+            - if a full duplex stream is requested, check that the combination
+                of input and output parameters is supported if necessary
+
+            - check that the device supports sampleRate
+
+        Because the buffer adapter handles conversion between all standard
+        sample formats, the following checks are only required if paCustomFormat
+        is implemented, or under some other unusual conditions.
+
+            - check that input device can support inputSampleFormat, or that
+                we have the capability to convert from outputSampleFormat to
+                a native format
+
+            - check that output device can support outputSampleFormat, or that
+                we have the capability to convert from outputSampleFormat to
+                a native format
+    */
+
+    return paFormatIsSupported;
+}
+
+
+/*************************************************************************
+** Determine minimum number of buffers required for this host based
+** on minimum latency. Latency can be optionally set by user by setting
+** an environment variable. For example, to set latency to 200 msec, put:
+**
+**    set PA_MIN_LATENCY_MSEC=200
+**
+** in the AUTOEXEC.BAT file and reboot.
+** If the environment variable is not set, then the latency will be determined
+** based on the OS. Windows NT has higher latency than Win95.
+*/
+#define PA_LATENCY_ENV_NAME  ("PA_MIN_LATENCY_MSEC")
+#define PA_ENV_BUF_SIZE  (32)
+
+static int PaWinDs_GetMinLatencyFrames( double sampleRate )
+{
+    char      envbuf[PA_ENV_BUF_SIZE];
+    DWORD     hresult;
+    int       minLatencyMsec = 0;
+
+    /* Let user determine minimal latency by setting environment variable. */
+    hresult = GetEnvironmentVariable( PA_LATENCY_ENV_NAME, envbuf, PA_ENV_BUF_SIZE );
+    if( (hresult > 0) && (hresult < PA_ENV_BUF_SIZE) )
+    {
+        minLatencyMsec = atoi( envbuf );
+    }
+    else
+    {
+        minLatencyMsec = PaWinDS_GetMinSystemLatency();
+#if PA_USE_HIGH_LATENCY
+        PRINT(("PA - Minimum Latency set to %d msec!\n", minLatencyMsec ));
+#endif
+
+    }
+
+    return (int) (minLatencyMsec * sampleRate * SECONDS_PER_MSEC);
+}
+
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+static HRESULT InitFullDuplexInputOutputBuffers( PaWinDsStream *stream,
+                                       PaWinDsDeviceInfo *inputDevice,
+                                       PaSampleFormat hostInputSampleFormat,
+                                       WORD inputChannelCount, 
+                                       int bytesPerInputBuffer,
+                                       PaWinWaveFormatChannelMask inputChannelMask,
+                                       PaWinDsDeviceInfo *outputDevice,
+                                       PaSampleFormat hostOutputSampleFormat,
+                                       WORD outputChannelCount, 
+                                       int bytesPerOutputBuffer,
+                                       PaWinWaveFormatChannelMask outputChannelMask,
+                                       unsigned long nFrameRate
+                                        )
+{
+    HRESULT hr;
+    DSCBUFFERDESC  captureDesc;
+    PaWinWaveFormat captureWaveFormat;
+    DSBUFFERDESC   secondaryRenderDesc;
+    PaWinWaveFormat renderWaveFormat;
+    LPDIRECTSOUNDBUFFER8 pRenderBuffer8;
+    LPDIRECTSOUNDCAPTUREBUFFER8 pCaptureBuffer8;
+
+    // capture buffer description
+
+    // only try wave format extensible. assume it's available on all ds 8 systems
+    PaWin_InitializeWaveFormatExtensible( &captureWaveFormat, inputChannelCount, 
+                hostInputSampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( hostInputSampleFormat ),
+                nFrameRate, inputChannelMask );
+
+    ZeroMemory(&captureDesc, sizeof(DSCBUFFERDESC));
+    captureDesc.dwSize = sizeof(DSCBUFFERDESC);
+    captureDesc.dwFlags = 0;
+    captureDesc.dwBufferBytes = bytesPerInputBuffer;
+    captureDesc.lpwfxFormat = (WAVEFORMATEX*)&captureWaveFormat;
+
+    // render buffer description
+
+    PaWin_InitializeWaveFormatExtensible( &renderWaveFormat, outputChannelCount, 
+                hostOutputSampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( hostOutputSampleFormat ),
+                nFrameRate, outputChannelMask );
+
+    ZeroMemory(&secondaryRenderDesc, sizeof(DSBUFFERDESC));
+    secondaryRenderDesc.dwSize = sizeof(DSBUFFERDESC);
+    secondaryRenderDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2;
+    secondaryRenderDesc.dwBufferBytes = bytesPerOutputBuffer;
+    secondaryRenderDesc.lpwfxFormat = (WAVEFORMATEX*)&renderWaveFormat;
+
+    /* note that we don't create a primary buffer here at all */
+
+    hr = paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8( 
+            inputDevice->lpGUID, outputDevice->lpGUID,
+            &captureDesc, &secondaryRenderDesc,
+            GetDesktopWindow(), /* see InitOutputBuffer() for a discussion of whether this is a good idea */
+            DSSCL_EXCLUSIVE,
+            &stream->pDirectSoundFullDuplex8,
+            &pCaptureBuffer8,
+            &pRenderBuffer8,
+            NULL /* pUnkOuter must be NULL */ 
+        );
+
+    if( hr == DS_OK )
+    {
+        PA_DEBUG(("DirectSoundFullDuplexCreate succeeded!\n"));
+
+        /* retrieve the pre ds 8 buffer interfaces which are used by the rest of the code */
+
+        hr = IUnknown_QueryInterface( pCaptureBuffer8, &IID_IDirectSoundCaptureBuffer, (LPVOID *)&stream->pDirectSoundInputBuffer );
+        
+        if( hr == DS_OK )
+            hr = IUnknown_QueryInterface( pRenderBuffer8, &IID_IDirectSoundBuffer, (LPVOID *)&stream->pDirectSoundOutputBuffer );
+
+        /* release the ds 8 interfaces, we don't need them */
+        IUnknown_Release( pCaptureBuffer8 );
+        IUnknown_Release( pRenderBuffer8 );
+
+        if( !stream->pDirectSoundInputBuffer || !stream->pDirectSoundOutputBuffer ){
+            /* couldn't get pre ds 8 interfaces for some reason. clean up. */
+            if( stream->pDirectSoundInputBuffer )
+            {
+                IUnknown_Release( stream->pDirectSoundInputBuffer );
+                stream->pDirectSoundInputBuffer = NULL;
+            }
+
+            if( stream->pDirectSoundOutputBuffer )
+            {
+                IUnknown_Release( stream->pDirectSoundOutputBuffer );
+                stream->pDirectSoundOutputBuffer = NULL;
+            }
+            
+            IUnknown_Release( stream->pDirectSoundFullDuplex8 );
+            stream->pDirectSoundFullDuplex8 = NULL;
+        }
+    }
+    else
+    {
+        PA_DEBUG(("DirectSoundFullDuplexCreate failed. hr=%d\n", hr));
+    }
+
+    return hr;
+}
+#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */
+
+
+static HRESULT InitInputBuffer( PaWinDsStream *stream, PaWinDsDeviceInfo *device, PaSampleFormat sampleFormat, unsigned long nFrameRate, WORD nChannels, int bytesPerBuffer, PaWinWaveFormatChannelMask channelMask )
+{
+    DSCBUFFERDESC  captureDesc;
+    PaWinWaveFormat waveFormat;
+    HRESULT        result;
+    
+    if( (result = paWinDsDSoundEntryPoints.DirectSoundCaptureCreate( 
+            device->lpGUID, &stream->pDirectSoundCapture, NULL) ) != DS_OK ){
+         ERR_RPT(("PortAudio: DirectSoundCaptureCreate() failed!\n"));
+         return result;
+    }
+
+    // Setup the secondary buffer description
+    ZeroMemory(&captureDesc, sizeof(DSCBUFFERDESC));
+    captureDesc.dwSize = sizeof(DSCBUFFERDESC);
+    captureDesc.dwFlags = 0;
+    captureDesc.dwBufferBytes = bytesPerBuffer;
+    captureDesc.lpwfxFormat = (WAVEFORMATEX*)&waveFormat;
+    
+    // Create the capture buffer
+
+    // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX
+    PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, 
+                sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ),
+                nFrameRate, channelMask );
+
+    if( IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture,
+                  &captureDesc, &stream->pDirectSoundInputBuffer, NULL) != DS_OK )
+    {
+        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, 
+                PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate );
+
+        if ((result = IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture,
+                    &captureDesc, &stream->pDirectSoundInputBuffer, NULL)) != DS_OK) return result;
+    }
+
+    stream->readOffset = 0;  // reset last read position to start of buffer
+    return DS_OK;
+}
+
+
+static HRESULT InitOutputBuffer( PaWinDsStream *stream, PaWinDsDeviceInfo *device, PaSampleFormat sampleFormat, unsigned long nFrameRate, WORD nChannels, int bytesPerBuffer, PaWinWaveFormatChannelMask channelMask )
+{
+    HRESULT        result;
+    HWND           hWnd;
+    HRESULT        hr;
+    PaWinWaveFormat waveFormat;
+    DSBUFFERDESC   primaryDesc;
+    DSBUFFERDESC   secondaryDesc;
+    
+    if( (hr = paWinDsDSoundEntryPoints.DirectSoundCreate( 
+                device->lpGUID, &stream->pDirectSound, NULL )) != DS_OK ){
+        ERR_RPT(("PortAudio: DirectSoundCreate() failed!\n"));
+        return hr;
+    }
+
+    // We were using getForegroundWindow() but sometimes the ForegroundWindow may not be the
+    // applications's window. Also if that window is closed before the Buffer is closed
+    // then DirectSound can crash. (Thanks for Scott Patterson for reporting this.)
+    // So we will use GetDesktopWindow() which was suggested by Miller Puckette.
+    // hWnd = GetForegroundWindow();
+    //
+    //  FIXME: The example code I have on the net creates a hidden window that
+    //      is managed by our code - I think we should do that - one hidden
+    //      window for the whole of Pa_DS
+    //
+    hWnd = GetDesktopWindow();
+
+    // Set cooperative level to DSSCL_EXCLUSIVE so that we can get 16 bit output, 44.1 KHz.
+    // exclusive also prevents unexpected sounds from other apps during a performance.
+    if ((hr = IDirectSound_SetCooperativeLevel( stream->pDirectSound,
+              hWnd, DSSCL_EXCLUSIVE)) != DS_OK)
+    {
+        return hr;
+    }
+
+    // -----------------------------------------------------------------------
+    // Create primary buffer and set format just so we can specify our custom format.
+    // Otherwise we would be stuck with the default which might be 8 bit or 22050 Hz.
+    // Setup the primary buffer description
+    ZeroMemory(&primaryDesc, sizeof(DSBUFFERDESC));
+    primaryDesc.dwSize        = sizeof(DSBUFFERDESC);
+    primaryDesc.dwFlags       = DSBCAPS_PRIMARYBUFFER; // all panning, mixing, etc done by synth
+    primaryDesc.dwBufferBytes = 0;
+    primaryDesc.lpwfxFormat   = NULL;
+    // Create the buffer
+    if ((result = IDirectSound_CreateSoundBuffer( stream->pDirectSound,
+                  &primaryDesc, &stream->pDirectSoundPrimaryBuffer, NULL)) != DS_OK)
+        goto error;
+
+    // Set the primary buffer's format
+
+    // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX
+    PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, 
+                sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ),
+                nFrameRate, channelMask );
+
+    if( IDirectSoundBuffer_SetFormat( stream->pDirectSoundPrimaryBuffer, (WAVEFORMATEX*)&waveFormat) != DS_OK )
+    {
+        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, 
+                PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate );
+
+        if((result = IDirectSoundBuffer_SetFormat( stream->pDirectSoundPrimaryBuffer, (WAVEFORMATEX*)&waveFormat)) != DS_OK)
+            goto error;
+    }
+
+    // ----------------------------------------------------------------------
+    // Setup the secondary buffer description
+    ZeroMemory(&secondaryDesc, sizeof(DSBUFFERDESC));
+    secondaryDesc.dwSize = sizeof(DSBUFFERDESC);
+    secondaryDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2;
+    secondaryDesc.dwBufferBytes = bytesPerBuffer;
+    secondaryDesc.lpwfxFormat = (WAVEFORMATEX*)&waveFormat; /* waveFormat contains whatever format was negotiated for the primary buffer above */
+    // Create the secondary buffer
+    if ((result = IDirectSound_CreateSoundBuffer( stream->pDirectSound,
+                  &secondaryDesc, &stream->pDirectSoundOutputBuffer, NULL)) != DS_OK)
+      goto error;
+    
+    return DS_OK;
+
+error:
+
+    if( stream->pDirectSoundPrimaryBuffer )
+    {
+        IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer );
+        stream->pDirectSoundPrimaryBuffer = NULL;
+    }
+
+    return result;
+}
+
+/***********************************************************************************/
+/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */
+
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                           PaStream** s,
+                           const PaStreamParameters *inputParameters,
+                           const PaStreamParameters *outputParameters,
+                           double sampleRate,
+                           unsigned long framesPerBuffer,
+                           PaStreamFlags streamFlags,
+                           PaStreamCallback *streamCallback,
+                           void *userData )
+{
+    PaError result = paNoError;
+    PaWinDsHostApiRepresentation *winDsHostApi = (PaWinDsHostApiRepresentation*)hostApi;
+    PaWinDsStream *stream = 0;
+    int bufferProcessorIsInitialized = 0;
+    int streamRepresentationIsInitialized = 0;
+    PaWinDsDeviceInfo *inputWinDsDeviceInfo, *outputWinDsDeviceInfo;
+    PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo;
+    int inputChannelCount, outputChannelCount;
+    PaSampleFormat inputSampleFormat, outputSampleFormat;
+    PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat;
+    unsigned long suggestedInputLatencyFrames, suggestedOutputLatencyFrames;
+    PaWinDirectSoundStreamInfo *inputStreamInfo, *outputStreamInfo;
+    PaWinWaveFormatChannelMask inputChannelMask, outputChannelMask;
+
+    if( inputParameters )
+    {
+        inputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ inputParameters->device ];
+        inputDeviceInfo = &inputWinDsDeviceInfo->inheritedDeviceInfo;
+
+        inputChannelCount = inputParameters->channelCount;
+        inputSampleFormat = inputParameters->sampleFormat;
+        suggestedInputLatencyFrames = (unsigned long)(inputParameters->suggestedLatency * sampleRate);
+
+        /* IDEA: the following 3 checks could be performed by default by pa_front
+            unless some flag indicated otherwise */
+            
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that input device can support inputChannelCount */
+        if( inputWinDsDeviceInfo->deviceInputChannelCountIsKnown
+                && inputChannelCount > inputDeviceInfo->maxInputChannels )
+            return paInvalidChannelCount;
+            
+        /* validate hostApiSpecificStreamInfo */
+        inputStreamInfo = (PaWinDirectSoundStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
+		result = ValidateWinDirectSoundSpecificStreamInfo( inputParameters, inputStreamInfo );
+		if( result != paNoError ) return result;
+
+        if( inputStreamInfo && inputStreamInfo->flags & paWinDirectSoundUseChannelMask )
+            inputChannelMask = inputStreamInfo->channelMask;
+        else
+            inputChannelMask = PaWin_DefaultChannelMask( inputChannelCount );
+    }
+    else
+    {
+        inputChannelCount = 0;
+		inputSampleFormat = 0;
+        suggestedInputLatencyFrames = 0;
+    }
+
+
+    if( outputParameters )
+    {
+        outputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ outputParameters->device ];
+        outputDeviceInfo = &outputWinDsDeviceInfo->inheritedDeviceInfo;
+
+        outputChannelCount = outputParameters->channelCount;
+        outputSampleFormat = outputParameters->sampleFormat;
+        suggestedOutputLatencyFrames = (unsigned long)(outputParameters->suggestedLatency * sampleRate);
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that output device can support outputChannelCount */
+        if( outputWinDsDeviceInfo->deviceOutputChannelCountIsKnown
+                && outputChannelCount > outputDeviceInfo->maxOutputChannels )
+            return paInvalidChannelCount;
+
+        /* validate hostApiSpecificStreamInfo */
+        outputStreamInfo = (PaWinDirectSoundStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
+		result = ValidateWinDirectSoundSpecificStreamInfo( outputParameters, outputStreamInfo );
+		if( result != paNoError ) return result;   
+
+        if( outputStreamInfo && outputStreamInfo->flags & paWinDirectSoundUseChannelMask )
+            outputChannelMask = outputStreamInfo->channelMask;
+        else
+            outputChannelMask = PaWin_DefaultChannelMask( outputChannelCount );
+    }
+    else
+    {
+        outputChannelCount = 0;
+		outputSampleFormat = 0;
+        suggestedOutputLatencyFrames = 0;
+    }
+
+
+    /*
+        IMPLEMENT ME:
+
+        ( the following two checks are taken care of by PaUtil_InitializeBufferProcessor() )
+
+            - check that input device can support inputSampleFormat, or that
+                we have the capability to convert from outputSampleFormat to
+                a native format
+
+            - check that output device can support outputSampleFormat, or that
+                we have the capability to convert from outputSampleFormat to
+                a native format
+
+            - if a full duplex stream is requested, check that the combination
+                of input and output parameters is supported
+
+            - check that the device supports sampleRate
+
+            - alter sampleRate to a close allowable rate if possible / necessary
+
+            - validate suggestedInputLatency and suggestedOutputLatency parameters,
+                use default values where necessary
+    */
+
+
+    /* validate platform specific flags */
+    if( (streamFlags & paPlatformSpecificFlags) != 0 )
+        return paInvalidFlag; /* unexpected platform specific flag */
+
+
+    stream = (PaWinDsStream*)PaUtil_AllocateMemory( sizeof(PaWinDsStream) );
+    if( !stream )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    memset( stream, 0, sizeof(PaWinDsStream) ); /* initialize all stream variables to 0 */
+
+    if( streamCallback )
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &winDsHostApi->callbackStreamInterface, streamCallback, userData );
+    }
+    else
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &winDsHostApi->blockingStreamInterface, streamCallback, userData );
+    }
+    
+    streamRepresentationIsInitialized = 1;
+
+    stream->streamFlags = streamFlags;
+
+    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
+
+
+    if( inputParameters )
+    {
+        /* IMPLEMENT ME - establish which  host formats are available */
+        PaSampleFormat nativeInputFormats = paInt16;
+        //PaSampleFormat nativeFormats = paUInt8 | paInt16 | paInt24 | paInt32 | paFloat32;
+
+        hostInputSampleFormat =
+            PaUtil_SelectClosestAvailableFormat( nativeInputFormats, inputParameters->sampleFormat );
+    }
+	else
+	{
+		hostInputSampleFormat = 0;
+	}
+
+    if( outputParameters )
+    {
+        /* IMPLEMENT ME - establish which  host formats are available */
+        PaSampleFormat nativeOutputFormats = paInt16;
+        //PaSampleFormat nativeOutputFormats = paUInt8 | paInt16 | paInt24 | paInt32 | paFloat32;
+
+        hostOutputSampleFormat =
+            PaUtil_SelectClosestAvailableFormat( nativeOutputFormats, outputParameters->sampleFormat );
+    }
+    else
+	{
+		hostOutputSampleFormat = 0;
+	}
+
+    result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
+                    inputChannelCount, inputSampleFormat, hostInputSampleFormat,
+                    outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
+                    sampleRate, streamFlags, framesPerBuffer,
+                    framesPerBuffer, /* ignored in paUtilVariableHostBufferSizePartialUsageAllowed mode. */
+                /* This next mode is required because DS can split the host buffer when it wraps around. */
+                    paUtilVariableHostBufferSizePartialUsageAllowed,
+                    streamCallback, userData );
+    if( result != paNoError )
+        goto error;
+
+    bufferProcessorIsInitialized = 1;
+
+    stream->streamRepresentation.streamInfo.inputLatency =
+            PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor);   /* FIXME: not initialised anywhere else */
+    stream->streamRepresentation.streamInfo.outputLatency =
+            PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor);    /* FIXME: not initialised anywhere else */
+    stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
+
+    
+/* DirectSound specific initialization */ 
+    {
+        HRESULT          hr;
+        int              bytesPerDirectSoundInputBuffer, bytesPerDirectSoundOutputBuffer;
+        int              userLatencyFrames;
+        int              minLatencyFrames;
+        unsigned long    integerSampleRate = (unsigned long) (sampleRate + 0.5);
+    
+        stream->timerID = 0;
+
+        stream->processingCompleted = CreateEvent( NULL, /* bManualReset = */ TRUE, /* bInitialState = */ FALSE, NULL );
+        if( stream->processingCompleted == NULL )
+        {
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+    /* Get system minimum latency. */
+        minLatencyFrames = PaWinDs_GetMinLatencyFrames( sampleRate );
+
+    /* Let user override latency by passing latency parameter. */
+        userLatencyFrames = (suggestedInputLatencyFrames > suggestedOutputLatencyFrames)
+                    ? suggestedInputLatencyFrames
+                    : suggestedOutputLatencyFrames;
+        if( userLatencyFrames > 0 ) minLatencyFrames = userLatencyFrames;
+
+    /* Calculate stream->framesPerDSBuffer depending on framesPerBuffer */
+        if( framesPerBuffer == paFramesPerBufferUnspecified )
+        {
+        /* App support variable framesPerBuffer */
+            stream->framesPerDSBuffer = minLatencyFrames;
+
+            stream->streamRepresentation.streamInfo.outputLatency = (double)(minLatencyFrames - 1) / sampleRate;
+        }
+        else
+        {
+        /* Round up to number of buffers needed to guarantee that latency. */
+            int numUserBuffers = (minLatencyFrames + framesPerBuffer - 1) / framesPerBuffer;
+            if( numUserBuffers < 1 ) numUserBuffers = 1;
+            numUserBuffers += 1; /* So we have latency worth of buffers ahead of current buffer. */
+            stream->framesPerDSBuffer = framesPerBuffer * numUserBuffers;
+
+            stream->streamRepresentation.streamInfo.outputLatency = (double)(framesPerBuffer * (numUserBuffers-1)) / sampleRate;
+        }
+
+        {
+            /** @todo REVIEW: this calculation seems incorrect to me - rossb. */
+            int msecLatency = (int) ((stream->framesPerDSBuffer * MSEC_PER_SECOND) / sampleRate);
+            PRINT(("PortAudio on DirectSound - Latency = %d frames, %d msec\n", stream->framesPerDSBuffer, msecLatency ));
+        }
+
+        /* set up i/o parameters */
+
+        /* ------------------ OUTPUT */
+        if( outputParameters )
+        {
+            LARGE_INTEGER  counterFrequency;
+
+            /*
+            PaDeviceInfo *deviceInfo = hostApi->deviceInfos[ outputParameters->device ];
+            DBUG(("PaHost_OpenStream: deviceID = 0x%x\n", outputParameters->device));
+            */
+            
+            int bytesPerSample = Pa_GetSampleSize(hostOutputSampleFormat);
+            bytesPerDirectSoundOutputBuffer = stream->framesPerDSBuffer * outputParameters->channelCount * bytesPerSample;
+            if( bytesPerDirectSoundOutputBuffer < DSBSIZE_MIN )
+            {
+                result = paBufferTooSmall;
+                goto error;
+            }
+            else if( bytesPerDirectSoundOutputBuffer > DSBSIZE_MAX )
+            {
+                result = paBufferTooBig;
+                goto error;
+            }
+
+            /* Calculate value used in latency calculation to avoid real-time divides. */
+            stream->secondsPerHostByte = 1.0 /
+                (stream->bufferProcessor.bytesPerHostOutputSample *
+                outputChannelCount * sampleRate);
+
+            stream->outputBufferSizeBytes = bytesPerDirectSoundOutputBuffer;
+            stream->outputIsRunning = FALSE;
+            stream->outputUnderflowCount = 0;
+            stream->bytesPerOutputFrame = outputParameters->channelCount * bytesPerSample;
+
+            /* perfCounterTicksPerBuffer is used by QueryOutputSpace for overflow detection */
+            if( QueryPerformanceFrequency( &counterFrequency ) )
+            {
+                stream->perfCounterTicksPerBuffer.QuadPart = (counterFrequency.QuadPart * stream->framesPerDSBuffer) / integerSampleRate;
+            }
+            else
+            {
+                stream->perfCounterTicksPerBuffer.QuadPart = 0;
+            }
+        }
+
+        /* ------------------ INPUT */
+        if( inputParameters )
+        {
+            /*
+            PaDeviceInfo *deviceInfo = hostApi->deviceInfos[ inputParameters->device ];
+            DBUG(("PaHost_OpenStream: deviceID = 0x%x\n", inputParameters->device));
+            */
+            
+            int bytesPerSample = Pa_GetSampleSize(hostInputSampleFormat);
+            bytesPerDirectSoundInputBuffer = stream->framesPerDSBuffer * inputParameters->channelCount * bytesPerSample;
+            if( bytesPerDirectSoundInputBuffer < DSBSIZE_MIN )
+            {
+                result = paBufferTooSmall;
+                goto error;
+            }
+            else if( bytesPerDirectSoundInputBuffer > DSBSIZE_MAX )
+            {
+                result = paBufferTooBig;
+                goto error;
+            }
+
+            stream->bytesPerInputFrame = inputParameters->channelCount * bytesPerSample;
+
+            stream->inputSize = bytesPerDirectSoundInputBuffer;
+        }
+
+        /* open/create the DirectSound buffers */
+
+        /* interface ptrs should be zeroed when stream is zeroed. */
+        assert( stream->pDirectSoundCapture == NULL );
+        assert( stream->pDirectSoundInputBuffer == NULL );
+        assert( stream->pDirectSound == NULL );
+        assert( stream->pDirectSoundPrimaryBuffer == NULL );
+        assert( stream->pDirectSoundOutputBuffer == NULL );
+        
+
+        if( inputParameters && outputParameters )
+        {
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+            /* try to use the full-duplex DX8 API to create the buffers.
+                if that fails we fall back to the half-duplex API below */
+
+            hr = InitFullDuplexInputOutputBuffers( stream,
+                                       (PaWinDsDeviceInfo*)hostApi->deviceInfos[inputParameters->device],
+                                       hostInputSampleFormat,
+                                       (WORD)inputParameters->channelCount, bytesPerDirectSoundInputBuffer,
+                                       inputChannelMask,
+                                       (PaWinDsDeviceInfo*)hostApi->deviceInfos[outputParameters->device],
+                                       hostOutputSampleFormat,
+                                       (WORD)outputParameters->channelCount, bytesPerDirectSoundOutputBuffer,
+                                       outputChannelMask,
+                                       integerSampleRate
+                                        );
+            DBUG(("InitFullDuplexInputOutputBuffers() returns %x\n", hr));
+            /* ignore any error returned by InitFullDuplexInputOutputBuffers. 
+                we retry opening the buffers below */
+#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */
+        }
+
+        /*  create half duplex buffers. also used for full-duplex streams which didn't 
+            succeed when using the full duplex API. that could happen because
+            DX8 or greater isnt installed, the i/o devices aren't the same 
+            physical device. etc.
+        */
+
+        if( outputParameters && !stream->pDirectSoundOutputBuffer )
+        {
+            hr = InitOutputBuffer( stream,
+                                       (PaWinDsDeviceInfo*)hostApi->deviceInfos[outputParameters->device],
+                                       hostOutputSampleFormat,
+                                       integerSampleRate,
+                                       (WORD)outputParameters->channelCount, bytesPerDirectSoundOutputBuffer,
+                                       outputChannelMask );
+            DBUG(("InitOutputBuffer() returns %x\n", hr));
+            if( hr != DS_OK )
+            {
+                result = paUnanticipatedHostError;
+                PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+                goto error;
+            }
+        }
+
+        if( inputParameters && !stream->pDirectSoundInputBuffer )
+        {
+            hr = InitInputBuffer( stream,
+                                      (PaWinDsDeviceInfo*)hostApi->deviceInfos[inputParameters->device],
+                                      hostInputSampleFormat,
+                                      integerSampleRate,
+                                      (WORD)inputParameters->channelCount, bytesPerDirectSoundInputBuffer,
+                                      inputChannelMask );
+            DBUG(("InitInputBuffer() returns %x\n", hr));
+            if( hr != DS_OK )
+            {
+                ERR_RPT(("PortAudio: DSW_InitInputBuffer() returns %x\n", hr));
+                result = paUnanticipatedHostError;
+                PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+                goto error;
+            }
+        }
+    }
+
+    *s = (PaStream*)stream;
+
+    return result;
+
+error:
+    if( stream )
+    {
+        if( stream->processingCompleted != NULL )
+            CloseHandle( stream->processingCompleted );
+
+        if( stream->pDirectSoundOutputBuffer )
+        {
+            IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer );
+            IDirectSoundBuffer_Release( stream->pDirectSoundOutputBuffer );
+            stream->pDirectSoundOutputBuffer = NULL;
+        }
+
+        if( stream->pDirectSoundPrimaryBuffer )
+        {
+            IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer );
+            stream->pDirectSoundPrimaryBuffer = NULL;
+        }
+
+        if( stream->pDirectSoundInputBuffer )
+        {
+            IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer );
+            IDirectSoundCaptureBuffer_Release( stream->pDirectSoundInputBuffer );
+            stream->pDirectSoundInputBuffer = NULL;
+        }
+
+        if( stream->pDirectSoundCapture )
+        {
+            IDirectSoundCapture_Release( stream->pDirectSoundCapture );
+            stream->pDirectSoundCapture = NULL;
+        }
+
+        if( stream->pDirectSound )
+        {
+            IDirectSound_Release( stream->pDirectSound );
+            stream->pDirectSound = NULL;
+        }
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+        if( stream->pDirectSoundFullDuplex8 )
+        {
+            IDirectSoundFullDuplex_Release( stream->pDirectSoundFullDuplex8 );
+            stream->pDirectSoundFullDuplex8 = NULL;
+        }
+#endif
+        if( bufferProcessorIsInitialized )
+            PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+
+        if( streamRepresentationIsInitialized )
+            PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
+
+        PaUtil_FreeMemory( stream );
+    }
+
+    return result;
+}
+
+
+/************************************************************************************
+ * Determine how much space can be safely written to in DS buffer.
+ * Detect underflows and overflows.
+ * Does not allow writing into safety gap maintained by DirectSound.
+ */
+static HRESULT QueryOutputSpace( PaWinDsStream *stream, long *bytesEmpty )
+{
+    HRESULT hr;
+    DWORD   playCursor;
+    DWORD   writeCursor;
+    long    numBytesEmpty;
+    long    playWriteGap;
+    // Query to see how much room is in buffer.
+    hr = IDirectSoundBuffer_GetCurrentPosition( stream->pDirectSoundOutputBuffer,
+            &playCursor, &writeCursor );
+    if( hr != DS_OK )
+    {
+        return hr;
+    }
+
+    // Determine size of gap between playIndex and WriteIndex that we cannot write into.
+    playWriteGap = writeCursor - playCursor;
+    if( playWriteGap < 0 ) playWriteGap += stream->outputBufferSizeBytes; // unwrap
+
+    /* DirectSound doesn't have a large enough playCursor so we cannot detect wrap-around. */
+    /* Attempt to detect playCursor wrap-around and correct it. */
+    if( stream->outputIsRunning && (stream->perfCounterTicksPerBuffer.QuadPart != 0) )
+    {
+        /* How much time has elapsed since last check. */
+        LARGE_INTEGER   currentTime;
+        LARGE_INTEGER   elapsedTime;
+        long            bytesPlayed;
+        long            bytesExpected;
+        long            buffersWrapped;
+
+        QueryPerformanceCounter( &currentTime );
+        elapsedTime.QuadPart = currentTime.QuadPart - stream->previousPlayTime.QuadPart;
+        stream->previousPlayTime = currentTime;
+
+        /* How many bytes does DirectSound say have been played. */
+        bytesPlayed = playCursor - stream->previousPlayCursor;
+        if( bytesPlayed < 0 ) bytesPlayed += stream->outputBufferSizeBytes; // unwrap
+        stream->previousPlayCursor = playCursor;
+
+        /* Calculate how many bytes we would have expected to been played by now. */
+        bytesExpected = (long) ((elapsedTime.QuadPart * stream->outputBufferSizeBytes) / stream->perfCounterTicksPerBuffer.QuadPart);
+        buffersWrapped = (bytesExpected - bytesPlayed) / stream->outputBufferSizeBytes;
+        if( buffersWrapped > 0 )
+        {
+            playCursor += (buffersWrapped * stream->outputBufferSizeBytes);
+            bytesPlayed += (buffersWrapped * stream->outputBufferSizeBytes);
+        }
+    }
+    numBytesEmpty = playCursor - stream->outputBufferWriteOffsetBytes;
+    if( numBytesEmpty < 0 ) numBytesEmpty += stream->outputBufferSizeBytes; // unwrap offset
+
+    /* Have we underflowed? */
+    if( numBytesEmpty > (stream->outputBufferSizeBytes - playWriteGap) )
+    {
+        if( stream->outputIsRunning )
+        {
+            stream->outputUnderflowCount += 1;
+        }
+
+        /*
+            From MSDN:
+                The write cursor indicates the position at which it is safe  
+            to write new data to the buffer. The write cursor always leads the
+            play cursor, typically by about 15 milliseconds' worth of audio
+            data.
+                It is always safe to change data that is behind the position 
+            indicated by the lpdwCurrentPlayCursor parameter.
+        */
+
+        stream->outputBufferWriteOffsetBytes = writeCursor;
+        numBytesEmpty = stream->outputBufferSizeBytes - playWriteGap;
+    }
+    *bytesEmpty = numBytesEmpty;
+    return hr;
+}
+
+/***********************************************************************************/
+static int TimeSlice( PaWinDsStream *stream )
+{
+    long              numFrames = 0;
+    long              bytesEmpty = 0;
+    long              bytesFilled = 0;
+    long              bytesToXfer = 0;
+    long              framesToXfer = 0;
+    long              numInFramesReady = 0;
+    long              numOutFramesReady = 0;
+    long              bytesProcessed;
+    HRESULT           hresult;
+    double            outputLatency = 0;
+    PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /** @todo implement inputBufferAdcTime */
+    
+/* Input */
+    LPBYTE            lpInBuf1 = NULL;
+    LPBYTE            lpInBuf2 = NULL;
+    DWORD             dwInSize1 = 0;
+    DWORD             dwInSize2 = 0;
+/* Output */
+    LPBYTE            lpOutBuf1 = NULL;
+    LPBYTE            lpOutBuf2 = NULL;
+    DWORD             dwOutSize1 = 0;
+    DWORD             dwOutSize2 = 0;
+
+    /* How much input data is available? */
+    if( stream->bufferProcessor.inputChannelCount > 0 )
+    {
+        HRESULT hr;
+        DWORD capturePos;
+        DWORD readPos;
+        long  filled = 0;
+        // Query to see how much data is in buffer.
+        // We don't need the capture position but sometimes DirectSound doesn't handle NULLS correctly
+        // so let's pass a pointer just to be safe.
+        hr = IDirectSoundCaptureBuffer_GetCurrentPosition( stream->pDirectSoundInputBuffer, &capturePos, &readPos );
+        if( hr == DS_OK )
+        {
+            filled = readPos - stream->readOffset;
+            if( filled < 0 ) filled += stream->inputSize; // unwrap offset
+            bytesFilled = filled;
+        }
+            // FIXME: what happens if IDirectSoundCaptureBuffer_GetCurrentPosition fails?
+
+        framesToXfer = numInFramesReady = bytesFilled / stream->bytesPerInputFrame; 
+        outputLatency = ((double)bytesFilled) * stream->secondsPerHostByte;  // FIXME: this doesn't look right. we're calculating output latency in input branch. also secondsPerHostByte is only initialized for the output stream
+
+        /** @todo Check for overflow */
+    }
+
+    /* How much output room is available? */
+    if( stream->bufferProcessor.outputChannelCount > 0 )
+    {
+        UINT previousUnderflowCount = stream->outputUnderflowCount;
+        QueryOutputSpace( stream, &bytesEmpty );
+        framesToXfer = numOutFramesReady = bytesEmpty / stream->bytesPerOutputFrame;
+
+        /* Check for underflow */
+        if( stream->outputUnderflowCount != previousUnderflowCount )
+            stream->callbackFlags |= paOutputUnderflow;
+    }
+
+    if( (numInFramesReady > 0) && (numOutFramesReady > 0) )
+    {
+        framesToXfer = (numOutFramesReady < numInFramesReady) ? numOutFramesReady : numInFramesReady;
+    }
+
+    if( framesToXfer > 0 )
+    {
+
+        PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
+
+    /* The outputBufferDacTime parameter should indicates the time at which
+        the first sample of the output buffer is heard at the DACs. */
+        timeInfo.currentTime = PaUtil_GetTime();
+        timeInfo.outputBufferDacTime = timeInfo.currentTime + outputLatency; // FIXME: QueryOutputSpace gets the playback position, we could use that (?)
+
+
+        PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, stream->callbackFlags );
+        stream->callbackFlags = 0;
+        
+    /* Input */
+        if( stream->bufferProcessor.inputChannelCount > 0 )
+        {
+            bytesToXfer = framesToXfer * stream->bytesPerInputFrame;
+            hresult = IDirectSoundCaptureBuffer_Lock ( stream->pDirectSoundInputBuffer,
+                stream->readOffset, bytesToXfer,
+                (void **) &lpInBuf1, &dwInSize1,
+                (void **) &lpInBuf2, &dwInSize2, 0);
+            if (hresult != DS_OK)
+            {
+                ERR_RPT(("DirectSound IDirectSoundCaptureBuffer_Lock failed, hresult = 0x%x\n",hresult));
+                /* PA_DS_SET_LAST_DIRECTSOUND_ERROR( hresult ); */
+                PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); /* flush the buffer processor */
+                stream->callbackResult = paComplete;
+                goto error2;
+            }
+
+            numFrames = dwInSize1 / stream->bytesPerInputFrame;
+            PaUtil_SetInputFrameCount( &stream->bufferProcessor, numFrames );
+            PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, lpInBuf1, 0 );
+        /* Is input split into two regions. */
+            if( dwInSize2 > 0 )
+            {
+                numFrames = dwInSize2 / stream->bytesPerInputFrame;
+                PaUtil_Set2ndInputFrameCount( &stream->bufferProcessor, numFrames );
+                PaUtil_Set2ndInterleavedInputChannels( &stream->bufferProcessor, 0, lpInBuf2, 0 );
+            }
+        }
+
+    /* Output */
+        if( stream->bufferProcessor.outputChannelCount > 0 )
+        {
+            bytesToXfer = framesToXfer * stream->bytesPerOutputFrame;
+            hresult = IDirectSoundBuffer_Lock ( stream->pDirectSoundOutputBuffer,
+                stream->outputBufferWriteOffsetBytes, bytesToXfer,
+                (void **) &lpOutBuf1, &dwOutSize1,
+                (void **) &lpOutBuf2, &dwOutSize2, 0);
+            if (hresult != DS_OK)
+            {
+                ERR_RPT(("DirectSound IDirectSoundBuffer_Lock failed, hresult = 0x%x\n",hresult));
+                /* PA_DS_SET_LAST_DIRECTSOUND_ERROR( hresult ); */
+                PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); /* flush the buffer processor */
+                stream->callbackResult = paComplete;
+                goto error1;
+            }
+
+            numFrames = dwOutSize1 / stream->bytesPerOutputFrame;
+            PaUtil_SetOutputFrameCount( &stream->bufferProcessor, numFrames );
+            PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, lpOutBuf1, 0 );
+
+        /* Is output split into two regions. */
+            if( dwOutSize2 > 0 )
+            {
+                numFrames = dwOutSize2 / stream->bytesPerOutputFrame;
+                PaUtil_Set2ndOutputFrameCount( &stream->bufferProcessor, numFrames );
+                PaUtil_Set2ndInterleavedOutputChannels( &stream->bufferProcessor, 0, lpOutBuf2, 0 );
+            }
+        }
+
+        numFrames = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &stream->callbackResult );
+        stream->framesWritten += numFrames;
+        
+        if( stream->bufferProcessor.outputChannelCount > 0 )
+        {
+        /* FIXME: an underflow could happen here */
+
+        /* Update our buffer offset and unlock sound buffer */
+            bytesProcessed = numFrames * stream->bytesPerOutputFrame;
+            stream->outputBufferWriteOffsetBytes = (stream->outputBufferWriteOffsetBytes + bytesProcessed) % stream->outputBufferSizeBytes;
+            IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, lpOutBuf1, dwOutSize1, lpOutBuf2, dwOutSize2);
+        }
+
+error1:
+        if( stream->bufferProcessor.inputChannelCount > 0 )
+        {
+        /* FIXME: an overflow could happen here */
+
+        /* Update our buffer offset and unlock sound buffer */
+            bytesProcessed = numFrames * stream->bytesPerInputFrame;
+            stream->readOffset = (stream->readOffset + bytesProcessed) % stream->inputSize;
+            IDirectSoundCaptureBuffer_Unlock( stream->pDirectSoundInputBuffer, lpInBuf1, dwInSize1, lpInBuf2, dwInSize2);
+        }
+error2:
+
+        PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, numFrames );        
+    }
+
+    if( stream->callbackResult == paComplete && !PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) )
+    {
+        /* don't return completed until the buffer processor has been drained */
+        return paContinue;
+    }
+    else
+    {
+        return stream->callbackResult;
+    }
+}
+/*******************************************************************/
+
+static HRESULT ZeroAvailableOutputSpace( PaWinDsStream *stream )
+{
+    HRESULT hr;
+    LPBYTE lpbuf1 = NULL;
+    LPBYTE lpbuf2 = NULL;
+    DWORD dwsize1 = 0;
+    DWORD dwsize2 = 0;
+    long  bytesEmpty;
+    hr = QueryOutputSpace( stream, &bytesEmpty );
+    if (hr != DS_OK) return hr;
+    if( bytesEmpty == 0 ) return DS_OK;
+    // Lock free space in the DS
+    hr = IDirectSoundBuffer_Lock( stream->pDirectSoundOutputBuffer, stream->outputBufferWriteOffsetBytes,
+                                    bytesEmpty, (void **) &lpbuf1, &dwsize1,
+                                    (void **) &lpbuf2, &dwsize2, 0);
+    if (hr == DS_OK)
+    {
+        // Copy the buffer into the DS
+        ZeroMemory(lpbuf1, dwsize1);
+        if(lpbuf2 != NULL)
+        {
+            ZeroMemory(lpbuf2, dwsize2);
+        }
+        // Update our buffer offset and unlock sound buffer
+        stream->outputBufferWriteOffsetBytes = (stream->outputBufferWriteOffsetBytes + dwsize1 + dwsize2) % stream->outputBufferSizeBytes;
+        IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, lpbuf1, dwsize1, lpbuf2, dwsize2);
+
+        stream->finalZeroBytesWritten += dwsize1 + dwsize2;
+    }
+    return hr;
+}
+
+
+static void CALLBACK TimerCallback(UINT uID, UINT uMsg, DWORD_PTR dwUser, DWORD dw1, DWORD dw2)
+{
+    PaWinDsStream *stream;
+    int isFinished = 0;
+
+    /* suppress unused variable warnings */
+    (void) uID;
+    (void) uMsg;
+    (void) dw1;
+    (void) dw2;
+    
+    stream = (PaWinDsStream *) dwUser;
+    if( stream == NULL ) return;
+
+    if( stream->isActive )
+    {
+        if( stream->abortProcessing )
+        {
+            isFinished = 1;
+        }
+        else if( stream->stopProcessing )
+        {
+            if( stream->bufferProcessor.outputChannelCount > 0 )
+            {
+                ZeroAvailableOutputSpace( stream );
+                if( stream->finalZeroBytesWritten >= stream->outputBufferSizeBytes )
+                {
+                    /* once we've flushed the whole output buffer with zeros we know all data has been played */
+                    isFinished = 1;
+                }
+            }
+            else
+            {
+                isFinished = 1;
+            }
+        }
+        else
+        {
+            int callbackResult = TimeSlice( stream );
+            if( callbackResult != paContinue )
+            {
+                /* FIXME implement handling of paComplete and paAbort if possible 
+                   At the moment this should behave as if paComplete was called and 
+                   flush the buffer.
+                */
+
+                stream->stopProcessing = 1;
+            }
+        }
+
+        if( isFinished )
+        {
+            if( stream->streamRepresentation.streamFinishedCallback != 0 )
+                stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+
+            stream->isActive = 0; /* don't set this until the stream really is inactive */
+            SetEvent( stream->processingCompleted );
+        }
+    }
+}
+
+/***********************************************************************************
+    When CloseStream() is called, the multi-api layer ensures that
+    the stream has already been stopped or aborted.
+*/
+static PaError CloseStream( PaStream* s )
+{
+    PaError result = paNoError;
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    CloseHandle( stream->processingCompleted );
+
+    // Cleanup the sound buffers
+    if( stream->pDirectSoundOutputBuffer )
+    {
+        IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer );
+        IDirectSoundBuffer_Release( stream->pDirectSoundOutputBuffer );
+        stream->pDirectSoundOutputBuffer = NULL;
+    }
+
+    if( stream->pDirectSoundPrimaryBuffer )
+    {
+        IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer );
+        stream->pDirectSoundPrimaryBuffer = NULL;
+    }
+
+    if( stream->pDirectSoundInputBuffer )
+    {
+        IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer );
+        IDirectSoundCaptureBuffer_Release( stream->pDirectSoundInputBuffer );
+        stream->pDirectSoundInputBuffer = NULL;
+    }
+
+    if( stream->pDirectSoundCapture )
+    {
+        IDirectSoundCapture_Release( stream->pDirectSoundCapture );
+        stream->pDirectSoundCapture = NULL;
+    }
+
+    if( stream->pDirectSound )
+    {
+        IDirectSound_Release( stream->pDirectSound );
+        stream->pDirectSound = NULL;
+    }
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+    if( stream->pDirectSoundFullDuplex8 )
+    {
+        IDirectSoundFullDuplex_Release( stream->pDirectSoundFullDuplex8 );
+        stream->pDirectSoundFullDuplex8 = NULL;
+    }
+#endif
+
+    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
+    PaUtil_FreeMemory( stream );
+
+    return result;
+}
+
+/***********************************************************************************/
+static HRESULT ClearOutputBuffer( PaWinDsStream *stream )
+{
+    PaError          result = paNoError;
+    unsigned char*   pDSBuffData;
+    DWORD            dwDataLen;
+    HRESULT          hr;
+
+    hr = IDirectSoundBuffer_SetCurrentPosition( stream->pDirectSoundOutputBuffer, 0 );
+    DBUG(("PaHost_ClearOutputBuffer: IDirectSoundBuffer_SetCurrentPosition returned = 0x%X.\n", hr));
+    if( hr != DS_OK )
+        return hr;
+
+    // Lock the DS buffer
+    if ((hr = IDirectSoundBuffer_Lock( stream->pDirectSoundOutputBuffer, 0, stream->outputBufferSizeBytes, (LPVOID*)&pDSBuffData,
+                                           &dwDataLen, NULL, 0, 0)) != DS_OK )
+        return hr;
+
+    // Zero the DS buffer
+    ZeroMemory(pDSBuffData, dwDataLen);
+    // Unlock the DS buffer
+    if ((hr = IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, pDSBuffData, dwDataLen, NULL, 0)) != DS_OK)
+        return hr;
+    
+    // Let DSound set the starting write position because if we set it to zero, it looks like the
+    // buffer is full to begin with. This causes a long pause before sound starts when using large buffers.
+    if ((hr = IDirectSoundBuffer_GetCurrentPosition( stream->pDirectSoundOutputBuffer,
+            &stream->previousPlayCursor, &stream->outputBufferWriteOffsetBytes )) != DS_OK)
+        return hr;
+
+    /* printf("DSW_InitOutputBuffer: playCursor = %d, writeCursor = %d\n", playCursor, dsw->dsw_WriteOffset ); */
+
+    return DS_OK;
+}
+
+static PaError StartStream( PaStream *s )
+{
+    PaError          result = paNoError;
+    PaWinDsStream   *stream = (PaWinDsStream*)s;
+    HRESULT          hr;
+        
+    stream->callbackResult = paContinue;
+    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
+    
+    ResetEvent( stream->processingCompleted );
+
+    if( stream->bufferProcessor.inputChannelCount > 0 )
+    {
+        // Start the buffer capture
+        if( stream->pDirectSoundInputBuffer != NULL ) // FIXME: not sure this check is necessary
+        {
+            hr = IDirectSoundCaptureBuffer_Start( stream->pDirectSoundInputBuffer, DSCBSTART_LOOPING );
+        }
+
+        DBUG(("StartStream: DSW_StartInput returned = 0x%X.\n", hr));
+        if( hr != DS_OK )
+        {
+            result = paUnanticipatedHostError;
+            PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+            goto error;
+        }
+    }
+
+    stream->framesWritten = 0;
+    stream->callbackFlags = 0;
+
+    stream->abortProcessing = 0;
+    stream->stopProcessing = 0;
+    stream->isActive = 1;
+
+    if( stream->bufferProcessor.outputChannelCount > 0 )
+    {
+        QueryPerformanceCounter( &stream->previousPlayTime );
+        stream->finalZeroBytesWritten = 0;
+
+        hr = ClearOutputBuffer( stream );
+        if( hr != DS_OK )
+        {
+            result = paUnanticipatedHostError;
+            PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+            goto error;
+        }
+
+        if( stream->streamRepresentation.streamCallback && (stream->streamFlags & paPrimeOutputBuffersUsingStreamCallback) )
+        {
+            stream->callbackFlags = paPrimingOutput;
+
+            TimeSlice( stream );
+            /* we ignore the return value from TimeSlice here and start the stream as usual.
+                The first timer callback will detect if the callback has completed. */
+
+            stream->callbackFlags = 0;
+        }
+
+        // Start the buffer playback in a loop.
+        if( stream->pDirectSoundOutputBuffer != NULL ) // FIXME: not sure this needs to be checked here
+        {
+            hr = IDirectSoundBuffer_Play( stream->pDirectSoundOutputBuffer, 0, 0, DSBPLAY_LOOPING );
+            DBUG(("PaHost_StartOutput: IDirectSoundBuffer_Play returned = 0x%X.\n", hr));
+            if( hr != DS_OK )
+            {
+                result = paUnanticipatedHostError;
+                PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+                goto error;
+            }
+            stream->outputIsRunning = TRUE;
+        }
+    }
+
+    if( stream->streamRepresentation.streamCallback )
+    {
+        /* Create timer that will wake us up so we can fill the DSound buffer. */
+        int resolution;
+        int framesPerWakeup = stream->framesPerDSBuffer / 4;
+        int msecPerWakeup = MSEC_PER_SECOND * framesPerWakeup / (int) stream->streamRepresentation.streamInfo.sampleRate;
+        if( msecPerWakeup < 10 ) msecPerWakeup = 10;
+        else if( msecPerWakeup > 100 ) msecPerWakeup = 100;
+        resolution = msecPerWakeup/4;
+        stream->timerID = timeSetEvent( msecPerWakeup, resolution, (LPTIMECALLBACK) TimerCallback,
+                                             (DWORD_PTR) stream, TIME_PERIODIC | TIME_KILL_SYNCHRONOUS );
+    
+        if( stream->timerID == 0 )
+        {
+            stream->isActive = 0;
+            result = paUnanticipatedHostError;
+            PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr );
+            goto error;
+        }
+    }
+
+    stream->isStarted = TRUE;
+
+error:
+    return result;
+}
+
+
+/***********************************************************************************/
+static PaError StopStream( PaStream *s )
+{
+    PaError result = paNoError;
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+    HRESULT          hr;
+    int timeoutMsec;
+
+    if( stream->streamRepresentation.streamCallback )
+    {
+        stream->stopProcessing = 1;
+
+        /* Set timeout at 4 times maximum time we might wait. */
+        timeoutMsec = (int) (4 * MSEC_PER_SECOND * (stream->framesPerDSBuffer / stream->streamRepresentation.streamInfo.sampleRate));
+
+        WaitForSingleObject( stream->processingCompleted, timeoutMsec );
+    }
+
+    if( stream->timerID != 0 )
+    {
+        timeKillEvent(stream->timerID);  /* Stop callback timer. */
+        stream->timerID = 0;
+    }
+
+
+    if( stream->bufferProcessor.outputChannelCount > 0 )
+    {
+        // Stop the buffer playback
+        if( stream->pDirectSoundOutputBuffer != NULL )
+        {
+            stream->outputIsRunning = FALSE;
+            // FIXME: what happens if IDirectSoundBuffer_Stop returns an error?
+            hr = IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer );
+
+            if( stream->pDirectSoundPrimaryBuffer )
+                IDirectSoundBuffer_Stop( stream->pDirectSoundPrimaryBuffer ); /* FIXME we never started the primary buffer so I'm not sure we need to stop it */
+        }
+    }
+
+    if( stream->bufferProcessor.inputChannelCount > 0 )
+    {
+        // Stop the buffer capture
+        if( stream->pDirectSoundInputBuffer != NULL )
+        {
+            // FIXME: what happens if IDirectSoundCaptureBuffer_Stop returns an error?
+            hr = IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer );
+        }
+    }
+
+    stream->isStarted = FALSE;
+
+    return result;
+}
+
+
+/***********************************************************************************/
+static PaError AbortStream( PaStream *s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    stream->abortProcessing = 1;
+    return StopStream( s );
+}
+
+
+/***********************************************************************************/
+static PaError IsStreamStopped( PaStream *s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    return !stream->isStarted;
+}
+
+
+/***********************************************************************************/
+static PaError IsStreamActive( PaStream *s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    return stream->isActive;
+}
+
+/***********************************************************************************/
+static PaTime GetStreamTime( PaStream *s )
+{
+    /* suppress unused variable warnings */
+    (void) s;
+
+    return PaUtil_GetTime();
+}
+
+
+/***********************************************************************************/
+static double GetStreamCpuLoad( PaStream* s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
+}
+
+
+/***********************************************************************************
+    As separate stream interfaces are used for blocking and callback
+    streams, the following functions can be guaranteed to only be called
+    for blocking streams.
+*/
+
+static PaError ReadStream( PaStream* s,
+                           void *buffer,
+                           unsigned long frames )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    /* suppress unused variable warnings */
+    (void) buffer;
+    (void) frames;
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+
+    return paNoError;
+}
+
+
+/***********************************************************************************/
+static PaError WriteStream( PaStream* s,
+                            const void *buffer,
+                            unsigned long frames )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    /* suppress unused variable warnings */
+    (void) buffer;
+    (void) frames;
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+
+    return paNoError;
+}
+
+
+/***********************************************************************************/
+static signed long GetStreamReadAvailable( PaStream* s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    /* suppress unused variable warnings */
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+
+    return 0;
+}
+
+
+/***********************************************************************************/
+static signed long GetStreamWriteAvailable( PaStream* s )
+{
+    PaWinDsStream *stream = (PaWinDsStream*)s;
+
+    /* suppress unused variable warnings */
+    (void) stream;
+    
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+
+    return 0;
+}
+
+
+
diff --git a/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c b/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c
new file mode 100644
index 000000000..c4e3c4eca
--- /dev/null
+++ b/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c
@@ -0,0 +1,224 @@
+/*
+ * Interface for dynamically loading directsound and providing a dummy
+ * implementation if it isn't present.
+ *
+ * Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi)
+ *
+ * For PortAudio Portable Real-Time Audio Library
+ * For more information see: http://www.portaudio.com
+ * Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/**
+ @file
+ @ingroup hostapi_src
+*/
+
+#include "pa_win_ds_dynlink.h"
+#include "pa_debugprint.h"
+
+PaWinDsDSoundEntryPoints paWinDsDSoundEntryPoints = { 0, 0, 0, 0, 0, 0, 0 };
+
+
+static HRESULT WINAPI DummyDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+{
+    (void)rclsid; /* unused parameter */
+    (void)riid; /* unused parameter */
+    (void)ppv; /* unused parameter */
+    return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+static HRESULT WINAPI DummyDirectSoundCreate(LPGUID lpcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter)
+{
+    (void)lpcGuidDevice; /* unused parameter */
+    (void)ppDS; /* unused parameter */
+    (void)pUnkOuter; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DummyDirectSoundEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext)
+{
+    (void)lpDSEnumCallback; /* unused parameter */
+    (void)lpContext; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DummyDirectSoundEnumerateA(LPDSENUMCALLBACKA lpDSEnumCallback, LPVOID lpContext)
+{
+    (void)lpDSEnumCallback; /* unused parameter */
+    (void)lpContext; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DummyDirectSoundCaptureCreate(LPGUID lpcGUID, LPDIRECTSOUNDCAPTURE *lplpDSC, LPUNKNOWN pUnkOuter)
+{
+    (void)lpcGUID; /* unused parameter */
+    (void)lplpDSC; /* unused parameter */
+    (void)pUnkOuter; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DummyDirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW lpDSCEnumCallback, LPVOID lpContext)
+{
+    (void)lpDSCEnumCallback; /* unused parameter */
+    (void)lpContext; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DummyDirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA lpDSCEnumCallback, LPVOID lpContext)
+{
+    (void)lpDSCEnumCallback; /* unused parameter */
+    (void)lpContext; /* unused parameter */
+    return E_NOTIMPL;
+}
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+static HRESULT WINAPI DummyDirectSoundFullDuplexCreate8(
+         LPCGUID pcGuidCaptureDevice,
+         LPCGUID pcGuidRenderDevice,
+         LPCDSCBUFFERDESC pcDSCBufferDesc,
+         LPCDSBUFFERDESC pcDSBufferDesc,
+         HWND hWnd,
+         DWORD dwLevel,
+         LPDIRECTSOUNDFULLDUPLEX * ppDSFD,
+         LPDIRECTSOUNDCAPTUREBUFFER8 * ppDSCBuffer8,
+         LPDIRECTSOUNDBUFFER8 * ppDSBuffer8,
+         LPUNKNOWN pUnkOuter)
+{
+    (void)pcGuidCaptureDevice; /* unused parameter */
+    (void)pcGuidRenderDevice; /* unused parameter */
+    (void)pcDSCBufferDesc; /* unused parameter */
+    (void)pcDSBufferDesc; /* unused parameter */
+    (void)hWnd; /* unused parameter */
+    (void)dwLevel; /* unused parameter */
+    (void)ppDSFD; /* unused parameter */
+    (void)ppDSCBuffer8; /* unused parameter */
+    (void)ppDSBuffer8; /* unused parameter */
+    (void)pUnkOuter; /* unused parameter */
+
+    return E_NOTIMPL;
+}
+#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */
+
+void PaWinDs_InitializeDSoundEntryPoints(void)
+{
+    paWinDsDSoundEntryPoints.hInstance_ = LoadLibraryA("dsound.dll");
+    if( paWinDsDSoundEntryPoints.hInstance_ != NULL )
+    {
+        paWinDsDSoundEntryPoints.DllGetClassObject =
+                (HRESULT (WINAPI *)(REFCLSID, REFIID , LPVOID *))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DllGetClassObject" );
+        if( paWinDsDSoundEntryPoints.DllGetClassObject == NULL )
+            paWinDsDSoundEntryPoints.DllGetClassObject = DummyDllGetClassObject;
+
+        paWinDsDSoundEntryPoints.DirectSoundCreate =
+                (HRESULT (WINAPI *)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCreate" );
+        if( paWinDsDSoundEntryPoints.DirectSoundCreate == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundCreate = DummyDirectSoundCreate;
+
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateW =
+                (HRESULT (WINAPI *)(LPDSENUMCALLBACKW, LPVOID))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundEnumerateW" );
+        if( paWinDsDSoundEntryPoints.DirectSoundEnumerateW == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundEnumerateW = DummyDirectSoundEnumerateW;
+
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateA =
+                (HRESULT (WINAPI *)(LPDSENUMCALLBACKA, LPVOID))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundEnumerateA" );
+        if( paWinDsDSoundEntryPoints.DirectSoundEnumerateA == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundEnumerateA = DummyDirectSoundEnumerateA;
+
+        paWinDsDSoundEntryPoints.DirectSoundCaptureCreate =
+                (HRESULT (WINAPI *)(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureCreate" );
+        if( paWinDsDSoundEntryPoints.DirectSoundCaptureCreate == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = DummyDirectSoundCaptureCreate;
+
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW =
+                (HRESULT (WINAPI *)(LPDSENUMCALLBACKW, LPVOID))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureEnumerateW" );
+        if( paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = DummyDirectSoundCaptureEnumerateW;
+
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA =
+                (HRESULT (WINAPI *)(LPDSENUMCALLBACKA, LPVOID))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureEnumerateA" );
+        if( paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = DummyDirectSoundCaptureEnumerateA;
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+        paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 =
+                (HRESULT (WINAPI *)(LPCGUID, LPCGUID, LPCDSCBUFFERDESC, LPCDSBUFFERDESC,
+                                    HWND, DWORD, LPDIRECTSOUNDFULLDUPLEX *, LPDIRECTSOUNDCAPTUREBUFFER8 *, 
+                                    LPDIRECTSOUNDBUFFER8 *, LPUNKNOWN))
+                GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundFullDuplexCreate" );
+        if( paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 == NULL )
+            paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 = DummyDirectSoundFullDuplexCreate8;
+#endif
+    }
+    else
+    {
+        DWORD errorCode = GetLastError(); // 126 (0x7E) == ERROR_MOD_NOT_FOUND
+        PA_DEBUG(("Couldn't load dsound.dll error code: %d \n",errorCode));
+
+        /* initialize with dummy entry points to make live easy when ds isn't present */
+        paWinDsDSoundEntryPoints.DirectSoundCreate = DummyDirectSoundCreate;
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateW = DummyDirectSoundEnumerateW;
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateA = DummyDirectSoundEnumerateA;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = DummyDirectSoundCaptureCreate;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = DummyDirectSoundCaptureEnumerateW;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = DummyDirectSoundCaptureEnumerateA;
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+        paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 = DummyDirectSoundFullDuplexCreate8;
+#endif
+    }
+}
+
+
+void PaWinDs_TerminateDSoundEntryPoints(void)
+{
+    if( paWinDsDSoundEntryPoints.hInstance_ != NULL )
+    {
+        /* ensure that we crash reliably if the entry points arent initialised */
+        paWinDsDSoundEntryPoints.DirectSoundCreate = 0;
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateW = 0;
+        paWinDsDSoundEntryPoints.DirectSoundEnumerateA = 0;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = 0;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = 0;
+        paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = 0;
+
+        FreeLibrary( paWinDsDSoundEntryPoints.hInstance_ );
+        paWinDsDSoundEntryPoints.hInstance_ = NULL;
+    }
+}
\ No newline at end of file
diff --git a/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h b/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h
new file mode 100644
index 000000000..fd6d8feda
--- /dev/null
+++ b/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h
@@ -0,0 +1,106 @@
+/*
+ * Interface for dynamically loading directsound and providing a dummy
+ * implementation if it isn't present.
+ *
+ * Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi)
+ *
+ * For PortAudio Portable Real-Time Audio Library
+ * For more information see: http://www.portaudio.com
+ * Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/**
+ @file
+ @ingroup hostapi_src
+*/
+
+#ifndef INCLUDED_PA_DSOUND_DYNLINK_H
+#define INCLUDED_PA_DSOUND_DYNLINK_H
+
+/* on Borland compilers, WIN32 doesn't seem to be defined by default, which
+    breaks dsound.h. Adding the define here fixes the problem. - rossb. */
+#ifdef __BORLANDC__
+#if !defined(WIN32)
+#define WIN32
+#endif
+#endif
+
+/*
+  Use the earliest version of DX required, no need to polute the namespace
+*/
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+#define DIRECTSOUND_VERSION 0x0800
+#else
+#define DIRECTSOUND_VERSION 0x0300
+#endif
+#include <dsound.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+typedef struct
+{
+    HINSTANCE hInstance_;
+    
+    HRESULT (WINAPI *DllGetClassObject)(REFCLSID , REFIID , LPVOID *);
+
+    HRESULT (WINAPI *DirectSoundCreate)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);
+    HRESULT (WINAPI *DirectSoundEnumerateW)(LPDSENUMCALLBACKW, LPVOID);
+    HRESULT (WINAPI *DirectSoundEnumerateA)(LPDSENUMCALLBACKA, LPVOID);
+
+    HRESULT (WINAPI *DirectSoundCaptureCreate)(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN);
+    HRESULT (WINAPI *DirectSoundCaptureEnumerateW)(LPDSENUMCALLBACKW, LPVOID);
+    HRESULT (WINAPI *DirectSoundCaptureEnumerateA)(LPDSENUMCALLBACKA, LPVOID);
+
+#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE
+    HRESULT (WINAPI *DirectSoundFullDuplexCreate8)(
+                LPCGUID, LPCGUID, LPCDSCBUFFERDESC, LPCDSBUFFERDESC,
+                HWND, DWORD, LPDIRECTSOUNDFULLDUPLEX *, LPDIRECTSOUNDCAPTUREBUFFER8 *, 
+                LPDIRECTSOUNDBUFFER8 *, LPUNKNOWN );
+#endif
+}PaWinDsDSoundEntryPoints;
+
+extern PaWinDsDSoundEntryPoints paWinDsDSoundEntryPoints;
+
+void PaWinDs_InitializeDSoundEntryPoints(void);
+void PaWinDs_TerminateDSoundEntryPoints(void);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* INCLUDED_PA_DSOUND_DYNLINK_H */
diff --git a/portaudio/src/hostapi/jack/pa_jack.c b/portaudio/src/hostapi/jack/pa_jack.c
index 6b6c2120e..2c2396fe9 100644
--- a/portaudio/src/hostapi/jack/pa_jack.c
+++ b/portaudio/src/hostapi/jack/pa_jack.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_jack.c 1238 2007-07-15 16:58:50Z aknudsen $
+ * $Id: pa_jack.c 1530 2010-07-29 06:29:41Z dmitrykos $
  * PortAudio Portable Real-Time Audio Library
  * Latest Version at: http://www.portaudio.com
  * JACK Implementation by Joshua Haberman
@@ -254,7 +254,7 @@ static PaError BlockingInitFIFO( PaUtilRingBuffer *rbuf, long numFrames, long by
     char *buffer = (char *) malloc( numBytes );
     if( buffer == NULL ) return paInsufficientMemory;
     memset( buffer, 0, numBytes );
-    return (PaError) PaUtil_InitializeRingBuffer( rbuf, numBytes, buffer );
+    return (PaError) PaUtil_InitializeRingBuffer( rbuf, 1, numBytes, buffer );
 }
 
 /* Free buffer. */
@@ -717,14 +717,19 @@ PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi,
     ASSERT_CALL( pthread_cond_init( &jackHostApi->cond, NULL ), 0 );
 
     /* Try to become a client of the JACK server.  If we cannot do
-     * this, then this API cannot be used. */
+     * this, then this API cannot be used.
+     *
+     * Without the JackNoStartServer option, the jackd server is started
+     * automatically which we do not want.
+     */
 
-    jackHostApi->jack_client = jack_client_open( clientName_, 0, &jackStatus );
+    jackHostApi->jack_client = jack_client_open( clientName_, JackNoStartServer, &jackStatus );
     if( !jackHostApi->jack_client )
     {
         /* the V19 development docs say that if an implementation
          * detects that it cannot be used, it should return a NULL
          * interface and paNoError */
+        PA_DEBUG(( "%s: Couldn't connect to JACK, status: %d\n", __FUNCTION__, jackStatus ));
         result = paNoError;
         goto error;
     }
@@ -737,7 +742,6 @@ PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi,
     (*hostApi)->info.name = "JACK Audio Connection Kit";
 
     /* Build a device list by querying the JACK server */
-
     ENSURE_PA( BuildDeviceList( jackHostApi ) );
 
     /* Register functions */
@@ -996,7 +1000,7 @@ static PaError WaitCondition( PaJackHostApiRepresentation *hostApi )
     PaTime pt = PaUtil_GetTime();
     struct timespec ts;
 
-    ts.tv_sec = (time_t) floor( pt + 1 );
+    ts.tv_sec = (time_t) floor( pt + 10 * 60 /* 10 minutes */ );
     ts.tv_nsec = (long) ((pt - floor( pt )) * 1000000000);
     /* XXX: Best enclose in loop, in case of spurious wakeups? */
     err = pthread_cond_timedwait( &hostApi->cond, &hostApi->mtx, &ts );
@@ -1173,7 +1177,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
             minimum_buffer_frames = jackHostApi->jack_buffer_size * 3;
 
         /* setup blocking API data structures (FIXME: can fail) */
-	BlockingBegin( stream, minimum_buffer_frames );
+        BlockingBegin( stream, minimum_buffer_frames );
 
         /* install our own callback for the blocking API */
         streamCallback = BlockingCallback;
@@ -1272,10 +1276,10 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                   &stream->bufferProcessor,
                   inputChannelCount,
                   inputSampleFormat,
-                  paFloat32,            /* hostInputSampleFormat */
+                  paFloat32 | paNonInterleaved, /* hostInputSampleFormat */
                   outputChannelCount,
                   outputSampleFormat,
-                  paFloat32,            /* hostOutputSampleFormat */
+                  paFloat32 | paNonInterleaved, /* hostOutputSampleFormat */
                   jackSr,
                   streamFlags,
                   framesPerBuffer,
@@ -1748,7 +1752,8 @@ PaError PaJack_GetClientName(const char** clientName)
 {
     PaError result = paNoError;
     PaJackHostApiRepresentation* jackHostApi = NULL;
-    ENSURE_PA( PaUtil_GetHostApiRepresentation( (PaUtilHostApiRepresentation**)&jackHostApi, paJACK ) );
+    PaJackHostApiRepresentation** ref = &jackHostApi;
+    ENSURE_PA( PaUtil_GetHostApiRepresentation( (PaUtilHostApiRepresentation**)ref, paJACK ) );
     *clientName = jack_get_client_name( jackHostApi->jack_client );
 
 error:
diff --git a/portaudio/src/hostapi/oss/pa_unix_oss.c b/portaudio/src/hostapi/oss/pa_unix_oss.c
index 516f5a459..9bc972bf8 100644
--- a/portaudio/src/hostapi/oss/pa_unix_oss.c
+++ b/portaudio/src/hostapi/oss/pa_unix_oss.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_unix_oss.c 1238 2007-07-15 16:58:50Z aknudsen $
+ * $Id: pa_unix_oss.c 1509 2010-06-06 17:36:33Z dmitrykos $
  * PortAudio Portable Real-Time Audio Library
  * Latest Version at: http://www.portaudio.com
  * OSS implementation by:
@@ -65,7 +65,11 @@
 
 #ifdef HAVE_SYS_SOUNDCARD_H
 # include <sys/soundcard.h>
-# define DEVICE_NAME_BASE            "/dev/dsp"
+# ifdef __NetBSD__
+#  define DEVICE_NAME_BASE           "/dev/audio"
+# else
+#  define DEVICE_NAME_BASE           "/dev/dsp"
+# endif
 #elif defined(HAVE_LINUX_SOUNDCARD_H)
 # include <linux/soundcard.h>
 # define DEVICE_NAME_BASE            "/dev/dsp"
@@ -97,7 +101,7 @@ static pthread_t mainThread_;
             /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \
             if( (code) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \
             { \
-                PaUtil_SetLastHostErrorInfo( paALSA, sysErr_, strerror( errno ) ); \
+                PaUtil_SetLastHostErrorInfo( paOSS, sysErr_, strerror( errno ) ); \
             } \
             \
             PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \
@@ -181,7 +185,7 @@ typedef struct PaOssStream
     double sampleRate;
 
     int callbackMode;
-    int callbackStop, callbackAbort;
+    volatile int callbackStop, callbackAbort;
 
     PaOssStreamComponent *capture, *playback;
     unsigned long pollTimeout;
@@ -332,7 +336,11 @@ static PaError QueryDirection( const char *deviceName, StreamMode mode, double *
         }
         else
         {
-            PA_DEBUG(( "%s: Can't access device: %s\n", __FUNCTION__, strerror( errno ) ));
+            /* Ignore ENOENT, which means we've tried a non-existent device */
+            if( errno != ENOENT )
+            {
+                PA_DEBUG(( "%s: Can't access device %s: %s\n", __FUNCTION__, deviceName, strerror( errno ) ));
+            }
         }
 
         return paDeviceUnavailable;
@@ -401,11 +409,7 @@ static PaError QueryDirection( const char *deviceName, StreamMode mode, double *
     if( *defaultSampleRate < 0 )
     {
         sr = 44100;
-        if( ioctl( devHandle, SNDCTL_DSP_SPEED, &sr ) < 0 )
-        {
-            result = paUnanticipatedHostError;
-            goto error;
-        }
+        ENSURE_( ioctl( devHandle, SNDCTL_DSP_SPEED, &sr ), paUnanticipatedHostError );
 
         *defaultSampleRate = sr;
     }
@@ -508,27 +512,20 @@ static PaError BuildDeviceList( PaOSSHostApiRepresentation *ossApi )
     /* Find devices by calling QueryDevice on each
      * potential device names.  When we find a valid one,
      * add it to a linked list.
-     * A: Can there only be 10 devices? */
+     * A: Set an arbitrary of 100 devices, should probably be a smarter way. */
 
-    for( i = 0; i < 10; i++ )
+    for( i = 0; i < 100; i++ )
     {
        char deviceName[32];
        PaDeviceInfo *deviceInfo;
        int testResult;
-       struct stat stbuf;
 
        if( i == 0 )
           snprintf(deviceName, sizeof (deviceName), "%s", DEVICE_NAME_BASE);
        else
           snprintf(deviceName, sizeof (deviceName), "%s%d", DEVICE_NAME_BASE, i);
 
-       /* PA_DEBUG(("PaOSS BuildDeviceList: trying device %s\n", deviceName )); */
-       if( stat( deviceName, &stbuf ) < 0 )
-       {
-           if( ENOENT != errno )
-               PA_DEBUG(( "%s: Error stat'ing %s: %s\n", __FUNCTION__, deviceName, strerror( errno ) ));
-           continue;
-       }
+       /* PA_DEBUG(("%s: trying device %s\n", __FUNCTION__, deviceName )); */
        if( (testResult = QueryDevice( deviceName, ossApi, &deviceInfo )) != paNoError )
        {
            if( testResult != paDeviceUnavailable )
@@ -785,11 +782,15 @@ error:
     return result;
 }
 
+/** Open input and output devices.
+ *
+ * @param idev: Returned input device file descriptor.
+ * @param odev: Returned output device file descriptor.
+ */
 static PaError OpenDevices( const char *idevName, const char *odevName, int *idev, int *odev )
 {
     PaError result = paNoError;
     int flags = O_NONBLOCK, duplex = 0;
-    int enableBits = 0;
     *idev = *odev = -1;
 
     if( idevName && odevName )
@@ -809,10 +810,6 @@ static PaError OpenDevices( const char *idevName, const char *odevName, int *ide
     {
         ENSURE_( *idev = open( idevName, flags ), paDeviceUnavailable );
         PA_ENSURE( ModifyBlocking( *idev, 1 ) ); /* Blocking */
-
-        /* Initially disable */
-        enableBits = ~PCM_ENABLE_INPUT;
-        ENSURE_( ioctl( *idev, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError );
     }
     if( odevName )
     {
@@ -820,10 +817,6 @@ static PaError OpenDevices( const char *idevName, const char *odevName, int *ide
         {
             ENSURE_( *odev = open( odevName, flags ), paDeviceUnavailable );
             PA_ENSURE( ModifyBlocking( *odev, 1 ) ); /* Blocking */
-
-            /* Initially disable */
-            enableBits = ~PCM_ENABLE_OUTPUT;
-            ENSURE_( ioctl( *odev, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError );
         }
         else
         {
@@ -976,8 +969,10 @@ static int CalcHigherLogTwo( int n )
     return log2;
 }
 
-static PaError PaOssStreamComponent_Configure( PaOssStreamComponent *component, double sampleRate, unsigned long framesPerBuffer,
-        StreamMode streamMode, PaOssStreamComponent *master )
+/** Configure stream component device parameters.
+ */
+static PaError PaOssStreamComponent_Configure( PaOssStreamComponent *component, double sampleRate, unsigned long
+        framesPerBuffer, StreamMode streamMode, PaOssStreamComponent *master )
 {
     PaError result = paNoError;
     int temp, nativeFormat;
@@ -1189,6 +1184,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     const PaDeviceInfo *inputDeviceInfo = 0, *outputDeviceInfo = 0;
     int bpInitialized = 0;
     double inLatency = 0., outLatency = 0.;
+    int i = 0;
 
     /* validate platform specific flags */
     if( (streamFlags & paPlatformSpecificFlags) != 0 )
@@ -1225,6 +1221,14 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         }
     }
 
+    /* Round framesPerBuffer to the next power-of-two to make OSS happy. */
+    if( framesPerBuffer != paFramesPerBufferUnspecified )
+    {
+        framesPerBuffer &= INT_MAX;
+        for (i = 1; framesPerBuffer > i; i <<= 1) ;
+        framesPerBuffer = i;
+    }
+
     /* allocate and do basic initialization of the stream structure */
     PA_UNLESS( stream = (PaOssStream*)PaUtil_AllocateMemory( sizeof(PaOssStream) ), paInsufficientMemory );
     PA_ENSURE( PaOssStream_Initialize( stream, inputParameters, outputParameters, streamCallback, userData, streamFlags, ossHostApi ) );
@@ -1313,7 +1317,17 @@ static PaError PaOssStream_WaitForFrames( PaOssStream *stream, unsigned long *fr
 
     while( pollPlayback || pollCapture )
     {
+#ifdef PTHREAD_CANCELED
         pthread_testcancel();
+#else
+        /* avoid indefinite waiting on thread not supporting cancelation */
+        if( stream->callbackStop || stream->callbackAbort )
+        {
+            PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" ));
+            (*frames) = 0;
+            return paNoError;
+        }
+#endif
 
         /* select may modify the timeout parameter */
         selectTimeval.tv_usec = timeout;
@@ -1337,8 +1351,17 @@ static PaError PaOssStream_WaitForFrames( PaOssStream *stream, unsigned long *fr
             ENSURE_( -1, paUnanticipatedHostError );
         }
         */
+#ifdef PTHREAD_CANCELED
         pthread_testcancel();
-
+#else
+        /* avoid indefinite waiting on thread not supporting cancelation */
+        if( stream->callbackStop || stream->callbackAbort )
+        {
+            PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" ));
+            (*frames) = 0;
+            return paNoError;
+        }
+#endif
         if( pollCapture )
         {
             if( FD_ISSET( captureFd, &readFds ) )
@@ -1428,6 +1451,12 @@ static PaError PaOssStream_Prepare( PaOssStream *stream )
     if( stream->triggered )
         return result;
 
+    /* The OSS reference instructs us to clear direction bits before setting them.*/
+    if( stream->playback )
+        ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError );
+    if( stream->capture )
+        ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError );
+
     if( stream->playback )
     {
         size_t bufSz = PaOssStreamComponent_BufferSize( stream->playback );
@@ -1478,17 +1507,29 @@ static PaError PaOssStream_Stop( PaOssStream *stream, int abort )
     PaError result = paNoError;
 
     /* Looks like the only safe way to stop audio without reopening the device is SNDCTL_DSP_POST.
-     * Also disable capture/playback till the stream is started again */
+     * Also disable capture/playback till the stream is started again.
+     */
+    int captureErr = 0, playbackErr = 0;
     if( stream->capture )
     {
-        ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_POST, 0 ), paUnanticipatedHostError );
+        if( (captureErr = ioctl( stream->capture->fd, SNDCTL_DSP_POST, 0 )) < 0 )
+        {
+            PA_DEBUG(( "%s: Failed to stop capture device, error: %d\n", __FUNCTION__, captureErr ));
+        }
     }
     if( stream->playback && !stream->sharedDevice )
     {
-        ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_POST, 0 ), paUnanticipatedHostError );
+        if( (playbackErr = ioctl( stream->playback->fd, SNDCTL_DSP_POST, 0 )) < 0 )
+        {
+            PA_DEBUG(( "%s: Failed to stop playback device, error: %d\n", __FUNCTION__, playbackErr ));
+        }
+    }
+
+    if( captureErr || playbackErr )
+    {
+        result = paUnanticipatedHostError;
     }
 
-error:
     return result;
 }
 
@@ -1581,8 +1622,15 @@ static void *PaOSS_AudioThreadProc( void *userData )
 
     while( 1 )
     {
+#ifdef PTHREAD_CANCELED
         pthread_testcancel();
-
+#else
+        if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */
+        {
+            PA_DEBUG(( "Aborting callback thread\n" ));
+            break;
+        }
+#endif
         if( stream->callbackStop && callbackResult == paContinue )
         {
             PA_DEBUG(( "Setting callbackResult to paComplete\n" ));
@@ -1609,8 +1657,21 @@ static void *PaOSS_AudioThreadProc( void *userData )
         {
             unsigned long frames = framesAvail;
 
+#ifdef PTHREAD_CANCELED
             pthread_testcancel();
+#else
+            if( stream->callbackStop )
+            {
+                PA_DEBUG(( "Setting callbackResult to paComplete\n" ));
+                callbackResult = paComplete;
+            }
 
+            if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */
+            {
+                PA_DEBUG(( "Aborting callback thread\n" ));
+                break;
+            }
+#endif
             PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
 
             /* Read data */
@@ -1852,6 +1913,7 @@ static PaError ReadStream( PaStream* s,
                            void *buffer,
                            unsigned long frames )
 {
+    PaError result = paNoError;
     PaOssStream *stream = (PaOssStream*)s;
     int bytesRequested, bytesRead;
     unsigned long framesRequested;
@@ -1872,21 +1934,28 @@ static PaError ReadStream( PaStream* s,
         framesRequested = PA_MIN( frames, stream->capture->hostFrames );
 
 	bytesRequested = framesRequested * PaOssStreamComponent_FrameSize( stream->capture );
-	bytesRead = read( stream->capture->fd, stream->capture->buffer, bytesRequested );
+	ENSURE_( (bytesRead = read( stream->capture->fd, stream->capture->buffer, bytesRequested )),
+                 paUnanticipatedHostError );
 	if ( bytesRequested != bytesRead )
+	{
+	    PA_DEBUG(( "Requested %d bytes, read %d\n", bytesRequested, bytesRead ));
 	    return paUnanticipatedHostError;
+	}
 
 	PaUtil_SetInputFrameCount( &stream->bufferProcessor, stream->capture->hostFrames );
 	PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, stream->capture->buffer, stream->capture->hostChannelCount );
         PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, framesRequested );
 	frames -= framesRequested;
     }
-    return paNoError;
+
+error:
+    return result;
 }
 
 
 static PaError WriteStream( PaStream *s, const void *buffer, unsigned long frames )
 {
+    PaError result = paNoError;
     PaOssStream *stream = (PaOssStream*)s;
     int bytesRequested, bytesWritten;
     unsigned long framesConverted;
@@ -1912,35 +1981,50 @@ static PaError WriteStream( PaStream *s, const void *buffer, unsigned long frame
 	frames -= framesConverted;
 
 	bytesRequested = framesConverted * PaOssStreamComponent_FrameSize( stream->playback );
-	bytesWritten = write( stream->playback->fd, stream->playback->buffer, bytesRequested );
+	ENSURE_( (bytesWritten = write( stream->playback->fd, stream->playback->buffer, bytesRequested )),
+                 paUnanticipatedHostError );
 
 	if ( bytesRequested != bytesWritten )
+	{
+	    PA_DEBUG(( "Requested %d bytes, wrote %d\n", bytesRequested, bytesWritten ));
 	    return paUnanticipatedHostError;
+	}
     }
-    return paNoError;
+
+error:
+    return result;
 }
 
 
 static signed long GetStreamReadAvailable( PaStream* s )
 {
+    PaError result = paNoError;
     PaOssStream *stream = (PaOssStream*)s;
     audio_buf_info info;
 
-    if( ioctl( stream->capture->fd, SNDCTL_DSP_GETISPACE, &info ) < 0 )
-        return paUnanticipatedHostError;
+    ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_GETISPACE, &info ), paUnanticipatedHostError );
     return info.fragments * stream->capture->hostFrames;
+
+error:
+    return result;
 }
 
 
 /* TODO: Compute number of allocated bytes somewhere else, can we use ODELAY with capture */
 static signed long GetStreamWriteAvailable( PaStream* s )
 {
+    PaError result = paNoError;
     PaOssStream *stream = (PaOssStream*)s;
     int delay = 0;
-
-    if( ioctl( stream->playback->fd, SNDCTL_DSP_GETODELAY, &delay ) < 0 )
-        return paUnanticipatedHostError;
-
+#ifdef SNDCTL_DSP_GETODELAY
+    ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_GETODELAY, &delay ), paUnanticipatedHostError );
+#endif
     return (PaOssStreamComponent_BufferSize( stream->playback ) - delay) / PaOssStreamComponent_FrameSize( stream->playback );
+
+/* Conditionally compile this to avoid warning about unused label */
+#ifdef SNDCTL_DSP_GETODELAY
+error:
+    return result;
+#endif
 }
 
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h b/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h
new file mode 100644
index 000000000..100111a09
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h
@@ -0,0 +1,94 @@
+//
+// AudioSessionTypes.h -- Copyright Microsoft Corporation, All Rights Reserved.
+//
+// Description: Type definitions used by the audio session manager RPC/COM interfaces
+//
+#pragma once
+
+#ifndef __AUDIOSESSIONTYPES__
+#define __AUDIOSESSIONTYPES__
+
+#if defined(__midl)
+#define MIDL_SIZE_IS(x) [size_is(x)]
+#define MIDL_STRING [string]
+#define MIDL_ANYSIZE_ARRAY
+#else   // !defined(__midl)
+#define MIDL_SIZE_IS(x)
+#define MIDL_STRING
+#define MIDL_ANYSIZE_ARRAY ANYSIZE_ARRAY
+#endif  // defined(__midl)
+
+//-------------------------------------------------------------------------
+// Description: AudioClient share mode
+//                                   
+//     AUDCLNT_SHAREMODE_SHARED -    The device will be opened in shared mode and use the 
+//                                   WAS format.
+//     AUDCLNT_SHAREMODE_EXCLUSIVE - The device will be opened in exclusive mode and use the 
+//                                   application specified format.
+//
+typedef enum _AUDCLNT_SHAREMODE
+{ 
+    AUDCLNT_SHAREMODE_SHARED, 
+    AUDCLNT_SHAREMODE_EXCLUSIVE 
+} AUDCLNT_SHAREMODE;
+
+//-------------------------------------------------------------------------
+// Description: AudioClient stream flags
+// 
+// Can be a combination of AUDCLNT_STREAMFLAGS and AUDCLNT_SYSFXFLAGS:
+// 
+// AUDCLNT_STREAMFLAGS (this group of flags uses the high word, w/exception of high-bit which is reserved, 0x7FFF0000):
+//                                  
+//     AUDCLNT_STREAMFLAGS_CROSSPROCESS - Audio policy control for this stream will be shared with 
+//                                        with other process sessions that use the same audio session 
+//                                        GUID.
+//     AUDCLNT_STREAMFLAGS_LOOPBACK -     Initializes a renderer endpoint for a loopback audio application. 
+//                                        In this mode, a capture stream will be opened on the specified 
+//                                        renderer endpoint. Shared mode and a renderer endpoint is required.
+//                                        Otherwise the IAudioClient::Initialize call will fail. If the 
+//                                        initialize is successful, a capture stream will be available 
+//                                        from the IAudioClient object.
+//
+//     AUDCLNT_STREAMFLAGS_EVENTCALLBACK - An exclusive mode client will supply an event handle that will be
+//                                         signaled when an IRP completes (or a waveRT buffer completes) telling
+//                                         it to fill the next buffer
+//
+//     AUDCLNT_STREAMFLAGS_NOPERSIST -    Session state will not be persisted
+//
+// AUDCLNT_SYSFXFLAGS (these flags use low word 0x0000FFFF):
+//
+//     none defined currently
+//
+#define AUDCLNT_STREAMFLAGS_CROSSPROCESS  0x00010000
+#define AUDCLNT_STREAMFLAGS_LOOPBACK      0x00020000
+#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000
+#define AUDCLNT_STREAMFLAGS_NOPERSIST     0x00080000
+
+//-------------------------------------------------------------------------
+// Description: Device share mode - sharing mode for the audio device.
+//
+//      DeviceShared - The device can be shared with other processes.
+//      DeviceExclusive - The device will only be used by this process.
+//
+typedef enum _DeviceShareMode
+{ 
+    DeviceShared, 
+    DeviceExclusive 
+} DeviceShareMode;
+
+
+//-------------------------------------------------------------------------
+// Description: AudioSession State.
+//
+//      AudioSessionStateInactive - The session has no active audio streams.
+//      AudioSessionStateActive - The session has active audio streams.
+//      AudioSessionStateExpired - The session is dormant.
+typedef enum _AudioSessionState
+{
+    AudioSessionStateInactive = 0,
+    AudioSessionStateActive = 1,
+    AudioSessionStateExpired = 2
+} AudioSessionState;
+
+#endif
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h b/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h
new file mode 100644
index 000000000..f015eaec3
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h
@@ -0,0 +1,186 @@
+
+/*++
+
+Copyright (c) Microsoft Corporation.  All rights reserved.
+
+Module Name:
+
+    devpkey.h
+
+Abstract:
+
+    Defines property keys for the Plug and Play Device Property API.
+
+Author:
+
+    Jim Cavalaris (jamesca) 10-14-2003
+
+Environment:
+
+    User-mode only.
+
+Revision History:
+
+    14-October-2003     jamesca
+
+        Creation and initial implementation.
+
+    20-June-2006        dougb
+
+        Copied Jim's version replaced "DEFINE_DEVPROPKEY(DEVPKEY_" with "DEFINE_PROPERTYKEY(PKEY_"
+    
+--*/
+
+//#include <devpropdef.h>
+
+//
+// _NAME
+//
+
+DEFINE_PROPERTYKEY(PKEY_NAME,                          0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac, 10);    // DEVPROP_TYPE_STRING
+
+//
+// Device properties
+// These PKEYs correspond to the old setupapi SPDRP_XXX properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DeviceDesc,             0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 2);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_HardwareIds,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 3);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_CompatibleIds,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 4);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Service,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 6);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Class,                  0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 9);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ClassGuid,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 10);    // DEVPROP_TYPE_GUID
+DEFINE_PROPERTYKEY(PKEY_Device_Driver,                 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 11);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ConfigFlags,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 12);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Manufacturer,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_FriendlyName,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_LocationInfo,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_PDOName,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 16);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Capabilities,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 17);    // DEVPROP_TYPE_UNINT32
+DEFINE_PROPERTYKEY(PKEY_Device_UINumber,               0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 18);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_UpperFilters,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 19);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_LowerFilters,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 20);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_BusTypeGuid,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 21);    // DEVPROP_TYPE_GUID
+DEFINE_PROPERTYKEY(PKEY_Device_LegacyBusType,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 22);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_BusNumber,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 23);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_EnumeratorName,         0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 24);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Security,               0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 25);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR
+DEFINE_PROPERTYKEY(PKEY_Device_SecuritySDS,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DevType,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 27);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Exclusive,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 28);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Characteristics,        0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 29);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Address,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 30);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_UINumberDescFormat,     0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 31);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_PowerData,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 32);    // DEVPROP_TYPE_BINARY
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicy,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 33);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyDefault,   0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 34);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyOverride,  0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 35);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_InstallState,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 36);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_LocationPaths,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 37);    // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device properties
+// These PKEYs correspond to a device's status and problem code
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DevNodeStatus,          0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 2);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_ProblemCode,            0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 3);     // DEVPROP_TYPE_UINT32
+
+//
+// Device properties
+// These PKEYs correspond to device relations
+//
+DEFINE_PROPERTYKEY(PKEY_Device_EjectionRelations,      0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 4);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalRelations,       0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 5);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_PowerRelations,         0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 6);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_BusRelations,           0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 7);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Parent,                 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 8);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Children,               0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 9);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Siblings,               0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 10);    // DEVPROP_TYPE_STRING_LIST
+
+//
+// Other Device properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_Reported,               0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 2);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_Legacy,                 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 3);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_InstanceId,             0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 256);   // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Numa_Proximity_Domain,         0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 1);     // DEVPROP_TYPE_UINT32
+
+//
+// Device driver properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DriverDate,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 2);      // DEVPROP_TYPE_FILETIME
+DEFINE_PROPERTYKEY(PKEY_Device_DriverVersion,          0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverDesc,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 4);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfPath,          0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 5);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSection,       0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 6);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSectionExt,    0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 7);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_MatchingDeviceId,       0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 8);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverProvider,         0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 9);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverPropPageProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 10);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverCoInstallers,     0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 11);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerTags,     0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 12);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerExceptions, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 13); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverRank,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 14);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_DriverLogoLevel,        0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 15);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_NoConnectSound,         0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 17);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_GenericDriverInstalled, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 18);     // DEVPROP_TYPE_BOOLEAN
+
+
+//
+// Device properties that were set by the driver package that was installed
+// on the device.
+//
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_Model,                  0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 2);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_VendorWebSite,          0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 3);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_DetailedDescription,    0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 4);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_DocumentationLink,      0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 5);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_Icon,                   0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 6);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_BrandingIcon,           0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 7);     // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device setup class properties
+// These PKEYs correspond to the old setupapi SPCRP_XXX properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_UpperFilters,      0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 19);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_LowerFilters,      0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 20);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Security,          0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 25);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_SecuritySDS,       0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 26);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_DevType,           0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 27);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Exclusive,         0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 28);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Characteristics,   0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 29);    // DEVPROP_TYPE_UINT32
+
+//
+// Device setup class properties
+// These PKEYs correspond to registry values under the device class GUID key
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Name,              0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 2);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassName,         0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 3);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Icon,              0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 4);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassInstaller,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 5);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_PropPageProvider,  0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 6);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoInstallClass,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 7);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoDisplayClass,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 8);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_SilentInstall,     0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 9);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoUseClass,        0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 10); // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_DefaultService,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 11); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_IconPath,          0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 12); // DEVPROP_TYPE_STRING_LIST
+
+//
+// Other Device setup class properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassCoInstallers, 0x713d1703, 0xa2e2, 0x49f5, 0x92, 0x14, 0x56, 0x47, 0x2e, 0xf3, 0xda, 0x5c, 2); // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device interface properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_FriendlyName,  0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 2); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_Enabled,       0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 3); // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_ClassGuid,     0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 4); // DEVPROP_TYPE_GUID
+
+//
+// Device interface class properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceInterfaceClass_DefaultInterface,  0x14c83a99, 0x0b3f, 0x44b7, 0xbe, 0x4c, 0xa1, 0x78, 0xd3, 0x99, 0x05, 0x64, 2); // DEVPROP_TYPE_STRING
+
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h b/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h
new file mode 100644
index 000000000..3328c9d6b
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h
@@ -0,0 +1,1177 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for audioclient.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __audioclient_h__
+#define __audioclient_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IAudioClient_FWD_DEFINED__
+#define __IAudioClient_FWD_DEFINED__
+typedef interface IAudioClient IAudioClient;
+#endif 	/* __IAudioClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioRenderClient_FWD_DEFINED__
+#define __IAudioRenderClient_FWD_DEFINED__
+typedef interface IAudioRenderClient IAudioRenderClient;
+#endif 	/* __IAudioRenderClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioCaptureClient_FWD_DEFINED__
+#define __IAudioCaptureClient_FWD_DEFINED__
+typedef interface IAudioCaptureClient IAudioCaptureClient;
+#endif 	/* __IAudioCaptureClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioClock_FWD_DEFINED__
+#define __IAudioClock_FWD_DEFINED__
+typedef interface IAudioClock IAudioClock;
+#endif 	/* __IAudioClock_FWD_DEFINED__ */
+
+
+#ifndef __ISimpleAudioVolume_FWD_DEFINED__
+#define __ISimpleAudioVolume_FWD_DEFINED__
+typedef interface ISimpleAudioVolume ISimpleAudioVolume;
+#endif 	/* __ISimpleAudioVolume_FWD_DEFINED__ */
+
+
+#ifndef __IAudioStreamVolume_FWD_DEFINED__
+#define __IAudioStreamVolume_FWD_DEFINED__
+typedef interface IAudioStreamVolume IAudioStreamVolume;
+#endif 	/* __IAudioStreamVolume_FWD_DEFINED__ */
+
+
+#ifndef __IChannelAudioVolume_FWD_DEFINED__
+#define __IChannelAudioVolume_FWD_DEFINED__
+typedef interface IChannelAudioVolume IChannelAudioVolume;
+#endif 	/* __IChannelAudioVolume_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "wtypes.h"
+#include "unknwn.h"
+#include "AudioSessionTypes.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_audioclient_0000_0000 */
+/* [local] */ 
+
+#if 0
+typedef /* [hidden][restricted] */ struct WAVEFORMATEX
+    {
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+    } 	WAVEFORMATEX;
+
+#else
+#include <mmreg.h>
+#endif
+#if 0
+typedef /* [hidden][restricted] */ LONGLONG REFERENCE_TIME;
+
+#else
+#define _IKsControl_
+#include <ks.h>
+#include <ksmedia.h>
+#endif
+
+enum _AUDCLNT_BUFFERFLAGS
+    {	AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY	= 0x1,
+	AUDCLNT_BUFFERFLAGS_SILENT	= 0x2,
+	AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR	= 0x4
+    } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAudioClient_INTERFACE_DEFINED__
+#define __IAudioClient_INTERFACE_DEFINED__
+
+/* interface IAudioClient */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1CB9AD4C-DBFA-4c32-B178-C2F568A703B2")
+    IAudioClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  DWORD StreamFlags,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsBufferDuration,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsPeriodicity,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [in] */ 
+            __in_opt  LPCGUID AudioSessionGuid) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetBufferSize( 
+            /* [out] */ 
+            __out  UINT32 *pNumBufferFrames) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetStreamLatency( 
+            /* [out] */ 
+            __out  REFERENCE_TIME *phnsLatency) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCurrentPadding( 
+            /* [out] */ 
+            __out  UINT32 *pNumPaddingFrames) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsFormatSupported( 
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [unique][out] */ 
+            __out_opt  WAVEFORMATEX **ppClosestMatch) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMixFormat( 
+            /* [out] */ 
+            __out  WAVEFORMATEX **ppDeviceFormat) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDevicePeriod( 
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsDefaultDevicePeriod,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsMinimumDevicePeriod) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Start( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetEventHandle( 
+            /* [in] */ HANDLE eventHandle) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetService( 
+            /* [in] */ 
+            __in  REFIID riid,
+            /* [iid_is][out] */ 
+            __out  void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  DWORD StreamFlags,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsBufferDuration,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsPeriodicity,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [in] */ 
+            __in_opt  LPCGUID AudioSessionGuid);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBufferSize )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumBufferFrames);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetStreamLatency )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  REFERENCE_TIME *phnsLatency);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCurrentPadding )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumPaddingFrames);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [unique][out] */ 
+            __out_opt  WAVEFORMATEX **ppClosestMatch);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMixFormat )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  WAVEFORMATEX **ppDeviceFormat);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDevicePeriod )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsDefaultDevicePeriod,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsMinimumDevicePeriod);
+        
+        HRESULT ( STDMETHODCALLTYPE *Start )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Stop )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Reset )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetEventHandle )( 
+            IAudioClient * This,
+            /* [in] */ HANDLE eventHandle);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetService )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  REFIID riid,
+            /* [iid_is][out] */ 
+            __out  void **ppv);
+        
+        END_INTERFACE
+    } IAudioClientVtbl;
+
+    interface IAudioClient
+    {
+        CONST_VTBL struct IAudioClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioClient_Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid)	\
+    ( (This)->lpVtbl -> Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) ) 
+
+#define IAudioClient_GetBufferSize(This,pNumBufferFrames)	\
+    ( (This)->lpVtbl -> GetBufferSize(This,pNumBufferFrames) ) 
+
+#define IAudioClient_GetStreamLatency(This,phnsLatency)	\
+    ( (This)->lpVtbl -> GetStreamLatency(This,phnsLatency) ) 
+
+#define IAudioClient_GetCurrentPadding(This,pNumPaddingFrames)	\
+    ( (This)->lpVtbl -> GetCurrentPadding(This,pNumPaddingFrames) ) 
+
+#define IAudioClient_IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch)	\
+    ( (This)->lpVtbl -> IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) ) 
+
+#define IAudioClient_GetMixFormat(This,ppDeviceFormat)	\
+    ( (This)->lpVtbl -> GetMixFormat(This,ppDeviceFormat) ) 
+
+#define IAudioClient_GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod)	\
+    ( (This)->lpVtbl -> GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) ) 
+
+#define IAudioClient_Start(This)	\
+    ( (This)->lpVtbl -> Start(This) ) 
+
+#define IAudioClient_Stop(This)	\
+    ( (This)->lpVtbl -> Stop(This) ) 
+
+#define IAudioClient_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) ) 
+
+#define IAudioClient_SetEventHandle(This,eventHandle)	\
+    ( (This)->lpVtbl -> SetEventHandle(This,eventHandle) ) 
+
+#define IAudioClient_GetService(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetService(This,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioRenderClient_INTERFACE_DEFINED__
+#define __IAudioRenderClient_INTERFACE_DEFINED__
+
+/* interface IAudioRenderClient */
+/* [local][unique][helpstring][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioRenderClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("F294ACFC-3146-4483-A7BF-ADDCA7C260E2")
+    IAudioRenderClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesRequested,
+            /* [out] */ 
+            __out  BYTE **ppData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesWritten,
+            /* [in] */ 
+            __in  DWORD dwFlags) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioRenderClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioRenderClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioRenderClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioRenderClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBuffer )( 
+            IAudioRenderClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesRequested,
+            /* [out] */ 
+            __out  BYTE **ppData);
+        
+        HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( 
+            IAudioRenderClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesWritten,
+            /* [in] */ 
+            __in  DWORD dwFlags);
+        
+        END_INTERFACE
+    } IAudioRenderClientVtbl;
+
+    interface IAudioRenderClient
+    {
+        CONST_VTBL struct IAudioRenderClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioRenderClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioRenderClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioRenderClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioRenderClient_GetBuffer(This,NumFramesRequested,ppData)	\
+    ( (This)->lpVtbl -> GetBuffer(This,NumFramesRequested,ppData) ) 
+
+#define IAudioRenderClient_ReleaseBuffer(This,NumFramesWritten,dwFlags)	\
+    ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesWritten,dwFlags) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioRenderClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioCaptureClient_INTERFACE_DEFINED__
+#define __IAudioCaptureClient_INTERFACE_DEFINED__
+
+/* interface IAudioCaptureClient */
+/* [local][unique][helpstring][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioCaptureClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C8ADBD64-E71E-48a0-A4DE-185C395CD317")
+    IAudioCaptureClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetBuffer( 
+            /* [out] */ 
+            __out  BYTE **ppData,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesToRead,
+            /* [out] */ 
+            __out  DWORD *pdwFlags,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64DevicePosition,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesRead) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNextPacketSize( 
+            /* [out] */ 
+            __out  UINT32 *pNumFramesInNextPacket) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioCaptureClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioCaptureClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioCaptureClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioCaptureClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBuffer )( 
+            IAudioCaptureClient * This,
+            /* [out] */ 
+            __out  BYTE **ppData,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesToRead,
+            /* [out] */ 
+            __out  DWORD *pdwFlags,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64DevicePosition,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition);
+        
+        HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( 
+            IAudioCaptureClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesRead);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNextPacketSize )( 
+            IAudioCaptureClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesInNextPacket);
+        
+        END_INTERFACE
+    } IAudioCaptureClientVtbl;
+
+    interface IAudioCaptureClient
+    {
+        CONST_VTBL struct IAudioCaptureClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioCaptureClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioCaptureClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioCaptureClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioCaptureClient_GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition)	\
+    ( (This)->lpVtbl -> GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition) ) 
+
+#define IAudioCaptureClient_ReleaseBuffer(This,NumFramesRead)	\
+    ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesRead) ) 
+
+#define IAudioCaptureClient_GetNextPacketSize(This,pNumFramesInNextPacket)	\
+    ( (This)->lpVtbl -> GetNextPacketSize(This,pNumFramesInNextPacket) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioCaptureClient_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_audioclient_0000_0003 */
+/* [local] */ 
+
+#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ  0x00000001
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_s_ifspec;
+
+#ifndef __IAudioClock_INTERFACE_DEFINED__
+#define __IAudioClock_INTERFACE_DEFINED__
+
+/* interface IAudioClock */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioClock;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("CD63314F-3FBA-4a1b-812C-EF96358728E7")
+    IAudioClock : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetFrequency( 
+            /* [out] */ 
+            __out  UINT64 *pu64Frequency) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPosition( 
+            /* [out] */ 
+            __out  UINT64 *pu64Position,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCharacteristics( 
+            /* [out] */ 
+            __out  DWORD *pdwCharacteristics) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioClockVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioClock * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioClock * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioClock * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetFrequency )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  UINT64 *pu64Frequency);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPosition )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  UINT64 *pu64Position,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCharacteristics )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  DWORD *pdwCharacteristics);
+        
+        END_INTERFACE
+    } IAudioClockVtbl;
+
+    interface IAudioClock
+    {
+        CONST_VTBL struct IAudioClockVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioClock_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioClock_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioClock_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioClock_GetFrequency(This,pu64Frequency)	\
+    ( (This)->lpVtbl -> GetFrequency(This,pu64Frequency) ) 
+
+#define IAudioClock_GetPosition(This,pu64Position,pu64QPCPosition)	\
+    ( (This)->lpVtbl -> GetPosition(This,pu64Position,pu64QPCPosition) ) 
+
+#define IAudioClock_GetCharacteristics(This,pdwCharacteristics)	\
+    ( (This)->lpVtbl -> GetCharacteristics(This,pdwCharacteristics) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioClock_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISimpleAudioVolume_INTERFACE_DEFINED__
+#define __ISimpleAudioVolume_INTERFACE_DEFINED__
+
+/* interface ISimpleAudioVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_ISimpleAudioVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("87CE5498-68D6-44E5-9215-6DA47EF883D8")
+    ISimpleAudioVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetMasterVolume( 
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMasterVolume( 
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  const BOOL bMute,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMute) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISimpleAudioVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISimpleAudioVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISimpleAudioVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMasterVolume )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMasterVolume )( 
+            ISimpleAudioVolume * This,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ 
+            __in  const BOOL bMute,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            ISimpleAudioVolume * This,
+            /* [out] */ 
+            __out  BOOL *pbMute);
+        
+        END_INTERFACE
+    } ISimpleAudioVolumeVtbl;
+
+    interface ISimpleAudioVolume
+    {
+        CONST_VTBL struct ISimpleAudioVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISimpleAudioVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISimpleAudioVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISimpleAudioVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISimpleAudioVolume_SetMasterVolume(This,fLevel,EventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolume(This,fLevel,EventContext) ) 
+
+#define ISimpleAudioVolume_GetMasterVolume(This,pfLevel)	\
+    ( (This)->lpVtbl -> GetMasterVolume(This,pfLevel) ) 
+
+#define ISimpleAudioVolume_SetMute(This,bMute,EventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMute,EventContext) ) 
+
+#define ISimpleAudioVolume_GetMute(This,pbMute)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMute) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISimpleAudioVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioStreamVolume_INTERFACE_DEFINED__
+#define __IAudioStreamVolume_INTERFACE_DEFINED__
+
+/* interface IAudioStreamVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioStreamVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("93014887-242D-4068-8A15-CF5E93B90FE3")
+    IAudioStreamVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT32 *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioStreamVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioStreamVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioStreamVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioStreamVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioStreamVolume * This,
+            /* [out] */ 
+            __out  UINT32 *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes);
+        
+        END_INTERFACE
+    } IAudioStreamVolumeVtbl;
+
+    interface IAudioStreamVolume
+    {
+        CONST_VTBL struct IAudioStreamVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioStreamVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioStreamVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioStreamVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioStreamVolume_GetChannelCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) 
+
+#define IAudioStreamVolume_SetChannelVolume(This,dwIndex,fLevel)	\
+    ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel) ) 
+
+#define IAudioStreamVolume_GetChannelVolume(This,dwIndex,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) 
+
+#define IAudioStreamVolume_SetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#define IAudioStreamVolume_GetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioStreamVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IChannelAudioVolume_INTERFACE_DEFINED__
+#define __IChannelAudioVolume_INTERFACE_DEFINED__
+
+/* interface IChannelAudioVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IChannelAudioVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1C158861-B533-4B30-B1CF-E853E51C59B8")
+    IChannelAudioVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT32 *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IChannelAudioVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IChannelAudioVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IChannelAudioVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IChannelAudioVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IChannelAudioVolume * This,
+            /* [out] */ 
+            __out  UINT32 *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes);
+        
+        END_INTERFACE
+    } IChannelAudioVolumeVtbl;
+
+    interface IChannelAudioVolume
+    {
+        CONST_VTBL struct IChannelAudioVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IChannelAudioVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IChannelAudioVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IChannelAudioVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IChannelAudioVolume_GetChannelCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) 
+
+#define IChannelAudioVolume_SetChannelVolume(This,dwIndex,fLevel,EventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel,EventContext) ) 
+
+#define IChannelAudioVolume_GetChannelVolume(This,dwIndex,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) 
+
+#define IChannelAudioVolume_SetAllVolumes(This,dwCount,pfVolumes,EventContext)	\
+    ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes,EventContext) ) 
+
+#define IChannelAudioVolume_GetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IChannelAudioVolume_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_audioclient_0000_0007 */
+/* [local] */ 
+
+#define FACILITY_AUDCLNT 0x889
+#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_AUDCLNT, n)
+#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_AUDCLNT, n)
+#define AUDCLNT_E_NOT_INITIALIZED            AUDCLNT_ERR(0x001)
+#define AUDCLNT_E_ALREADY_INITIALIZED        AUDCLNT_ERR(0x002)
+#define AUDCLNT_E_WRONG_ENDPOINT_TYPE        AUDCLNT_ERR(0x003)
+#define AUDCLNT_E_DEVICE_INVALIDATED         AUDCLNT_ERR(0x004)
+#define AUDCLNT_E_NOT_STOPPED                AUDCLNT_ERR(0x005)
+#define AUDCLNT_E_BUFFER_TOO_LARGE           AUDCLNT_ERR(0x006)
+#define AUDCLNT_E_OUT_OF_ORDER               AUDCLNT_ERR(0x007)
+#define AUDCLNT_E_UNSUPPORTED_FORMAT         AUDCLNT_ERR(0x008)
+#define AUDCLNT_E_INVALID_SIZE               AUDCLNT_ERR(0x009)
+#define AUDCLNT_E_DEVICE_IN_USE              AUDCLNT_ERR(0x00a)
+#define AUDCLNT_E_BUFFER_OPERATION_PENDING   AUDCLNT_ERR(0x00b)
+#define AUDCLNT_E_THREAD_NOT_REGISTERED      AUDCLNT_ERR(0x00c)
+#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x00e)
+#define AUDCLNT_E_ENDPOINT_CREATE_FAILED     AUDCLNT_ERR(0x00f)
+#define AUDCLNT_E_SERVICE_NOT_RUNNING        AUDCLNT_ERR(0x010)
+#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     AUDCLNT_ERR(0x011)
+#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY          AUDCLNT_ERR(0x012)
+#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x013)
+#define AUDCLNT_E_EVENTHANDLE_NOT_SET          AUDCLNT_ERR(0x014)
+#define AUDCLNT_E_INCORRECT_BUFFER_SIZE        AUDCLNT_ERR(0x015)
+#define AUDCLNT_E_BUFFER_SIZE_ERROR            AUDCLNT_ERR(0x016)
+#define AUDCLNT_E_CPUUSAGE_EXCEEDED            AUDCLNT_ERR(0x017)
+#define AUDCLNT_S_BUFFER_EMPTY              AUDCLNT_SUCCESS(0x001)
+#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x002)
+#define AUDCLNT_S_POSITION_STALLED		   AUDCLNT_SUCCESS(0x003)
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h b/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h
new file mode 100644
index 000000000..1002ba0b5
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h
@@ -0,0 +1,3275 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for devicetopology.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __devicetopology_h__
+#define __devicetopology_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IKsControl_FWD_DEFINED__
+#define __IKsControl_FWD_DEFINED__
+typedef interface IKsControl IKsControl;
+#endif 	/* __IKsControl_FWD_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_FWD_DEFINED__
+#define __IPerChannelDbLevel_FWD_DEFINED__
+typedef interface IPerChannelDbLevel IPerChannelDbLevel;
+#endif 	/* __IPerChannelDbLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_FWD_DEFINED__
+#define __IAudioVolumeLevel_FWD_DEFINED__
+typedef interface IAudioVolumeLevel IAudioVolumeLevel;
+#endif 	/* __IAudioVolumeLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioChannelConfig_FWD_DEFINED__
+#define __IAudioChannelConfig_FWD_DEFINED__
+typedef interface IAudioChannelConfig IAudioChannelConfig;
+#endif 	/* __IAudioChannelConfig_FWD_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_FWD_DEFINED__
+#define __IAudioLoudness_FWD_DEFINED__
+typedef interface IAudioLoudness IAudioLoudness;
+#endif 	/* __IAudioLoudness_FWD_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_FWD_DEFINED__
+#define __IAudioInputSelector_FWD_DEFINED__
+typedef interface IAudioInputSelector IAudioInputSelector;
+#endif 	/* __IAudioInputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_FWD_DEFINED__
+#define __IAudioOutputSelector_FWD_DEFINED__
+typedef interface IAudioOutputSelector IAudioOutputSelector;
+#endif 	/* __IAudioOutputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMute_FWD_DEFINED__
+#define __IAudioMute_FWD_DEFINED__
+typedef interface IAudioMute IAudioMute;
+#endif 	/* __IAudioMute_FWD_DEFINED__ */
+
+
+#ifndef __IAudioBass_FWD_DEFINED__
+#define __IAudioBass_FWD_DEFINED__
+typedef interface IAudioBass IAudioBass;
+#endif 	/* __IAudioBass_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_FWD_DEFINED__
+#define __IAudioMidrange_FWD_DEFINED__
+typedef interface IAudioMidrange IAudioMidrange;
+#endif 	/* __IAudioMidrange_FWD_DEFINED__ */
+
+
+#ifndef __IAudioTreble_FWD_DEFINED__
+#define __IAudioTreble_FWD_DEFINED__
+typedef interface IAudioTreble IAudioTreble;
+#endif 	/* __IAudioTreble_FWD_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_FWD_DEFINED__
+#define __IAudioAutoGainControl_FWD_DEFINED__
+typedef interface IAudioAutoGainControl IAudioAutoGainControl;
+#endif 	/* __IAudioAutoGainControl_FWD_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_FWD_DEFINED__
+#define __IAudioPeakMeter_FWD_DEFINED__
+typedef interface IAudioPeakMeter IAudioPeakMeter;
+#endif 	/* __IAudioPeakMeter_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_FWD_DEFINED__
+#define __IDeviceSpecificProperty_FWD_DEFINED__
+typedef interface IDeviceSpecificProperty IDeviceSpecificProperty;
+#endif 	/* __IDeviceSpecificProperty_FWD_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_FWD_DEFINED__
+#define __IKsFormatSupport_FWD_DEFINED__
+typedef interface IKsFormatSupport IKsFormatSupport;
+#endif 	/* __IKsFormatSupport_FWD_DEFINED__ */
+
+
+#ifndef __IKsJackDescription_FWD_DEFINED__
+#define __IKsJackDescription_FWD_DEFINED__
+typedef interface IKsJackDescription IKsJackDescription;
+#endif 	/* __IKsJackDescription_FWD_DEFINED__ */
+
+
+#ifndef __IPartsList_FWD_DEFINED__
+#define __IPartsList_FWD_DEFINED__
+typedef interface IPartsList IPartsList;
+#endif 	/* __IPartsList_FWD_DEFINED__ */
+
+
+#ifndef __IPart_FWD_DEFINED__
+#define __IPart_FWD_DEFINED__
+typedef interface IPart IPart;
+#endif 	/* __IPart_FWD_DEFINED__ */
+
+
+#ifndef __IConnector_FWD_DEFINED__
+#define __IConnector_FWD_DEFINED__
+typedef interface IConnector IConnector;
+#endif 	/* __IConnector_FWD_DEFINED__ */
+
+
+#ifndef __ISubunit_FWD_DEFINED__
+#define __ISubunit_FWD_DEFINED__
+typedef interface ISubunit ISubunit;
+#endif 	/* __ISubunit_FWD_DEFINED__ */
+
+
+#ifndef __IControlInterface_FWD_DEFINED__
+#define __IControlInterface_FWD_DEFINED__
+typedef interface IControlInterface IControlInterface;
+#endif 	/* __IControlInterface_FWD_DEFINED__ */
+
+
+#ifndef __IControlChangeNotify_FWD_DEFINED__
+#define __IControlChangeNotify_FWD_DEFINED__
+typedef interface IControlChangeNotify IControlChangeNotify;
+#endif 	/* __IControlChangeNotify_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceTopology_FWD_DEFINED__
+#define __IDeviceTopology_FWD_DEFINED__
+typedef interface IDeviceTopology IDeviceTopology;
+#endif 	/* __IDeviceTopology_FWD_DEFINED__ */
+
+
+#ifndef __DeviceTopology_FWD_DEFINED__
+#define __DeviceTopology_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class DeviceTopology DeviceTopology;
+#else
+typedef struct DeviceTopology DeviceTopology;
+#endif /* __cplusplus */
+
+#endif 	/* __DeviceTopology_FWD_DEFINED__ */
+
+
+#ifndef __IPartsList_FWD_DEFINED__
+#define __IPartsList_FWD_DEFINED__
+typedef interface IPartsList IPartsList;
+#endif 	/* __IPartsList_FWD_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_FWD_DEFINED__
+#define __IPerChannelDbLevel_FWD_DEFINED__
+typedef interface IPerChannelDbLevel IPerChannelDbLevel;
+#endif 	/* __IPerChannelDbLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_FWD_DEFINED__
+#define __IAudioVolumeLevel_FWD_DEFINED__
+typedef interface IAudioVolumeLevel IAudioVolumeLevel;
+#endif 	/* __IAudioVolumeLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_FWD_DEFINED__
+#define __IAudioLoudness_FWD_DEFINED__
+typedef interface IAudioLoudness IAudioLoudness;
+#endif 	/* __IAudioLoudness_FWD_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_FWD_DEFINED__
+#define __IAudioInputSelector_FWD_DEFINED__
+typedef interface IAudioInputSelector IAudioInputSelector;
+#endif 	/* __IAudioInputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMute_FWD_DEFINED__
+#define __IAudioMute_FWD_DEFINED__
+typedef interface IAudioMute IAudioMute;
+#endif 	/* __IAudioMute_FWD_DEFINED__ */
+
+
+#ifndef __IAudioBass_FWD_DEFINED__
+#define __IAudioBass_FWD_DEFINED__
+typedef interface IAudioBass IAudioBass;
+#endif 	/* __IAudioBass_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_FWD_DEFINED__
+#define __IAudioMidrange_FWD_DEFINED__
+typedef interface IAudioMidrange IAudioMidrange;
+#endif 	/* __IAudioMidrange_FWD_DEFINED__ */
+
+
+#ifndef __IAudioTreble_FWD_DEFINED__
+#define __IAudioTreble_FWD_DEFINED__
+typedef interface IAudioTreble IAudioTreble;
+#endif 	/* __IAudioTreble_FWD_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_FWD_DEFINED__
+#define __IAudioAutoGainControl_FWD_DEFINED__
+typedef interface IAudioAutoGainControl IAudioAutoGainControl;
+#endif 	/* __IAudioAutoGainControl_FWD_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_FWD_DEFINED__
+#define __IAudioOutputSelector_FWD_DEFINED__
+typedef interface IAudioOutputSelector IAudioOutputSelector;
+#endif 	/* __IAudioOutputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_FWD_DEFINED__
+#define __IAudioPeakMeter_FWD_DEFINED__
+typedef interface IAudioPeakMeter IAudioPeakMeter;
+#endif 	/* __IAudioPeakMeter_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_FWD_DEFINED__
+#define __IDeviceSpecificProperty_FWD_DEFINED__
+typedef interface IDeviceSpecificProperty IDeviceSpecificProperty;
+#endif 	/* __IDeviceSpecificProperty_FWD_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_FWD_DEFINED__
+#define __IKsFormatSupport_FWD_DEFINED__
+typedef interface IKsFormatSupport IKsFormatSupport;
+#endif 	/* __IKsFormatSupport_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "propidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_devicetopology_0000_0000 */
+/* [local] */ 
+
+#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
+//
+//   Flag for clients of IControlChangeNotify::OnNotify to allow those clients to identify hardware initiated notifications
+//
+#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 'draH'
+/* E2C2E9DE-09B1-4B04-84E5-07931225EE04 */
+DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xE2C2E9DE,0x09B1,0x4B04,0x84, 0xE5, 0x07, 0x93, 0x12, 0x25, 0xEE, 0x04);
+#define _IKsControl_
+#include "ks.h"
+#include "ksmedia.h"
+#ifndef _KS_
+typedef /* [public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001
+    {
+    ULONG FormatSize;
+    ULONG Flags;
+    ULONG SampleSize;
+    ULONG Reserved;
+    GUID MajorFormat;
+    GUID SubFormat;
+    GUID Specifier;
+    } 	KSDATAFORMAT;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001 *PKSDATAFORMAT;
+
+typedef /* [public][public][public][public][public][public][public][public][public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002
+    {
+    union 
+        {
+        struct 
+            {
+            GUID Set;
+            ULONG Id;
+            ULONG Flags;
+            } 	;
+        LONGLONG Alignment;
+        } 	;
+    } 	KSIDENTIFIER;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002 *PKSIDENTIFIER;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0005
+    {	ePcxChanMap_FL_FR	= 0,
+	ePcxChanMap_FC_LFE	= ( ePcxChanMap_FL_FR + 1 ) ,
+	ePcxChanMap_BL_BR	= ( ePcxChanMap_FC_LFE + 1 ) ,
+	ePcxChanMap_FLC_FRC	= ( ePcxChanMap_BL_BR + 1 ) ,
+	ePcxChanMap_SL_SR	= ( ePcxChanMap_FLC_FRC + 1 ) ,
+	ePcxChanMap_Unknown	= ( ePcxChanMap_SL_SR + 1 ) 
+    } 	EChannelMapping;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0006
+    {	eConnTypeUnknown	= 0,
+	eConnTypeEighth	= ( eConnTypeUnknown + 1 ) ,
+	eConnTypeQuarter	= ( eConnTypeEighth + 1 ) ,
+	eConnTypeAtapiInternal	= ( eConnTypeQuarter + 1 ) ,
+	eConnTypeRCA	= ( eConnTypeAtapiInternal + 1 ) ,
+	eConnTypeOptical	= ( eConnTypeRCA + 1 ) ,
+	eConnTypeOtherDigital	= ( eConnTypeOptical + 1 ) ,
+	eConnTypeOtherAnalog	= ( eConnTypeOtherDigital + 1 ) ,
+	eConnTypeMultichannelAnalogDIN	= ( eConnTypeOtherAnalog + 1 ) ,
+	eConnTypeXlrProfessional	= ( eConnTypeMultichannelAnalogDIN + 1 ) ,
+	eConnTypeRJ11Modem	= ( eConnTypeXlrProfessional + 1 ) ,
+	eConnTypeCombination	= ( eConnTypeRJ11Modem + 1 ) 
+    } 	EPcxConnectionType;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0007
+    {	eGeoLocRear	= 0x1,
+	eGeoLocFront	= ( eGeoLocRear + 1 ) ,
+	eGeoLocLeft	= ( eGeoLocFront + 1 ) ,
+	eGeoLocRight	= ( eGeoLocLeft + 1 ) ,
+	eGeoLocTop	= ( eGeoLocRight + 1 ) ,
+	eGeoLocBottom	= ( eGeoLocTop + 1 ) ,
+	eGeoLocRearOPanel	= ( eGeoLocBottom + 1 ) ,
+	eGeoLocRiser	= ( eGeoLocRearOPanel + 1 ) ,
+	eGeoLocInsideMobileLid	= ( eGeoLocRiser + 1 ) ,
+	eGeoLocDrivebay	= ( eGeoLocInsideMobileLid + 1 ) ,
+	eGeoLocHDMI	= ( eGeoLocDrivebay + 1 ) ,
+	eGeoLocOutsideMobileLid	= ( eGeoLocHDMI + 1 ) ,
+	eGeoLocATAPI	= ( eGeoLocOutsideMobileLid + 1 ) ,
+	eGeoLocReserved5	= ( eGeoLocATAPI + 1 ) ,
+	eGeoLocReserved6	= ( eGeoLocReserved5 + 1 ) 
+    } 	EPcxGeoLocation;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0008
+    {	eGenLocPrimaryBox	= 0,
+	eGenLocInternal	= ( eGenLocPrimaryBox + 1 ) ,
+	eGenLocSeperate	= ( eGenLocInternal + 1 ) ,
+	eGenLocOther	= ( eGenLocSeperate + 1 ) 
+    } 	EPcxGenLocation;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0009
+    {	ePortConnJack	= 0,
+	ePortConnIntegratedDevice	= ( ePortConnJack + 1 ) ,
+	ePortConnBothIntegratedAndJack	= ( ePortConnIntegratedDevice + 1 ) ,
+	ePortConnUnknown	= ( ePortConnBothIntegratedAndJack + 1 ) 
+    } 	EPxcPortConnection;
+
+typedef /* [public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010
+    {
+    EChannelMapping ChannelMapping;
+    COLORREF Color;
+    EPcxConnectionType ConnectionType;
+    EPcxGeoLocation GeoLocation;
+    EPcxGenLocation GenLocation;
+    EPxcPortConnection PortConnection;
+    BOOL IsConnected;
+    } 	KSJACK_DESCRIPTION;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010 *PKSJACK_DESCRIPTION;
+
+typedef KSIDENTIFIER KSPROPERTY;
+
+typedef KSIDENTIFIER *PKSPROPERTY;
+
+typedef KSIDENTIFIER KSMETHOD;
+
+typedef KSIDENTIFIER *PKSMETHOD;
+
+typedef KSIDENTIFIER KSEVENT;
+
+typedef KSIDENTIFIER *PKSEVENT;
+
+#endif
+
+
+
+
+
+
+
+
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0011
+    {	In	= 0,
+	Out	= ( In + 1 ) 
+    } 	DataFlow;
+
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0012
+    {	Connector	= 0,
+	Subunit	= ( Connector + 1 ) 
+    } 	PartType;
+
+#define PARTTYPE_FLAG_CONNECTOR 0x00010000
+#define PARTTYPE_FLAG_SUBUNIT   0x00020000
+#define PARTTYPE_MASK           0x00030000
+#define PARTID_MASK             0x0000ffff
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0013
+    {	Unknown_Connector	= 0,
+	Physical_Internal	= ( Unknown_Connector + 1 ) ,
+	Physical_External	= ( Physical_Internal + 1 ) ,
+	Software_IO	= ( Physical_External + 1 ) ,
+	Software_Fixed	= ( Software_IO + 1 ) ,
+	Network	= ( Software_Fixed + 1 ) 
+    } 	ConnectorType;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IKsControl_INTERFACE_DEFINED__
+#define __IKsControl_INTERFACE_DEFINED__
+
+/* interface IKsControl */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsControl;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("28F54685-06FD-11D2-B27A-00A0C9223196")
+    IKsControl : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE KsProperty( 
+            /* [in] */ PKSPROPERTY Property,
+            /* [in] */ ULONG PropertyLength,
+            /* [out][in] */ void *PropertyData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE KsMethod( 
+            /* [in] */ PKSMETHOD Method,
+            /* [in] */ ULONG MethodLength,
+            /* [out][in] */ void *MethodData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE KsEvent( 
+            /* [in] */ PKSEVENT Event,
+            /* [in] */ ULONG EventLength,
+            /* [out][in] */ void *EventData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsControlVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsControl * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsControl * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsControl * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsProperty )( 
+            IKsControl * This,
+            /* [in] */ PKSPROPERTY Property,
+            /* [in] */ ULONG PropertyLength,
+            /* [out][in] */ void *PropertyData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsMethod )( 
+            IKsControl * This,
+            /* [in] */ PKSMETHOD Method,
+            /* [in] */ ULONG MethodLength,
+            /* [out][in] */ void *MethodData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsEvent )( 
+            IKsControl * This,
+            /* [in] */ PKSEVENT Event,
+            /* [in] */ ULONG EventLength,
+            /* [out][in] */ void *EventData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        END_INTERFACE
+    } IKsControlVtbl;
+
+    interface IKsControl
+    {
+        CONST_VTBL struct IKsControlVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsControl_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsControl_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsControl_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsControl_KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned) ) 
+
+#define IKsControl_KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned) ) 
+
+#define IKsControl_KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsControl_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_INTERFACE_DEFINED__
+#define __IPerChannelDbLevel_INTERFACE_DEFINED__
+
+/* interface IPerChannelDbLevel */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IPerChannelDbLevel;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C2F8E001-F205-4BC9-99BC-C13B1E048CCB")
+    IPerChannelDbLevel : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pcChannels) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevelRange( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelUniform( 
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelAllChannels( 
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPerChannelDbLevelVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPerChannelDbLevel * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPerChannelDbLevel * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IPerChannelDbLevel * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IPerChannelDbLevel * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IPerChannelDbLevelVtbl;
+
+    interface IPerChannelDbLevel
+    {
+        CONST_VTBL struct IPerChannelDbLevelVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPerChannelDbLevel_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPerChannelDbLevel_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPerChannelDbLevel_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPerChannelDbLevel_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IPerChannelDbLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IPerChannelDbLevel_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IPerChannelDbLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IPerChannelDbLevel_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IPerChannelDbLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPerChannelDbLevel_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_INTERFACE_DEFINED__
+#define __IAudioVolumeLevel_INTERFACE_DEFINED__
+
+/* interface IAudioVolumeLevel */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioVolumeLevel;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC")
+    IAudioVolumeLevel : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioVolumeLevelVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioVolumeLevel * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioVolumeLevel * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioVolumeLevel * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioVolumeLevel * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioVolumeLevelVtbl;
+
+    interface IAudioVolumeLevel
+    {
+        CONST_VTBL struct IAudioVolumeLevelVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioVolumeLevel_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioVolumeLevel_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioVolumeLevel_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioVolumeLevel_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioVolumeLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioVolumeLevel_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioVolumeLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioVolumeLevel_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioVolumeLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioVolumeLevel_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioChannelConfig_INTERFACE_DEFINED__
+#define __IAudioChannelConfig_INTERFACE_DEFINED__
+
+/* interface IAudioChannelConfig */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioChannelConfig;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("BB11C46F-EC28-493C-B88A-5DB88062CE98")
+    IAudioChannelConfig : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetChannelConfig( 
+            /* [in] */ DWORD dwConfig,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelConfig( 
+            /* [retval][out] */ DWORD *pdwConfig) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioChannelConfigVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioChannelConfig * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioChannelConfig * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioChannelConfig * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetChannelConfig )( 
+            IAudioChannelConfig * This,
+            /* [in] */ DWORD dwConfig,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelConfig )( 
+            IAudioChannelConfig * This,
+            /* [retval][out] */ DWORD *pdwConfig);
+        
+        END_INTERFACE
+    } IAudioChannelConfigVtbl;
+
+    interface IAudioChannelConfig
+    {
+        CONST_VTBL struct IAudioChannelConfigVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioChannelConfig_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioChannelConfig_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioChannelConfig_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioChannelConfig_SetChannelConfig(This,dwConfig,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelConfig(This,dwConfig,pguidEventContext) ) 
+
+#define IAudioChannelConfig_GetChannelConfig(This,pdwConfig)	\
+    ( (This)->lpVtbl -> GetChannelConfig(This,pdwConfig) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioChannelConfig_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_INTERFACE_DEFINED__
+#define __IAudioLoudness_INTERFACE_DEFINED__
+
+/* interface IAudioLoudness */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioLoudness;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7D8B1437-DD53-4350-9C1B-1EE2890BD938")
+    IAudioLoudness : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( 
+            /* [out] */ 
+            __out  BOOL *pbEnabled) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( 
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioLoudnessVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioLoudness * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioLoudness * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioLoudness * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( 
+            IAudioLoudness * This,
+            /* [out] */ 
+            __out  BOOL *pbEnabled);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( 
+            IAudioLoudness * This,
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioLoudnessVtbl;
+
+    interface IAudioLoudness
+    {
+        CONST_VTBL struct IAudioLoudnessVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioLoudness_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioLoudness_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioLoudness_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioLoudness_GetEnabled(This,pbEnabled)	\
+    ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) 
+
+#define IAudioLoudness_SetEnabled(This,bEnable,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioLoudness_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_INTERFACE_DEFINED__
+#define __IAudioInputSelector_INTERFACE_DEFINED__
+
+/* interface IAudioInputSelector */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioInputSelector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4F03DC02-5E6E-4653-8F72-A030C123D598")
+    IAudioInputSelector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( 
+            /* [out] */ 
+            __out  UINT *pnIdSelected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( 
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioInputSelectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioInputSelector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioInputSelector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioInputSelector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( 
+            IAudioInputSelector * This,
+            /* [out] */ 
+            __out  UINT *pnIdSelected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( 
+            IAudioInputSelector * This,
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioInputSelectorVtbl;
+
+    interface IAudioInputSelector
+    {
+        CONST_VTBL struct IAudioInputSelectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioInputSelector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioInputSelector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioInputSelector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioInputSelector_GetSelection(This,pnIdSelected)	\
+    ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) 
+
+#define IAudioInputSelector_SetSelection(This,nIdSelect,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioInputSelector_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_INTERFACE_DEFINED__
+#define __IAudioOutputSelector_INTERFACE_DEFINED__
+
+/* interface IAudioOutputSelector */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioOutputSelector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("BB515F69-94A7-429e-8B9C-271B3F11A3AB")
+    IAudioOutputSelector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( 
+            /* [out] */ 
+            __out  UINT *pnIdSelected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( 
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioOutputSelectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioOutputSelector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioOutputSelector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioOutputSelector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( 
+            IAudioOutputSelector * This,
+            /* [out] */ 
+            __out  UINT *pnIdSelected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( 
+            IAudioOutputSelector * This,
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioOutputSelectorVtbl;
+
+    interface IAudioOutputSelector
+    {
+        CONST_VTBL struct IAudioOutputSelectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioOutputSelector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioOutputSelector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioOutputSelector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioOutputSelector_GetSelection(This,pnIdSelected)	\
+    ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) 
+
+#define IAudioOutputSelector_SetSelection(This,nIdSelect,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioOutputSelector_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMute_INTERFACE_DEFINED__
+#define __IAudioMute_INTERFACE_DEFINED__
+
+/* interface IAudioMute */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMute;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("DF45AEEA-B74A-4B6B-AFAD-2366B6AA012E")
+    IAudioMute : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  BOOL bMuted,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMuted) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMuteVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMute * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMute * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMute * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            IAudioMute * This,
+            /* [in] */ 
+            __in  BOOL bMuted,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            IAudioMute * This,
+            /* [out] */ 
+            __out  BOOL *pbMuted);
+        
+        END_INTERFACE
+    } IAudioMuteVtbl;
+
+    interface IAudioMute
+    {
+        CONST_VTBL struct IAudioMuteVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMute_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMute_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMute_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMute_SetMute(This,bMuted,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMuted,pguidEventContext) ) 
+
+#define IAudioMute_GetMute(This,pbMuted)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMuted) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMute_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioBass_INTERFACE_DEFINED__
+#define __IAudioBass_INTERFACE_DEFINED__
+
+/* interface IAudioBass */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioBass;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A2B1A1D9-4DB3-425D-A2B2-BD335CB3E2E5")
+    IAudioBass : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioBassVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioBass * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioBass * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioBass * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioBass * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioBass * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioBassVtbl;
+
+    interface IAudioBass
+    {
+        CONST_VTBL struct IAudioBassVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioBass_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioBass_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioBass_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioBass_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioBass_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioBass_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioBass_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioBass_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioBass_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioBass_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_INTERFACE_DEFINED__
+#define __IAudioMidrange_INTERFACE_DEFINED__
+
+/* interface IAudioMidrange */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMidrange;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("5E54B6D7-B44B-40D9-9A9E-E691D9CE6EDF")
+    IAudioMidrange : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMidrangeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMidrange * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMidrange * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMidrange * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioMidrange * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioMidrange * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioMidrangeVtbl;
+
+    interface IAudioMidrange
+    {
+        CONST_VTBL struct IAudioMidrangeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMidrange_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMidrange_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMidrange_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMidrange_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioMidrange_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioMidrange_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioMidrange_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioMidrange_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioMidrange_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMidrange_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioTreble_INTERFACE_DEFINED__
+#define __IAudioTreble_INTERFACE_DEFINED__
+
+/* interface IAudioTreble */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioTreble;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0A717812-694E-4907-B74B-BAFA5CFDCA7B")
+    IAudioTreble : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioTrebleVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioTreble * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioTreble * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioTreble * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioTreble * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioTreble * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioTrebleVtbl;
+
+    interface IAudioTreble
+    {
+        CONST_VTBL struct IAudioTrebleVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioTreble_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioTreble_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioTreble_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioTreble_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioTreble_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioTreble_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioTreble_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioTreble_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioTreble_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioTreble_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_INTERFACE_DEFINED__
+#define __IAudioAutoGainControl_INTERFACE_DEFINED__
+
+/* interface IAudioAutoGainControl */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioAutoGainControl;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("85401FD4-6DE4-4b9d-9869-2D6753A82F3C")
+    IAudioAutoGainControl : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( 
+            /* [out] */ 
+            __out  BOOL *pbEnabled) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( 
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioAutoGainControlVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioAutoGainControl * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioAutoGainControl * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioAutoGainControl * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( 
+            IAudioAutoGainControl * This,
+            /* [out] */ 
+            __out  BOOL *pbEnabled);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( 
+            IAudioAutoGainControl * This,
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioAutoGainControlVtbl;
+
+    interface IAudioAutoGainControl
+    {
+        CONST_VTBL struct IAudioAutoGainControlVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioAutoGainControl_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioAutoGainControl_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioAutoGainControl_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioAutoGainControl_GetEnabled(This,pbEnabled)	\
+    ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) 
+
+#define IAudioAutoGainControl_SetEnabled(This,bEnable,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioAutoGainControl_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_INTERFACE_DEFINED__
+#define __IAudioPeakMeter_INTERFACE_DEFINED__
+
+/* interface IAudioPeakMeter */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioPeakMeter;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("DD79923C-0599-45e0-B8B6-C8DF7DB6E796")
+    IAudioPeakMeter : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pcChannels) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioPeakMeterVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioPeakMeter * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioPeakMeter * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioPeakMeter * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioPeakMeter * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioPeakMeter * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        END_INTERFACE
+    } IAudioPeakMeterVtbl;
+
+    interface IAudioPeakMeter
+    {
+        CONST_VTBL struct IAudioPeakMeterVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioPeakMeter_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioPeakMeter_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioPeakMeter_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioPeakMeter_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioPeakMeter_GetLevel(This,nChannel,pfLevel)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevel) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioPeakMeter_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_INTERFACE_DEFINED__
+#define __IDeviceSpecificProperty_INTERFACE_DEFINED__
+
+/* interface IDeviceSpecificProperty */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IDeviceSpecificProperty;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3B22BCBF-2586-4af0-8583-205D391B807C")
+    IDeviceSpecificProperty : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( 
+            /* [out] */ 
+            __deref_out  VARTYPE *pVType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [out] */ 
+            __out  void *pvValue,
+            /* [out][in] */ 
+            __inout  DWORD *pcbValue) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetValue( 
+            /* [in] */ 
+            __in  void *pvValue,
+            /* [in] */ DWORD cbValue,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Get4BRange( 
+            /* [out] */ 
+            __deref_out  LONG *plMin,
+            /* [out] */ 
+            __deref_out  LONG *plMax,
+            /* [out] */ 
+            __deref_out  LONG *plStepping) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDeviceSpecificPropertyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDeviceSpecificProperty * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDeviceSpecificProperty * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDeviceSpecificProperty * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __deref_out  VARTYPE *pVType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __out  void *pvValue,
+            /* [out][in] */ 
+            __inout  DWORD *pcbValue);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IDeviceSpecificProperty * This,
+            /* [in] */ 
+            __in  void *pvValue,
+            /* [in] */ DWORD cbValue,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Get4BRange )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __deref_out  LONG *plMin,
+            /* [out] */ 
+            __deref_out  LONG *plMax,
+            /* [out] */ 
+            __deref_out  LONG *plStepping);
+        
+        END_INTERFACE
+    } IDeviceSpecificPropertyVtbl;
+
+    interface IDeviceSpecificProperty
+    {
+        CONST_VTBL struct IDeviceSpecificPropertyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDeviceSpecificProperty_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDeviceSpecificProperty_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDeviceSpecificProperty_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDeviceSpecificProperty_GetType(This,pVType)	\
+    ( (This)->lpVtbl -> GetType(This,pVType) ) 
+
+#define IDeviceSpecificProperty_GetValue(This,pvValue,pcbValue)	\
+    ( (This)->lpVtbl -> GetValue(This,pvValue,pcbValue) ) 
+
+#define IDeviceSpecificProperty_SetValue(This,pvValue,cbValue,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetValue(This,pvValue,cbValue,pguidEventContext) ) 
+
+#define IDeviceSpecificProperty_Get4BRange(This,plMin,plMax,plStepping)	\
+    ( (This)->lpVtbl -> Get4BRange(This,plMin,plMax,plStepping) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDeviceSpecificProperty_INTERFACE_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_INTERFACE_DEFINED__
+#define __IKsFormatSupport_INTERFACE_DEFINED__
+
+/* interface IKsFormatSupport */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsFormatSupport;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3CB4A69D-BB6F-4D2B-95B7-452D2C155DB5")
+    IKsFormatSupport : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsFormatSupported( 
+            /* [size_is][in] */ PKSDATAFORMAT pKsFormat,
+            /* [in] */ 
+            __in  DWORD cbFormat,
+            /* [out] */ 
+            __out  BOOL *pbSupported) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevicePreferredFormat( 
+            /* [out] */ PKSDATAFORMAT *ppKsFormat) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsFormatSupportVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsFormatSupport * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsFormatSupport * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsFormatSupport * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( 
+            IKsFormatSupport * This,
+            /* [size_is][in] */ PKSDATAFORMAT pKsFormat,
+            /* [in] */ 
+            __in  DWORD cbFormat,
+            /* [out] */ 
+            __out  BOOL *pbSupported);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevicePreferredFormat )( 
+            IKsFormatSupport * This,
+            /* [out] */ PKSDATAFORMAT *ppKsFormat);
+        
+        END_INTERFACE
+    } IKsFormatSupportVtbl;
+
+    interface IKsFormatSupport
+    {
+        CONST_VTBL struct IKsFormatSupportVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsFormatSupport_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsFormatSupport_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsFormatSupport_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsFormatSupport_IsFormatSupported(This,pKsFormat,cbFormat,pbSupported)	\
+    ( (This)->lpVtbl -> IsFormatSupported(This,pKsFormat,cbFormat,pbSupported) ) 
+
+#define IKsFormatSupport_GetDevicePreferredFormat(This,ppKsFormat)	\
+    ( (This)->lpVtbl -> GetDevicePreferredFormat(This,ppKsFormat) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsFormatSupport_INTERFACE_DEFINED__ */
+
+
+#ifndef __IKsJackDescription_INTERFACE_DEFINED__
+#define __IKsJackDescription_INTERFACE_DEFINED__
+
+/* interface IKsJackDescription */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsJackDescription;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4509F757-2D46-4637-8E62-CE7DB944F57B")
+    IKsJackDescription : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackCount( 
+            /* [out] */ 
+            __out  UINT *pcJacks) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackDescription( 
+            /* [in] */ UINT nJack,
+            /* [out] */ 
+            __out  KSJACK_DESCRIPTION *pDescription) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsJackDescriptionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsJackDescription * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsJackDescription * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsJackDescription * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackCount )( 
+            IKsJackDescription * This,
+            /* [out] */ 
+            __out  UINT *pcJacks);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackDescription )( 
+            IKsJackDescription * This,
+            /* [in] */ UINT nJack,
+            /* [out] */ 
+            __out  KSJACK_DESCRIPTION *pDescription);
+        
+        END_INTERFACE
+    } IKsJackDescriptionVtbl;
+
+    interface IKsJackDescription
+    {
+        CONST_VTBL struct IKsJackDescriptionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsJackDescription_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsJackDescription_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsJackDescription_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsJackDescription_GetJackCount(This,pcJacks)	\
+    ( (This)->lpVtbl -> GetJackCount(This,pcJacks) ) 
+
+#define IKsJackDescription_GetJackDescription(This,nJack,pDescription)	\
+    ( (This)->lpVtbl -> GetJackDescription(This,nJack,pDescription) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsJackDescription_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPartsList_INTERFACE_DEFINED__
+#define __IPartsList_INTERFACE_DEFINED__
+
+/* interface IPartsList */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IPartsList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6DAA848C-5EB0-45CC-AEA5-998A2CDA1FFB")
+    IPartsList : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPart( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IPart **ppPart) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPartsListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPartsList * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPartsList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPartsList * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPartsList * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPart )( 
+            IPartsList * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IPart **ppPart);
+        
+        END_INTERFACE
+    } IPartsListVtbl;
+
+    interface IPartsList
+    {
+        CONST_VTBL struct IPartsListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPartsList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPartsList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPartsList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPartsList_GetCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetCount(This,pCount) ) 
+
+#define IPartsList_GetPart(This,nIndex,ppPart)	\
+    ( (This)->lpVtbl -> GetPart(This,nIndex,ppPart) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPartsList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPart_INTERFACE_DEFINED__
+#define __IPart_INTERFACE_DEFINED__
+
+/* interface IPart */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IPart;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9")
+    IPart : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLocalId( 
+            /* [out] */ 
+            __out  UINT *pnId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetGlobalId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrGlobalId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartType( 
+            /* [out] */ 
+            __out  PartType *pPartType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubType( 
+            /* [out] */ GUID *pSubType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterfaceCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterface( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IControlInterface **ppInterfaceDesc) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsIncoming( 
+            /* [out] */ 
+            __out  IPartsList **ppParts) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsOutgoing( 
+            /* [out] */ 
+            __out  IPartsList **ppParts) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTopologyObject( 
+            /* [out] */ 
+            __out  IDeviceTopology **ppTopology) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  DWORD dwClsContext,
+            /* [in] */ 
+            __in  REFIID refiid,
+            /* [iid_is][out] */ 
+            __out_opt  void **ppvObject) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeCallback( 
+            /* [in] */ 
+            __in  REFGUID riid,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeCallback( 
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPartVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPart * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPart * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPart * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( 
+            IPart * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLocalId )( 
+            IPart * This,
+            /* [out] */ 
+            __out  UINT *pnId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetGlobalId )( 
+            IPart * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrGlobalId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartType )( 
+            IPart * This,
+            /* [out] */ 
+            __out  PartType *pPartType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubType )( 
+            IPart * This,
+            /* [out] */ GUID *pSubType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterfaceCount )( 
+            IPart * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterface )( 
+            IPart * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IControlInterface **ppInterfaceDesc);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsIncoming )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IPartsList **ppParts);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsOutgoing )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IPartsList **ppParts);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTopologyObject )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IDeviceTopology **ppTopology);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IPart * This,
+            /* [in] */ 
+            __in  DWORD dwClsContext,
+            /* [in] */ 
+            __in  REFIID refiid,
+            /* [iid_is][out] */ 
+            __out_opt  void **ppvObject);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeCallback )( 
+            IPart * This,
+            /* [in] */ 
+            __in  REFGUID riid,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeCallback )( 
+            IPart * This,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify);
+        
+        END_INTERFACE
+    } IPartVtbl;
+
+    interface IPart
+    {
+        CONST_VTBL struct IPartVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPart_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPart_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPart_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPart_GetName(This,ppwstrName)	\
+    ( (This)->lpVtbl -> GetName(This,ppwstrName) ) 
+
+#define IPart_GetLocalId(This,pnId)	\
+    ( (This)->lpVtbl -> GetLocalId(This,pnId) ) 
+
+#define IPart_GetGlobalId(This,ppwstrGlobalId)	\
+    ( (This)->lpVtbl -> GetGlobalId(This,ppwstrGlobalId) ) 
+
+#define IPart_GetPartType(This,pPartType)	\
+    ( (This)->lpVtbl -> GetPartType(This,pPartType) ) 
+
+#define IPart_GetSubType(This,pSubType)	\
+    ( (This)->lpVtbl -> GetSubType(This,pSubType) ) 
+
+#define IPart_GetControlInterfaceCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetControlInterfaceCount(This,pCount) ) 
+
+#define IPart_GetControlInterface(This,nIndex,ppInterfaceDesc)	\
+    ( (This)->lpVtbl -> GetControlInterface(This,nIndex,ppInterfaceDesc) ) 
+
+#define IPart_EnumPartsIncoming(This,ppParts)	\
+    ( (This)->lpVtbl -> EnumPartsIncoming(This,ppParts) ) 
+
+#define IPart_EnumPartsOutgoing(This,ppParts)	\
+    ( (This)->lpVtbl -> EnumPartsOutgoing(This,ppParts) ) 
+
+#define IPart_GetTopologyObject(This,ppTopology)	\
+    ( (This)->lpVtbl -> GetTopologyObject(This,ppTopology) ) 
+
+#define IPart_Activate(This,dwClsContext,refiid,ppvObject)	\
+    ( (This)->lpVtbl -> Activate(This,dwClsContext,refiid,ppvObject) ) 
+
+#define IPart_RegisterControlChangeCallback(This,riid,pNotify)	\
+    ( (This)->lpVtbl -> RegisterControlChangeCallback(This,riid,pNotify) ) 
+
+#define IPart_UnregisterControlChangeCallback(This,pNotify)	\
+    ( (This)->lpVtbl -> UnregisterControlChangeCallback(This,pNotify) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPart_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConnector_INTERFACE_DEFINED__
+#define __IConnector_INTERFACE_DEFINED__
+
+/* interface IConnector */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IConnector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("9c2c4058-23f5-41de-877a-df3af236a09e")
+    IConnector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( 
+            /* [out] */ 
+            __out  ConnectorType *pType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( 
+            /* [out] */ 
+            __out  DataFlow *pFlow) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ConnectTo( 
+            /* [in] */ 
+            __in  IConnector *pConnectTo) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Disconnect( void) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsConnected( 
+            /* [out] */ 
+            __out  BOOL *pbConnected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectedTo( 
+            /* [out] */ 
+            __out  IConnector **ppConTo) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorIdConnectedTo( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrConnectorId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceIdConnectedTo( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConnectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConnector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConnector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConnector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  ConnectorType *pType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  DataFlow *pFlow);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ConnectTo )( 
+            IConnector * This,
+            /* [in] */ 
+            __in  IConnector *pConnectTo);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Disconnect )( 
+            IConnector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsConnected )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  BOOL *pbConnected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  IConnector **ppConTo);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorIdConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrConnectorId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceIdConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId);
+        
+        END_INTERFACE
+    } IConnectorVtbl;
+
+    interface IConnector
+    {
+        CONST_VTBL struct IConnectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConnector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConnector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConnector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConnector_GetType(This,pType)	\
+    ( (This)->lpVtbl -> GetType(This,pType) ) 
+
+#define IConnector_GetDataFlow(This,pFlow)	\
+    ( (This)->lpVtbl -> GetDataFlow(This,pFlow) ) 
+
+#define IConnector_ConnectTo(This,pConnectTo)	\
+    ( (This)->lpVtbl -> ConnectTo(This,pConnectTo) ) 
+
+#define IConnector_Disconnect(This)	\
+    ( (This)->lpVtbl -> Disconnect(This) ) 
+
+#define IConnector_IsConnected(This,pbConnected)	\
+    ( (This)->lpVtbl -> IsConnected(This,pbConnected) ) 
+
+#define IConnector_GetConnectedTo(This,ppConTo)	\
+    ( (This)->lpVtbl -> GetConnectedTo(This,ppConTo) ) 
+
+#define IConnector_GetConnectorIdConnectedTo(This,ppwstrConnectorId)	\
+    ( (This)->lpVtbl -> GetConnectorIdConnectedTo(This,ppwstrConnectorId) ) 
+
+#define IConnector_GetDeviceIdConnectedTo(This,ppwstrDeviceId)	\
+    ( (This)->lpVtbl -> GetDeviceIdConnectedTo(This,ppwstrDeviceId) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConnector_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISubunit_INTERFACE_DEFINED__
+#define __ISubunit_INTERFACE_DEFINED__
+
+/* interface ISubunit */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_ISubunit;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("82149A85-DBA6-4487-86BB-EA8F7FEFCC71")
+    ISubunit : public IUnknown
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISubunitVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISubunit * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISubunit * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISubunit * This);
+        
+        END_INTERFACE
+    } ISubunitVtbl;
+
+    interface ISubunit
+    {
+        CONST_VTBL struct ISubunitVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISubunit_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISubunit_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISubunit_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISubunit_INTERFACE_DEFINED__ */
+
+
+#ifndef __IControlInterface_INTERFACE_DEFINED__
+#define __IControlInterface_INTERFACE_DEFINED__
+
+/* interface IControlInterface */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IControlInterface;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("45d37c3f-5140-444a-ae24-400789f3cbf3")
+    IControlInterface : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetIID( 
+            /* [out] */ 
+            __out  GUID *pIID) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IControlInterfaceVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IControlInterface * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IControlInterface * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IControlInterface * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( 
+            IControlInterface * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetIID )( 
+            IControlInterface * This,
+            /* [out] */ 
+            __out  GUID *pIID);
+        
+        END_INTERFACE
+    } IControlInterfaceVtbl;
+
+    interface IControlInterface
+    {
+        CONST_VTBL struct IControlInterfaceVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IControlInterface_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IControlInterface_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IControlInterface_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IControlInterface_GetName(This,ppwstrName)	\
+    ( (This)->lpVtbl -> GetName(This,ppwstrName) ) 
+
+#define IControlInterface_GetIID(This,pIID)	\
+    ( (This)->lpVtbl -> GetIID(This,pIID) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IControlInterface_INTERFACE_DEFINED__ */
+
+
+#ifndef __IControlChangeNotify_INTERFACE_DEFINED__
+#define __IControlChangeNotify_INTERFACE_DEFINED__
+
+/* interface IControlChangeNotify */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IControlChangeNotify;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A09513ED-C709-4d21-BD7B-5F34C47F3947")
+    IControlChangeNotify : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnNotify( 
+            /* [in] */ 
+            __in  DWORD dwSenderProcessId,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IControlChangeNotifyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IControlChangeNotify * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IControlChangeNotify * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IControlChangeNotify * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnNotify )( 
+            IControlChangeNotify * This,
+            /* [in] */ 
+            __in  DWORD dwSenderProcessId,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IControlChangeNotifyVtbl;
+
+    interface IControlChangeNotify
+    {
+        CONST_VTBL struct IControlChangeNotifyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IControlChangeNotify_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IControlChangeNotify_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IControlChangeNotify_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IControlChangeNotify_OnNotify(This,dwSenderProcessId,pguidEventContext)	\
+    ( (This)->lpVtbl -> OnNotify(This,dwSenderProcessId,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IControlChangeNotify_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDeviceTopology_INTERFACE_DEFINED__
+#define __IDeviceTopology_INTERFACE_DEFINED__
+
+/* interface IDeviceTopology */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IDeviceTopology;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2A07407E-6497-4A18-9787-32F79BD0D98F")
+    IDeviceTopology : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnector( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IConnector **ppConnector) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunitCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunit( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __deref_out  ISubunit **ppSubunit) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartById( 
+            /* [in] */ 
+            __in  UINT nId,
+            /* [out] */ 
+            __deref_out  IPart **ppPart) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSignalPath( 
+            /* [in] */ 
+            __in  IPart *pIPartFrom,
+            /* [in] */ 
+            __in  IPart *pIPartTo,
+            /* [in] */ 
+            __in  BOOL bRejectMixedPaths,
+            /* [out] */ 
+            __deref_out  IPartsList **ppParts) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDeviceTopologyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDeviceTopology * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDeviceTopology * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDeviceTopology * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorCount )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnector )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IConnector **ppConnector);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunitCount )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunit )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __deref_out  ISubunit **ppSubunit);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartById )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nId,
+            /* [out] */ 
+            __deref_out  IPart **ppPart);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceId )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSignalPath )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  IPart *pIPartFrom,
+            /* [in] */ 
+            __in  IPart *pIPartTo,
+            /* [in] */ 
+            __in  BOOL bRejectMixedPaths,
+            /* [out] */ 
+            __deref_out  IPartsList **ppParts);
+        
+        END_INTERFACE
+    } IDeviceTopologyVtbl;
+
+    interface IDeviceTopology
+    {
+        CONST_VTBL struct IDeviceTopologyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDeviceTopology_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDeviceTopology_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDeviceTopology_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDeviceTopology_GetConnectorCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetConnectorCount(This,pCount) ) 
+
+#define IDeviceTopology_GetConnector(This,nIndex,ppConnector)	\
+    ( (This)->lpVtbl -> GetConnector(This,nIndex,ppConnector) ) 
+
+#define IDeviceTopology_GetSubunitCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetSubunitCount(This,pCount) ) 
+
+#define IDeviceTopology_GetSubunit(This,nIndex,ppSubunit)	\
+    ( (This)->lpVtbl -> GetSubunit(This,nIndex,ppSubunit) ) 
+
+#define IDeviceTopology_GetPartById(This,nId,ppPart)	\
+    ( (This)->lpVtbl -> GetPartById(This,nId,ppPart) ) 
+
+#define IDeviceTopology_GetDeviceId(This,ppwstrDeviceId)	\
+    ( (This)->lpVtbl -> GetDeviceId(This,ppwstrDeviceId) ) 
+
+#define IDeviceTopology_GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts)	\
+    ( (This)->lpVtbl -> GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDeviceTopology_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __DevTopologyLib_LIBRARY_DEFINED__
+#define __DevTopologyLib_LIBRARY_DEFINED__
+
+/* library DevTopologyLib */
+/* [helpstring][version][uuid] */ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+EXTERN_C const IID LIBID_DevTopologyLib;
+
+EXTERN_C const CLSID CLSID_DeviceTopology;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("1DF639D0-5EC1-47AA-9379-828DC1AA8C59")
+DeviceTopology;
+#endif
+#endif /* __DevTopologyLib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h b/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h
new file mode 100644
index 000000000..095f18f7b
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h
@@ -0,0 +1,620 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for endpointvolume.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __endpointvolume_h__
+#define __endpointvolume_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IAudioEndpointVolumeCallback_FWD_DEFINED__
+#define __IAudioEndpointVolumeCallback_FWD_DEFINED__
+typedef interface IAudioEndpointVolumeCallback IAudioEndpointVolumeCallback;
+#endif 	/* __IAudioEndpointVolumeCallback_FWD_DEFINED__ */
+
+
+#ifndef __IAudioEndpointVolume_FWD_DEFINED__
+#define __IAudioEndpointVolume_FWD_DEFINED__
+typedef interface IAudioEndpointVolume IAudioEndpointVolume;
+#endif 	/* __IAudioEndpointVolume_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMeterInformation_FWD_DEFINED__
+#define __IAudioMeterInformation_FWD_DEFINED__
+typedef interface IAudioMeterInformation IAudioMeterInformation;
+#endif 	/* __IAudioMeterInformation_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "unknwn.h"
+#include "devicetopology.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_endpointvolume_0000_0000 */
+/* [local] */ 
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA
+    {
+    GUID guidEventContext;
+    BOOL bMuted;
+    float fMasterVolume;
+    UINT nChannels;
+    float afChannelVolumes[ 1 ];
+    } 	AUDIO_VOLUME_NOTIFICATION_DATA;
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;
+
+#define   ENDPOINT_HARDWARE_SUPPORT_VOLUME    0x00000001
+#define   ENDPOINT_HARDWARE_SUPPORT_MUTE      0x00000002
+#define   ENDPOINT_HARDWARE_SUPPORT_METER     0x00000004
+
+
+extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
+#define __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
+
+/* interface IAudioEndpointVolumeCallback */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioEndpointVolumeCallback;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("657804FA-D6AD-4496-8A60-352752AF4F89")
+    IAudioEndpointVolumeCallback : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE OnNotify( 
+            PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioEndpointVolumeCallbackVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioEndpointVolumeCallback * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioEndpointVolumeCallback * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioEndpointVolumeCallback * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *OnNotify )( 
+            IAudioEndpointVolumeCallback * This,
+            PAUDIO_VOLUME_NOTIFICATION_DATA pNotify);
+        
+        END_INTERFACE
+    } IAudioEndpointVolumeCallbackVtbl;
+
+    interface IAudioEndpointVolumeCallback
+    {
+        CONST_VTBL struct IAudioEndpointVolumeCallbackVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioEndpointVolumeCallback_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioEndpointVolumeCallback_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioEndpointVolumeCallback_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioEndpointVolumeCallback_OnNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> OnNotify(This,pNotify) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioEndpointVolume_INTERFACE_DEFINED__
+#define __IAudioEndpointVolume_INTERFACE_DEFINED__
+
+/* interface IAudioEndpointVolume */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioEndpointVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("5CDF2C82-841E-4546-9722-0CF74078229A")
+    IAudioEndpointVolume : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeNotify( 
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeNotify( 
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pnChannelCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevel( 
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevelScalar( 
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevel( 
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevelScalar( 
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevelScalar( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevelScalar( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  BOOL bMute,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMute) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeStepInfo( 
+            /* [out] */ 
+            __out  UINT *pnStep,
+            /* [out] */ 
+            __out  UINT *pnStepCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepUp( 
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepDown( 
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( 
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeRange( 
+            /* [out] */ 
+            __out  float *pflVolumeMindB,
+            /* [out] */ 
+            __out  float *pflVolumeMaxdB,
+            /* [out] */ 
+            __out  float *pflVolumeIncrementdB) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioEndpointVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioEndpointVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioEndpointVolume * This);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeNotify )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeNotify )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  UINT *pnChannelCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  BOOL bMute,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  BOOL *pbMute);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeStepInfo )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  UINT *pnStep,
+            /* [out] */ 
+            __out  UINT *pnStepCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepUp )( 
+            IAudioEndpointVolume * This,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepDown )( 
+            IAudioEndpointVolume * This,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeRange )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pflVolumeMindB,
+            /* [out] */ 
+            __out  float *pflVolumeMaxdB,
+            /* [out] */ 
+            __out  float *pflVolumeIncrementdB);
+        
+        END_INTERFACE
+    } IAudioEndpointVolumeVtbl;
+
+    interface IAudioEndpointVolume
+    {
+        CONST_VTBL struct IAudioEndpointVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioEndpointVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioEndpointVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioEndpointVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioEndpointVolume_RegisterControlChangeNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> RegisterControlChangeNotify(This,pNotify) ) 
+
+#define IAudioEndpointVolume_UnregisterControlChangeNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> UnregisterControlChangeNotify(This,pNotify) ) 
+
+#define IAudioEndpointVolume_GetChannelCount(This,pnChannelCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pnChannelCount) ) 
+
+#define IAudioEndpointVolume_SetMasterVolumeLevel(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetMasterVolumeLevel(This,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetMasterVolumeLevel(This,pfLevelDB) ) 
+
+#define IAudioEndpointVolume_GetMasterVolumeLevelScalar(This,pfLevel)	\
+    ( (This)->lpVtbl -> GetMasterVolumeLevelScalar(This,pfLevel) ) 
+
+#define IAudioEndpointVolume_SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetChannelVolumeLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetChannelVolumeLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioEndpointVolume_GetChannelVolumeLevelScalar(This,nChannel,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolumeLevelScalar(This,nChannel,pfLevel) ) 
+
+#define IAudioEndpointVolume_SetMute(This,bMute,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMute,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetMute(This,pbMute)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMute) ) 
+
+#define IAudioEndpointVolume_GetVolumeStepInfo(This,pnStep,pnStepCount)	\
+    ( (This)->lpVtbl -> GetVolumeStepInfo(This,pnStep,pnStepCount) ) 
+
+#define IAudioEndpointVolume_VolumeStepUp(This,pguidEventContext)	\
+    ( (This)->lpVtbl -> VolumeStepUp(This,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_VolumeStepDown(This,pguidEventContext)	\
+    ( (This)->lpVtbl -> VolumeStepDown(This,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_QueryHardwareSupport(This,pdwHardwareSupportMask)	\
+    ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) 
+
+#define IAudioEndpointVolume_GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB)	\
+    ( (This)->lpVtbl -> GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioEndpointVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMeterInformation_INTERFACE_DEFINED__
+#define __IAudioMeterInformation_INTERFACE_DEFINED__
+
+/* interface IAudioMeterInformation */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMeterInformation;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C02216F6-8C67-4B5B-9D00-D008E73E0064")
+    IAudioMeterInformation : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetPeakValue( 
+            /* [out] */ float *pfPeak) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMeteringChannelCount( 
+            /* [out] */ 
+            __out  UINT *pnChannelCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelsPeakValues( 
+            /* [in] */ UINT32 u32ChannelCount,
+            /* [size_is][out] */ float *afPeakValues) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( 
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMeterInformationVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMeterInformation * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMeterInformation * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMeterInformation * This);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetPeakValue )( 
+            IAudioMeterInformation * This,
+            /* [out] */ float *pfPeak);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMeteringChannelCount )( 
+            IAudioMeterInformation * This,
+            /* [out] */ 
+            __out  UINT *pnChannelCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelsPeakValues )( 
+            IAudioMeterInformation * This,
+            /* [in] */ UINT32 u32ChannelCount,
+            /* [size_is][out] */ float *afPeakValues);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( 
+            IAudioMeterInformation * This,
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask);
+        
+        END_INTERFACE
+    } IAudioMeterInformationVtbl;
+
+    interface IAudioMeterInformation
+    {
+        CONST_VTBL struct IAudioMeterInformationVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMeterInformation_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMeterInformation_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMeterInformation_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMeterInformation_GetPeakValue(This,pfPeak)	\
+    ( (This)->lpVtbl -> GetPeakValue(This,pfPeak) ) 
+
+#define IAudioMeterInformation_GetMeteringChannelCount(This,pnChannelCount)	\
+    ( (This)->lpVtbl -> GetMeteringChannelCount(This,pnChannelCount) ) 
+
+#define IAudioMeterInformation_GetChannelsPeakValues(This,u32ChannelCount,afPeakValues)	\
+    ( (This)->lpVtbl -> GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) ) 
+
+#define IAudioMeterInformation_QueryHardwareSupport(This,pdwHardwareSupportMask)	\
+    ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMeterInformation_INTERFACE_DEFINED__ */
+
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h b/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h
new file mode 100644
index 000000000..a298e4d0f
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h
@@ -0,0 +1,255 @@
+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DEFINE_API_PKEY
+#include <propkey.h>
+#endif
+
+#include <FunctionDiscoveryKeys_devpkey.h>
+
+// FMTID_FD = {904b03a2-471d-423c-a584-f3483238a146}
+DEFINE_GUID(FMTID_FD, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46);
+DEFINE_API_PKEY(PKEY_FD_Visibility, VisibilityFlags, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000001); //    VT_UINT
+#define FD_Visibility_Default   0
+#define FD_Visibility_Hidden    1
+
+// FMTID_Device = {78C34FC8-104A-4aca-9EA4-524D52996E57}
+DEFINE_GUID(FMTID_Device, 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57);
+
+DEFINE_API_PKEY(PKEY_Device_NotPresent,     DeviceNotPresent   , 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000002); //    VT_UINT
+DEFINE_API_PKEY(PKEY_Device_QueueSize,      DeviceQueueSize    , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000024); //    VT_UI4
+DEFINE_API_PKEY(PKEY_Device_Status,         DeviceStatus       , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000025); //    VT_LPWSTR
+DEFINE_API_PKEY(PKEY_Device_Comment,        DeviceComment      , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000026); //    VT_LPWSTR
+DEFINE_API_PKEY(PKEY_Device_Model,          DeviceModel        , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000027); //    VT_LPWSTR
+
+//  Name:     System.Device.BIOSVersion -- PKEY_Device_BIOSVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_BSTR.
+//  FormatID: EAEE7F1D-6A33-44D1-9441-5F46DEF23198, 9
+DEFINE_PROPERTYKEY(PKEY_Device_BIOSVersion, 0xEAEE7F1D, 0x6A33, 0x44D1, 0x94, 0x41, 0x5F, 0x46, 0xDE, 0xF2, 0x31, 0x98, 9);
+
+DEFINE_API_PKEY(PKEY_Write_Time,            WriteTime          , 0xf53b7e1c, 0x77e0, 0x4450, 0x8c, 0x5f, 0xa7, 0x6c, 0xc7, 0xfd, 0xe0, 0x58, 0x00000100); //    VT_FILETIME
+
+#ifdef FD_XP
+DEFINE_API_PKEY(PKEY_Device_InstanceId, DeviceInstanceId   , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000100); //    VT_LPWSTR
+#endif
+DEFINE_API_PKEY(PKEY_Device_Interface,  DeviceInterface    , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000101); //    VT_CLSID
+
+DEFINE_API_PKEY(PKEY_ExposedIIDs,           ExposedIIDs       , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003002); //  VT_VECTOR | VT_CLSID
+DEFINE_API_PKEY(PKEY_ExposedCLSIDs,         ExposedCLSIDs     , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003003); //  VT_VECTOR | VT_CLSID
+DEFINE_API_PKEY(PKEY_InstanceValidatorClsid,InstanceValidator , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003004); // VT_CLSID
+
+// FMTID_WSD = {92506491-FF95-4724-A05A-5B81885A7C92}
+DEFINE_GUID(FMTID_WSD, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92);
+
+DEFINE_API_PKEY(PKEY_WSD_AddressURI, WSD_AddressURI, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001000);   // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_Types, WSD_Types, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001001); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_Scopes, WSD_Scopes, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001002);   // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_MetadataVersion, WSD_MetadataVersion, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001003); //VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_AppSeqInstanceID, WSD_AppSeqInstanceID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001004);   // VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_AppSeqSessionID, WSD_AppSeqSessionID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001005); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_AppSeqMessageNumber, WSD_AppSeqMessageNumber, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001006); // VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_XAddrs, WSD_XAddrs, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00002000); // VT_LPWSTR or VT_VECTOR | VT_LPWSTR
+
+DEFINE_API_PKEY(PKEY_WSD_MetadataClean, WSD_MetadataClean, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000001);   // VT_BOOL
+DEFINE_API_PKEY(PKEY_WSD_ServiceInfo, WSD_ServiceInfo, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000002);   // VT_VECTOR|VT_VARIANT (variants are VT_UNKNOWN)
+
+DEFINE_API_PKEY(PKEY_PUBSVCS_TYPE, PUBSVCS_TYPE, 0xF1B88AD3, 0x109C, 0x4FD2, 0xBA, 0x3F, 0x53, 0x5A, 0x76, 0x5F, 0x82, 0xF4, 0x00005001); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_SCOPE, PUBSVCS_SCOPE, 0x2AE2B567, 0xEECB, 0x4A3E, 0xB7, 0x53, 0x54, 0xC7, 0x25, 0x49, 0x43, 0x66, 0x00005002);   // VT_LPWSTR | VT_VECTOR
+DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA, PUBSVCS_METADATA, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005003); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA_VERSION, PUBSVCS_METADATA_VERSION, 0xC0C96C15, 0x1823, 0x4E5B, 0x93, 0x48, 0xE8, 0x25, 0x19, 0x92, 0x3F, 0x04, 0x00005004); // VT_UI8
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_ALLOWED, PUBSVCS_NETWORK_PROFILES_ALLOWED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005005); // VT_VECTOR | VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DENIED, PUBSVCS_NETWORK_PROFILES_DENIED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005006); // VT_VECTOR | VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DEFAULT, PUBSVCS_NETWORK_PROFILES_DEFAULT, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005007); // VT_BOOL
+
+// FMTID_PNPX = {656A3BB3-ECC0-43FD-8477-4AE0404A96CD}
+DEFINE_GUID(FMTID_PNPX, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD);
+        // from Discovery messages
+DEFINE_PROPERTYKEY(PKEY_PNPX_GlobalIdentity, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001000);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Types, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001001);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Scopes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001002);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_XAddrs, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001003);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_MetadataVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001004);   // VT_UI8
+DEFINE_PROPERTYKEY(PKEY_PNPX_ID, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001005);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_RootProxy, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006);   // VT_BOOL
+
+        // for Directed Discovery
+DEFINE_PROPERTYKEY(PKEY_PNPX_RemoteAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006);   // VT_LPWSTR
+
+        // from ThisModel metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_Manufacturer, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002000);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_ManufacturerUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002002);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002003);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002004);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Upc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002005);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_PresentationUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002006);   // VT_LPWSTR
+        // from ThisDevice metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_FriendlyName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003000);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_FirmwareVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_SerialNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003002);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003004);   // VT_LPWSTR | VT_VECTOR
+        // DeviceCategory values
+#define PNPX_DEVICECATEGORY_COMPUTER                            L"Computers"
+#define PNPX_DEVICECATEGORY_INPUTDEVICE                         L"Input"
+#define PNPX_DEVICECATEGORY_PRINTER                             L"Printers"
+#define PNPX_DEVICECATEGORY_SCANNER                             L"Scanners"
+#define PNPX_DEVICECATEGORY_FAX                                 L"FAX"
+#define PNPX_DEVICECATEGORY_MFP                                 L"MFP"
+#define PNPX_DEVICECATEGORY_CAMERA                              L"Cameras"
+#define PNPX_DEVICECATEGORY_STORAGE                             L"Storage"
+#define PNPX_DEVICECATEGORY_NETWORK_INFRASTRUCTURE              L"NetworkInfrastructure"
+#define PNPX_DEVICECATEGORY_DISPLAYS                            L"Displays"
+#define PNPX_DEVICECATEGORY_MULTIMEDIA_DEVICE                   L"MediaDevices"
+#define PNPX_DEVICECATEGORY_GAMING_DEVICE                       L"Gaming"
+#define PNPX_DEVICECATEGORY_TELEPHONE                           L"Phones"
+#define PNPX_DEVICECATEGORY_HOME_AUTOMATION_SYSTEM              L"HomeAutomation"
+#define PNPX_DEVICECATEGORY_HOME_SECURITY_SYSTEM                L"HomeSecurity"
+#define PNPX_DEVICECATEGORY_OTHER                               L"Other"
+DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory_Desc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003005);   // VT_LPWSTR | VT_VECTOR
+
+DEFINE_PROPERTYKEY(PKEY_PNPX_PhysicalAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003006);   // VT_UI1 | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceLuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003007);   // VT_UI8
+DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceGuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003008);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_IpAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003009);   // VT_LPWSTR | VT_VECTOR
+        // from Relationship metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004000);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceTypes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004002);   // VT_LPWSTR | VT_VECTOR
+        // Association DB PKEYs
+DEFINE_API_PKEY(PKEY_PNPX_Devnode, PnPXDevNode, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000001); // VT_BOOL
+DEFINE_API_PKEY(PKEY_PNPX_AssociationState, AssociationState, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000002); // VT_UINT
+DEFINE_API_PKEY(PKEY_PNPX_AssociatedInstanceId, AssociatedInstanceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000003); // VT_LPWSTR
+        // for Computer Discovery
+DEFINE_PROPERTYKEY(PKEY_PNPX_DomainName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005000);   // VT_LPWSTR
+// Use PKEY_ComputerName (propkey.h) DEFINE_PROPERTYKEY(PKEY_PNPX_MachineName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ShareName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005002);   // VT_LPWSTR
+
+    // SSDP Provider custom properties
+DEFINE_PROPERTYKEY(PKEY_SSDP_AltLocationInfo, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006000);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_SSDP_DevLifeTime, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006001);   // VT_UI4
+DEFINE_PROPERTYKEY(PKEY_SSDP_NetworkInterface, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006002);   // VT_BOOL
+
+// FMTID_PNPXDynamicProperty = {4FC5077E-B686-44BE-93E3-86CAFE368CCD}
+DEFINE_GUID(FMTID_PNPXDynamicProperty, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD);
+
+DEFINE_PROPERTYKEY(PKEY_PNPX_Installable, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000001); // VT_BOOL
+DEFINE_PROPERTYKEY(PKEY_PNPX_Associated, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000002); // VT_BOOL
+// PKEY_PNPX_Installed to be deprecated in Longhorn Server timeframe
+// this PKEY really represents Associated state
+#define PKEY_PNPX_Installed PKEY_PNPX_Associated    // Deprecated! Please use PKEY_PNPX_Associated
+DEFINE_PROPERTYKEY(PKEY_PNPX_CompatibleTypes, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000003); // VT_LPWSTR | VT_VECTOR
+
+    // WNET Provider properties
+DEFINE_PROPERTYKEY(PKEY_WNET_Scope, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000001); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_Type, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000002); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_DisplayType, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000003); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_Usage, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000004); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_LocalName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000005); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_RemoteName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000006); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_Comment, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000007); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_Provider, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000008); // VT_LPWSTR
+
+
+    // WCN Provider properties
+
+DEFINE_PROPERTYKEY(PKEY_WCN_Version, 0x88190b80, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000001); // VT_UI1
+DEFINE_PROPERTYKEY(PKEY_WCN_RequestType, 0x88190b81, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000002); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_AuthType, 0x88190b82, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000003); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_EncryptType, 0x88190b83, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000004); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConnType, 0x88190b84, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000005); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigMethods, 0x88190b85, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000006); // VT_INT
+// map WCN DeviceType to PKEY_PNPX_DeviceCategory
+//DEFINE_PROPERTYKEY(PKEY_WCN_DeviceType, 0x88190b86, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000007); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_RfBand, 0x88190b87, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000008); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_AssocState, 0x88190b88, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000009); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigError, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000a); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigState, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000b); // VT_UI1
+DEFINE_PROPERTYKEY(PKEY_WCN_DevicePasswordId, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000c); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_OSVersion, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000d); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WCN_VendorExtension, 0x88190b8a, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000e); // VT_UI1 | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_WCN_RegistrarType, 0x88190b8b, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000f); // VT_INT
+
+//-----------------------------------------------------------------------------
+// DriverPackage properties
+
+#define PKEY_DriverPackage_Model                PKEY_DrvPkg_Model
+#define PKEY_DriverPackage_VendorWebSite        PKEY_DrvPkg_VendorWebSite
+#define PKEY_DriverPackage_DetailedDescription  PKEY_DrvPkg_DetailedDescription
+#define PKEY_DriverPackage_DocumentationLink    PKEY_DrvPkg_DocumentationLink
+#define PKEY_DriverPackage_Icon                 PKEY_DrvPkg_Icon
+#define PKEY_DriverPackage_BrandingIcon         PKEY_DrvPkg_BrandingIcon
+
+//-----------------------------------------------------------------------------
+// Hardware properties
+
+DEFINE_PROPERTYKEY(PKEY_Hardware_Devinst, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4097);
+
+//  Name:     System.Hardware.DisplayAttribute -- PKEY_Hardware_DisplayAttribute
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 5
+DEFINE_PROPERTYKEY(PKEY_Hardware_DisplayAttribute, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 5);
+
+//  Name:     System.Hardware.DriverDate -- PKEY_Hardware_DriverDate
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 11
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverDate, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 11);
+
+//  Name:     System.Hardware.DriverProvider -- PKEY_Hardware_DriverProvider
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 10
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverProvider, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 10);
+
+//  Name:     System.Hardware.DriverVersion -- PKEY_Hardware_DriverVersion
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 9
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverVersion, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 9);
+
+//  Name:     System.Hardware.Function -- PKEY_Hardware_Function
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4099
+DEFINE_PROPERTYKEY(PKEY_Hardware_Function, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4099);
+
+//  Name:     System.Hardware.Icon -- PKEY_Hardware_Icon
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 3
+DEFINE_PROPERTYKEY(PKEY_Hardware_Icon, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 3);
+
+//  Name:     System.Hardware.Image -- PKEY_Hardware_Image
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4098
+DEFINE_PROPERTYKEY(PKEY_Hardware_Image, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4098);
+
+//  Name:     System.Hardware.Manufacturer -- PKEY_Hardware_Manufacturer
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 6
+DEFINE_PROPERTYKEY(PKEY_Hardware_Manufacturer, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 6);
+
+//  Name:     System.Hardware.Model -- PKEY_Hardware_Model
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 7
+DEFINE_PROPERTYKEY(PKEY_Hardware_Model, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 7);
+
+//  Name:     System.Hardware.Name -- PKEY_Hardware_Name
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 2
+DEFINE_PROPERTYKEY(PKEY_Hardware_Name, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 2);
+
+//  Name:     System.Hardware.SerialNumber -- PKEY_Hardware_SerialNumber
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 8
+DEFINE_PROPERTYKEY(PKEY_Hardware_SerialNumber, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 8);
+
+//  Name:     System.Hardware.ShellAttributes -- PKEY_Hardware_ShellAttributes
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4100
+DEFINE_PROPERTYKEY(PKEY_Hardware_ShellAttributes, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4100);
+
+//  Name:     System.Hardware.Status -- PKEY_Hardware_Status
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4096
+DEFINE_PROPERTYKEY(PKEY_Hardware_Status, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4096);
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/ks.h b/portaudio/src/hostapi/wasapi/mingw-include/ks.h
new file mode 100644
index 000000000..2261e6c27
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/ks.h
@@ -0,0 +1,3666 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _KS_
+#define _KS_
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef __MINGW_EXTENSION
+#if defined(__GNUC__) || defined(__GNUG__)
+#define __MINGW_EXTENSION __extension__
+#else
+#define __MINGW_EXTENSION
+#endif
+#endif 
+
+#ifdef __TCS__
+#define _KS_NO_ANONYMOUS_STRUCTURES_ 1
+#endif
+
+#ifdef  _KS_NO_ANONYMOUS_STRUCTURES_
+#define _KS_ANON_STRUCT(X)			struct X
+#else
+#define _KS_ANON_STRUCT(X)	__MINGW_EXTENSION struct
+#endif
+
+#ifndef _NTRTL_
+#ifndef DEFINE_GUIDEX
+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
+#endif
+#ifndef STATICGUIDOF
+#define STATICGUIDOF(guid) STATIC_##guid
+#endif
+#endif /* _NTRTL_ */
+
+#ifndef SIZEOF_ARRAY
+#define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))
+#endif
+
+#define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n)
+#define DEFINE_GUIDNAMED(n) n
+
+#define STATIC_GUID_NULL						\
+	0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL);
+#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
+
+#define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS)
+#define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS)
+#define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS)
+
+typedef enum {
+  KSRESET_BEGIN,
+  KSRESET_END
+} KSRESET;
+
+typedef enum {
+  KSSTATE_STOP,
+  KSSTATE_ACQUIRE,
+  KSSTATE_PAUSE,
+  KSSTATE_RUN
+} KSSTATE,*PKSSTATE;
+
+#define KSPRIORITY_LOW		0x00000001
+#define KSPRIORITY_NORMAL	0x40000000
+#define KSPRIORITY_HIGH		0x80000000
+#define KSPRIORITY_EXCLUSIVE	0xFFFFFFFF
+
+typedef struct {
+  ULONG PriorityClass;
+  ULONG PrioritySubClass;
+} KSPRIORITY,*PKSPRIORITY;
+
+typedef struct {
+  __MINGW_EXTENSION union {
+    _KS_ANON_STRUCT(_IDENTIFIER)
+    {
+      GUID Set;
+      ULONG Id;
+      ULONG Flags;
+    };
+    LONGLONG Alignment;
+  };
+} KSIDENTIFIER,*PKSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT;
+
+#define KSMETHOD_TYPE_NONE		0x00000000
+#define KSMETHOD_TYPE_READ		0x00000001
+#define KSMETHOD_TYPE_WRITE		0x00000002
+#define KSMETHOD_TYPE_MODIFY		0x00000003
+#define KSMETHOD_TYPE_SOURCE		0x00000004
+
+#define KSMETHOD_TYPE_SEND		0x00000001
+#define KSMETHOD_TYPE_SETSUPPORT	0x00000100
+#define KSMETHOD_TYPE_BASICSUPPORT	0x00000200
+
+#define KSMETHOD_TYPE_TOPOLOGY		0x10000000
+
+#define KSPROPERTY_TYPE_GET		0x00000001
+#define KSPROPERTY_TYPE_SET		0x00000002
+#define KSPROPERTY_TYPE_SETSUPPORT	0x00000100
+#define KSPROPERTY_TYPE_BASICSUPPORT	0x00000200
+#define KSPROPERTY_TYPE_RELATIONS	0x00000400
+#define KSPROPERTY_TYPE_SERIALIZESET	0x00000800
+#define KSPROPERTY_TYPE_UNSERIALIZESET	0x00001000
+#define KSPROPERTY_TYPE_SERIALIZERAW	0x00002000
+#define KSPROPERTY_TYPE_UNSERIALIZERAW	0x00004000
+#define KSPROPERTY_TYPE_SERIALIZESIZE	0x00008000
+#define KSPROPERTY_TYPE_DEFAULTVALUES	0x00010000
+
+#define KSPROPERTY_TYPE_TOPOLOGY	0x10000000
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG NodeId;
+  ULONG Reserved;
+} KSP_NODE,*PKSP_NODE;
+
+typedef struct {
+  KSMETHOD Method;
+  ULONG NodeId;
+  ULONG Reserved;
+} KSM_NODE,*PKSM_NODE;
+
+typedef struct {
+  KSEVENT Event;
+  ULONG NodeId;
+  ULONG Reserved;
+} KSE_NODE,*PKSE_NODE;
+
+#define STATIC_KSPROPTYPESETID_General					\
+	0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General);
+#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
+
+typedef struct {
+  ULONG Size;
+  ULONG Count;
+} KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM;
+
+typedef struct {
+  ULONG AccessFlags;
+  ULONG DescriptionSize;
+  KSIDENTIFIER PropTypeSet;
+  ULONG MembersListCount;
+  ULONG Reserved;
+} KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION;
+
+#define KSPROPERTY_MEMBER_RANGES		0x00000001
+#define KSPROPERTY_MEMBER_STEPPEDRANGES		0x00000002
+#define KSPROPERTY_MEMBER_VALUES		0x00000003
+
+#define KSPROPERTY_MEMBER_FLAG_DEFAULT		0x00000001
+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM	0x00000004
+
+typedef struct {
+  ULONG MembersFlags;
+  ULONG MembersSize;
+  ULONG MembersCount;
+  ULONG Flags;
+} KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER;
+
+typedef union {
+  _KS_ANON_STRUCT(_SIGNED)
+  {
+    LONG SignedMinimum;
+    LONG SignedMaximum;
+  };
+  _KS_ANON_STRUCT(_UNSIGNED)
+  {
+    ULONG UnsignedMinimum;
+    ULONG UnsignedMaximum;
+  };
+} KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG;
+
+typedef union {
+  _KS_ANON_STRUCT(_SIGNED64)
+  {
+    LONGLONG SignedMinimum;
+    LONGLONG SignedMaximum;
+  };
+  _KS_ANON_STRUCT(_UNSIGNED64)
+  {
+    DWORDLONG UnsignedMinimum;
+    DWORDLONG UnsignedMaximum;
+  };
+} KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG;
+
+typedef struct {
+  ULONG SteppingDelta;
+  ULONG Reserved;
+  KSPROPERTY_BOUNDS_LONG Bounds;
+} KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG;
+
+typedef struct {
+  DWORDLONG SteppingDelta;
+  KSPROPERTY_BOUNDS_LONGLONG Bounds;
+} KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG;
+
+#if defined(_NTDDK_)
+typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
+typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
+typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;
+typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY;
+typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
+typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
+typedef struct _KSFILTER KSFILTER, *PKSFILTER;
+typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
+typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH;
+typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
+typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
+typedef struct _KSPIN KSPIN, *PKSPIN;
+typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
+typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
+typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;
+typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;
+typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
+typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
+#endif /* _NTDDK_ */
+
+typedef PVOID PKSWORKER;
+
+
+typedef struct {
+  ULONG NotificationType;
+  __MINGW_EXTENSION union {
+    struct {
+      HANDLE Event;
+      ULONG_PTR Reserved[2];
+    } EventHandle;
+    struct {
+      HANDLE Semaphore;
+      ULONG Reserved;
+      LONG Adjustment;
+    } SemaphoreHandle;
+#if defined(_NTDDK_)
+    struct {
+      PVOID Event;
+      KPRIORITY Increment;
+      ULONG_PTR Reserved;
+    } EventObject;
+    struct {
+      PVOID Semaphore;
+      KPRIORITY Increment;
+      LONG Adjustment;
+    } SemaphoreObject;
+    struct {
+      PKDPC Dpc;
+      ULONG ReferenceCount;
+      ULONG_PTR Reserved;
+    } Dpc;
+    struct {
+      PWORK_QUEUE_ITEM WorkQueueItem;
+      WORK_QUEUE_TYPE WorkQueueType;
+      ULONG_PTR Reserved;
+    } WorkItem;
+    struct {
+      PWORK_QUEUE_ITEM WorkQueueItem;
+      PKSWORKER KsWorkerObject;
+      ULONG_PTR Reserved;
+    } KsWorkItem;
+#endif /* _NTDDK_ */
+    struct {
+      PVOID Unused;
+      LONG_PTR Alignment[2];
+    } Alignment;
+  };
+} KSEVENTDATA,*PKSEVENTDATA;
+
+#define KSEVENTF_EVENT_HANDLE		0x00000001
+#define KSEVENTF_SEMAPHORE_HANDLE	0x00000002
+#if defined(_NTDDK_)
+#define KSEVENTF_EVENT_OBJECT		0x00000004
+#define KSEVENTF_SEMAPHORE_OBJECT	0x00000008
+#define KSEVENTF_DPC			0x00000010
+#define KSEVENTF_WORKITEM		0x00000020
+#define KSEVENTF_KSWORKITEM		0x00000080
+#endif /* _NTDDK_ */
+
+#define KSEVENT_TYPE_ENABLE		0x00000001
+#define KSEVENT_TYPE_ONESHOT		0x00000002
+#define KSEVENT_TYPE_ENABLEBUFFERED	0x00000004
+#define KSEVENT_TYPE_SETSUPPORT		0x00000100
+#define KSEVENT_TYPE_BASICSUPPORT	0x00000200
+#define KSEVENT_TYPE_QUERYBUFFER	0x00000400
+
+#define KSEVENT_TYPE_TOPOLOGY		0x10000000
+
+typedef struct {
+  KSEVENT Event;
+  PKSEVENTDATA EventData;
+  PVOID Reserved;
+} KSQUERYBUFFER,*PKSQUERYBUFFER;
+
+typedef struct {
+  ULONG Size;
+  ULONG Flags;
+  __MINGW_EXTENSION union {
+    HANDLE ObjectHandle;
+    PVOID ObjectPointer;
+  };
+  PVOID Reserved;
+  KSEVENT Event;
+  KSEVENTDATA EventData;
+} KSRELATIVEEVENT;
+
+#define KSRELATIVEEVENT_FLAG_HANDLE	0x00000001
+#define KSRELATIVEEVENT_FLAG_POINTER	0x00000002
+
+typedef struct {
+  KSEVENTDATA EventData;
+  LONGLONG MarkTime;
+} KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK;
+
+typedef struct {
+  KSEVENTDATA EventData;
+  LONGLONG TimeBase;
+  LONGLONG Interval;
+} KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL;
+
+typedef struct {
+  LONGLONG TimeBase;
+  LONGLONG Interval;
+} KSINTERVAL,*PKSINTERVAL;
+
+#define STATIC_KSPROPSETID_General					\
+	0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General);
+#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
+
+typedef enum {
+  KSPROPERTY_GENERAL_COMPONENTID
+} KSPROPERTY_GENERAL;
+
+typedef struct {
+  GUID Manufacturer;
+  GUID Product;
+  GUID Component;
+  GUID Name;
+  ULONG Version;
+  ULONG Revision;
+} KSCOMPONENTID,*PKSCOMPONENTID;
+
+#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_GENERAL_COMPONENTID,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSCOMPONENTID),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define STATIC_KSMETHODSETID_StreamIo	\
+	0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo);
+#define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
+
+typedef enum {
+  KSMETHOD_STREAMIO_READ,
+  KSMETHOD_STREAMIO_WRITE
+} KSMETHOD_STREAMIO;
+
+#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)			\
+	DEFINE_KSMETHOD_ITEM(						\
+				KSMETHOD_STREAMIO_READ,			\
+				KSMETHOD_TYPE_WRITE,			\
+				(Handler),				\
+				sizeof(KSMETHOD),			\
+				0,					\
+				NULL)
+
+#define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)			\
+	DEFINE_KSMETHOD_ITEM(						\
+				KSMETHOD_STREAMIO_WRITE,		\
+				KSMETHOD_TYPE_READ,			\
+				(Handler),				\
+				sizeof(KSMETHOD),			\
+				0,					\
+				NULL)
+
+#define STATIC_KSPROPSETID_MediaSeeking					\
+	0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking);
+#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
+
+typedef enum {
+  KSPROPERTY_MEDIASEEKING_CAPABILITIES,
+  KSPROPERTY_MEDIASEEKING_FORMATS,
+  KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
+  KSPROPERTY_MEDIASEEKING_POSITION,
+  KSPROPERTY_MEDIASEEKING_STOPPOSITION,
+  KSPROPERTY_MEDIASEEKING_POSITIONS,
+  KSPROPERTY_MEDIASEEKING_DURATION,
+  KSPROPERTY_MEDIASEEKING_AVAILABLE,
+  KSPROPERTY_MEDIASEEKING_PREROLL,
+  KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
+} KSPROPERTY_MEDIASEEKING;
+
+typedef enum {
+  KS_SEEKING_NoPositioning,
+  KS_SEEKING_AbsolutePositioning,
+  KS_SEEKING_RelativePositioning,
+  KS_SEEKING_IncrementalPositioning,
+  KS_SEEKING_PositioningBitsMask = 0x3,
+  KS_SEEKING_SeekToKeyFrame,
+  KS_SEEKING_ReturnTime = 0x8
+} KS_SEEKING_FLAGS;
+
+typedef enum {
+  KS_SEEKING_CanSeekAbsolute = 0x1,
+  KS_SEEKING_CanSeekForwards = 0x2,
+  KS_SEEKING_CanSeekBackwards = 0x4,
+  KS_SEEKING_CanGetCurrentPos = 0x8,
+  KS_SEEKING_CanGetStopPos = 0x10,
+  KS_SEEKING_CanGetDuration = 0x20,
+  KS_SEEKING_CanPlayBackwards = 0x40
+} KS_SEEKING_CAPABILITIES;
+
+typedef struct {
+  LONGLONG Current;
+  LONGLONG Stop;
+  KS_SEEKING_FLAGS CurrentFlags;
+  KS_SEEKING_FLAGS StopFlags;
+} KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS;
+
+typedef struct {
+  LONGLONG Earliest;
+  LONGLONG Latest;
+} KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE;
+
+typedef struct {
+  KSPROPERTY Property;
+  GUID SourceFormat;
+  GUID TargetFormat;
+  LONGLONG Time;
+} KSP_TIMEFORMAT,*PKSP_TIMEFORMAT;
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_CAPABILITIES,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KS_SEEKING_CAPABILITIES),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_FORMATS,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_TIMEFORMAT,	\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(GUID),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_POSITION,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_STOPPOSITION,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_POSITIONS,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSPROPERTY_POSITIONS),		\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_DURATION,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_AVAILABLE,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSPROPERTY_MEDIAAVAILABLE),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_PREROLL,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \
+				(Handler),				\
+				sizeof(KSP_TIMEFORMAT),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define STATIC_KSPROPSETID_Topology					\
+	0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology);
+#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
+
+typedef enum {
+  KSPROPERTY_TOPOLOGY_CATEGORIES,
+  KSPROPERTY_TOPOLOGY_NODES,
+  KSPROPERTY_TOPOLOGY_CONNECTIONS,
+  KSPROPERTY_TOPOLOGY_NAME
+} KSPROPERTY_TOPOLOGY;
+
+#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_TOPOLOGY_CATEGORIES,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				NULL, NULL, 0,NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_TOPOLOGY_NODES,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_TOPOLOGY_CONNECTIONS,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_TOPOLOGY_NAME,		\
+				(Handler),				\
+				sizeof(KSP_NODE),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler)		\
+DEFINE_KSPROPERTY_TABLE(TopologySet) {					\
+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),		\
+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),			\
+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),		\
+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)			\
+}
+
+#define STATIC_KSCATEGORY_BRIDGE					\
+	0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE);
+#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
+
+#define STATIC_KSCATEGORY_CAPTURE					\
+	0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE);
+#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
+
+#define STATIC_KSCATEGORY_RENDER					\
+	0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER);
+#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
+
+#define STATIC_KSCATEGORY_MIXER						\
+	0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER);
+#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
+
+#define STATIC_KSCATEGORY_SPLITTER					\
+	0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER);
+#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
+
+#define STATIC_KSCATEGORY_DATACOMPRESSOR				\
+	0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR);
+#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
+
+#define STATIC_KSCATEGORY_DATADECOMPRESSOR				\
+	0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR);
+#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
+
+#define STATIC_KSCATEGORY_DATATRANSFORM					\
+	0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM);
+#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
+
+#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM			\
+	0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM);
+#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
+
+#define STATIC_KSCATEGORY_INTERFACETRANSFORM				\
+	0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM);
+#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
+
+#define STATIC_KSCATEGORY_MEDIUMTRANSFORM				\
+	0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM);
+#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
+
+#define STATIC_KSCATEGORY_FILESYSTEM					\
+	0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM);
+#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
+
+#define STATIC_KSCATEGORY_CLOCK						\
+	0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK);
+#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
+
+#define STATIC_KSCATEGORY_PROXY						\
+	0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY);
+#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
+
+#define STATIC_KSCATEGORY_QUALITY					\
+	0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY);
+#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
+
+typedef struct {
+  ULONG FromNode;
+  ULONG FromNodePin;
+  ULONG ToNode;
+  ULONG ToNodePin;
+} KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION;
+
+typedef struct {
+  ULONG CategoriesCount;
+  const GUID *Categories;
+  ULONG TopologyNodesCount;
+  const GUID *TopologyNodes;
+  ULONG TopologyConnectionsCount;
+  const KSTOPOLOGY_CONNECTION *TopologyConnections;
+  const GUID *TopologyNodesNames;
+  ULONG Reserved;
+} KSTOPOLOGY,*PKSTOPOLOGY;
+
+#define KSFILTER_NODE	((ULONG)-1)
+#define KSALL_NODES	((ULONG)-1)
+
+typedef struct {
+  ULONG CreateFlags;
+  ULONG Node;
+} KSNODE_CREATE,*PKSNODE_CREATE;
+
+#define STATIC_KSTIME_FORMAT_NONE	STATIC_GUID_NULL
+#define KSTIME_FORMAT_NONE		GUID_NULL
+
+#define STATIC_KSTIME_FORMAT_FRAME					\
+	0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
+DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME);
+#define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
+
+#define STATIC_KSTIME_FORMAT_BYTE					\
+	0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
+DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE);
+#define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
+
+#define STATIC_KSTIME_FORMAT_SAMPLE					\
+	0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
+DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE);
+#define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
+
+#define STATIC_KSTIME_FORMAT_FIELD					\
+	0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
+DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD);
+#define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
+
+#define STATIC_KSTIME_FORMAT_MEDIA_TIME					\
+	0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
+DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME);
+#define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
+
+typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE;
+
+#define STATIC_KSINTERFACESETID_Standard				\
+	0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard);
+#define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
+
+typedef enum {
+  KSINTERFACE_STANDARD_STREAMING,
+  KSINTERFACE_STANDARD_LOOPED_STREAMING,
+  KSINTERFACE_STANDARD_CONTROL
+} KSINTERFACE_STANDARD;
+
+#define STATIC_KSINTERFACESETID_FileIo					\
+	0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo);
+#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
+
+typedef enum {
+  KSINTERFACE_FILEIO_STREAMING
+} KSINTERFACE_FILEIO;
+
+#define KSMEDIUM_TYPE_ANYINSTANCE		0
+
+#define STATIC_KSMEDIUMSETID_Standard					\
+	0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard);
+#define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
+
+#define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
+
+#define STATIC_KSPROPSETID_Pin						\
+	0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin);
+#define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
+
+typedef enum {
+  KSPROPERTY_PIN_CINSTANCES,
+  KSPROPERTY_PIN_CTYPES,
+  KSPROPERTY_PIN_DATAFLOW,
+  KSPROPERTY_PIN_DATARANGES,
+  KSPROPERTY_PIN_DATAINTERSECTION,
+  KSPROPERTY_PIN_INTERFACES,
+  KSPROPERTY_PIN_MEDIUMS,
+  KSPROPERTY_PIN_COMMUNICATION,
+  KSPROPERTY_PIN_GLOBALCINSTANCES,
+  KSPROPERTY_PIN_NECESSARYINSTANCES,
+  KSPROPERTY_PIN_PHYSICALCONNECTION,
+  KSPROPERTY_PIN_CATEGORY,
+  KSPROPERTY_PIN_NAME,
+  KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
+  KSPROPERTY_PIN_PROPOSEDATAFORMAT
+} KSPROPERTY_PIN;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG PinId;
+  ULONG Reserved;
+} KSP_PIN,*PKSP_PIN;
+
+#define KSINSTANCE_INDETERMINATE	((ULONG)-1)
+
+typedef struct {
+  ULONG PossibleCount;
+  ULONG CurrentCount;
+} KSPIN_CINSTANCES,*PKSPIN_CINSTANCES;
+
+typedef enum {
+  KSPIN_DATAFLOW_IN = 1,
+  KSPIN_DATAFLOW_OUT
+} KSPIN_DATAFLOW,*PKSPIN_DATAFLOW;
+
+#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION	0
+#define KSDATAFORMAT_TEMPORAL_COMPRESSION	(1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)
+#define KSDATAFORMAT_BIT_ATTRIBUTES		1
+#define KSDATAFORMAT_ATTRIBUTES			(1 << KSDATAFORMAT_BIT_ATTRIBUTES)
+
+#define KSDATARANGE_BIT_ATTRIBUTES		1
+#define KSDATARANGE_ATTRIBUTES			(1 << KSDATARANGE_BIT_ATTRIBUTES)
+#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES	2
+#define KSDATARANGE_REQUIRED_ATTRIBUTES		(1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)
+
+typedef union {
+  __MINGW_EXTENSION struct {
+    ULONG FormatSize;
+    ULONG Flags;
+    ULONG SampleSize;
+    ULONG Reserved;
+    GUID MajorFormat;
+    GUID SubFormat;
+    GUID Specifier;
+  };
+  LONGLONG Alignment;
+} KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE;
+
+#define KSATTRIBUTE_REQUIRED		0x00000001
+
+typedef struct {
+  ULONG Size;
+  ULONG Flags;
+  GUID Attribute;
+} KSATTRIBUTE,*PKSATTRIBUTE;
+
+#if defined(_NTDDK_)
+typedef struct {
+  ULONG Count;
+  PKSATTRIBUTE *Attributes;
+} KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST;
+#endif /* _NTDDK_ */
+
+typedef enum {
+  KSPIN_COMMUNICATION_NONE,
+  KSPIN_COMMUNICATION_SINK,
+  KSPIN_COMMUNICATION_SOURCE,
+  KSPIN_COMMUNICATION_BOTH,
+  KSPIN_COMMUNICATION_BRIDGE
+} KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION;
+
+typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM;
+
+typedef struct {
+  KSPIN_INTERFACE Interface;
+  KSPIN_MEDIUM Medium;
+  ULONG PinId;
+  HANDLE PinToHandle;
+  KSPRIORITY Priority;
+} KSPIN_CONNECT,*PKSPIN_CONNECT;
+
+typedef struct {
+  ULONG Size;
+  ULONG Pin;
+  WCHAR SymbolicLinkName[1];
+} KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION;
+
+#if defined(_NTDDK_)
+typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin,
+					    PKSDATARANGE DataRange,
+					    PVOID Data);
+typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,
+					    PKSP_PIN Pin,
+					    PKSDATARANGE DataRange,
+					    PKSDATARANGE MatchingDataRange,
+					    ULONG DataBufferSize,
+					    PVOID Data,
+					    PULONG DataSize);
+#endif /* _NTDDK_ */
+
+#define DEFINE_KSPIN_INTERFACE_TABLE(tablename)				\
+	const KSPIN_INTERFACE tablename[] =
+
+#define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace)			\
+	{								\
+		STATICGUIDOF(guid),					\
+		(_interFace),						\
+		0							\
+	}
+
+#define DEFINE_KSPIN_MEDIUM_TABLE(tablename)				\
+	const KSPIN_MEDIUM tablename[] =
+
+#define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium)				\
+		DEFINE_KSPIN_INTERFACE_ITEM(guid,medium)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_CINSTANCES,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(KSPIN_CINSTANCES),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_CTYPES,			\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(ULONG),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_DATAFLOW,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(KSPIN_DATAFLOW),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_DATARANGES,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_DATAINTERSECTION,	\
+				(Handler),				\
+				sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_INTERFACES,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_MEDIUMS,			\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_COMMUNICATION,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(KSPIN_COMMUNICATION),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_GLOBALCINSTANCES,	\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(KSPIN_CINSTANCES),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_NECESSARYINSTANCES,	\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(ULONG),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_PHYSICALCONNECTION,	\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_CATEGORY,		\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				sizeof(GUID),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_NAME,			\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_CONSTRAINEDDATARANGES,	\
+				(Handler),				\
+				sizeof(KSP_PIN),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_PIN_PROPOSEDATAFORMAT,	\
+				NULL,					\
+				sizeof(KSP_PIN),			\
+				sizeof(KSDATAFORMAT),			\
+				(Handler), NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \
+DEFINE_KSPROPERTY_TABLE(PinSet) {					\
+	DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),			\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),	\
+	DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)			\
+}
+
+#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \
+DEFINE_KSPROPERTY_TABLE(PinSet) {					\
+	DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),			\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),	\
+	DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),		\
+	DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),			\
+	DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)	\
+}
+
+#define STATIC_KSNAME_Filter						\
+	0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter);
+#define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
+
+#define KSSTRING_Filter		L"{9B365890-165F-11D0-A195-0020AFD156E4}"
+
+#define STATIC_KSNAME_Pin						\
+	0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin);
+#define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
+
+#define KSSTRING_Pin		L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
+
+#define STATIC_KSNAME_Clock						\
+	0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock);
+#define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
+
+#define KSSTRING_Clock		L"{53172480-4791-11D0-A5D6-28DB04C10000}"
+
+#define STATIC_KSNAME_Allocator						\
+	0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator);
+#define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
+
+#define KSSTRING_Allocator	L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
+
+#define KSSTRING_AllocatorEx	L"{091BB63B-603F-11D1-B067-00A0C9062802}"
+
+#define STATIC_KSNAME_TopologyNode					\
+	0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode);
+#define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
+
+#define KSSTRING_TopologyNode	L"{0621061A-EE75-11D0-B915-00A0C9223196}"
+
+#if defined(_NTDDK_)
+typedef struct {
+  ULONG InterfacesCount;
+  const KSPIN_INTERFACE *Interfaces;
+  ULONG MediumsCount;
+  const KSPIN_MEDIUM *Mediums;
+  ULONG DataRangesCount;
+  const PKSDATARANGE *DataRanges;
+  KSPIN_DATAFLOW DataFlow;
+  KSPIN_COMMUNICATION Communication;
+  const GUID *Category;
+  const GUID *Name;
+  __MINGW_EXTENSION union {
+    LONGLONG Reserved;
+    __MINGW_EXTENSION struct {
+      ULONG ConstrainedDataRangesCount;
+      PKSDATARANGE *ConstrainedDataRanges;
+    };
+  };
+} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
+typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
+
+#define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename)			\
+	const KSPIN_DESCRIPTOR tablename[] =
+
+#define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\
+{									\
+		InterfacesCount, Interfaces, MediumsCount, Mediums,	\
+		DataRangesCount, DataRanges, DataFlow, Communication,	\
+		NULL, NULL, 0						\
+}
+
+#define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\
+{									\
+		InterfacesCount, Interfaces, MediumsCount, Mediums,	\
+		DataRangesCount, DataRanges, DataFlow, Communication,	\
+		Category, Name, 0					\
+}
+#endif /* _NTDDK_ */
+
+#define STATIC_KSDATAFORMAT_TYPE_WILDCARD	STATIC_GUID_NULL
+#define KSDATAFORMAT_TYPE_WILDCARD		GUID_NULL
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD	STATIC_GUID_NULL
+#define KSDATAFORMAT_SUBTYPE_WILDCARD		GUID_NULL
+
+#define STATIC_KSDATAFORMAT_TYPE_STREAM					\
+	0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
+DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM);
+#define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_NONE				\
+	0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
+DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE);
+#define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD	STATIC_GUID_NULL
+#define KSDATAFORMAT_SPECIFIER_WILDCARD		GUID_NULL
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME				\
+	0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME);
+#define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE			\
+	0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE);
+#define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_NONE				\
+	0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE);
+#define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
+
+#define STATIC_KSPROPSETID_Quality					\
+	0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality);
+#define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
+
+typedef enum {
+  KSPROPERTY_QUALITY_REPORT,
+  KSPROPERTY_QUALITY_ERROR
+} KSPROPERTY_QUALITY;
+
+#define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_QUALITY_REPORT,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSQUALITY),			\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_QUALITY_ERROR,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSERROR),			\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define STATIC_KSPROPSETID_Connection					\
+	0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection);
+#define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
+
+typedef enum {
+  KSPROPERTY_CONNECTION_STATE,
+  KSPROPERTY_CONNECTION_PRIORITY,
+  KSPROPERTY_CONNECTION_DATAFORMAT,
+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
+  KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
+  KSPROPERTY_CONNECTION_ACQUIREORDERING,
+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
+  KSPROPERTY_CONNECTION_STARTAT
+} KSPROPERTY_CONNECTION;
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_STATE,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSSTATE),			\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_PRIORITY,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSPRIORITY),			\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_DATAFORMAT,	\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_ALLOCATORFRAMING,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSALLOCATOR_FRAMING),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSDATAFORMAT),			\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_ACQUIREORDERING,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(int),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CONNECTION_STARTAT,		\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSRELATIVEEVENT),		\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER	0x00000001
+#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY		0x00000002
+#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY	0x00000004
+#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE		0x00000008
+#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY	0x80000000
+
+#define KSALLOCATOR_OPTIONF_COMPATIBLE			0x00000001
+#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY		0x00000002
+#define KSALLOCATOR_OPTIONF_VALID			0x00000003
+
+#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT		0x00000010
+#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC		0x00000020
+#define KSALLOCATOR_FLAG_CAN_ALLOCATE			0x00000040
+#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO	0x00000080
+#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY		0x00000100
+#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT		0x00000200
+#define KSALLOCATOR_FLAG_CYCLE				0x00000400
+#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS		0x00000800
+#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES		0x00001000
+#define KSALLOCATOR_FLAG_ATTENTION_STEPPING		0x00002000
+
+typedef struct {
+  __MINGW_EXTENSION union {
+    ULONG OptionsFlags;
+    ULONG RequirementsFlags;
+  };
+#if defined(_NTDDK_)
+  POOL_TYPE PoolType;
+#else
+  ULONG PoolType;
+#endif /* _NTDDK_ */
+  ULONG Frames;
+  ULONG FrameSize;
+  ULONG FileAlignment;
+  ULONG Reserved;
+} KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING;
+
+#if defined(_NTDDK_)
+typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context);
+typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer);
+typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext,
+					PKSALLOCATOR_FRAMING AllocatorFraming,
+					PVOID* Context);
+typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context);
+#endif /* _NTDDK_ */
+
+typedef struct {
+  ULONG MinFrameSize;
+  ULONG MaxFrameSize;
+  ULONG Stepping;
+} KS_FRAMING_RANGE,*PKS_FRAMING_RANGE;
+
+typedef struct {
+  KS_FRAMING_RANGE Range;
+  ULONG InPlaceWeight;
+  ULONG NotInPlaceWeight;
+} KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED;
+
+typedef struct {
+  ULONG RatioNumerator;
+  ULONG RatioDenominator;
+  ULONG RatioConstantMargin;
+} KS_COMPRESSION,*PKS_COMPRESSION;
+
+typedef struct {
+  GUID MemoryType;
+  GUID BusType;
+  ULONG MemoryFlags;
+  ULONG BusFlags;
+  ULONG Flags;
+  ULONG Frames;
+  ULONG FileAlignment;
+  ULONG MemoryTypeWeight;
+  KS_FRAMING_RANGE PhysicalRange;
+  KS_FRAMING_RANGE_WEIGHTED FramingRange;
+} KS_FRAMING_ITEM,*PKS_FRAMING_ITEM;
+
+typedef struct {
+  ULONG CountItems;
+  ULONG PinFlags;
+  KS_COMPRESSION OutputCompression;
+  ULONG PinWeight;
+  KS_FRAMING_ITEM FramingItem[1];
+} KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX;
+
+#define KSMEMORY_TYPE_WILDCARD		GUID_NULL
+#define STATIC_KSMEMORY_TYPE_WILDCARD	STATIC_GUID_NULL
+
+#define KSMEMORY_TYPE_DONT_CARE		GUID_NULL
+#define STATIC_KSMEMORY_TYPE_DONT_CARE	STATIC_GUID_NULL
+
+#define KS_TYPE_DONT_CARE		GUID_NULL
+#define STATIC_KS_TYPE_DONT_CARE	STATIC_GUID_NULL
+
+#define STATIC_KSMEMORY_TYPE_SYSTEM					\
+	0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
+DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM);
+#define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
+
+#define STATIC_KSMEMORY_TYPE_USER					\
+	0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
+DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER);
+#define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
+
+#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED				\
+	0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
+DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED);
+#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
+
+#define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED				\
+	0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
+DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED);
+#define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
+
+#define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN				\
+	0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
+DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN);
+#define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
+
+#define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \
+const KSALLOCATOR_FRAMING_EX FramingExName =				\
+{									\
+	1,								\
+	0,								\
+	{								\
+		1,							\
+		1,							\
+		0							\
+	},								\
+	0,								\
+	{								\
+		{							\
+			MemoryType,					\
+			STATIC_KS_TYPE_DONT_CARE,			\
+			0,						\
+			0,						\
+			Flags,						\
+			Frames,						\
+			Alignment,					\
+			0,						\
+			{						\
+				0,					\
+				(ULONG)-1,				\
+				1					\
+			},						\
+			{						\
+				{					\
+					MinFrameSize,			\
+					MaxFrameSize,			\
+					1				\
+				},					\
+				0,					\
+				0					\
+			}						\
+		}							\
+	}								\
+}
+
+#define SetDefaultKsCompression(KsCompressionPointer)			\
+{									\
+	KsCompressionPointer->RatioNumerator = 1;			\
+	KsCompressionPointer->RatioDenominator = 1;			\
+	KsCompressionPointer->RatioConstantMargin = 0;			\
+}
+
+#define SetDontCareKsFramingRange(KsFramingRangePointer)		\
+{									\
+	KsFramingRangePointer->MinFrameSize = 0;			\
+	KsFramingRangePointer->MaxFrameSize = (ULONG) -1;		\
+	KsFramingRangePointer->Stepping = 1;				\
+}
+
+#define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \
+{									\
+	KsFramingRangePointer->MinFrameSize = P_MinFrameSize;		\
+	KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;		\
+	KsFramingRangePointer->Stepping = 1;				\
+}
+
+#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \
+{									\
+	KS_FRAMING_RANGE *KsFramingRange =				\
+				&KsFramingRangeWeightedPointer->Range;	\
+	SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\
+	KsFramingRangeWeightedPointer->InPlaceWeight = 0;		\
+	KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;		\
+}
+
+#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \
+{									\
+	KS_COMPRESSION *KsCompression =					\
+			&FramingExPointer->OutputCompression;		\
+	KS_FRAMING_RANGE *KsFramingRange =				\
+			&FramingExPointer->FramingItem[0].PhysicalRange;\
+	KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted =		\
+			&FramingExPointer->FramingItem[0].FramingRange;	\
+	FramingExPointer->CountItems = 1;				\
+	FramingExPointer->PinFlags = 0;					\
+	SetDefaultKsCompression(KsCompression);				\
+	FramingExPointer->PinWeight = 0;				\
+	FramingExPointer->FramingItem[0].MemoryType = P_MemoryType;	\
+	FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;	\
+	FramingExPointer->FramingItem[0].MemoryFlags = 0;		\
+	FramingExPointer->FramingItem[0].BusFlags = 0;			\
+	FramingExPointer->FramingItem[0].Flags = P_Flags;		\
+	FramingExPointer->FramingItem[0].Frames = P_Frames;		\
+	FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;	\
+	FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;		\
+	SetDontCareKsFramingRange(KsFramingRange);			\
+	SetKsFramingRangeWeighted(KsFramingRangeWeighted,		\
+				  P_MinFrameSize,P_MaxFrameSize);	\
+}
+
+#define STATIC_KSEVENTSETID_StreamAllocator				\
+	0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator);
+#define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
+
+typedef enum {
+  KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
+  KSEVENT_STREAMALLOCATOR_FREEFRAME
+} KSEVENT_STREAMALLOCATOR;
+
+#define STATIC_KSMETHODSETID_StreamAllocator				\
+	0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator);
+#define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
+
+typedef enum {
+  KSMETHOD_STREAMALLOCATOR_ALLOC,
+  KSMETHOD_STREAMALLOCATOR_FREE
+} KSMETHOD_STREAMALLOCATOR;
+
+#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)		\
+	DEFINE_KSMETHOD_ITEM(						\
+				KSMETHOD_STREAMALLOCATOR_ALLOC,		\
+				KSMETHOD_TYPE_WRITE,			\
+				(Handler),				\
+				sizeof(KSMETHOD),			\
+				sizeof(PVOID),				\
+				NULL)
+
+#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)		\
+	DEFINE_KSMETHOD_ITEM(						\
+				KSMETHOD_STREAMALLOCATOR_FREE,		\
+				KSMETHOD_TYPE_READ,			\
+				(Handler),				\
+				sizeof(KSMETHOD),			\
+				sizeof(PVOID),				\
+				NULL)
+
+#define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\
+DEFINE_KSMETHOD_TABLE(AllocatorSet) {					\
+	DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),	\
+	DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)		\
+}
+
+#define STATIC_KSPROPSETID_StreamAllocator				\
+	0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator);
+#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
+
+#if defined(_NTDDK_)
+typedef enum {
+  KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
+  KSPROPERTY_STREAMALLOCATOR_STATUS
+} KSPROPERTY_STREAMALLOCATOR;
+
+#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAMALLOCATOR_STATUS,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSSTREAMALLOCATOR_STATUS),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\
+DEFINE_KSPROPERTY_TABLE(AllocatorSet) {					\
+	DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus),	\
+	DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\
+}
+
+typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject,
+						PVOID *Frame);
+typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame);
+
+typedef struct {
+  PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
+  PFNALLOCATOR_FREEFRAME FreeFrame;
+} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
+#endif /* _NTDDK_ */
+
+typedef struct {
+  KSALLOCATOR_FRAMING Framing;
+  ULONG AllocatedFrames;
+  ULONG Reserved;
+} KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS;
+
+typedef struct {
+  KSALLOCATOR_FRAMING_EX Framing;
+  ULONG AllocatedFrames;
+  ULONG Reserved;
+} KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX;
+
+#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT		0x00000001
+#define KSSTREAM_HEADER_OPTIONSF_PREROLL		0x00000002
+#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY	0x00000004
+#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED		0x00000008
+#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID		0x00000010
+#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY	0x00000040
+#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE		0x00000080
+#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID		0x00000100
+#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM		0x00000200
+#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA		0x80000000
+
+typedef struct {
+  LONGLONG Time;
+  ULONG Numerator;
+  ULONG Denominator;
+} KSTIME,*PKSTIME;
+
+typedef struct {
+  ULONG Size;
+  ULONG TypeSpecificFlags;
+  KSTIME PresentationTime;
+  LONGLONG Duration;
+  ULONG FrameExtent;
+  ULONG DataUsed;
+  PVOID Data;
+  ULONG OptionsFlags;
+#ifdef _WIN64
+  ULONG Reserved;
+#endif
+} KSSTREAM_HEADER,*PKSSTREAM_HEADER;
+
+#define STATIC_KSPROPSETID_StreamInterface				\
+	0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a
+DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface);
+#define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
+
+typedef enum {
+  KSPROPERTY_STREAMINTERFACE_HEADERSIZE
+} KSPROPERTY_STREAMINTERFACE;
+
+#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAMINTERFACE_HEADERSIZE,	\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(ULONG),				\
+				NULL,NULL,0,NULL,NULL,0)
+
+#define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \
+DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {				\
+	DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\
+}
+
+#define STATIC_KSPROPSETID_Stream					\
+	0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream);
+#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
+
+typedef enum {
+  KSPROPERTY_STREAM_ALLOCATOR,
+  KSPROPERTY_STREAM_QUALITY,
+  KSPROPERTY_STREAM_DEGRADATION,
+  KSPROPERTY_STREAM_MASTERCLOCK,
+  KSPROPERTY_STREAM_TIMEFORMAT,
+  KSPROPERTY_STREAM_PRESENTATIONTIME,
+  KSPROPERTY_STREAM_PRESENTATIONEXTENT,
+  KSPROPERTY_STREAM_FRAMETIME,
+  KSPROPERTY_STREAM_RATECAPABILITY,
+  KSPROPERTY_STREAM_RATE,
+  KSPROPERTY_STREAM_PIPE_ID
+} KSPROPERTY_STREAM;
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_ALLOCATOR,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(HANDLE),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_QUALITY,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSQUALITY_MANAGER),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_DEGRADATION,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_MASTERCLOCK,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(HANDLE),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_TIMEFORMAT,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(GUID),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_PRESENTATIONTIME,	\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSTIME),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_PRESENTATIONEXTENT,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(LONGLONG),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_FRAMETIME,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSFRAMETIME),			\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_RATECAPABILITY,	\
+				(Handler),				\
+				sizeof(KSRATE_CAPABILITY),		\
+				sizeof(KSRATE),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_RATE,			\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSRATE),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_STREAM_PIPE_ID,		\
+				(GetHandler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(HANDLE),				\
+				(SetHandler),				\
+				NULL, 0, NULL, NULL, 0)
+
+typedef struct {
+  HANDLE QualityManager;
+  PVOID Context;
+} KSQUALITY_MANAGER,*PKSQUALITY_MANAGER;
+
+typedef struct {
+  LONGLONG Duration;
+  ULONG FrameFlags;
+  ULONG Reserved;
+} KSFRAMETIME,*PKSFRAMETIME;
+
+#define KSFRAMETIME_VARIABLESIZE	0x00000001
+
+typedef struct {
+  LONGLONG PresentationStart;
+  LONGLONG Duration;
+  KSPIN_INTERFACE Interface;
+  LONG Rate;
+  ULONG Flags;
+} KSRATE,*PKSRATE;
+
+#define KSRATE_NOPRESENTATIONSTART	0x00000001
+#define KSRATE_NOPRESENTATIONDURATION	0x00000002
+
+typedef struct {
+  KSPROPERTY Property;
+  KSRATE Rate;
+} KSRATE_CAPABILITY,*PKSRATE_CAPABILITY;
+
+#define STATIC_KSPROPSETID_Clock					\
+	0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock);
+#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
+
+#define NANOSECONDS 10000000
+#define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime)		\
+	((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) +	\
+	 ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\
+	 ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency)))
+
+typedef struct {
+  ULONG CreateFlags;
+} KSCLOCK_CREATE,*PKSCLOCK_CREATE;
+
+typedef struct {
+  LONGLONG Time;
+  LONGLONG SystemTime;
+} KSCORRELATED_TIME,*PKSCORRELATED_TIME;
+
+typedef struct {
+  LONGLONG Granularity;
+  LONGLONG Error;
+} KSRESOLUTION,*PKSRESOLUTION;
+
+typedef enum {
+  KSPROPERTY_CLOCK_TIME,
+  KSPROPERTY_CLOCK_PHYSICALTIME,
+  KSPROPERTY_CLOCK_CORRELATEDTIME,
+  KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
+  KSPROPERTY_CLOCK_RESOLUTION,
+  KSPROPERTY_CLOCK_STATE,
+#if defined(_NTDDK_)
+  KSPROPERTY_CLOCK_FUNCTIONTABLE
+#endif /* _NTDDK_ */
+} KSPROPERTY_CLOCK;
+
+#if defined(_NTDDK_)
+typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject);
+typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject,
+							PLONGLONG SystemTime);
+
+typedef struct {
+   PFNKSCLOCK_GETTIME GetTime;
+   PFNKSCLOCK_GETTIME GetPhysicalTime;
+   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
+   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
+} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
+
+typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer,
+				 LARGE_INTEGER DueTime, PKDPC Dpc);
+typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer);
+typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context,
+						 PLONGLONG SystemTime);
+
+typedef PVOID			PKSDEFAULTCLOCK;
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_TIME,			\
+				(Handler),				\
+				sizeof(KSPROPERTY), sizeof(LONGLONG),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_PHYSICALTIME,		\
+				(Handler),				\
+				sizeof(KSPROPERTY), sizeof(LONGLONG),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_CORRELATEDTIME,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSCORRELATED_TIME),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSCORRELATED_TIME),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_RESOLUTION,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)			\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_STATE,			\
+				(Handler),				\
+				sizeof(KSPROPERTY), sizeof(KSSTATE),	\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_CLOCK_FUNCTIONTABLE,		\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSCLOCK_FUNCTIONTABLE),		\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\
+DEFINE_KSPROPERTY_TABLE(ClockSet) {					\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),			\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),	\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),	\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),			\
+	DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable),	\
+}
+#endif /* _NTDDK_ */
+
+#define STATIC_KSEVENTSETID_Clock					\
+	0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock);
+#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
+
+typedef enum {
+  KSEVENT_CLOCK_INTERVAL_MARK,
+  KSEVENT_CLOCK_POSITION_MARK
+} KSEVENT_CLOCK_POSITION;
+
+#define STATIC_KSEVENTSETID_Connection					\
+	0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00
+DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection);
+#define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
+
+typedef enum {
+  KSEVENT_CONNECTION_POSITIONUPDATE,
+  KSEVENT_CONNECTION_DATADISCONTINUITY,
+  KSEVENT_CONNECTION_TIMEDISCONTINUITY,
+  KSEVENT_CONNECTION_PRIORITY,
+  KSEVENT_CONNECTION_ENDOFSTREAM
+} KSEVENT_CONNECTION;
+
+typedef struct {
+  PVOID Context;
+  ULONG Proportion;
+  LONGLONG DeltaTime;
+} KSQUALITY,*PKSQUALITY;
+
+typedef struct {
+  PVOID Context;
+  ULONG Status;
+} KSERROR,*PKSERROR;
+
+typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE;
+
+#define STATIC_KSDEGRADESETID_Standard					\
+	0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard);
+#define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
+
+typedef enum {
+  KSDEGRADE_STANDARD_SAMPLE,
+  KSDEGRADE_STANDARD_QUALITY,
+  KSDEGRADE_STANDARD_COMPUTATION,
+  KSDEGRADE_STANDARD_SKIP
+} KSDEGRADE_STANDARD;
+
+#if defined(_NTDDK_)
+
+#define KSPROBE_STREAMREAD		0x00000000
+#define KSPROBE_STREAMWRITE		0x00000001
+#define KSPROBE_ALLOCATEMDL		0x00000010
+#define KSPROBE_PROBEANDLOCK		0x00000020
+#define KSPROBE_SYSTEMADDRESS		0x00000040
+#define KSPROBE_MODIFY			0x00000200
+#define KSPROBE_STREAMWRITEMODIFY	(KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
+#define KSPROBE_ALLOWFORMATCHANGE	0x00000080
+#define KSSTREAM_READ			KSPROBE_STREAMREAD
+#define KSSTREAM_WRITE			KSPROBE_STREAMWRITE
+#define KSSTREAM_PAGED_DATA		0x00000000
+#define KSSTREAM_NONPAGED_DATA		0x00000100
+#define KSSTREAM_SYNCHRONOUS		0x00001000
+#define KSSTREAM_FAILUREEXCEPTION	0x00002000
+
+typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp);
+typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data);
+typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject,
+				    PKSIDENTIFIER Request,
+				    ULONG RequestLength, PVOID Data,
+				    ULONG DataLength,
+				    PIO_STATUS_BLOCK IoStatus);
+typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize,
+				    BOOLEAN InputOperation);
+
+typedef struct {
+  KSPROPERTY_MEMBERSHEADER MembersHeader;
+  const VOID *Members;
+} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
+
+typedef struct {
+  KSIDENTIFIER PropTypeSet;
+  ULONG MembersListCount;
+  const KSPROPERTY_MEMBERSLIST *MembersList;
+} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
+
+#define DEFINE_KSPROPERTY_TABLE(tablename)				\
+	const KSPROPERTY_ITEM tablename[] =
+
+#define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\
+{									\
+			PropertyId, (PFNKSHANDLER)GetHandler,		\
+			MinProperty, MinData,				\
+			(PFNKSHANDLER)SetHandler,			\
+			(PKSPROPERTY_VALUES)Values, RelationsCount,	\
+			(PKSPROPERTY)Relations,				\
+			(PFNKSHANDLER)SupportHandler,			\
+			(ULONG)SerializedSize				\
+}
+
+typedef struct {
+  ULONG PropertyId;
+  __MINGW_EXTENSION union {
+    PFNKSHANDLER GetPropertyHandler;
+    BOOLEAN GetSupported;
+  };
+  ULONG MinProperty;
+  ULONG MinData;
+  __MINGW_EXTENSION union {
+    PFNKSHANDLER SetPropertyHandler;
+    BOOLEAN SetSupported;
+  };
+  const KSPROPERTY_VALUES *Values;
+  ULONG RelationsCount;
+  const KSPROPERTY *Relations;
+  PFNKSHANDLER SupportHandler;
+  ULONG SerializedSize;
+} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
+
+#define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler)	\
+{									\
+			PropertyId, (PFNKSFASTHANDLER)GetHandler,	\
+			(PFNKSFASTHANDLER)SetHandler, 0			\
+}
+
+typedef struct {
+  ULONG PropertyId;
+  __MINGW_EXTENSION union {
+    PFNKSFASTHANDLER GetPropertyHandler;
+    BOOLEAN GetSupported;
+  };
+  __MINGW_EXTENSION union {
+    PFNKSFASTHANDLER SetPropertyHandler;
+    BOOLEAN SetSupported;
+  };
+  ULONG Reserved;
+} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
+
+#define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\
+{									\
+			Set,						\
+			PropertiesCount, PropertyItem,			\
+			FastIoCount, FastIoTable			\
+}
+
+#define DEFINE_KSPROPERTY_SET_TABLE(tablename)				\
+	const KSPROPERTY_SET tablename[] =
+
+typedef struct {
+  const GUID *Set;
+  ULONG PropertiesCount;
+  const KSPROPERTY_ITEM *PropertyItem;
+  ULONG FastIoCount;
+  const KSFASTPROPERTY_ITEM *FastIoTable;
+} KSPROPERTY_SET, *PKSPROPERTY_SET;
+
+#define DEFINE_KSMETHOD_TABLE(tablename)				\
+	const KSMETHOD_ITEM tablename[] =
+
+#define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\
+{									\
+			MethodId, (PFNKSHANDLER)MethodHandler,		\
+			MinMethod, MinData,				\
+			SupportHandler, Flags				\
+}
+
+typedef struct {
+  ULONG MethodId;
+  __MINGW_EXTENSION union {
+    PFNKSHANDLER MethodHandler;
+    BOOLEAN MethodSupported;
+  };
+  ULONG MinMethod;
+  ULONG MinData;
+  PFNKSHANDLER SupportHandler;
+  ULONG Flags;
+} KSMETHOD_ITEM, *PKSMETHOD_ITEM;
+
+#define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler)		\
+{									\
+			MethodId, (PFNKSFASTHANDLER)MethodHandler	\
+}
+
+typedef struct {
+  ULONG MethodId;
+  __MINGW_EXTENSION union {
+    PFNKSFASTHANDLER MethodHandler;
+    BOOLEAN MethodSupported;
+  };
+} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
+
+#define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\
+{									\
+			Set,						\
+			MethodsCount, MethodItem,			\
+			FastIoCount, FastIoTable			\
+}
+
+#define DEFINE_KSMETHOD_SET_TABLE(tablename)				\
+	const KSMETHOD_SET tablename[] =
+
+typedef struct {
+  const GUID *Set;
+  ULONG MethodsCount;
+  const KSMETHOD_ITEM *MethodItem;
+  ULONG FastIoCount;
+  const KSFASTMETHOD_ITEM *FastIoTable;
+} KSMETHOD_SET, *PKSMETHOD_SET;
+
+typedef struct _KSEVENT_ENTRY	KSEVENT_ENTRY, *PKSEVENT_ENTRY;
+typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData,
+				  struct _KSEVENT_ENTRY* EventEntry);
+typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject,
+				 struct _KSEVENT_ENTRY* EventEntry);
+
+#define DEFINE_KSEVENT_TABLE(tablename)					\
+	const KSEVENT_ITEM tablename[] =
+
+#define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\
+{									\
+			EventId, DataInput, ExtraEntryData,		\
+			AddHandler, RemoveHandler, SupportHandler	\
+}
+
+typedef struct {
+  ULONG EventId;
+  ULONG DataInput;
+  ULONG ExtraEntryData;
+  PFNKSADDEVENT AddHandler;
+  PFNKSREMOVEEVENT RemoveHandler;
+  PFNKSHANDLER SupportHandler;
+} KSEVENT_ITEM, *PKSEVENT_ITEM;
+
+#define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem)			\
+{									\
+			Set, EventsCount, EventItem			\
+}
+
+#define DEFINE_KSEVENT_SET_TABLE(tablename)				\
+	const KSEVENT_SET tablename[] =
+
+typedef struct {
+  const GUID *Set;
+  ULONG EventsCount;
+  const KSEVENT_ITEM *EventItem;
+} KSEVENT_SET, *PKSEVENT_SET;
+
+typedef struct {
+  KDPC Dpc;
+  ULONG ReferenceCount;
+  KSPIN_LOCK AccessLock;
+} KSDPC_ITEM, *PKSDPC_ITEM;
+
+typedef struct {
+  KSDPC_ITEM DpcItem;
+  LIST_ENTRY BufferList;
+} KSBUFFER_ITEM, *PKSBUFFER_ITEM;
+
+
+#define KSEVENT_ENTRY_DELETED		1
+#define KSEVENT_ENTRY_ONESHOT		2
+#define KSEVENT_ENTRY_BUFFERED		4
+
+struct _KSEVENT_ENTRY {
+  LIST_ENTRY ListEntry;
+  PVOID Object;
+  __MINGW_EXTENSION union {
+    PKSDPC_ITEM DpcItem;
+    PKSBUFFER_ITEM BufferItem;
+  };
+  PKSEVENTDATA EventData;
+  ULONG NotificationType;
+  const KSEVENT_SET *EventSet;
+  const KSEVENT_ITEM *EventItem;
+  PFILE_OBJECT FileObject;
+  ULONG SemaphoreAdjustment;
+  ULONG Reserved;
+  ULONG Flags;
+};
+
+typedef enum {
+  KSEVENTS_NONE,
+  KSEVENTS_SPINLOCK,
+  KSEVENTS_MUTEX,
+  KSEVENTS_FMUTEX,
+  KSEVENTS_FMUTEXUNSAFE,
+  KSEVENTS_INTERRUPT,
+  KSEVENTS_ERESOURCE
+} KSEVENTS_LOCKTYPE;
+
+#define KSDISPATCH_FASTIO			0x80000000
+
+typedef struct {
+  PDRIVER_DISPATCH Create;
+  PVOID Context;
+  UNICODE_STRING ObjectClass;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  ULONG Flags;
+} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
+
+typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);
+
+#define KSCREATE_ITEM_SECURITYCHANGED		0x00000001
+#define KSCREATE_ITEM_WILDCARD			0x00000002
+#define KSCREATE_ITEM_NOPARAMETERS		0x00000004
+#define KSCREATE_ITEM_FREEONSTOP		0x00000008
+
+#define DEFINE_KSCREATE_DISPATCH_TABLE( tablename )			\
+	KSOBJECT_CREATE_ITEM tablename[] =
+
+#define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context)		\
+{									\
+			(DispatchCreate), (PVOID)(Context),		\
+			{						\
+				sizeof(TypeName) - sizeof(UNICODE_NULL),\
+				sizeof(TypeName),			\
+				(PWCHAR)(TypeName)			\
+			},						\
+			NULL, 0						\
+}
+
+#define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags)	\
+{									\
+			(DispatchCreate),				\
+			(PVOID)(Context),				\
+			{						\
+				sizeof(TypeName) - sizeof(UNICODE_NULL),\
+				sizeof(TypeName),			\
+				(PWCHAR)(TypeName)			\
+			},						\
+			NULL, (Flags)					\
+}
+
+#define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context)		\
+{									\
+			DispatchCreate, Context,			\
+			{						\
+				0, 0, NULL,				\
+			},						\
+			NULL, 0						\
+}
+
+typedef struct {
+  ULONG CreateItemsCount;
+  PKSOBJECT_CREATE_ITEM CreateItemsList;
+} KSOBJECT_CREATE, *PKSOBJECT_CREATE;
+
+typedef struct {
+  PDRIVER_DISPATCH DeviceIoControl;
+  PDRIVER_DISPATCH Read;
+  PDRIVER_DISPATCH Write;
+  PDRIVER_DISPATCH Flush;
+  PDRIVER_DISPATCH Close;
+  PDRIVER_DISPATCH QuerySecurity;
+  PDRIVER_DISPATCH SetSecurity;
+  PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
+  PFAST_IO_READ FastRead;
+  PFAST_IO_WRITE FastWrite;
+} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
+
+#define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\
+	const KSDISPATCH_TABLE tablename =				\
+	{								\
+		DeviceIoControl,					\
+		Read,							\
+		Write,							\
+		Flush,							\
+		Close,							\
+		QuerySecurity,						\
+		SetSecurity,						\
+		FastDeviceIoControl,					\
+		FastRead,						\
+		FastWrite,						\
+	}
+
+#define KSCREATE_ITEM_IRP_STORAGE(Irp)					\
+	(*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSEVENT_SET_IRP_STORAGE(Irp)					\
+	(*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSEVENT_ITEM_IRP_STORAGE(Irp)					\
+	(*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSEVENT_ENTRY_IRP_STORAGE(Irp)					\
+	(*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSMETHOD_SET_IRP_STORAGE(Irp)					\
+	(*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSMETHOD_ITEM_IRP_STORAGE(Irp)					\
+	(*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSMETHOD_TYPE_IRP_STORAGE(Irp)					\
+	(*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2]))
+#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)				\
+	(*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1])
+#define KSPROPERTY_SET_IRP_STORAGE(Irp)					\
+	(*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSPROPERTY_ITEM_IRP_STORAGE(Irp)				\
+	(*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp)				\
+	(*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2])
+
+typedef PVOID		KSDEVICE_HEADER, KSOBJECT_HEADER;
+
+typedef enum {
+  KsInvokeOnSuccess = 1,
+  KsInvokeOnError = 2,
+  KsInvokeOnCancel = 4
+} KSCOMPLETION_INVOCATION;
+
+typedef enum {
+  KsListEntryTail,
+  KsListEntryHead
+} KSLIST_ENTRY_LOCATION;
+
+typedef enum {
+  KsAcquireOnly,
+  KsAcquireAndRemove,
+  KsAcquireOnlySingleItem,
+  KsAcquireAndRemoveOnlySingleItem
+} KSIRP_REMOVAL_OPERATION;
+
+typedef enum {
+  KsStackCopyToNewLocation,
+  KsStackReuseCurrentLocation,
+  KsStackUseNewLocation
+} KSSTACK_USE;
+
+typedef enum {
+  KSTARGET_STATE_DISABLED,
+  KSTARGET_STATE_ENABLED
+} KSTARGET_STATE;
+
+typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context);
+typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context);
+typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);
+typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String);
+
+#define BUS_INTERFACE_REFERENCE_VERSION			0x100
+
+typedef struct {
+  INTERFACE Interface;
+
+  PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
+  PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
+  PFNQUERYREFERENCESTRING QueryReferenceString;
+} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
+
+#define STATIC_REFERENCE_BUS_INTERFACE		STATIC_KSMEDIUMSETID_Standard
+#define REFERENCE_BUS_INTERFACE			KSMEDIUMSETID_Standard
+
+#endif /* _NTDDK_ */
+
+#ifndef PACK_PRAGMAS_NOT_SUPPORTED
+#include <pshpack1.h>
+#endif
+
+typedef struct {
+  GUID PropertySet;
+  ULONG Count;
+} KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR;
+
+#ifndef PACK_PRAGMAS_NOT_SUPPORTED
+#include <poppack.h>
+#endif
+
+typedef struct {
+  KSIDENTIFIER PropTypeSet;
+  ULONG Id;
+  ULONG PropertyLength;
+} KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL;
+
+
+#if defined(_NTDDK_)
+
+#define IOCTL_KS_HANDSHAKE						\
+	CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+typedef struct {
+  GUID ProtocolId;
+  PVOID Argument1;
+  PVOID Argument2;
+} KSHANDSHAKE, *PKSHANDSHAKE;
+
+typedef struct _KSGATE		KSGATE, *PKSGATE;
+
+struct _KSGATE {
+  LONG Count;
+  PKSGATE NextGate;
+};
+
+typedef PVOID KSOBJECT_BAG;
+
+
+typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,
+					      PKSEVENT_ENTRY EventEntry);
+
+typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);
+
+typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp,
+				PCM_RESOURCE_LIST TranslatedResourceList,
+				PCM_RESOURCE_LIST UntranslatedResourceList);
+
+typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);
+
+typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp);
+
+typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp);
+
+typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp,
+					 PDEVICE_CAPABILITIES Capabilities);
+
+typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp,
+					  DEVICE_POWER_STATE DeviceTo,
+					  DEVICE_POWER_STATE DeviceFrom,
+					  SYSTEM_POWER_STATE SystemTo,
+					  SYSTEM_POWER_STATE SystemFrom,
+					  POWER_ACTION Action);
+
+typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp,
+				    DEVICE_POWER_STATE To,
+				    DEVICE_POWER_STATE From);
+
+typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);
+
+typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,
+					DEVICE_POWER_STATE State);
+
+typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp);
+
+typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,
+					PKSPROCESSPIN_INDEXENTRY Index);
+
+typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);
+
+typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State);
+
+typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp);
+
+typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState,
+					   KSSTATE FromState);
+
+typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat,
+					  PKSMULTIPLE_ITEM OldAttributeList,
+					  const KSDATARANGE *DataRange,
+					  const KSATTRIBUTE_LIST *AttributeRange);
+
+typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In,
+				      PKSHANDSHAKE Out);
+
+typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);
+
+typedef void (*PFNKSPINVOID)(PKSPIN Pin);
+
+typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State);
+
+typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer,
+				    LARGE_INTEGER DueTime,PKDPC Dpc);
+
+typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer);
+
+typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin,
+						    PLONGLONG SystemTime);
+
+typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution);
+
+typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,
+					PKSALLOCATOR_FRAMING AllocatorFraming,
+					PVOID *Context);
+
+typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);
+
+
+typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE;
+
+struct KSAUTOMATION_TABLE_ {
+  ULONG PropertySetsCount;
+  ULONG PropertyItemSize;
+  const KSPROPERTY_SET *PropertySets;
+  ULONG MethodSetsCount;
+  ULONG MethodItemSize;
+  const KSMETHOD_SET *MethodSets;
+  ULONG EventSetsCount;
+  ULONG EventItemSize;
+  const KSEVENT_SET *EventSets;
+#ifndef _WIN64
+  PVOID Alignment;
+#endif
+};
+
+#define DEFINE_KSAUTOMATION_TABLE(table)				\
+		const KSAUTOMATION_TABLE table =
+
+#define DEFINE_KSAUTOMATION_PROPERTIES(table)				\
+		SIZEOF_ARRAY(table),					\
+		sizeof(KSPROPERTY_ITEM),				\
+		table
+
+#define DEFINE_KSAUTOMATION_METHODS(table)				\
+		SIZEOF_ARRAY(table),					\
+		sizeof(KSMETHOD_ITEM),					\
+		table
+
+#define DEFINE_KSAUTOMATION_EVENTS(table)				\
+		SIZEOF_ARRAY(table),					\
+		sizeof(KSEVENT_ITEM),					\
+		table
+
+#define DEFINE_KSAUTOMATION_PROPERTIES_NULL				\
+		0,							\
+		sizeof(KSPROPERTY_ITEM),				\
+		NULL
+
+#define DEFINE_KSAUTOMATION_METHODS_NULL				\
+		0,							\
+		sizeof(KSMETHOD_ITEM),					\
+		NULL
+
+#define DEFINE_KSAUTOMATION_EVENTS_NULL					\
+		0,							\
+		sizeof(KSEVENT_ITEM),					\
+		NULL
+
+#define MIN_DEV_VER_FOR_QI		(0x100)
+
+struct _KSDEVICE_DISPATCH {
+  PFNKSDEVICECREATE Add;
+  PFNKSDEVICEPNPSTART Start;
+  PFNKSDEVICE PostStart;
+  PFNKSDEVICEIRP QueryStop;
+  PFNKSDEVICEIRPVOID CancelStop;
+  PFNKSDEVICEIRPVOID Stop;
+  PFNKSDEVICEIRP QueryRemove;
+  PFNKSDEVICEIRPVOID CancelRemove;
+  PFNKSDEVICEIRPVOID Remove;
+  PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
+  PFNKSDEVICEIRPVOID SurpriseRemoval;
+  PFNKSDEVICEQUERYPOWER QueryPower;
+  PFNKSDEVICESETPOWER SetPower;
+  PFNKSDEVICEIRP QueryInterface;
+};
+
+struct _KSFILTER_DISPATCH {
+  PFNKSFILTERIRP Create;
+  PFNKSFILTERIRP Close;
+  PFNKSFILTERPROCESS Process;
+  PFNKSFILTERVOID Reset;
+};
+
+struct _KSPIN_DISPATCH {
+  PFNKSPINIRP Create;
+  PFNKSPINIRP Close;
+  PFNKSPIN Process;
+  PFNKSPINVOID Reset;
+  PFNKSPINSETDATAFORMAT SetDataFormat;
+  PFNKSPINSETDEVICESTATE SetDeviceState;
+  PFNKSPIN Connect;
+  PFNKSPINVOID Disconnect;
+  const KSCLOCK_DISPATCH *Clock;
+  const KSALLOCATOR_DISPATCH *Allocator;
+};
+
+struct _KSCLOCK_DISPATCH {
+  PFNKSPINSETTIMER SetTimer;
+  PFNKSPINCANCELTIMER CancelTimer;
+  PFNKSPINCORRELATEDTIME CorrelatedTime;
+  PFNKSPINRESOLUTION Resolution;
+};
+
+struct _KSALLOCATOR_DISPATCH {
+  PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
+  PFNKSDELETEALLOCATOR DeleteAllocator;
+  PFNKSDEFAULTALLOCATE Allocate;
+  PFNKSDEFAULTFREE Free;
+};
+
+#define KSDEVICE_DESCRIPTOR_VERSION	(0x100)
+
+struct _KSDEVICE_DESCRIPTOR {
+  const KSDEVICE_DISPATCH *Dispatch;
+  ULONG FilterDescriptorsCount;
+  const KSFILTER_DESCRIPTOR*const *FilterDescriptors;
+  ULONG Version;
+};
+
+struct _KSFILTER_DESCRIPTOR {
+  const KSFILTER_DISPATCH *Dispatch;
+  const KSAUTOMATION_TABLE *AutomationTable;
+  ULONG Version;
+#define KSFILTER_DESCRIPTOR_VERSION	((ULONG)-1)
+  ULONG Flags;
+#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING		0x00000001
+#define KSFILTER_FLAG_CRITICAL_PROCESSING		0x00000002
+#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING		0x00000004
+#define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES	0x00000008
+#define KSFILTER_FLAG_DENY_USERMODE_ACCESS		0x80000000
+  const GUID *ReferenceGuid;
+  ULONG PinDescriptorsCount;
+  ULONG PinDescriptorSize;
+  const KSPIN_DESCRIPTOR_EX *PinDescriptors;
+  ULONG CategoriesCount;
+  const GUID *Categories;
+  ULONG NodeDescriptorsCount;
+  ULONG NodeDescriptorSize;
+  const KSNODE_DESCRIPTOR *NodeDescriptors;
+  ULONG ConnectionsCount;
+  const KSTOPOLOGY_CONNECTION *Connections;
+  const KSCOMPONENTID *ComponentId;
+};
+
+#define DEFINE_KSFILTER_DESCRIPTOR(descriptor)				\
+	const KSFILTER_DESCRIPTOR descriptor =
+
+#define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)				\
+	SIZEOF_ARRAY(table),						\
+	sizeof(table[0]),						\
+	table
+
+#define DEFINE_KSFILTER_CATEGORIES(table)				\
+	SIZEOF_ARRAY(table),						\
+	table
+
+#define DEFINE_KSFILTER_CATEGORY(category)				\
+	1,								\
+	&(category)
+
+#define DEFINE_KSFILTER_CATEGORIES_NULL					\
+	0,								\
+	NULL
+
+#define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)				\
+	SIZEOF_ARRAY(table),						\
+	sizeof(table[0]),						\
+	table
+
+#define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL				\
+	0,								\
+	sizeof(KSNODE_DESCRIPTOR),					\
+	NULL
+
+#define DEFINE_KSFILTER_CONNECTIONS(table)				\
+	SIZEOF_ARRAY(table),						\
+	table
+
+#define DEFINE_KSFILTER_DEFAULT_CONNECTIONS				\
+	0,								\
+	NULL
+
+#define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table)				\
+	const KSFILTER_DESCRIPTOR*const table[] =
+
+struct _KSPIN_DESCRIPTOR_EX {
+  const KSPIN_DISPATCH *Dispatch;
+  const KSAUTOMATION_TABLE *AutomationTable;
+  KSPIN_DESCRIPTOR PinDescriptor;
+  ULONG Flags;
+#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING	KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
+#define KSPIN_FLAG_CRITICAL_PROCESSING		KSFILTER_FLAG_CRITICAL_PROCESSING
+#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING	KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
+#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING			0x00000008
+#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING			0x00000010
+#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL		0x00000020
+#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING		0x00000040
+#define KSPIN_FLAG_ENFORCE_FIFO					0x00000080
+#define KSPIN_FLAG_GENERATE_MAPPINGS				0x00000100
+#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE			0x00000200
+#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY			0x00010000
+#define KSPIN_FLAG_SPLITTER					0x00020000
+#define KSPIN_FLAG_USE_STANDARD_TRANSPORT			0x00040000
+#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT		0x00080000
+#define KSPIN_FLAG_FIXED_FORMAT					0x00100000
+#define KSPIN_FLAG_GENERATE_EOS_EVENTS				0x00200000
+#define KSPIN_FLAG_RENDERER			(KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
+#define KSPIN_FLAG_IMPLEMENT_CLOCK				0x00400000
+#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING		0x00800000
+#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE			0x01000000
+#define KSPIN_FLAG_DENY_USERMODE_ACCESS				0x80000000
+  ULONG InstancesPossible;
+  ULONG InstancesNecessary;
+  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
+  PFNKSINTERSECTHANDLEREX IntersectHandler;
+};
+
+#define DEFINE_KSPIN_DEFAULT_INTERFACES					\
+	0,								\
+	NULL
+
+#define DEFINE_KSPIN_DEFAULT_MEDIUMS					\
+	0,								\
+	NULL
+
+struct _KSNODE_DESCRIPTOR {
+  const KSAUTOMATION_TABLE *AutomationTable;
+  const GUID *Type;
+  const GUID *Name;
+#ifndef _WIN64
+  PVOID Alignment;
+#endif
+};
+
+#ifndef _WIN64
+#define DEFINE_NODE_DESCRIPTOR(automation,type,name)			\
+	{ (automation), (type), (name), NULL }
+#else
+#define DEFINE_NODE_DESCRIPTOR(automation,type,name)			\
+	{ (automation), (type), (name) }
+#endif
+
+struct _KSDEVICE {
+  const KSDEVICE_DESCRIPTOR *Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+  PDEVICE_OBJECT FunctionalDeviceObject;
+  PDEVICE_OBJECT PhysicalDeviceObject;
+  PDEVICE_OBJECT NextDeviceObject;
+  BOOLEAN Started;
+  SYSTEM_POWER_STATE SystemPowerState;
+  DEVICE_POWER_STATE DevicePowerState;
+};
+
+struct _KSFILTERFACTORY {
+  const KSFILTER_DESCRIPTOR *FilterDescriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+};
+
+struct _KSFILTER {
+  const KSFILTER_DESCRIPTOR *Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+};
+
+struct _KSPIN {
+  const KSPIN_DESCRIPTOR_EX *Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+  ULONG Id;
+  KSPIN_COMMUNICATION Communication;
+  BOOLEAN ConnectionIsExternal;
+  KSPIN_INTERFACE ConnectionInterface;
+  KSPIN_MEDIUM ConnectionMedium;
+  KSPRIORITY ConnectionPriority;
+  PKSDATAFORMAT ConnectionFormat;
+  PKSMULTIPLE_ITEM AttributeList;
+  ULONG StreamHeaderSize;
+  KSPIN_DATAFLOW DataFlow;
+  KSSTATE DeviceState;
+  KSRESET ResetState;
+  KSSTATE ClientState;
+};
+
+struct _KSMAPPING {
+  PHYSICAL_ADDRESS PhysicalAddress;
+  ULONG ByteCount;
+  ULONG Alignment;
+};
+
+struct _KSSTREAM_POINTER_OFFSET
+{
+#if defined(_NTDDK_)
+  __MINGW_EXTENSION union {
+    PUCHAR Data;
+    PKSMAPPING Mappings;
+  };
+#else
+  PUCHAR Data;
+#endif /* _NTDDK_ */
+#ifndef _WIN64
+  PVOID Alignment;
+#endif
+  ULONG Count;
+  ULONG Remaining;
+};
+
+struct _KSSTREAM_POINTER
+{
+  PVOID Context;
+  PKSPIN Pin;
+  PKSSTREAM_HEADER StreamHeader;
+  PKSSTREAM_POINTER_OFFSET Offset;
+  KSSTREAM_POINTER_OFFSET OffsetIn;
+  KSSTREAM_POINTER_OFFSET OffsetOut;
+};
+
+struct _KSPROCESSPIN {
+  PKSPIN Pin;
+  PKSSTREAM_POINTER StreamPointer;
+  PKSPROCESSPIN InPlaceCounterpart;
+  PKSPROCESSPIN DelegateBranch;
+  PKSPROCESSPIN CopySource;
+  PVOID Data;
+  ULONG BytesAvailable;
+  ULONG BytesUsed;
+  ULONG Flags;
+  BOOLEAN Terminate;
+};
+
+struct _KSPROCESSPIN_INDEXENTRY {
+  PKSPROCESSPIN *Pins;
+  ULONG Count;
+};
+
+typedef enum {
+  KsObjectTypeDevice,
+  KsObjectTypeFilterFactory,
+  KsObjectTypeFilter,
+  KsObjectTypePin
+} KSOBJECTTYPE;
+
+
+typedef void (*PFNKSFREE)(PVOID Data);
+
+typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl,
+				    PVOID Context,NTSTATUS Status);
+
+typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp);
+
+
+#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
+#ifndef _IKsControl_
+#define _IKsControl_
+
+typedef struct IKsControl *PIKSCONTROL;
+
+#ifndef DEFINE_ABSTRACT_UNKNOWN
+#define DEFINE_ABSTRACT_UNKNOWN()					\
+	STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ 			\
+						REFIID InterfaceId,	\
+						PVOID *Interface	\
+					    ) PURE;			\
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;				\
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+#endif
+
+#undef INTERFACE
+#define INTERFACE IKsControl
+DECLARE_INTERFACE_(IKsControl,IUnknown)
+{
+  DEFINE_ABSTRACT_UNKNOWN()
+  STDMETHOD_(NTSTATUS,KsProperty)(THIS_
+					PKSPROPERTY Property,
+					ULONG PropertyLength,
+					PVOID PropertyData,
+					ULONG DataLength,
+					ULONG *BytesReturned
+				 ) PURE;
+  STDMETHOD_(NTSTATUS,KsMethod)	(THIS_
+					PKSMETHOD Method,
+					ULONG MethodLength,
+					PVOID MethodData,
+					ULONG DataLength,
+					ULONG *BytesReturned
+				 ) PURE;
+  STDMETHOD_(NTSTATUS,KsEvent)	(THIS_
+					PKSEVENT Event,
+					ULONG EventLength,
+					PVOID EventData,
+					ULONG DataLength,
+					ULONG *BytesReturned
+				) PURE;
+};
+typedef struct IKsReferenceClock *PIKSREFERENCECLOCK;
+
+#undef INTERFACE
+#define INTERFACE IKsReferenceClock
+DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
+{
+  DEFINE_ABSTRACT_UNKNOWN()
+  STDMETHOD_(LONGLONG,GetTime)		(THIS) PURE;
+  STDMETHOD_(LONGLONG,GetPhysicalTime)	(THIS) PURE;
+  STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
+  						PLONGLONG SystemTime
+  					) PURE;
+  STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
+						PLONGLONG SystemTime
+					) PURE;
+  STDMETHOD_(NTSTATUS,GetResolution)	(THIS_
+						PKSRESOLUTION Resolution
+					) PURE;
+  STDMETHOD_(NTSTATUS,GetState)		(THIS_
+						PKSSTATE State
+					) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IKsDeviceFunctions
+DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown)
+{
+  DEFINE_ABSTRACT_UNKNOWN()
+  STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx)	(THIS_
+						  PADAPTER_OBJECT AdapterObject,
+						  PDEVICE_DESCRIPTION DeviceDescription,
+						  ULONG NumberOfMapRegisters,
+						  ULONG MaxMappingsByteCount,
+						  ULONG MappingTableStride
+						) PURE;
+};
+
+#undef INTERFACE
+#define STATIC_IID_IKsControl						\
+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUID(IID_IKsControl,
+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96);
+#define STATIC_IID_IKsFastClock						\
+	0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e
+DEFINE_GUID(IID_IKsFastClock,
+	0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e);
+#define STATIC_IID_IKsDeviceFunctions					\
+	0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd
+DEFINE_GUID(IID_IKsDeviceFunctions,
+	0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd);
+#endif /* _IKsControl_ */
+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
+
+#endif /* _NTDDK_ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _KSDDK_
+#define KSDDKAPI
+#else
+#define KSDDKAPI DECLSPEC_IMPORT
+#endif
+
+#if defined(_NTDDK_)
+
+KSDDKAPI NTSTATUS NTAPI KsEnableEvent
+			(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
+			 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
+			 PVOID EventsLock);
+
+KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator
+			(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
+			 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
+			 PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize);
+
+KSDDKAPI NTSTATUS NTAPI KsDisableEvent
+			(PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
+			 PVOID EventsLock);
+
+KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry);
+
+KSDDKAPI VOID NTAPI KsFreeEventList
+			(PFILE_OBJECT FileObject, PLIST_ENTRY EventsList,
+			 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
+
+KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry);
+
+KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent
+			(PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);
+
+KSDDKAPI VOID NTAPI KsGenerateEventList
+			(GUID *Set, ULONG EventId, PLIST_ENTRY EventsList,
+			 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
+
+KSDDKAPI NTSTATUS NTAPI KsPropertyHandler
+			(PIRP Irp, ULONG PropertySetsCount,
+			 const KSPROPERTY_SET *PropertySet);
+
+KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator
+			(PIRP Irp, ULONG PropertySetsCount,
+			 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator,
+			 ULONG PropertyItemSize);
+
+KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler
+			(PFILE_OBJECT FileObject, PKSPROPERTY Property,
+			 ULONG PropertyLength, PVOID Data, ULONG DataLength,
+			 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount,
+			 const KSPROPERTY_SET *PropertySet);
+
+KSDDKAPI NTSTATUS NTAPI KsMethodHandler
+			(PIRP Irp, ULONG MethodSetsCount,
+			 const KSMETHOD_SET *MethodSet);
+
+KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator
+			(PIRP Irp, ULONG MethodSetsCount,
+			 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator,
+			 ULONG MethodItemSize);
+
+KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler
+			(PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength,
+			 PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus,
+			 ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx
+			(PIRP Irp, PVOID InitializeContext,
+			 PFNKSDEFAULTALLOCATE DefaultAllocate,
+			 PFNKSDEFAULTFREE DefaultFree,
+			 PFNKSINITIALIZEALLOCATOR InitializeAllocator,
+			 PFNKSDELETEALLOCATOR DeleteAllocator);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateAllocator
+			(HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming,
+			 PHANDLE AllocatorHandle);
+
+KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest
+			(PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming);
+
+KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx
+			(PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize,
+			 const KSALLOCATOR_FRAMING_EX *PinFraming);
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock);
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx
+			(PKSDEFAULTCLOCK *DefaultClock, PVOID Context,
+			 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer,
+			 PFNKSCORRELATEDTIME CorrelatedTime,
+			 const KSRESOLUTION *Resolution, ULONG Flags);
+
+KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock);
+KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateClock
+			(HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate,
+			 PHANDLE ClockHandle);
+
+KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest
+			(PIRP Irp, PKSCLOCK_CREATE *ClockCreate);
+
+KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock);
+KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State);
+KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock);
+KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time);
+
+KSDDKAPI NTSTATUS NTAPI KsCreatePin
+			(HANDLE FilterHandle, PKSPIN_CONNECT Connect,
+			 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
+
+KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest
+			(PIRP Irp, ULONG DescriptorsCount,
+			 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect);
+
+KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler
+			(PIRP Irp, PKSPROPERTY Property, PVOID Data,
+			 ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor);
+
+KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection
+			(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
+			 const KSPIN_DESCRIPTOR *Descriptor,
+			 PFNKSINTERSECTHANDLER IntersectHandler);
+
+KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx
+			(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
+			 const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize,
+			 PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext);
+
+KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery
+			(PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize,
+			 const VOID *DataItems);
+
+#ifndef MAKEINTRESOURCE
+#define MAKEINTRESOURCE(r)		((ULONG_PTR) (USHORT) r)
+#endif
+#ifndef RT_STRING
+#define RT_STRING			MAKEINTRESOURCE(6)
+#define RT_RCDATA			MAKEINTRESOURCE(10)
+#endif
+
+KSDDKAPI NTSTATUS NTAPI KsLoadResource
+			(PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName,
+			 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize);
+
+KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId
+			(HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
+			 PULONG ValueType);
+
+KSDDKAPI NTSTATUS NTAPI KsMapModuleName
+			(PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName,
+			 PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
+			 PULONG ValueType);
+
+KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header);
+KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header);
+KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
+KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
+KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler);
+KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler);
+
+KSDDKAPI NTSTATUS NTAPI KsReadFile
+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
+			 ULONG Key, KPROCESSOR_MODE RequestorMode);
+
+KSDDKAPI NTSTATUS NTAPI KsWriteFile
+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
+			 ULONG Key, KPROCESSOR_MODE RequestorMode);
+
+KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile
+			(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
+			 FILE_INFORMATION_CLASS FileInformationClass);
+
+KSDDKAPI NTSTATUS NTAPI KsSetInformationFile
+			(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
+			 FILE_INFORMATION_CLASS FileInformationClass);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamIo
+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
+			 PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext,
+			 KSCOMPLETION_INVOCATION CompletionInvocationFlags,
+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length,
+			 ULONG Flags, KPROCESSOR_MODE RequestorMode);
+
+KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize);
+KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer);
+KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject);
+
+KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler
+			(PDRIVER_OBJECT DriverObject, ULONG MajorFunction);
+
+KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest
+			(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+
+KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion
+			(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+
+KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+
+KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure
+			(PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer,
+			 ULONG InputBufferLength, PVOID OutputBuffer,
+			 ULONG OutputBufferLength, ULONG IoControlCode,
+			 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
+
+KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure
+			(PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset,
+			 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer,
+			 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
+
+#define KsDispatchFastWriteFailure		KsDispatchFastReadFailure
+
+KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock);
+KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel);
+
+KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue
+			(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock,
+			 KSLIST_ENTRY_LOCATION ListLocation,
+			 KSIRP_REMOVAL_OPERATION RemovalOperation);
+
+KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue
+			(PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock,
+			 PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock,
+			 KSLIST_ENTRY_LOCATION ListLocation,
+			 PFNKSIRPLISTCALLBACK ListCallback, PVOID Context);
+
+KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp);
+
+KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue
+			(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp,
+			 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);
+
+KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue);
+
+KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler
+			(PIRP Irp, PKSPROPERTY Property, PVOID Data,
+			 const KSTOPOLOGY *Topology);
+
+KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive);
+KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header);
+KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+
+KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject
+			(KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject,
+			 PDEVICE_OBJECT BaseObject);
+
+KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header);
+KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header);
+
+KSDDKAPI VOID NTAPI KsRecalculateStackDepth
+			(KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);
+
+KSDDKAPI VOID NTAPI KsSetTargetState
+			(KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);
+
+KSDDKAPI VOID NTAPI KsSetTargetDeviceObject
+			(KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);
+
+KSDDKAPI VOID NTAPI KsSetPowerDispatch
+			(KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch,
+			 PVOID PowerContext);
+
+KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header);
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader
+			(KSDEVICE_HEADER *Header, ULONG ItemsCount,
+			 PKSOBJECT_CREATE_ITEM ItemsList);
+
+KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header);
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader
+			(KSOBJECT_HEADER *Header, ULONG ItemsCount,
+			 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp,
+			 const KSDISPATCH_TABLE *Table);
+
+KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header);
+
+KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader
+			(KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
+			 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader
+			(KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
+			 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem
+			(KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem,
+			 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);
+
+KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem
+			(KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);
+
+KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext
+			(KSDEVICE_HEADER Header, PVOID Context);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity
+			(PSECURITY_DESCRIPTOR ParentSecurity,
+			 PSECURITY_DESCRIPTOR *DefaultSecurity);
+
+KSDDKAPI NTSTATUS NTAPI KsForwardIrp
+			(PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);
+
+KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp
+			(PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject,
+			 KSSTACK_USE StackUse);
+
+KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice
+			(PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode,
+			 ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer,
+			 ULONG OutSize, PULONG BytesReturned);
+
+KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry
+			(PFILE_OBJECT FileObject, HANDLE ParentKey,
+			 PUNICODE_STRING RegistryPath);
+
+KSDDKAPI NTSTATUS NTAPI KsCacheMedium
+			(PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium,
+			 ULONG PinDirection);
+
+KSDDKAPI NTSTATUS NTAPI KsRegisterWorker
+			(WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker);
+
+KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker
+			(WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem,
+			 PKSWORKER *Worker);
+
+KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker);
+KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);
+KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker);
+KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode
+			(HANDLE ParentHandle, PKSNODE_CREATE NodeCreate,
+			 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
+
+KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest
+			(PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate);
+
+KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables
+			(PKSAUTOMATION_TABLE *AutomationTableAB,
+			 PKSAUTOMATION_TABLE AutomationTableA,
+			 PKSAUTOMATION_TABLE AutomationTableB,
+			 KSOBJECT_BAG Bag);
+
+KSDDKAPI NTSTATUS NTAPI KsInitializeDriver
+			(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName,
+			 const KSDEVICE_DESCRIPTOR *Descriptor);
+
+KSDDKAPI NTSTATUS NTAPI KsAddDevice
+			(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateDevice
+			(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject,
+			 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize,
+			 PKSDEVICE *Device);
+
+KSDDKAPI NTSTATUS NTAPI KsInitializeDevice
+			(PDEVICE_OBJECT FunctionalDeviceObject,
+			 PDEVICE_OBJECT PhysicalDeviceObject,
+			 PDEVICE_OBJECT NextDeviceObject,
+			 const KSDEVICE_DESCRIPTOR *Descriptor);
+
+KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject);
+KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject);
+KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device);
+KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device);
+
+KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject
+			(PKSDEVICE Device, PADAPTER_OBJECT AdapterObject,
+			 ULONG MaxMappingsByteCount, ULONG MappingTableStride);
+
+KSDDKAPI ULONG NTAPI KsDeviceGetBusData
+			(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
+			 ULONG Length);
+
+KSDDKAPI ULONG NTAPI KsDeviceSetBusData
+			(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
+			 ULONG Length);
+
+KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory
+			(PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor,
+			 PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor,
+			 ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback,
+			 PFNKSFILTERFACTORYPOWER WakeCallback,
+			 PKSFILTERFACTORY *FilterFactory);
+
+#define KsDeleteFilterFactory(FilterFactory)												\
+	KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)(										\
+						KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\
+					   FilterFactory)
+
+KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData
+			(PKSFILTERFACTORY FilterFactory,
+			 const KSFILTER_DESCRIPTOR *FilterDescriptor);
+
+KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem
+			(PKSFILTERFACTORY FilterFactory, PWSTR RefString,
+			 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);
+
+KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState
+			(PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);
+
+KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink
+			(PKSFILTERFACTORY FilterFactory);
+
+KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);
+
+void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)
+{
+	KsAddEvent(Filter, EventEntry);
+}
+
+void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry)
+{
+	KsAddEvent(Pin, EventEntry);
+}
+
+KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler
+			(PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);
+
+KSDDKAPI void NTAPI KsGenerateEvents
+			(PVOID Object, const GUID *EventSet, ULONG EventId,
+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
+			 PVOID CallBackContext);
+
+void __forceinline KsFilterGenerateEvents
+			(PKSFILTER Filter, const GUID *EventSet, ULONG EventId,
+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
+			 PVOID CallBackContext)
+{
+	KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,
+			 CallBackContext);
+}
+
+void __forceinline KsPinGenerateEvents
+			(PKSPIN Pin, const GUID *EventSet, ULONG EventId,
+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
+			 PVOID CallBackContext)
+{
+	KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,
+			 CallBackContext);
+}
+
+typedef enum {
+  KSSTREAM_POINTER_STATE_UNLOCKED = 0,
+  KSSTREAM_POINTER_STATE_LOCKED
+} KSSTREAM_POINTER_STATE;
+
+KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount
+			(PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);
+
+KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer
+			(PKSPIN Pin, KSSTREAM_POINTER_STATE State);
+
+KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer
+			(PKSPIN Pin, KSSTREAM_POINTER_STATE State);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode
+			(PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer);
+KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);
+
+KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock
+			(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
+			 BOOLEAN Eject);
+
+KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone
+			(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback,
+			 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets
+			(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
+			 BOOLEAN Eject);
+
+KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer);
+KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer);
+
+KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp
+			(PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp,
+			 PBOOLEAN LastFrameInIrp);
+
+KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout
+			(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback,
+			 ULONGLONG Interval);
+
+KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer);
+KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin);
+
+KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone
+			(PKSSTREAM_POINTER StreamPointer);
+
+KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out);
+KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp);
+KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp);
+KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject);
+KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject);
+
+PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject)
+{
+	return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
+}
+
+PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject)
+{
+	return (PKSPIN) KsGetObjectFromFileObject(FileObject);
+}
+
+KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter);
+KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter);
+KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter);
+KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous);
+KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin);
+KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate);
+KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate);
+KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin);
+KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin);
+KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin);
+
+KSDDKAPI void NTAPI KsPinGetCopyRelationships
+			(PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch);
+
+KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);
+KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object);
+
+PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory)
+{
+	return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
+}
+
+PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter)
+{
+	return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
+}
+
+KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin);
+KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object);
+
+PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device)
+{
+	return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
+}
+
+PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory)
+{
+	return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
+}
+
+KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId);
+KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId);
+KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object);
+KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin);
+
+PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory
+			(PKSFILTERFACTORY FilterFactory)
+{
+	return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
+}
+
+PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter)
+{
+	return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
+}
+
+KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object);
+
+PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory)
+{
+	return KsGetDevice((PVOID) FilterFactory);
+}
+
+PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter)
+{
+	return KsGetDevice((PVOID) Filter);
+}
+
+PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin)
+{
+	return KsGetDevice((PVOID) Pin);
+}
+
+KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp);
+KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp);
+KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp);
+KSDDKAPI void NTAPI KsAcquireControl (PVOID Object);
+KSDDKAPI void NTAPI KsReleaseControl (PVOID Object);
+
+void __forceinline KsFilterAcquireControl (PKSFILTER Filter)
+{
+	KsAcquireControl((PVOID) Filter);
+}
+
+void __forceinline KsFilterReleaseControl (PKSFILTER Filter)
+{
+	KsReleaseControl((PVOID) Filter);
+}
+
+void __forceinline KsPinAcquireControl (PKSPIN Pin)
+{
+	KsAcquireControl((PVOID) Pin);
+}
+
+void __forceinline KsPinReleaseControl (PKSPIN Pin)
+{
+	KsReleaseControl((PVOID) Pin);
+}
+
+KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag
+			(KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);
+
+KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag
+			(KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);
+
+#define KsDiscard(Object,Pointer)					\
+	KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)
+
+KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag);
+KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag);
+
+KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems
+			(KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);
+
+KSDDKAPI NTSTATUS NTAPI _KsEdit
+			(KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem,
+			 ULONG NewSize, ULONG OldSize, ULONG Tag);
+
+#define KsEdit(Object, PointerToPointer, Tag)						\
+	_KsEdit((Object)->Bag, (PVOID*)(PointerToPointer),				\
+		sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))
+
+#define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag)			\
+	_KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))
+
+KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins
+			(PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID,
+			 ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList,
+			 GUID *CategoryList);
+
+KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory
+			(PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
+			 PULONG PinID);
+
+KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode
+			(PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor,
+			 PULONG NodeID);
+
+KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections
+			(PKSFILTER Filter, ULONG NewConnectionsCount,
+			 const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
+
+KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface
+			(PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
+
+KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin);
+KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin);
+
+KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface
+			(PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
+
+#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
+KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface
+			(PKSPIN Pin, PIKSREFERENCECLOCK *Interface);
+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
+
+KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);
+
+KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame
+			(PKSPIN Pin, PVOID Data, ULONG Size,
+			 PKSSTREAM_HEADER StreamHeader, PVOID Context);
+
+KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl
+			(PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader,
+			 PVOID Context);
+
+KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback
+			(PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);
+
+KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback
+			(PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);
+
+KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback
+			(PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);
+
+KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks
+			(PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);
+
+KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks
+			(PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);
+
+#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
+KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown
+			(PVOID Object, PUNKNOWN ClientUnknown);
+
+KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object);
+
+PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown
+			(PKSDEVICE Device, PUNKNOWN ClientUnknown)
+{
+	return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);
+}
+
+PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device)
+{
+	return KsGetOuterUnknown((PVOID) Device);
+}
+
+PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown
+			(PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)
+{
+	return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);
+}
+
+PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory)
+{
+	return KsGetOuterUnknown((PVOID)FilterFactory);
+}
+
+PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown
+			(PKSFILTER Filter, PUNKNOWN ClientUnknown)
+{
+	return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);
+}
+
+PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter)
+{
+	return KsGetOuterUnknown((PVOID)Filter);
+}
+
+PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown
+			(PKSPIN Pin, PUNKNOWN ClientUnknown)
+{
+	return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);
+}
+
+PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin)
+{
+	return KsGetOuterUnknown((PVOID)Pin);
+}
+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
+
+#else /* _NTDDK_ */
+
+#ifndef KS_NO_CREATE_FUNCTIONS
+KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle);
+KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle);
+KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle);
+KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle);
+#endif
+
+#endif /* _NTDDK_ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#define DENY_USERMODE_ACCESS(pIrp,CompleteRequest)			\
+	if(pIrp->RequestorMode!=KernelMode) {				\
+		pIrp->IoStatus.Information = 0;				\
+		pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;	\
+		if(CompleteRequest)					\
+			IoCompleteRequest (pIrp,IO_NO_INCREMENT);	\
+		return STATUS_INVALID_DEVICE_REQUEST;			\
+	}
+
+#endif /* _KS_ */
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h b/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h
new file mode 100644
index 000000000..f0774d06c
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h
@@ -0,0 +1,28 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#define INITGUID
+#include <guiddef.h>
+
+#ifndef DECLSPEC_SELECTANY
+#define DECLSPEC_SELECTANY __declspec(selectany)
+#endif
+
+#ifdef DEFINE_GUIDEX
+#undef DEFINE_GUIDEX
+#endif
+
+#ifdef __cplusplus
+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) }
+#else
+#define DEFINE_GUIDEX(name) const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) }
+#endif
+#ifndef STATICGUIDOF
+#define STATICGUIDOF(guid) STATIC_##guid
+#endif
+
+#ifndef DEFINE_WAVEFORMATEX_GUID
+#define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+#endif
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h b/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h
new file mode 100644
index 000000000..2242c1e03
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h
@@ -0,0 +1,4551 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#if !defined(_KS_)
+#warning ks.h must be included before ksmedia.h
+#include "ks.h"
+#endif
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#if !defined(_KSMEDIA_)
+#define _KSMEDIA_
+
+typedef struct {
+  KSPROPERTY Property;
+  KSMULTIPLE_ITEM MultipleItem;
+} KSMULTIPLE_DATA_PROP,*PKSMULTIPLE_DATA_PROP;
+
+#define STATIC_KSMEDIUMSETID_MidiBus					\
+	0x05908040L,0x3246,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000",KSMEDIUMSETID_MidiBus);
+#define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)
+
+#define STATIC_KSMEDIUMSETID_VPBus					\
+	0xA18C15ECL,0xCE43,0x11D0,0xAB,0xE7,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196",KSMEDIUMSETID_VPBus);
+#define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)
+
+#define STATIC_KSINTERFACESETID_Media					\
+	0x3A13EB40L,0x30A7,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000",KSINTERFACESETID_Media);
+#define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)
+
+typedef enum {
+  KSINTERFACE_MEDIA_MUSIC,
+  KSINTERFACE_MEDIA_WAVE_BUFFERED,
+  KSINTERFACE_MEDIA_WAVE_QUEUED
+} KSINTERFACE_MEDIA;
+
+#ifndef INIT_USBAUDIO_MID
+#define INIT_USBAUDIO_MID(guid,id)					\
+{									\
+	(guid)->Data1 = 0x4e1cecd2 + (USHORT)(id);			\
+	(guid)->Data2 = 0x1679;						\
+	(guid)->Data3 = 0x463b;						\
+	(guid)->Data4[0] = 0xa7;					\
+	(guid)->Data4[1] = 0x2f;					\
+	(guid)->Data4[2] = 0xa5;					\
+	(guid)->Data4[3] = 0xbf;					\
+	(guid)->Data4[4] = 0x64;					\
+	(guid)->Data4[5] = 0xc8;					\
+	(guid)->Data4[6] = 0x6e;					\
+	(guid)->Data4[7] = 0xba;					\
+}
+#define EXTRACT_USBAUDIO_MID(guid)					\
+	(USHORT)((guid)->Data1 - 0x4e1cecd2)
+#define DEFINE_USBAUDIO_MID_GUID(id)					\
+	0x4e1cecd2+(USHORT)(id),0x1679,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba
+#define IS_COMPATIBLE_USBAUDIO_MID(guid)				\
+	(((guid)->Data1 >= 0x4e1cecd2) &&				\
+	 ((guid)->Data1 < 0x4e1cecd2 + 0xffff) &&			\
+	 ((guid)->Data2 == 0x1679) &&					\
+	 ((guid)->Data3 == 0x463b) &&					\
+	 ((guid)->Data4[0] == 0xa7) &&					\
+	 ((guid)->Data4[1] == 0x2f) &&					\
+	 ((guid)->Data4[2] == 0xa5) &&					\
+	 ((guid)->Data4[3] == 0xbf) &&					\
+	 ((guid)->Data4[4] == 0x64) &&					\
+	 ((guid)->Data4[5] == 0xc8) &&					\
+	 ((guid)->Data4[6] == 0x6e) &&					\
+	 ((guid)->Data4[7] == 0xba) )
+#endif /* INIT_USBAUDIO_MID */
+
+#ifndef INIT_USBAUDIO_PID
+#define INIT_USBAUDIO_PID(guid,id)					\
+{									\
+	(guid)->Data1 = 0xabcc5a5e + (USHORT)(id);			\
+	(guid)->Data2 = 0xc263;						\
+	(guid)->Data3 = 0x463b;						\
+	(guid)->Data4[0] = 0xa7;					\
+	(guid)->Data4[1] = 0x2f;					\
+	(guid)->Data4[2] = 0xa5;					\
+	(guid)->Data4[3] = 0xbf;					\
+	(guid)->Data4[4] = 0x64;					\
+	(guid)->Data4[5] = 0xc8;					\
+	(guid)->Data4[6] = 0x6e;					\
+	(guid)->Data4[7] = 0xba;					\
+}
+#define EXTRACT_USBAUDIO_PID(guid)					\
+	(USHORT)((guid)->Data1 - 0xabcc5a5e)
+#define DEFINE_USBAUDIO_PID_GUID(id)					\
+	0xabcc5a5e+(USHORT)(id),0xc263,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba
+#define IS_COMPATIBLE_USBAUDIO_PID(guid)				\
+	(((guid)->Data1 >= 0xabcc5a5e) &&				\
+	 ((guid)->Data1 < 0xabcc5a5e + 0xffff) &&			\
+	 ((guid)->Data2 == 0xc263) &&					\
+	 ((guid)->Data3 == 0x463b) &&					\
+	 ((guid)->Data4[0] == 0xa7) &&					\
+	 ((guid)->Data4[1] == 0x2f) &&					\
+	 ((guid)->Data4[2] == 0xa5) &&					\
+	 ((guid)->Data4[3] == 0xbf) &&					\
+	 ((guid)->Data4[4] == 0x64) &&					\
+	 ((guid)->Data4[5] == 0xc8) &&					\
+	 ((guid)->Data4[6] == 0x6e) &&					\
+	 ((guid)->Data4[7] == 0xba) )
+#endif /* INIT_USBAUDIO_PID */
+
+#ifndef INIT_USBAUDIO_PRODUCT_NAME
+#define INIT_USBAUDIO_PRODUCT_NAME(guid,vid,pid,strIndex)		\
+{									\
+	(guid)->Data1 = 0XFC575048 + (USHORT)(vid);			\
+	(guid)->Data2 = 0x2E08 + (USHORT)(pid);				\
+	(guid)->Data3 = 0x463B + (USHORT)(strIndex);			\
+	(guid)->Data4[0] = 0xA7;					\
+	(guid)->Data4[1] = 0x2F;					\
+	(guid)->Data4[2] = 0xA5;					\
+	(guid)->Data4[3] = 0xBF;					\
+	(guid)->Data4[4] = 0x64;					\
+	(guid)->Data4[5] = 0xC8;					\
+	(guid)->Data4[6] = 0x6E;					\
+	(guid)->Data4[7] = 0xBA;					\
+}
+#define DEFINE_USBAUDIO_PRODUCT_NAME(vid,pid,strIndex)			\
+	0xFC575048+(USHORT)(vid),0x2E08+(USHORT)(pid),0x463B+(USHORT)(strIndex),0xA7,0x2F,0xA5,0xBF,0x64,0xC8,0x6E,0xBA
+#endif /* INIT_USBAUDIO_PRODUCT_NAME */
+
+#define STATIC_KSCOMPONENTID_USBAUDIO					\
+	0x8F1275F0,0x26E9,0x4264,0xBA,0x4D,0x39,0xFF,0xF0,0x1D,0x94,0xAA
+DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA",KSCOMPONENTID_USBAUDIO);
+#define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO)
+
+#define INIT_USB_TERMINAL(guid,id)					\
+{									\
+	(guid)->Data1 = 0xDFF219E0 + (USHORT)(id);			\
+	(guid)->Data2 = 0xF70F;						\
+	(guid)->Data3 = 0x11D0;						\
+	(guid)->Data4[0] = 0xb9;					\
+	(guid)->Data4[1] = 0x17;					\
+	(guid)->Data4[2] = 0x00;					\
+	(guid)->Data4[3] = 0xa0;					\
+	(guid)->Data4[4] = 0xc9;					\
+	(guid)->Data4[5] = 0x22;					\
+	(guid)->Data4[6] = 0x31;					\
+	(guid)->Data4[7] = 0x96;					\
+}
+#define EXTRACT_USB_TERMINAL(guid)					\
+	(USHORT)((guid)->Data1 - 0xDFF219E0)
+#define DEFINE_USB_TERMINAL_GUID(id)					\
+	0xDFF219E0+(USHORT)(id),0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#define STATIC_KSNODETYPE_MICROPHONE					\
+	DEFINE_USB_TERMINAL_GUID(0x0201)
+DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE);
+#define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)
+
+#define STATIC_KSNODETYPE_DESKTOP_MICROPHONE				\
+	DEFINE_USB_TERMINAL_GUID(0x0202)
+DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_MICROPHONE);
+#define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)
+
+#define STATIC_KSNODETYPE_PERSONAL_MICROPHONE				\
+	DEFINE_USB_TERMINAL_GUID(0x0203)
+DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PERSONAL_MICROPHONE);
+#define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)
+
+#define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE			\
+	DEFINE_USB_TERMINAL_GUID(0x0204)
+DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);
+#define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)
+
+#define STATIC_KSNODETYPE_MICROPHONE_ARRAY				\
+	DEFINE_USB_TERMINAL_GUID(0x0205)
+DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE_ARRAY);
+#define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)
+
+#define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY			\
+	DEFINE_USB_TERMINAL_GUID(0x0206)
+DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);
+#define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)
+
+#define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR			\
+	0x830a44f2,0xa32d,0x476b,0xbe,0x97,0x42,0x84,0x56,0x73,0xb3,0x5a
+DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a",KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR);
+#define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR)
+
+#define STATIC_KSNODETYPE_SPEAKER					\
+	DEFINE_USB_TERMINAL_GUID(0x0301)
+DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKER);
+#define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)
+
+#define STATIC_KSNODETYPE_HEADPHONES					\
+	DEFINE_USB_TERMINAL_GUID(0x0302)
+DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADPHONES);
+#define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)
+
+#define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO			\
+	DEFINE_USB_TERMINAL_GUID(0x0303)
+DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);
+#define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)
+
+#define STATIC_KSNODETYPE_DESKTOP_SPEAKER				\
+	DEFINE_USB_TERMINAL_GUID(0x0304)
+DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_SPEAKER);
+#define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)
+
+#define STATIC_KSNODETYPE_ROOM_SPEAKER					\
+	DEFINE_USB_TERMINAL_GUID(0x0305)
+DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ROOM_SPEAKER);
+#define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)
+
+#define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER				\
+	DEFINE_USB_TERMINAL_GUID(0x0306)
+DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_COMMUNICATION_SPEAKER);
+#define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)
+
+#define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER			\
+	DEFINE_USB_TERMINAL_GUID(0x0307)
+DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);
+#define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)
+
+#define STATIC_KSNODETYPE_HANDSET					\
+	DEFINE_USB_TERMINAL_GUID(0x0401)
+DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HANDSET);
+#define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)
+
+#define STATIC_KSNODETYPE_HEADSET					\
+	DEFINE_USB_TERMINAL_GUID(0x0402)
+DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADSET);
+#define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)
+
+#define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION		\
+	DEFINE_USB_TERMINAL_GUID(0x0403)
+DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);
+#define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)
+
+#define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE			\
+	DEFINE_USB_TERMINAL_GUID(0x0404)
+DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);
+#define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)
+
+#define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE			\
+	DEFINE_USB_TERMINAL_GUID(0x0405)
+DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);
+#define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)
+
+#define STATIC_KSNODETYPE_PHONE_LINE					\
+	DEFINE_USB_TERMINAL_GUID(0x0501)
+DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONE_LINE);
+#define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)
+
+#define STATIC_KSNODETYPE_TELEPHONE					\
+	DEFINE_USB_TERMINAL_GUID(0x0502)
+DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TELEPHONE);
+#define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)
+
+#define STATIC_KSNODETYPE_DOWN_LINE_PHONE				\
+	DEFINE_USB_TERMINAL_GUID(0x0503)
+DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DOWN_LINE_PHONE);
+#define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)
+
+#define STATIC_KSNODETYPE_ANALOG_CONNECTOR				\
+	DEFINE_USB_TERMINAL_GUID(0x601)
+DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_CONNECTOR);
+#define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)
+
+#define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE			\
+	DEFINE_USB_TERMINAL_GUID(0x0602)
+DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DIGITAL_AUDIO_INTERFACE);
+#define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)
+
+#define STATIC_KSNODETYPE_LINE_CONNECTOR				\
+	DEFINE_USB_TERMINAL_GUID(0x0603)
+DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LINE_CONNECTOR);
+#define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)
+
+#define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR			\
+	DEFINE_USB_TERMINAL_GUID(0x0604)
+DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEGACY_AUDIO_CONNECTOR);
+#define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)
+
+#define STATIC_KSNODETYPE_SPDIF_INTERFACE				\
+	DEFINE_USB_TERMINAL_GUID(0x0605)
+DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPDIF_INTERFACE);
+#define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)
+
+#define STATIC_KSNODETYPE_1394_DA_STREAM				\
+	DEFINE_USB_TERMINAL_GUID(0x0606)
+DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DA_STREAM);
+#define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)
+
+#define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK			\
+	DEFINE_USB_TERMINAL_GUID(0x0607)
+DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);
+#define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)
+
+#define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE		\
+	DEFINE_USB_TERMINAL_GUID(0x0701)
+DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);
+#define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)
+
+#define STATIC_KSNODETYPE_EQUALIZATION_NOISE				\
+	DEFINE_USB_TERMINAL_GUID(0x0702)
+DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_EQUALIZATION_NOISE);
+#define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)
+
+#define STATIC_KSNODETYPE_CD_PLAYER					\
+	DEFINE_USB_TERMINAL_GUID(0x0703)
+DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CD_PLAYER);
+#define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)
+
+#define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE			\
+	DEFINE_USB_TERMINAL_GUID(0x0704)
+DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);
+#define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)
+
+#define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE		\
+	DEFINE_USB_TERMINAL_GUID(0x0705)
+DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);
+#define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)
+
+#define STATIC_KSNODETYPE_MINIDISK					\
+	DEFINE_USB_TERMINAL_GUID(0x0706)
+DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MINIDISK);
+#define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)
+
+#define STATIC_KSNODETYPE_ANALOG_TAPE					\
+	DEFINE_USB_TERMINAL_GUID(0x0707)
+DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_TAPE);
+#define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)
+
+#define STATIC_KSNODETYPE_PHONOGRAPH					\
+	DEFINE_USB_TERMINAL_GUID(0x0708)
+DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONOGRAPH);
+#define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)
+
+#define STATIC_KSNODETYPE_VCR_AUDIO					\
+	DEFINE_USB_TERMINAL_GUID(0x0708)
+DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VCR_AUDIO);
+#define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)
+
+#define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO				\
+	DEFINE_USB_TERMINAL_GUID(0x070A)
+DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_DISC_AUDIO);
+#define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)
+
+#define STATIC_KSNODETYPE_DVD_AUDIO					\
+	DEFINE_USB_TERMINAL_GUID(0x070B)
+DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DVD_AUDIO);
+#define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)
+
+#define STATIC_KSNODETYPE_TV_TUNER_AUDIO				\
+	DEFINE_USB_TERMINAL_GUID(0x070C)
+DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TV_TUNER_AUDIO);
+#define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)
+
+#define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO			\
+	DEFINE_USB_TERMINAL_GUID(0x070D)
+DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SATELLITE_RECEIVER_AUDIO);
+#define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)
+
+#define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO				\
+	DEFINE_USB_TERMINAL_GUID(0x070E)
+DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CABLE_TUNER_AUDIO);
+#define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)
+
+#define STATIC_KSNODETYPE_DSS_AUDIO					\
+	DEFINE_USB_TERMINAL_GUID(0x070F)
+DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DSS_AUDIO);
+#define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)
+
+#define STATIC_KSNODETYPE_RADIO_RECEIVER				\
+	DEFINE_USB_TERMINAL_GUID(0x0710)
+DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_RECEIVER);
+#define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)
+
+#define STATIC_KSNODETYPE_RADIO_TRANSMITTER				\
+	DEFINE_USB_TERMINAL_GUID(0x0711)
+DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_TRANSMITTER);
+#define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)
+
+#define STATIC_KSNODETYPE_MULTITRACK_RECORDER				\
+	DEFINE_USB_TERMINAL_GUID(0x0712)
+DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MULTITRACK_RECORDER);
+#define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)
+
+#define STATIC_KSNODETYPE_SYNTHESIZER					\
+	DEFINE_USB_TERMINAL_GUID(0x0713)
+DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SYNTHESIZER);
+#define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)
+
+#define STATIC_KSNODETYPE_SWSYNTH					\
+	0x423274A0L,0x8B81,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788",KSNODETYPE_SWSYNTH);
+#define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)
+
+#define STATIC_KSNODETYPE_SWMIDI					\
+	0xCB9BEFA0L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788",KSNODETYPE_SWMIDI);
+#define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)
+
+#define STATIC_KSNODETYPE_DRM_DESCRAMBLE				\
+	0xFFBB6E3FL,0xCCFE,0x4D84,0x90,0xD9,0x42,0x14,0x18,0xB0,0x3A,0x8E
+DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E",KSNODETYPE_DRM_DESCRAMBLE);
+#define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE)
+
+#define STATIC_KSCATEGORY_AUDIO						\
+	0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_AUDIO);
+#define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)
+
+#define STATIC_KSCATEGORY_VIDEO						\
+	0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_VIDEO);
+#define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)
+
+#define STATIC_KSCATEGORY_TEXT						\
+	0x6994AD06L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_TEXT);
+#define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)
+
+#define STATIC_KSCATEGORY_NETWORK					\
+	0x67C9CC3CL,0x69C4,0x11D2,0x87,0x59,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196",KSCATEGORY_NETWORK);
+#define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)
+
+#define STATIC_KSCATEGORY_TOPOLOGY					\
+	0xDDA54A40L,0x1E4C,0x11D1,0xA0,0x50,0x40,0x57,0x05,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000",KSCATEGORY_TOPOLOGY);
+#define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)
+
+#define STATIC_KSCATEGORY_VIRTUAL					\
+	0x3503EAC4L,0x1F26,0x11D1,0x8A,0xB0,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196",KSCATEGORY_VIRTUAL);
+#define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)
+
+#define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL				\
+	0xBF963D80L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1",KSCATEGORY_ACOUSTIC_ECHO_CANCEL);
+#define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)
+
+#define STATIC_KSCATEGORY_SYSAUDIO					\
+	0xA7C7A5B1L,0x5AF3,0x11D1,0x9C,0xED,0x00,0xA0,0x24,0xBF,0x04,0x07
+DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407",KSCATEGORY_SYSAUDIO);
+#define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)
+
+#define STATIC_KSCATEGORY_WDMAUD					\
+	0x3E227E76L,0x690D,0x11D2,0x81,0x61,0x00,0x00,0xF8,0x77,0x5B,0xF1
+DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1",KSCATEGORY_WDMAUD);
+#define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)
+
+#define STATIC_KSCATEGORY_AUDIO_GFX					\
+	0x9BAF9572L,0x340C,0x11D3,0xAB,0xDC,0x00,0xA0,0xC9,0x0A,0xB1,0x6F
+DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F",KSCATEGORY_AUDIO_GFX);
+#define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX)
+
+#define STATIC_KSCATEGORY_AUDIO_SPLITTER				\
+	0x9EA331FAL,0xB91B,0x45F8,0x92,0x85,0xBD,0x2B,0xC7,0x7A,0xFC,0xDE
+DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE",KSCATEGORY_AUDIO_SPLITTER);
+#define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER)
+
+#define STATIC_KSCATEGORY_SYNTHESIZER		STATIC_KSNODETYPE_SYNTHESIZER
+#define KSCATEGORY_SYNTHESIZER			KSNODETYPE_SYNTHESIZER
+
+#define STATIC_KSCATEGORY_DRM_DESCRAMBLE	STATIC_KSNODETYPE_DRM_DESCRAMBLE
+#define KSCATEGORY_DRM_DESCRAMBLE		KSNODETYPE_DRM_DESCRAMBLE
+
+#define STATIC_KSCATEGORY_AUDIO_DEVICE					\
+	0xFBF6F530L,0x07B9,0x11D2,0xA7,0x1E,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788",KSCATEGORY_AUDIO_DEVICE);
+#define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)
+
+#define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE			\
+	0xD6C5066EL,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);
+#define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)
+
+#define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE			\
+	0xD6C50671L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEIN_DEVICE);
+#define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)
+
+#define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE			\
+	0xD6C50674L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);
+#define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)
+
+#define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME				\
+	0x47A4FA20L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88
+DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788",KSCATEGORY_WDMAUD_USE_PIN_NAME);
+#define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)
+
+#define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER			\
+	0x74f3aea8L,0x9768,0x11d1,0x8e,0x07,0x00,0xa0,0xc9,0x5e,0xc2,0x2e
+DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e",KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);
+#define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)
+
+#define STATIC_KSDATAFORMAT_TYPE_VIDEO					\
+	0x73646976L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_VIDEO);
+#define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)
+
+#define STATIC_KSDATAFORMAT_TYPE_AUDIO					\
+	0x73647561L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_AUDIO);
+#define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)
+
+#define STATIC_KSDATAFORMAT_TYPE_TEXT					\
+	0x73747874L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_TEXT);
+#define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)
+
+#if !defined(DEFINE_WAVEFORMATEX_GUID)
+#define DEFINE_WAVEFORMATEX_GUID(x)					\
+	(USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+#endif
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX			\
+	0x00000000L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
+#define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
+
+#define INIT_WAVEFORMATEX_GUID(Guid,x)					\
+{									\
+	*(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;			\
+	(Guid)->Data1 = (USHORT)(x);					\
+}
+
+#define EXTRACT_WAVEFORMATEX_ID(Guid)					\
+	(USHORT)((Guid)->Data1)
+
+#define IS_VALID_WAVEFORMATEX_GUID(Guid)				\
+	(!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1,sizeof(GUID) - sizeof(USHORT)))
+
+#ifndef INIT_MMREG_MID
+#define INIT_MMREG_MID(guid,id)						\
+{									\
+	(guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);			\
+	(guid)->Data2 = 0x6d98;						\
+	(guid)->Data3 = 0x11d1;						\
+	(guid)->Data4[0] = 0xa2;					\
+	(guid)->Data4[1] = 0x1a;					\
+	(guid)->Data4[2] = 0x00;					\
+	(guid)->Data4[3] = 0xa0;					\
+	(guid)->Data4[4] = 0xc9;					\
+	(guid)->Data4[5] = 0x22;					\
+	(guid)->Data4[6] = 0x31;					\
+	(guid)->Data4[7] = 0x96;					\
+}
+#define EXTRACT_MMREG_MID(guid)						\
+	(USHORT)((guid)->Data1 - 0xd5a47fa7)
+#define DEFINE_MMREG_MID_GUID(id)					\
+	0xd5a47fa7+(USHORT)(id),0x6d98,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96
+
+#define IS_COMPATIBLE_MMREG_MID(guid)					\
+	(((guid)->Data1 >= 0xd5a47fa7) &&				\
+	 ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&			\
+	 ((guid)->Data2 == 0x6d98) &&					\
+	 ((guid)->Data3 == 0x11d1) &&					\
+	 ((guid)->Data4[0] == 0xa2) &&					\
+	 ((guid)->Data4[1] == 0x1a) &&					\
+	 ((guid)->Data4[2] == 0x00) &&					\
+	 ((guid)->Data4[3] == 0xa0) &&					\
+	 ((guid)->Data4[4] == 0xc9) &&					\
+	 ((guid)->Data4[5] == 0x22) &&					\
+	 ((guid)->Data4[6] == 0x31) &&					\
+	 ((guid)->Data4[7] == 0x96) )
+#endif /* INIT_MMREG_MID */
+
+#ifndef INIT_MMREG_PID
+#define INIT_MMREG_PID(guid,id)						\
+{									\
+	(guid)->Data1 = 0xe36dc2ac + (USHORT)(id);			\
+	(guid)->Data2 = 0x6d9a;						\
+	(guid)->Data3 = 0x11d1;						\
+	(guid)->Data4[0] = 0xa2;					\
+	(guid)->Data4[1] = 0x1a;					\
+	(guid)->Data4[2] = 0x00;					\
+	(guid)->Data4[3] = 0xa0;					\
+	(guid)->Data4[4] = 0xc9;					\
+	(guid)->Data4[5] = 0x22;					\
+	(guid)->Data4[6] = 0x31;					\
+	(guid)->Data4[7] = 0x96;					\
+}
+#define EXTRACT_MMREG_PID(guid)						\
+	(USHORT)((guid)->Data1 - 0xe36dc2ac)
+#define DEFINE_MMREG_PID_GUID(id)					\
+	0xe36dc2ac+(USHORT)(id),0x6d9a,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96
+
+#define IS_COMPATIBLE_MMREG_PID(guid)					\
+	(((guid)->Data1 >= 0xe36dc2ac) &&				\
+	 ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&			\
+	 ((guid)->Data2 == 0x6d9a) &&					\
+	 ((guid)->Data3 == 0x11d1) &&					\
+	 ((guid)->Data4[0] == 0xa2) &&					\
+	 ((guid)->Data4[1] == 0x1a) &&					\
+	 ((guid)->Data4[2] == 0x00) &&					\
+	 ((guid)->Data4[3] == 0xa0) &&					\
+	 ((guid)->Data4[4] == 0xc9) &&					\
+	 ((guid)->Data4[5] == 0x22) &&					\
+	 ((guid)->Data4[6] == 0x31) &&					\
+	 ((guid)->Data4[7] == 0x96) )
+#endif /* INIT_MMREG_PID */
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG				\
+	0x6dba3190L,0x67bd,0x11cf,0xa0,0xf7,0x00,0x20,0xaf,0xd1,0x56,0xe4
+DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4",KSDATAFORMAT_SUBTYPE_ANALOG);
+#define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_PCM					\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
+DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_PCM);
+#define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
+
+#ifdef _INC_MMREG
+#define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT				\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)
+DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
+#define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_DRM					\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM)
+DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_DRM);
+#define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_ALAW				\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)
+DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ALAW);
+#define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MULAW				\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)
+DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MULAW);
+#define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM				\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)
+DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ADPCM);
+#define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG				\
+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)
+DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MPEG);
+#define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)
+#endif /* _INC_MMREG */
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID				\
+	0xAD98D184L,0xAAC3,0x11D0,0xA4,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196",KSDATAFORMAT_SPECIFIER_VC_ID);
+#define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX			\
+	0x05589f81L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a
+DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);
+#define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND				\
+	0x518590a2L,0xa184,0x11d0,0x85,0x22,0x00,0xc0,0x4f,0xd9,0xba,0xf3
+DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3",KSDATAFORMAT_SPECIFIER_DSOUND);
+#define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)
+
+#if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
+#if !defined(PACK_PRAGMAS_NOT_SUPPORTED)
+#include <pshpack1.h>
+#endif
+typedef struct {
+  KSDATAFORMAT DataFormat;
+  WAVEFORMATEX WaveFormatEx;
+} KSDATAFORMAT_WAVEFORMATEX,*PKSDATAFORMAT_WAVEFORMATEX;
+
+#ifndef _WAVEFORMATEXTENSIBLE_
+#define _WAVEFORMATEXTENSIBLE_
+typedef struct {
+  WAVEFORMATEX Format;
+  union {
+    WORD wValidBitsPerSample;
+    WORD wSamplesPerBlock;
+    WORD wReserved;
+  } Samples;
+  DWORD dwChannelMask;
+
+  GUID SubFormat;
+} WAVEFORMATEXTENSIBLE,*PWAVEFORMATEXTENSIBLE;
+#endif /* _WAVEFORMATEXTENSIBLE_ */
+
+#if !defined(WAVE_FORMAT_EXTENSIBLE)
+#define WAVE_FORMAT_EXTENSIBLE			0xFFFE
+#endif
+
+typedef struct {
+  ULONG Flags;
+  ULONG Control;
+  WAVEFORMATEX WaveFormatEx;
+} KSDSOUND_BUFFERDESC,*PKSDSOUND_BUFFERDESC;
+
+typedef struct {
+  KSDATAFORMAT DataFormat;
+  KSDSOUND_BUFFERDESC BufferDesc;
+} KSDATAFORMAT_DSOUND,*PKSDATAFORMAT_DSOUND;
+
+#if !defined(PACK_PRAGMAS_NOT_SUPPORTED)
+#include <poppack.h>
+#endif
+#endif /* defined(_INC_MMSYSTEM) || defined(_INC_MMREG) */
+
+#define KSDSOUND_BUFFER_PRIMARY			0x00000001
+#define KSDSOUND_BUFFER_STATIC			0x00000002
+#define KSDSOUND_BUFFER_LOCHARDWARE		0x00000004
+#define KSDSOUND_BUFFER_LOCSOFTWARE		0x00000008
+
+#define KSDSOUND_BUFFER_CTRL_3D			0x00000001
+#define KSDSOUND_BUFFER_CTRL_FREQUENCY		0x00000002
+#define KSDSOUND_BUFFER_CTRL_PAN		0x00000004
+#define KSDSOUND_BUFFER_CTRL_VOLUME		0x00000008
+#define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY	0x00000010
+
+typedef struct {
+  DWORDLONG PlayOffset;
+  DWORDLONG WriteOffset;
+} KSAUDIO_POSITION,*PKSAUDIO_POSITION;
+
+typedef struct _DS3DVECTOR {
+  __MINGW_EXTENSION union {
+    FLOAT x;
+    FLOAT dvX;
+  };
+  __MINGW_EXTENSION union {
+    FLOAT y;
+    FLOAT dvY;
+  };
+  __MINGW_EXTENSION union {
+    FLOAT z;
+    FLOAT dvZ;
+  };
+} DS3DVECTOR,*PDS3DVECTOR;
+
+#define STATIC_KSPROPSETID_DirectSound3DListener			\
+	0x437b3414L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3
+DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);
+#define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)
+
+typedef enum {
+  KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
+  KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
+} KSPROPERTY_DIRECTSOUND3DLISTENER;
+
+typedef struct {
+  DS3DVECTOR Position;
+  DS3DVECTOR Velocity;
+  DS3DVECTOR OrientFront;
+  DS3DVECTOR OrientTop;
+  FLOAT DistanceFactor;
+  FLOAT RolloffFactor;
+  FLOAT DopplerFactor;
+} KSDS3D_LISTENER_ALL,*PKSDS3D_LISTENER_ALL;
+
+typedef struct {
+  DS3DVECTOR Front;
+  DS3DVECTOR Top;
+} KSDS3D_LISTENER_ORIENTATION,*PKSDS3D_LISTENER_ORIENTATION;
+
+#define STATIC_KSPROPSETID_DirectSound3DBuffer				\
+	0x437b3411L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3
+DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DBuffer);
+#define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)
+
+typedef enum {
+  KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
+  KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
+} KSPROPERTY_DIRECTSOUND3DBUFFER;
+
+typedef struct {
+  DS3DVECTOR Position;
+  DS3DVECTOR Velocity;
+  ULONG InsideConeAngle;
+  ULONG OutsideConeAngle;
+  DS3DVECTOR ConeOrientation;
+  LONG ConeOutsideVolume;
+  FLOAT MinDistance;
+  FLOAT MaxDistance;
+  ULONG Mode;
+} KSDS3D_BUFFER_ALL,*PKSDS3D_BUFFER_ALL;
+
+typedef struct {
+  ULONG InsideConeAngle;
+  ULONG OutsideConeAngle;
+} KSDS3D_BUFFER_CONE_ANGLES,*PKSDS3D_BUFFER_CONE_ANGLES;
+
+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE	(-1)
+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN		5
+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW		10
+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE		20
+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX		180
+
+#define KSDSOUND_3D_MODE_NORMAL			0x00000000
+#define KSDSOUND_3D_MODE_HEADRELATIVE		0x00000001
+#define KSDSOUND_3D_MODE_DISABLE		0x00000002
+
+#define KSDSOUND_BUFFER_CTRL_HRTF_3D		0x40000000
+
+typedef struct {
+  ULONG Size;
+  ULONG Enabled;
+  WINBOOL SwapChannels;
+  WINBOOL ZeroAzimuth;
+  WINBOOL CrossFadeOutput;
+  ULONG FilterSize;
+} KSDS3D_HRTF_PARAMS_MSG,*PKSDS3D_HRTF_PARAMS_MSG;
+
+typedef enum {
+  FULL_FILTER,
+  LIGHT_FILTER,
+  KSDS3D_FILTER_QUALITY_COUNT
+} KSDS3D_HRTF_FILTER_QUALITY;
+
+typedef struct {
+  ULONG Size;
+  KSDS3D_HRTF_FILTER_QUALITY Quality;
+  FLOAT SampleRate;
+  ULONG MaxFilterSize;
+  ULONG FilterTransientMuteLength;
+  ULONG FilterOverlapBufferLength;
+  ULONG OutputOverlapBufferLength;
+  ULONG Reserved;
+} KSDS3D_HRTF_INIT_MSG,*PKSDS3D_HRTF_INIT_MSG;
+
+typedef enum {
+  FLOAT_COEFF,
+  SHORT_COEFF,
+  KSDS3D_COEFF_COUNT
+} KSDS3D_HRTF_COEFF_FORMAT;
+
+typedef enum {
+  DIRECT_FORM,
+  CASCADE_FORM,
+  KSDS3D_FILTER_METHOD_COUNT
+} KSDS3D_HRTF_FILTER_METHOD;
+
+typedef enum {
+  DS3D_HRTF_VERSION_1
+} KSDS3D_HRTF_FILTER_VERSION;
+
+typedef struct {
+  KSDS3D_HRTF_FILTER_METHOD FilterMethod;
+  KSDS3D_HRTF_COEFF_FORMAT CoeffFormat;
+  KSDS3D_HRTF_FILTER_VERSION Version;
+  ULONG Reserved;
+} KSDS3D_HRTF_FILTER_FORMAT_MSG,*PKSDS3D_HRTF_FILTER_FORMAT_MSG;
+
+#define STATIC_KSPROPSETID_Hrtf3d					\
+	0xb66decb0L,0xa083,0x11d0,0x85,0x1e,0x00,0xc0,0x4f,0xd9,0xba,0xf3
+DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3",KSPROPSETID_Hrtf3d);
+#define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d)
+
+typedef enum {
+  KSPROPERTY_HRTF3D_PARAMS = 0,
+  KSPROPERTY_HRTF3D_INITIALIZE,
+  KSPROPERTY_HRTF3D_FILTER_FORMAT
+} KSPROPERTY_HRTF3D;
+
+typedef struct {
+  LONG Channel;
+  FLOAT VolSmoothScale;
+  FLOAT TotalDryAttenuation;
+  FLOAT TotalWetAttenuation;
+  LONG SmoothFrequency;
+  LONG Delay;
+} KSDS3D_ITD_PARAMS,*PKSDS3D_ITD_PARAMS;
+
+typedef struct {
+  ULONG Enabled;
+  KSDS3D_ITD_PARAMS LeftParams;
+  KSDS3D_ITD_PARAMS RightParams;
+  ULONG Reserved;
+} KSDS3D_ITD_PARAMS_MSG,*PKSDS3D_ITD_PARAMS_MSG;
+
+#define STATIC_KSPROPSETID_Itd3d					\
+	0x6429f090L,0x9fd9,0x11d0,0xa7,0x5b,0x00,0xa0,0xc9,0x03,0x65,0xe3
+DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3",KSPROPSETID_Itd3d);
+#define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d)
+
+typedef enum {
+  KSPROPERTY_ITD3D_PARAMS = 0
+} KSPROPERTY_ITD3D;
+
+typedef struct {
+  KSDATARANGE DataRange;
+  ULONG MaximumChannels;
+  ULONG MinimumBitsPerSample;
+  ULONG MaximumBitsPerSample;
+  ULONG MinimumSampleFrequency;
+  ULONG MaximumSampleFrequency;
+} KSDATARANGE_AUDIO,*PKSDATARANGE_AUDIO;
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_RIFF				\
+	0x4995DAEEL,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFF);
+#define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE				\
+	0xe436eb8bL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70
+DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_RIFFWAVE);
+#define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)
+
+#define STATIC_KSPROPSETID_Bibliographic				\
+	0x07BA150EL,0xE2B1,0x11D0,0xAC,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196",KSPROPSETID_Bibliographic);
+#define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)
+
+typedef enum {
+  KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',
+  KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',
+  KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',
+  KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',
+  KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',
+  KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',
+  KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',
+  KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',
+  KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',
+  KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',
+  KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',
+  KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',
+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',
+  KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',
+  KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',
+  KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',
+  KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',
+  KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',
+  KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',
+  KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',
+  KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',
+  KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',
+  KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',
+  KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',
+  KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',
+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',
+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',
+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '
+} KSPROPERTY_BIBLIOGRAPHIC;
+
+#define STATIC_KSPROPSETID_TopologyNode					\
+	0x45FFAAA1L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00
+DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000",KSPROPSETID_TopologyNode);
+#define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)
+
+typedef enum {
+  KSPROPERTY_TOPOLOGYNODE_ENABLE = 1,
+  KSPROPERTY_TOPOLOGYNODE_RESET
+} KSPROPERTY_TOPOLOGYNODE;
+
+#define STATIC_KSPROPSETID_RtAudio					\
+	0xa855a48c,0x2f78,0x4729,0x90,0x51,0x19,0x68,0x74,0x6b,0x9e,0xef
+DEFINE_GUIDSTRUCT("A855A48C-2F78-4729-9051-1968746B9EEF",KSPROPSETID_RtAudio);
+#define KSPROPSETID_RtAudio DEFINE_GUIDNAMED(KSPROPSETID_RtAudio)
+
+typedef enum {
+  KSPROPERTY_RTAUDIO_GETPOSITIONFUNCTION
+} KSPROPERTY_RTAUDIO;
+
+#define STATIC_KSPROPSETID_DrmAudioStream				\
+	0x2f2c8ddd,0x4198,0x4fac,0xba,0x29,0x61,0xbb,0x5,0xb7,0xde,0x6
+DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06",KSPROPSETID_DrmAudioStream);
+#define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream)
+
+typedef enum {
+  KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
+} KSPROPERTY_DRMAUDIOSTREAM;
+
+#define STATIC_KSPROPSETID_Audio					\
+	0x45FFAAA0L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00
+DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000",KSPROPSETID_Audio);
+#define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)
+
+typedef enum {
+  KSPROPERTY_AUDIO_LATENCY = 1,
+  KSPROPERTY_AUDIO_COPY_PROTECTION,
+  KSPROPERTY_AUDIO_CHANNEL_CONFIG,
+  KSPROPERTY_AUDIO_VOLUMELEVEL,
+  KSPROPERTY_AUDIO_POSITION,
+  KSPROPERTY_AUDIO_DYNAMIC_RANGE,
+  KSPROPERTY_AUDIO_QUALITY,
+  KSPROPERTY_AUDIO_SAMPLING_RATE,
+  KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
+  KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
+  KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
+  KSPROPERTY_AUDIO_MUX_SOURCE,
+  KSPROPERTY_AUDIO_MUTE,
+  KSPROPERTY_AUDIO_BASS,
+  KSPROPERTY_AUDIO_MID,
+  KSPROPERTY_AUDIO_TREBLE,
+  KSPROPERTY_AUDIO_BASS_BOOST,
+  KSPROPERTY_AUDIO_EQ_LEVEL,
+  KSPROPERTY_AUDIO_NUM_EQ_BANDS,
+  KSPROPERTY_AUDIO_EQ_BANDS,
+  KSPROPERTY_AUDIO_AGC,
+  KSPROPERTY_AUDIO_DELAY,
+  KSPROPERTY_AUDIO_LOUDNESS,
+  KSPROPERTY_AUDIO_WIDE_MODE,
+  KSPROPERTY_AUDIO_WIDENESS,
+  KSPROPERTY_AUDIO_REVERB_LEVEL,
+  KSPROPERTY_AUDIO_CHORUS_LEVEL,
+  KSPROPERTY_AUDIO_DEV_SPECIFIC,
+  KSPROPERTY_AUDIO_DEMUX_DEST,
+  KSPROPERTY_AUDIO_STEREO_ENHANCE,
+  KSPROPERTY_AUDIO_MANUFACTURE_GUID,
+  KSPROPERTY_AUDIO_PRODUCT_GUID,
+  KSPROPERTY_AUDIO_CPU_RESOURCES,
+  KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
+  KSPROPERTY_AUDIO_SURROUND_ENCODE,
+  KSPROPERTY_AUDIO_3D_INTERFACE,
+  KSPROPERTY_AUDIO_PEAKMETER,
+  KSPROPERTY_AUDIO_ALGORITHM_INSTANCE,
+  KSPROPERTY_AUDIO_FILTER_STATE,
+  KSPROPERTY_AUDIO_PREFERRED_STATUS
+} KSPROPERTY_AUDIO;
+
+#define KSAUDIO_QUALITY_WORST			0x0
+#define KSAUDIO_QUALITY_PC			0x1
+#define KSAUDIO_QUALITY_BASIC			0x2
+#define KSAUDIO_QUALITY_ADVANCED		0x3
+
+#define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU	0x00000000
+#define KSAUDIO_CPU_RESOURCES_HOST_CPU		0x7FFFFFFF
+
+typedef struct {
+  WINBOOL fCopyrighted;
+  WINBOOL fOriginal;
+} KSAUDIO_COPY_PROTECTION,*PKSAUDIO_COPY_PROTECTION;
+
+typedef struct {
+  LONG ActiveSpeakerPositions;
+} KSAUDIO_CHANNEL_CONFIG,*PKSAUDIO_CHANNEL_CONFIG;
+
+#define SPEAKER_FRONT_LEFT		0x1
+#define SPEAKER_FRONT_RIGHT		0x2
+#define SPEAKER_FRONT_CENTER		0x4
+#define SPEAKER_LOW_FREQUENCY		0x8
+#define SPEAKER_BACK_LEFT		0x10
+#define SPEAKER_BACK_RIGHT		0x20
+#define SPEAKER_FRONT_LEFT_OF_CENTER	0x40
+#define SPEAKER_FRONT_RIGHT_OF_CENTER	0x80
+#define SPEAKER_BACK_CENTER		0x100
+#define SPEAKER_SIDE_LEFT		0x200
+#define SPEAKER_SIDE_RIGHT		0x400
+#define SPEAKER_TOP_CENTER		0x800
+#define SPEAKER_TOP_FRONT_LEFT		0x1000
+#define SPEAKER_TOP_FRONT_CENTER	0x2000
+#define SPEAKER_TOP_FRONT_RIGHT		0x4000
+#define SPEAKER_TOP_BACK_LEFT		0x8000
+#define SPEAKER_TOP_BACK_CENTER		0x10000
+#define SPEAKER_TOP_BACK_RIGHT		0x20000
+
+#define SPEAKER_RESERVED		0x7FFC0000
+
+#define SPEAKER_ALL			0x80000000
+
+#define KSAUDIO_SPEAKER_DIRECTOUT	0
+#define KSAUDIO_SPEAKER_MONO		(SPEAKER_FRONT_CENTER)
+#define KSAUDIO_SPEAKER_STEREO		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
+#define KSAUDIO_SPEAKER_QUAD		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+#define KSAUDIO_SPEAKER_SURROUND	(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					 SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
+#define KSAUDIO_SPEAKER_5POINT1		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					 SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |		\
+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+#define KSAUDIO_SPEAKER_7POINT1		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					 SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |		\
+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT |		\
+					 SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
+#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					  SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |	\
+					  SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+#define KSAUDIO_SPEAKER_7POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\
+					  SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |	\
+					  SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT |		\
+					  SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+
+#define KSAUDIO_SPEAKER_5POINT1_BACK	KSAUDIO_SPEAKER_5POINT1
+#define KSAUDIO_SPEAKER_7POINT1_WIDE	KSAUDIO_SPEAKER_7POINT1
+
+#define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT	SPEAKER_FRONT_LEFT
+#define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER	SPEAKER_FRONT_CENTER
+#define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT	SPEAKER_FRONT_RIGHT
+#define KSAUDIO_SPEAKER_GROUND_REAR_LEFT	SPEAKER_BACK_LEFT
+#define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT	SPEAKER_BACK_RIGHT
+#define KSAUDIO_SPEAKER_TOP_MIDDLE		SPEAKER_TOP_CENTER
+#define KSAUDIO_SPEAKER_SUPER_WOOFER		SPEAKER_LOW_FREQUENCY
+
+typedef struct {
+  ULONG QuietCompression;
+  ULONG LoudCompression;
+} KSAUDIO_DYNAMIC_RANGE,*PKSAUDIO_DYNAMIC_RANGE;
+
+typedef struct {
+  WINBOOL Mute;
+  LONG Level;
+} KSAUDIO_MIXLEVEL,*PKSAUDIO_MIXLEVEL;
+
+typedef struct {
+  WINBOOL Mute;
+  LONG Minimum;
+  LONG Maximum;
+  LONG Reset;
+} KSAUDIO_MIX_CAPS,*PKSAUDIO_MIX_CAPS;
+
+typedef struct {
+  ULONG InputChannels;
+  ULONG OutputChannels;
+  KSAUDIO_MIX_CAPS Capabilities[1];
+} KSAUDIO_MIXCAP_TABLE,*PKSAUDIO_MIXCAP_TABLE;
+
+typedef enum {
+  SE_TECH_NONE,
+  SE_TECH_ANALOG_DEVICES_PHAT,
+  SE_TECH_CREATIVE,
+  SE_TECH_NATIONAL_SEMI,
+  SE_TECH_YAMAHA_YMERSION,
+  SE_TECH_BBE,
+  SE_TECH_CRYSTAL_SEMI,
+  SE_TECH_QSOUND_QXPANDER,
+  SE_TECH_SPATIALIZER,
+  SE_TECH_SRS,
+  SE_TECH_PLATFORM_TECH,
+  SE_TECH_AKM,
+  SE_TECH_AUREAL,
+  SE_TECH_AZTECH,
+  SE_TECH_BINAURA,
+  SE_TECH_ESS_TECH,
+  SE_TECH_HARMAN_VMAX,
+  SE_TECH_NVIDEA,
+  SE_TECH_PHILIPS_INCREDIBLE,
+  SE_TECH_TEXAS_INST,
+  SE_TECH_VLSI_TECH
+} SE_TECHNIQUE;
+
+typedef struct {
+  SE_TECHNIQUE Technique;
+  ULONG Center;
+  ULONG Depth;
+  ULONG Reserved;
+} KSAUDIO_STEREO_ENHANCE,*PKSAUDIO_STEREO_ENHANCE;
+
+typedef enum {
+  KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,
+  KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
+  KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
+  KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
+  KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
+} KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;
+
+typedef struct {
+  WINBOOL Enable;
+  KSPROPERTY_SYSAUDIO_DEFAULT_TYPE DeviceType;
+  ULONG Flags;
+  ULONG Reserved;
+} KSAUDIO_PREFERRED_STATUS,*PKSAUDIO_PREFERRED_STATUS;
+
+#define STATIC_KSNODETYPE_DAC						\
+	0x507AE360L,0xC554,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DAC);
+#define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)
+
+#define STATIC_KSNODETYPE_ADC						\
+	0x4D837FE0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_ADC);
+#define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)
+
+#define STATIC_KSNODETYPE_SRC						\
+	0x9DB7B9E0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SRC);
+#define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)
+
+#define STATIC_KSNODETYPE_SUPERMIX					\
+	0xE573ADC0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUPERMIX);
+#define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)
+
+#define STATIC_KSNODETYPE_MUX						\
+	0x2CEAF780L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUX);
+#define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)
+
+#define STATIC_KSNODETYPE_DEMUX						\
+	0xC0EB67D4L,0xE807,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3",KSNODETYPE_DEMUX);
+#define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)
+
+#define STATIC_KSNODETYPE_SUM						\
+	0xDA441A60L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUM);
+#define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)
+
+#define STATIC_KSNODETYPE_MUTE						\
+	0x02B223C0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUTE);
+#define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)
+
+#define STATIC_KSNODETYPE_VOLUME					\
+	0x3A5ACC00L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_VOLUME);
+#define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)
+
+#define STATIC_KSNODETYPE_TONE						\
+	0x7607E580L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_TONE);
+#define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)
+
+#define STATIC_KSNODETYPE_EQUALIZER					\
+	0x9D41B4A0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_EQUALIZER);
+#define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)
+
+#define STATIC_KSNODETYPE_AGC						\
+	0xE88C9BA0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_AGC);
+#define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)
+
+#define STATIC_KSNODETYPE_NOISE_SUPPRESS				\
+	0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5
+DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5",KSNODETYPE_NOISE_SUPPRESS);
+#define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS)
+
+#define STATIC_KSNODETYPE_DELAY						\
+	0x144981E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DELAY);
+#define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)
+
+#define STATIC_KSNODETYPE_LOUDNESS					\
+	0x41887440L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_LOUDNESS);
+#define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)
+
+#define STATIC_KSNODETYPE_PROLOGIC_DECODER				\
+	0x831C2C80L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_PROLOGIC_DECODER);
+#define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)
+
+#define STATIC_KSNODETYPE_STEREO_WIDE					\
+	0xA9E69800L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_STEREO_WIDE);
+#define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)
+
+#define STATIC_KSNODETYPE_STEREO_ENHANCE				\
+	0xAF6878ACL,0xE83F,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3",KSNODETYPE_STEREO_ENHANCE);
+#define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)
+
+#define STATIC_KSNODETYPE_REVERB					\
+	0xEF0328E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_REVERB);
+#define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)
+
+#define STATIC_KSNODETYPE_CHORUS					\
+	0x20173F20L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_CHORUS);
+#define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)
+
+#define STATIC_KSNODETYPE_3D_EFFECTS					\
+	0x55515860L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_3D_EFFECTS);
+#define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)
+
+#define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL
+#define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL
+
+#define STATIC_KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL		\
+	0x1c22c56dL,0x9879,0x4f5b,0xa3,0x89,0x27,0x99,0x6d,0xdc,0x28,0x10
+DEFINE_GUIDSTRUCT("1C22C56D-9879-4f5b-A389-27996DDC2810",KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL);
+#define KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL)
+
+#define STATIC_KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS		\
+	0x5ab0882eL,0x7274,0x4516,0x87,0x7d,0x4e,0xee,0x99,0xba,0x4f,0xd0
+DEFINE_GUIDSTRUCT("5AB0882E-7274-4516-877D-4EEE99BA4FD0",KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS);
+#define KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS)
+
+#define STATIC_KSALGORITHMINSTANCE_SYSTEM_AGC				\
+	0x950e55b9L,0x877c,0x4c67,0xbe,0x8,0xe4,0x7b,0x56,0x11,0x13,0xa
+DEFINE_GUIDSTRUCT("950E55B9-877C-4c67-BE08-E47B5611130A",KSALGORITHMINSTANCE_SYSTEM_AGC);
+#define KSALGORITHMINSTANCE_SYSTEM_AGC DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_AGC)
+
+#define STATIC_KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR	\
+	0xB6F5A0A0L,0x9E61,0x4F8C,0x91,0xE3,0x76,0xCF,0xF,0x3C,0x47,0x1F
+DEFINE_GUIDSTRUCT("B6F5A0A0-9E61-4f8c-91E3-76CF0F3C471F",KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR);
+#define KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR)
+
+#define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
+#define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
+
+#define STATIC_KSNODETYPE_DEV_SPECIFIC					\
+	0x941C7AC0L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1
+DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DEV_SPECIFIC);
+#define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)
+
+#define STATIC_KSNODETYPE_PROLOGIC_ENCODER				\
+	0x8074C5B2L,0x3C66,0x11D2,0xB4,0x5A,0x30,0x78,0x30,0x2C,0x20,0x30
+DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030",KSNODETYPE_PROLOGIC_ENCODER);
+#define KSNODETYPE_PROLOGIC_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_ENCODER)
+#define KSNODETYPE_SURROUND_ENCODER KSNODETYPE_PROLOGIC_ENCODER
+
+#define STATIC_KSNODETYPE_PEAKMETER					\
+	0xa085651eL,0x5f0d,0x4b36,0xa8,0x69,0xd1,0x95,0xd6,0xab,0x4b,0x9e
+DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E",KSNODETYPE_PEAKMETER);
+#define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER)
+
+#define STATIC_KSAUDFNAME_BASS						\
+	0x185FEDE0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_BASS);
+#define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)
+
+#define STATIC_KSAUDFNAME_TREBLE					\
+	0x185FEDE1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_TREBLE);
+#define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)
+
+#define STATIC_KSAUDFNAME_3D_STEREO					\
+	0x185FEDE2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_3D_STEREO);
+#define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)
+
+#define STATIC_KSAUDFNAME_MASTER_VOLUME					\
+	0x185FEDE3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_VOLUME);
+#define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)
+
+#define STATIC_KSAUDFNAME_MASTER_MUTE					\
+	0x185FEDE4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_MUTE);
+#define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)
+
+#define STATIC_KSAUDFNAME_WAVE_VOLUME					\
+	0x185FEDE5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_VOLUME);
+#define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)
+
+#define STATIC_KSAUDFNAME_WAVE_MUTE					\
+	0x185FEDE6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_MUTE);
+#define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)
+
+#define STATIC_KSAUDFNAME_MIDI_VOLUME					\
+	0x185FEDE7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_VOLUME);
+#define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)
+
+#define STATIC_KSAUDFNAME_MIDI_MUTE					\
+	0x185FEDE8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_MUTE);
+#define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)
+
+#define STATIC_KSAUDFNAME_CD_VOLUME					\
+	0x185FEDE9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_VOLUME);
+#define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)
+
+#define STATIC_KSAUDFNAME_CD_MUTE					\
+	0x185FEDEAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_MUTE);
+#define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)
+
+#define STATIC_KSAUDFNAME_LINE_VOLUME					\
+	0x185FEDEBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_VOLUME);
+#define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)
+
+#define STATIC_KSAUDFNAME_LINE_MUTE					\
+	0x185FEDECL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_MUTE);
+#define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)
+
+#define STATIC_KSAUDFNAME_MIC_VOLUME					\
+	0x185FEDEDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_VOLUME);
+#define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)
+
+#define STATIC_KSAUDFNAME_MIC_MUTE					\
+	0x185FEDEEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_MUTE);
+#define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)
+
+#define STATIC_KSAUDFNAME_RECORDING_SOURCE				\
+	0x185FEDEFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_SOURCE);
+#define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)
+
+#define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME				\
+	0x185FEDF0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_VOLUME);
+#define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)
+
+#define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE				\
+	0x185FEDF1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_MUTE);
+#define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)
+
+#define STATIC_KSAUDFNAME_MIDI_IN_VOLUME				\
+	0x185FEDF2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_IN_VOLUME);
+#define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)
+
+#define STATIC_KSAUDFNAME_CD_IN_VOLUME					\
+	0x185FEDF3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_IN_VOLUME);
+#define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)
+
+#define STATIC_KSAUDFNAME_LINE_IN_VOLUME				\
+	0x185FEDF4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN_VOLUME);
+#define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)
+
+#define STATIC_KSAUDFNAME_MIC_IN_VOLUME					\
+	0x185FEDF5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_IN_VOLUME);
+#define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)
+
+#define STATIC_KSAUDFNAME_WAVE_IN_VOLUME				\
+	0x185FEDF6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_IN_VOLUME);
+#define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)
+
+#define STATIC_KSAUDFNAME_VOLUME_CONTROL				\
+	0x185FEDF7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_VOLUME_CONTROL);
+#define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)
+
+#define STATIC_KSAUDFNAME_MIDI						\
+	0x185FEDF8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI);
+#define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)
+
+#define STATIC_KSAUDFNAME_LINE_IN					\
+	0x185FEDF9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN);
+#define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)
+
+#define STATIC_KSAUDFNAME_RECORDING_CONTROL				\
+	0x185FEDFAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_CONTROL);
+#define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)
+
+#define STATIC_KSAUDFNAME_CD_AUDIO					\
+	0x185FEDFBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_AUDIO);
+#define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)
+
+#define STATIC_KSAUDFNAME_AUX_VOLUME					\
+	0x185FEDFCL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_VOLUME);
+#define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)
+
+#define STATIC_KSAUDFNAME_AUX_MUTE					\
+	0x185FEDFDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_MUTE);
+#define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)
+
+#define STATIC_KSAUDFNAME_AUX						\
+	0x185FEDFEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX);
+#define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)
+
+#define STATIC_KSAUDFNAME_PC_SPEAKER					\
+	0x185FEDFFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER);
+#define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)
+
+#define STATIC_KSAUDFNAME_WAVE_OUT_MIX					\
+	0x185FEE00L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_OUT_MIX);
+#define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)
+
+#define STATIC_KSAUDFNAME_MONO_OUT					\
+	0xf9b41dc3L,0x96e2,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT);
+#define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)
+
+#define STATIC_KSAUDFNAME_STEREO_MIX					\
+	0xdff077L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX);
+#define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)
+
+#define STATIC_KSAUDFNAME_MONO_MIX					\
+	0xdff078L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX);
+#define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)
+
+#define STATIC_KSAUDFNAME_MONO_OUT_VOLUME				\
+	0x1ad247ebL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_VOLUME);
+#define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)
+
+#define STATIC_KSAUDFNAME_MONO_OUT_MUTE					\
+	0x1ad247ecL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_MUTE);
+#define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)
+
+#define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME				\
+	0x1ad247edL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_VOLUME);
+#define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)
+
+#define STATIC_KSAUDFNAME_STEREO_MIX_MUTE				\
+	0x22b0eafdL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_MUTE);
+#define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)
+
+#define STATIC_KSAUDFNAME_MONO_MIX_VOLUME				\
+	0x22b0eafeL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_VOLUME);
+#define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)
+
+#define STATIC_KSAUDFNAME_MONO_MIX_MUTE					\
+	0x2bc31d69L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_MUTE);
+#define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)
+
+#define STATIC_KSAUDFNAME_MICROPHONE_BOOST				\
+	0x2bc31d6aL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MICROPHONE_BOOST);
+#define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)
+
+#define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE				\
+	0x2bc31d6bL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_ALTERNATE_MICROPHONE);
+#define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)
+
+#define STATIC_KSAUDFNAME_3D_DEPTH					\
+	0x63ff5747L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_DEPTH);
+#define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)
+
+#define STATIC_KSAUDFNAME_3D_CENTER					\
+	0x9f0670b4L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_CENTER);
+#define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)
+
+#define STATIC_KSAUDFNAME_VIDEO_VOLUME					\
+	0x9b46e708L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_VOLUME);
+#define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)
+
+#define STATIC_KSAUDFNAME_VIDEO_MUTE					\
+	0x9b46e709L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_MUTE);
+#define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)
+
+#define STATIC_KSAUDFNAME_VIDEO						\
+	0x915daec4L,0xa434,0x11d2,0xac,0x52,0x0,0xc0,0x4f,0x8e,0xfb,0x68
+DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68",KSAUDFNAME_VIDEO);
+#define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)
+
+#define STATIC_KSAUDFNAME_PEAKMETER					\
+	0x57e24340L,0xfc5b,0x4612,0xa5,0x62,0x72,0xb1,0x1a,0x29,0xdf,0xae
+DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE",KSAUDFNAME_PEAKMETER);
+#define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER)
+
+#define KSNODEPIN_STANDARD_IN		1
+#define KSNODEPIN_STANDARD_OUT		0
+
+#define KSNODEPIN_SUM_MUX_IN		1
+#define KSNODEPIN_SUM_MUX_OUT		0
+
+#define KSNODEPIN_DEMUX_IN		0
+#define KSNODEPIN_DEMUX_OUT		1
+
+#define KSNODEPIN_AEC_RENDER_IN		1
+#define KSNODEPIN_AEC_RENDER_OUT	0
+#define KSNODEPIN_AEC_CAPTURE_IN	2
+#define KSNODEPIN_AEC_CAPTURE_OUT	3
+
+#define STATIC_KSMETHODSETID_Wavetable					\
+	0xDCEF31EBL,0xD907,0x11D0,0x95,0x83,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3",KSMETHODSETID_Wavetable);
+#define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)
+
+typedef enum {
+  KSMETHOD_WAVETABLE_WAVE_ALLOC,
+  KSMETHOD_WAVETABLE_WAVE_FREE,
+  KSMETHOD_WAVETABLE_WAVE_FIND,
+  KSMETHOD_WAVETABLE_WAVE_WRITE
+} KSMETHOD_WAVETABLE;
+
+typedef struct {
+  KSIDENTIFIER Identifier;
+  ULONG Size;
+  WINBOOL Looped;
+  ULONG LoopPoint;
+  WINBOOL InROM;
+  KSDATAFORMAT Format;
+} KSWAVETABLE_WAVE_DESC,*PKSWAVETABLE_WAVE_DESC;
+
+#define STATIC_KSPROPSETID_Acoustic_Echo_Cancel				\
+	0xd7a4af8bL,0x3dc1,0x4902,0x91,0xea,0x8a,0x15,0xc9,0x0e,0x05,0xb2
+DEFINE_GUIDSTRUCT("D7A4AF8B-3DC1-4902-91EA-8A15C90E05B2",KSPROPSETID_Acoustic_Echo_Cancel);
+#define KSPROPSETID_Acoustic_Echo_Cancel DEFINE_GUIDNAMED(KSPROPSETID_Acoustic_Echo_Cancel)
+
+typedef enum {
+  KSPROPERTY_AEC_NOISE_FILL_ENABLE = 0,
+  KSPROPERTY_AEC_STATUS,
+  KSPROPERTY_AEC_MODE
+} KSPROPERTY_AEC;
+
+#define AEC_STATUS_FD_HISTORY_UNINITIALIZED		0x0
+#define AEC_STATUS_FD_HISTORY_CONTINUOUSLY_CONVERGED	0x1
+#define AEC_STATUS_FD_HISTORY_PREVIOUSLY_DIVERGED	0x2
+#define AEC_STATUS_FD_CURRENTLY_CONVERGED		0x8
+
+#define AEC_MODE_PASS_THROUGH				0x0
+#define AEC_MODE_HALF_DUPLEX				0x1
+#define AEC_MODE_FULL_DUPLEX				0x2
+
+#define STATIC_KSPROPSETID_Wave						\
+	0x924e54b0L,0x630f,0x11cf,0xad,0xa7,0x08,0x00,0x3e,0x30,0x49,0x4a
+DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a",KSPROPSETID_Wave);
+#define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)
+
+typedef enum {
+  KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
+  KSPROPERTY_WAVE_INPUT_CAPABILITIES,
+  KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
+  KSPROPERTY_WAVE_BUFFER,
+  KSPROPERTY_WAVE_FREQUENCY,
+  KSPROPERTY_WAVE_VOLUME,
+  KSPROPERTY_WAVE_PAN
+} KSPROPERTY_WAVE;
+
+typedef struct {
+  ULONG ulDeviceType;
+} KSWAVE_COMPATCAPS,*PKSWAVE_COMPATCAPS;
+
+#define KSWAVE_COMPATCAPS_INPUT		0x00000000
+#define KSWAVE_COMPATCAPS_OUTPUT	0x00000001
+
+typedef struct {
+  ULONG MaximumChannelsPerConnection;
+  ULONG MinimumBitsPerSample;
+  ULONG MaximumBitsPerSample;
+  ULONG MinimumSampleFrequency;
+  ULONG MaximumSampleFrequency;
+  ULONG TotalConnections;
+  ULONG ActiveConnections;
+} KSWAVE_INPUT_CAPABILITIES,*PKSWAVE_INPUT_CAPABILITIES;
+
+typedef struct {
+  ULONG MaximumChannelsPerConnection;
+  ULONG MinimumBitsPerSample;
+  ULONG MaximumBitsPerSample;
+  ULONG MinimumSampleFrequency;
+  ULONG MaximumSampleFrequency;
+  ULONG TotalConnections;
+  ULONG StaticConnections;
+  ULONG StreamingConnections;
+  ULONG ActiveConnections;
+  ULONG ActiveStaticConnections;
+  ULONG ActiveStreamingConnections;
+  ULONG Total3DConnections;
+  ULONG Static3DConnections;
+  ULONG Streaming3DConnections;
+  ULONG Active3DConnections;
+  ULONG ActiveStatic3DConnections;
+  ULONG ActiveStreaming3DConnections;
+  ULONG TotalSampleMemory;
+  ULONG FreeSampleMemory;
+  ULONG LargestFreeContiguousSampleMemory;
+} KSWAVE_OUTPUT_CAPABILITIES,*PKSWAVE_OUTPUT_CAPABILITIES;
+
+typedef struct {
+  LONG LeftAttenuation;
+  LONG RightAttenuation;
+} KSWAVE_VOLUME,*PKSWAVE_VOLUME;
+
+#define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING	0x00000001
+#define KSWAVE_BUFFER_ATTRIBUTEF_STATIC		0x00000002
+
+typedef struct {
+  ULONG Attributes;
+  ULONG BufferSize;
+  PVOID BufferAddress;
+} KSWAVE_BUFFER,*PKSWAVE_BUFFER;
+
+#define STATIC_KSMUSIC_TECHNOLOGY_PORT					\
+	0x86C92E60L,0x62E8,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_PORT);
+#define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)
+
+#define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH				\
+	0x0ECF4380L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_SQSYNTH);
+#define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)
+
+#define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH				\
+	0x252C5C80L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_FMSYNTH);
+#define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)
+
+#define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE				\
+	0x394EC7C0L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_WAVETABLE);
+#define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)
+
+#define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH				\
+	0x37407736L,0x3620,0x11D1,0x85,0xD3,0x00,0x00,0xF8,0x75,0x43,0x80
+DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380",KSMUSIC_TECHNOLOGY_SWSYNTH);
+#define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)
+
+#define STATIC_KSPROPSETID_WaveTable					\
+	0x8539E660L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000",KSPROPSETID_WaveTable);
+#define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)
+
+typedef enum {
+  KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
+  KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
+  KSPROPERTY_WAVETABLE_MEMORY,
+  KSPROPERTY_WAVETABLE_VERSION
+} KSPROPERTY_WAVETABLE;
+
+typedef struct {
+  KSDATARANGE DataRange;
+  GUID Technology;
+  ULONG Channels;
+  ULONG Notes;
+  ULONG ChannelMask;
+} KSDATARANGE_MUSIC,*PKSDATARANGE_MUSIC;
+
+#define STATIC_KSEVENTSETID_Cyclic					\
+	0x142C1AC0L,0x072A,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000",KSEVENTSETID_Cyclic);
+#define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)
+
+typedef enum {
+  KSEVENT_CYCLIC_TIME_INTERVAL
+} KSEVENT_CYCLIC_TIME;
+
+#define STATIC_KSPROPSETID_Cyclic					\
+	0x3FFEAEA0L,0x2BEE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000",KSPROPSETID_Cyclic);
+#define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)
+
+typedef enum {
+  KSPROPERTY_CYCLIC_POSITION
+} KSPROPERTY_CYCLIC;
+
+#define STATIC_KSEVENTSETID_AudioControlChange				\
+	0xE85E9698L,0xFA2F,0x11D1,0x95,0xBD,0x00,0xC0,0x4F,0xB9,0x25,0xD3
+DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3",KSEVENTSETID_AudioControlChange);
+#define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)
+
+typedef enum {
+  KSEVENT_CONTROL_CHANGE
+} KSEVENT_AUDIO_CONTROL_CHANGE;
+
+#define STATIC_KSEVENTSETID_LoopedStreaming				\
+	0x4682B940L,0xC6EF,0x11D0,0x96,0xD8,0x00,0xAA,0x00,0x51,0xE5,0x1D
+DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D",KSEVENTSETID_LoopedStreaming);
+#define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)
+
+typedef enum {
+  KSEVENT_LOOPEDSTREAMING_POSITION
+} KSEVENT_LOOPEDSTREAMING;
+
+typedef struct {
+  KSEVENTDATA KsEventData;
+  DWORDLONG Position;
+} LOOPEDSTREAMING_POSITION_EVENT_DATA,*PLOOPEDSTREAMING_POSITION_EVENT_DATA;
+
+#define STATIC_KSPROPSETID_Sysaudio					\
+	0xCBE3FAA0L,0xCC75,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6
+DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio);
+#define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)
+
+typedef enum {
+  KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,
+  KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME = 2,
+  KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE = 3,
+  KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME = 4,
+  KSPROPERTY_SYSAUDIO_SELECT_GRAPH = 5,
+  KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE = 6,
+  KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT = 7,
+  KSPROPERTY_SYSAUDIO_INSTANCE_INFO = 14,
+  KSPROPERTY_SYSAUDIO_COMPONENT_ID = 16
+} KSPROPERTY_SYSAUDIO;
+
+typedef struct {
+  KSPROPERTY Property;
+  GUID PinCategory;
+  GUID PinName;
+} SYSAUDIO_CREATE_VIRTUAL_SOURCE,*PSYSAUDIO_CREATE_VIRTUAL_SOURCE;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG PinId;
+  ULONG NodeId;
+  ULONG Flags;
+  ULONG Reserved;
+} SYSAUDIO_SELECT_GRAPH,*PSYSAUDIO_SELECT_GRAPH;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Flags;
+  ULONG DeviceNumber;
+} SYSAUDIO_INSTANCE_INFO,*PSYSAUDIO_INSTANCE_INFO;
+
+#define SYSAUDIO_FLAGS_DONT_COMBINE_PINS	0x00000001
+
+#define STATIC_KSPROPSETID_Sysaudio_Pin					\
+	0xA3A53220L,0xC6E4,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6
+DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio_Pin);
+#define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)
+
+typedef enum {
+  KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE = 1
+} KSPROPERTY_SYSAUDIO_PIN;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG MixerPinId;
+  ULONG Reserved;
+} SYSAUDIO_ATTACH_VIRTUAL_SOURCE,*PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG NodeId;
+  ULONG Reserved;
+} KSNODEPROPERTY,*PKSNODEPROPERTY;
+
+typedef struct {
+  KSNODEPROPERTY NodeProperty;
+  LONG Channel;
+  ULONG Reserved;
+} KSNODEPROPERTY_AUDIO_CHANNEL,*PKSNODEPROPERTY_AUDIO_CHANNEL;
+
+typedef struct {
+  KSNODEPROPERTY NodeProperty;
+  ULONG DevSpecificId;
+  ULONG DeviceInfo;
+  ULONG Length;
+} KSNODEPROPERTY_AUDIO_DEV_SPECIFIC,*PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
+
+typedef struct {
+  KSNODEPROPERTY NodeProperty;
+  PVOID ListenerId;
+#ifndef _WIN64
+  ULONG Reserved;
+#endif
+} KSNODEPROPERTY_AUDIO_3D_LISTENER,*PKSNODEPROPERTY_AUDIO_3D_LISTENER;
+
+typedef struct {
+  KSNODEPROPERTY NodeProperty;
+  PVOID AppContext;
+  ULONG Length;
+#ifndef _WIN64
+  ULONG Reserved;
+#endif
+} KSNODEPROPERTY_AUDIO_PROPERTY,*PKSNODEPROPERTY_AUDIO_PROPERTY;
+
+#define STATIC_KSPROPSETID_AudioGfx					\
+	0x79a9312eL,0x59ae,0x43b0,0xa3,0x50,0x8b,0x5,0x28,0x4c,0xab,0x24
+DEFINE_GUIDSTRUCT("79A9312E-59AE-43b0-A350-8B05284CAB24",KSPROPSETID_AudioGfx);
+#define KSPROPSETID_AudioGfx DEFINE_GUIDNAMED(KSPROPSETID_AudioGfx)
+
+typedef enum {
+  KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID,
+  KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
+} KSPROPERTY_AUDIOGFX;
+
+#define STATIC_KSPROPSETID_Linear					\
+	0x5A2FFE80L,0x16B9,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000",KSPROPSETID_Linear);
+#define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)
+
+typedef enum {
+  KSPROPERTY_LINEAR_POSITION
+} KSPROPERTY_LINEAR;
+
+#define STATIC_KSDATAFORMAT_TYPE_MUSIC					\
+	0xE725D360L,0x62CC,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000",KSDATAFORMAT_TYPE_MUSIC);
+#define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)
+
+#define STATIC_KSDATAFORMAT_TYPE_MIDI					\
+	0x7364696DL,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71
+DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_MIDI);
+#define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI				\
+	0x1D262760L,0xE957,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI);
+#define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS				\
+	0x2CA15FA0L,0x6CFE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
+DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI_BUS);
+#define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI				\
+	0x4995DAF0L,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFFMIDI);
+#define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)
+
+typedef struct {
+  ULONG TimeDeltaMs;
+
+  ULONG ByteCount;
+} KSMUSICFORMAT,*PKSMUSICFORMAT;
+
+#define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM		\
+	0x36523b11L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM);
+#define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)
+
+#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET			\
+	0x36523b12L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PES_PACKET);
+#define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)
+
+#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER			\
+	0x36523b13L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER);
+#define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO		\
+	0x36523b21L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO);
+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO		\
+	0x36523b22L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO		\
+	0x36523b23L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO);
+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO		\
+	0x36523b24L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO			\
+	0x36523b25L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO		\
+	0x36523b31L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO);
+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO		\
+	0x36523b32L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO		\
+	0x36523b33L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO);
+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO		\
+	0x36523b34L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO			\
+	0x36523b35L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a
+DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO				\
+	0xa0af4f81L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_VIDEO);
+#define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO				\
+		0xa0af4f82L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet				\
+	0xe436eb80,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70
+DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Packet);
+#define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload			\
+	0xe436eb81,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70
+DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Payload);
+#define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video				\
+	0xe436eb86,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70
+DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Video);
+#define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO			\
+	0x05589f82L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a
+DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);
+#define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)
+
+#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES				\
+	0xe06d8020L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PES);
+#define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)
+
+#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM				\
+	0xe06d8022L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PROGRAM);
+#define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)
+
+#define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT			\
+	0xe06d8023L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);
+#define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO				\
+	0xe06d8026L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);
+#define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO			\
+	0xe06d80e3L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);
+#define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)
+
+#define STATIC_KSPROPSETID_Mpeg2Vid					\
+	0xC8E11B60L,0x0CC9,0x11D0,0xBD,0x69,0x00,0x35,0x05,0xC1,0x03,0xA9
+DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9",KSPROPSETID_Mpeg2Vid);
+#define KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED(KSPROPSETID_Mpeg2Vid)
+
+typedef enum {
+  KSPROPERTY_MPEG2VID_MODES,
+  KSPROPERTY_MPEG2VID_CUR_MODE,
+  KSPROPERTY_MPEG2VID_4_3_RECT,
+  KSPROPERTY_MPEG2VID_16_9_RECT,
+  KSPROPERTY_MPEG2VID_16_9_PANSCAN
+} KSPROPERTY_MPEG2VID;
+
+#define KSMPEGVIDMODE_PANSCAN	0x0001
+#define KSMPEGVIDMODE_LTRBOX	0x0002
+#define KSMPEGVIDMODE_SCALE	0x0004
+
+typedef struct _KSMPEGVID_RECT {
+  ULONG StartX;
+  ULONG StartY;
+  ULONG EndX;
+  ULONG EndY;
+} KSMPEGVID_RECT,*PKSMPEGVID_RECT;
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO				\
+	0xe06d802bL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO			\
+	0xe06d80e5L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO				\
+	0xe06d8032L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO			\
+	0xe06d80e6L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO				\
+	0xe06d802cL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_AC3_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO				\
+	0xe06d80e4L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_AC3_AUDIO);
+#define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)
+
+#define STATIC_KSPROPSETID_AC3						\
+	0xBFABE720L,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00
+DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000",KSPROPSETID_AC3);
+#define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)
+
+typedef enum {
+  KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,
+  KSPROPERTY_AC3_ALTERNATE_AUDIO,
+  KSPROPERTY_AC3_DOWNMIX,
+  KSPROPERTY_AC3_BIT_STREAM_MODE,
+  KSPROPERTY_AC3_DIALOGUE_LEVEL,
+  KSPROPERTY_AC3_LANGUAGE_CODE,
+  KSPROPERTY_AC3_ROOM_TYPE
+} KSPROPERTY_AC3;
+
+typedef struct {
+  WINBOOL fRepeatPreviousBlock;
+  WINBOOL fErrorInCurrentBlock;
+} KSAC3_ERROR_CONCEALMENT,*PKSAC3_ERROR_CONCEALMENT;
+
+typedef struct {
+  WINBOOL fStereo;
+  ULONG DualMode;
+} KSAC3_ALTERNATE_AUDIO,*PKSAC3_ALTERNATE_AUDIO;
+
+#define KSAC3_ALTERNATE_AUDIO_1		1
+#define KSAC3_ALTERNATE_AUDIO_2		2
+#define KSAC3_ALTERNATE_AUDIO_BOTH	3
+
+typedef struct {
+  WINBOOL fDownMix;
+  WINBOOL fDolbySurround;
+} KSAC3_DOWNMIX,*PKSAC3_DOWNMIX;
+
+typedef struct {
+  LONG BitStreamMode;
+} KSAC3_BIT_STREAM_MODE,*PKSAC3_BIT_STREAM_MODE;
+
+#define KSAC3_SERVICE_MAIN_AUDIO	0
+#define KSAC3_SERVICE_NO_DIALOG		1
+#define KSAC3_SERVICE_VISUALLY_IMPAIRED	2
+#define KSAC3_SERVICE_HEARING_IMPAIRED	3
+#define KSAC3_SERVICE_DIALOG_ONLY	4
+#define KSAC3_SERVICE_COMMENTARY	5
+#define KSAC3_SERVICE_EMERGENCY_FLASH	6
+#define KSAC3_SERVICE_VOICE_OVER	7
+
+typedef struct {
+  ULONG DialogueLevel;
+} KSAC3_DIALOGUE_LEVEL,*PKSAC3_DIALOGUE_LEVEL;
+
+typedef struct {
+  WINBOOL fLargeRoom;
+} KSAC3_ROOM_TYPE,*PKSAC3_ROOM_TYPE;
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO				\
+	0xe06d8033L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_DTS_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO				\
+	0xe06d8034L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SDDS_AUDIO);
+#define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO)
+
+#define STATIC_KSPROPSETID_AudioDecoderOut				\
+	0x6ca6e020L,0x43bd,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9
+DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9",KSPROPSETID_AudioDecoderOut);
+#define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)
+
+typedef enum {
+  KSPROPERTY_AUDDECOUT_MODES,
+  KSPROPERTY_AUDDECOUT_CUR_MODE
+} KSPROPERTY_AUDDECOUT;
+
+#define KSAUDDECOUTMODE_STEREO_ANALOG	0x0001
+#define KSAUDDECOUTMODE_PCM_51		0x0002
+#define KSAUDDECOUTMODE_SPDIFF		0x0004
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE				\
+	0xe06d802dL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea
+DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SUBPICTURE);
+#define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)
+
+#define STATIC_KSPROPSETID_DvdSubPic					\
+	0xac390460L,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9
+DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9",KSPROPSETID_DvdSubPic);
+#define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)
+
+typedef enum {
+  KSPROPERTY_DVDSUBPIC_PALETTE,
+  KSPROPERTY_DVDSUBPIC_HLI,
+  KSPROPERTY_DVDSUBPIC_COMPOSIT_ON
+} KSPROPERTY_DVDSUBPIC;
+
+typedef struct _KS_DVD_YCrCb {
+  UCHAR Reserved;
+  UCHAR Y;
+  UCHAR Cr;
+  UCHAR Cb;
+} KS_DVD_YCrCb,*PKS_DVD_YCrCb;
+
+typedef struct _KS_DVD_YUV {
+  UCHAR Reserved;
+  UCHAR Y;
+  UCHAR V;
+  UCHAR U;
+} KS_DVD_YUV,*PKS_DVD_YUV;
+
+typedef struct _KSPROPERTY_SPPAL {
+  KS_DVD_YUV sppal[16];
+} KSPROPERTY_SPPAL,*PKSPROPERTY_SPPAL;
+
+typedef struct _KS_COLCON {
+  UCHAR emph1col:4;
+  UCHAR emph2col:4;
+  UCHAR backcol:4;
+  UCHAR patcol:4;
+  UCHAR emph1con:4;
+  UCHAR emph2con:4;
+  UCHAR backcon:4;
+  UCHAR patcon:4;
+} KS_COLCON,*PKS_COLCON;
+
+typedef struct _KSPROPERTY_SPHLI {
+  USHORT HLISS;
+  USHORT Reserved;
+  ULONG StartPTM;
+  ULONG EndPTM;
+  USHORT StartX;
+  USHORT StartY;
+  USHORT StopX;
+  USHORT StopY;
+  KS_COLCON ColCon;
+} KSPROPERTY_SPHLI,*PKSPROPERTY_SPHLI;
+
+typedef WINBOOL KSPROPERTY_COMPOSIT_ON,*PKSPROPERTY_COMPOSIT_ON;
+
+#define STATIC_KSPROPSETID_CopyProt					\
+	0x0E8A0A40L,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3
+DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3",KSPROPSETID_CopyProt);
+#define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)
+
+typedef enum {
+  KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,
+  KSPROPERTY_DVDCOPY_DVD_KEY1,
+  KSPROPERTY_DVDCOPY_DEC_KEY2,
+  KSPROPERTY_DVDCOPY_TITLE_KEY,
+  KSPROPERTY_COPY_MACROVISION,
+  KSPROPERTY_DVDCOPY_REGION,
+  KSPROPERTY_DVDCOPY_SET_COPY_STATE,
+  KSPROPERTY_DVDCOPY_DISC_KEY = 0x80
+} KSPROPERTY_COPYPROT;
+
+typedef struct _KS_DVDCOPY_CHLGKEY {
+  BYTE ChlgKey[10];
+  BYTE Reserved[2];
+} KS_DVDCOPY_CHLGKEY,*PKS_DVDCOPY_CHLGKEY;
+
+typedef struct _KS_DVDCOPY_BUSKEY {
+  BYTE BusKey[5];
+  BYTE Reserved[1];
+} KS_DVDCOPY_BUSKEY,*PKS_DVDCOPY_BUSKEY;
+
+typedef struct _KS_DVDCOPY_DISCKEY {
+  BYTE DiscKey[2048];
+} KS_DVDCOPY_DISCKEY,*PKS_DVDCOPY_DISCKEY;
+
+typedef struct _KS_DVDCOPY_REGION {
+  UCHAR Reserved;
+  UCHAR RegionData;
+  UCHAR Reserved2[2];
+} KS_DVDCOPY_REGION,*PKS_DVDCOPY_REGION;
+
+typedef struct _KS_DVDCOPY_TITLEKEY {
+  ULONG KeyFlags;
+  ULONG ReservedNT[2];
+  UCHAR TitleKey[6];
+  UCHAR Reserved[2];
+} KS_DVDCOPY_TITLEKEY,*PKS_DVDCOPY_TITLEKEY;
+
+typedef struct _KS_COPY_MACROVISION {
+  ULONG MACROVISIONLevel;
+} KS_COPY_MACROVISION,*PKS_COPY_MACROVISION;
+
+typedef struct _KS_DVDCOPY_SET_COPY_STATE {
+  ULONG DVDCopyState;
+} KS_DVDCOPY_SET_COPY_STATE,*PKS_DVDCOPY_SET_COPY_STATE;
+
+typedef enum {
+  KS_DVDCOPYSTATE_INITIALIZE,
+  KS_DVDCOPYSTATE_INITIALIZE_TITLE,
+  KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
+  KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
+  KS_DVDCOPYSTATE_DONE
+} KS_DVDCOPYSTATE;
+
+typedef enum {
+  KS_MACROVISION_DISABLED,
+  KS_MACROVISION_LEVEL1,
+  KS_MACROVISION_LEVEL2,
+  KS_MACROVISION_LEVEL3
+} KS_COPY_MACROVISION_LEVEL,*PKS_COPY_MACROVISION_LEVEL;
+
+#define KS_DVD_CGMS_RESERVED_MASK	0x00000078
+
+#define KS_DVD_CGMS_COPY_PROTECT_MASK	0x00000018
+#define KS_DVD_CGMS_COPY_PERMITTED	0x00000000
+#define KS_DVD_CGMS_COPY_ONCE		0x00000010
+#define KS_DVD_CGMS_NO_COPY		0x00000018
+
+#define KS_DVD_COPYRIGHT_MASK		0x00000040
+#define KS_DVD_NOT_COPYRIGHTED		0x00000000
+#define KS_DVD_COPYRIGHTED		0x00000040
+
+#define KS_DVD_SECTOR_PROTECT_MASK	0x00000020
+#define KS_DVD_SECTOR_NOT_PROTECTED	0x00000000
+#define KS_DVD_SECTOR_PROTECTED		0x00000020
+
+#define STATIC_KSCATEGORY_TVTUNER					\
+	0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4
+DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVTUNER);
+#define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)
+
+#define STATIC_KSCATEGORY_CROSSBAR					\
+	0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4
+DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_CROSSBAR);
+#define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)
+
+#define STATIC_KSCATEGORY_TVAUDIO					\
+	0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4
+DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVAUDIO);
+#define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)
+
+#define STATIC_KSCATEGORY_VPMUX						\
+	0xa799a803L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4
+DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_VPMUX);
+#define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)
+
+#define STATIC_KSCATEGORY_VBICODEC					\
+	0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f
+DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f",KSCATEGORY_VBICODEC);
+#define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo				\
+	0x5a9b6a40L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVideo);
+#define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI				\
+	0x5a9b6a41L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVBI);
+#define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO				\
+	0x05589f80L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a
+DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_VIDEOINFO);
+#define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2			\
+	0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VIDEOINFO2);
+#define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)
+
+#define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO				\
+	0x0482dde1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65
+DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGVIDEO);
+#define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO			\
+	0x0482dde0L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65
+DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);
+#define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)
+
+#define STATIC_KSDATAFORMAT_TYPE_ANALOGAUDIO				\
+	0x0482dee1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65
+DEFINE_GUIDSTRUCT("0482DEE1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGAUDIO);
+#define KSDATAFORMAT_TYPE_ANALOGAUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGAUDIO)
+
+#define STATIC_KSDATAFORMAT_SPECIFIER_VBI				\
+	0xf72a76e0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VBI);
+#define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)
+
+#define STATIC_KSDATAFORMAT_TYPE_VBI					\
+	0xf72a76e1L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_TYPE_VBI);
+#define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_RAW8				\
+	0xca20d9a0,0x3e3e,0x11d1,0x9b,0xf9,0x0,0xc0,0x4f,0xbb,0xde,0xbf
+DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf",KSDATAFORMAT_SUBTYPE_RAW8);
+#define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_CC					\
+	0x33214cc1,0x11f,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe
+DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE",KSDATAFORMAT_SUBTYPE_CC);
+#define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS				\
+	0xf72a76e2L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_NABTS);
+#define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT				\
+	0xf72a76e3L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_TELETEXT);
+#define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)
+
+#define KS_BI_RGB		0L
+#define KS_BI_RLE8		1L
+#define KS_BI_RLE4		2L
+#define KS_BI_BITFIELDS		3L
+
+typedef struct tagKS_RGBQUAD {
+  BYTE rgbBlue;
+  BYTE rgbGreen;
+  BYTE rgbRed;
+  BYTE rgbReserved;
+} KS_RGBQUAD,*PKS_RGBQUAD;
+
+#define KS_iPALETTE_COLORS	256
+#define KS_iEGA_COLORS		16
+#define KS_iMASK_COLORS		3
+#define KS_iTRUECOLOR		16
+#define KS_iRED			0
+#define KS_iGREEN		1
+#define KS_iBLUE		2
+#define KS_iPALETTE		8
+#define KS_iMAXBITS		8
+#define KS_SIZE_EGA_PALETTE	(KS_iEGA_COLORS *sizeof(KS_RGBQUAD))
+#define KS_SIZE_PALETTE		(KS_iPALETTE_COLORS *sizeof(KS_RGBQUAD))
+
+typedef struct tagKS_BITMAPINFOHEADER {
+  DWORD biSize;
+  LONG biWidth;
+  LONG biHeight;
+  WORD biPlanes;
+  WORD biBitCount;
+  DWORD biCompression;
+  DWORD biSizeImage;
+  LONG biXPelsPerMeter;
+  LONG biYPelsPerMeter;
+  DWORD biClrUsed;
+  DWORD biClrImportant;
+} KS_BITMAPINFOHEADER,*PKS_BITMAPINFOHEADER;
+
+typedef struct tag_KS_TRUECOLORINFO {
+  DWORD dwBitMasks[KS_iMASK_COLORS];
+  KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
+} KS_TRUECOLORINFO,*PKS_TRUECOLORINFO;
+
+#define KS_WIDTHBYTES(bits)	((DWORD)(((bits)+31) & (~31)) / 8)
+#define KS_DIBWIDTHBYTES(bi)	(DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth *(DWORD)(bi).biBitCount)
+#define KS__DIBSIZE(bi)		(KS_DIBWIDTHBYTES(bi) *(DWORD)(bi).biHeight)
+#define KS_DIBSIZE(bi)		((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
+
+typedef LONGLONG REFERENCE_TIME;
+
+typedef struct tagKS_VIDEOINFOHEADER {
+  RECT rcSource;
+  RECT rcTarget;
+  DWORD dwBitRate;
+  DWORD dwBitErrorRate;
+  REFERENCE_TIME AvgTimePerFrame;
+  KS_BITMAPINFOHEADER bmiHeader;
+} KS_VIDEOINFOHEADER,*PKS_VIDEOINFOHEADER;
+
+typedef struct tagKS_VIDEOINFO {
+  RECT rcSource;
+  RECT rcTarget;
+  DWORD dwBitRate;
+  DWORD dwBitErrorRate;
+  REFERENCE_TIME AvgTimePerFrame;
+  KS_BITMAPINFOHEADER bmiHeader;
+  __MINGW_EXTENSION union {
+    KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
+    DWORD dwBitMasks[KS_iMASK_COLORS];
+    KS_TRUECOLORINFO TrueColorInfo;
+  };
+} KS_VIDEOINFO,*PKS_VIDEOINFO;
+
+#define KS_SIZE_MASKS			(KS_iMASK_COLORS *sizeof(DWORD))
+#define KS_SIZE_PREHEADER		(FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
+
+#define KS_SIZE_VIDEOHEADER(pbmi)	((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
+
+typedef struct tagKS_VBIINFOHEADER {
+  ULONG StartLine;
+  ULONG EndLine;
+  ULONG SamplingFrequency;
+  ULONG MinLineStartTime;
+  ULONG MaxLineStartTime;
+  ULONG ActualLineStartTime;
+  ULONG ActualLineEndTime;
+  ULONG VideoStandard;
+  ULONG SamplesPerLine;
+  ULONG StrideInBytes;
+  ULONG BufferSize;
+} KS_VBIINFOHEADER,*PKS_VBIINFOHEADER;
+
+#define KS_VBIDATARATE_NABTS		(5727272L)
+#define KS_VBIDATARATE_CC		(503493L)
+#define KS_VBISAMPLINGRATE_4X_NABTS	((long)(4*KS_VBIDATARATE_NABTS))
+#define KS_VBISAMPLINGRATE_47X_NABTS	((long)(27000000))
+#define KS_VBISAMPLINGRATE_5X_NABTS	((long)(5*KS_VBIDATARATE_NABTS))
+
+#define KS_47NABTS_SCALER		(KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS)
+
+typedef struct tagKS_AnalogVideoInfo {
+  RECT rcSource;
+  RECT rcTarget;
+  DWORD dwActiveWidth;
+  DWORD dwActiveHeight;
+  REFERENCE_TIME AvgTimePerFrame;
+} KS_ANALOGVIDEOINFO,*PKS_ANALOGVIDEOINFO;
+
+#define KS_TVTUNER_CHANGE_BEGIN_TUNE	0x0001L
+#define KS_TVTUNER_CHANGE_END_TUNE	0x0002L
+
+typedef struct tagKS_TVTUNER_CHANGE_INFO {
+  DWORD dwFlags;
+  DWORD dwCountryCode;
+  DWORD dwAnalogVideoStandard;
+  DWORD dwChannel;
+} KS_TVTUNER_CHANGE_INFO,*PKS_TVTUNER_CHANGE_INFO;
+
+typedef enum {
+  KS_MPEG2Level_Low,
+  KS_MPEG2Level_Main,
+  KS_MPEG2Level_High1440,
+  KS_MPEG2Level_High
+} KS_MPEG2Level;
+
+typedef enum {
+  KS_MPEG2Profile_Simple,
+  KS_MPEG2Profile_Main,
+  KS_MPEG2Profile_SNRScalable,
+  KS_MPEG2Profile_SpatiallyScalable,
+  KS_MPEG2Profile_High
+} KS_MPEG2Profile;
+
+#define KS_INTERLACE_IsInterlaced		0x00000001
+#define KS_INTERLACE_1FieldPerSample		0x00000002
+#define KS_INTERLACE_Field1First		0x00000004
+#define KS_INTERLACE_UNUSED			0x00000008
+#define KS_INTERLACE_FieldPatternMask		0x00000030
+#define KS_INTERLACE_FieldPatField1Only		0x00000000
+#define KS_INTERLACE_FieldPatField2Only		0x00000010
+#define KS_INTERLACE_FieldPatBothRegular	0x00000020
+#define KS_INTERLACE_FieldPatBothIrregular	0x00000030
+#define KS_INTERLACE_DisplayModeMask		0x000000c0
+#define KS_INTERLACE_DisplayModeBobOnly		0x00000000
+#define KS_INTERLACE_DisplayModeWeaveOnly	0x00000040
+#define KS_INTERLACE_DisplayModeBobOrWeave	0x00000080
+
+#define KS_MPEG2_DoPanScan			0x00000001
+#define KS_MPEG2_DVDLine21Field1		0x00000002
+#define KS_MPEG2_DVDLine21Field2		0x00000004
+#define KS_MPEG2_SourceIsLetterboxed		0x00000008
+#define KS_MPEG2_FilmCameraMode			0x00000010
+#define KS_MPEG2_LetterboxAnalogOut		0x00000020
+#define KS_MPEG2_DSS_UserData			0x00000040
+#define KS_MPEG2_DVB_UserData			0x00000080
+#define KS_MPEG2_27MhzTimebase			0x00000100
+
+typedef struct tagKS_VIDEOINFOHEADER2 {
+  RECT rcSource;
+  RECT rcTarget;
+  DWORD dwBitRate;
+  DWORD dwBitErrorRate;
+  REFERENCE_TIME AvgTimePerFrame;
+  DWORD dwInterlaceFlags;
+  DWORD dwCopyProtectFlags;
+  DWORD dwPictAspectRatioX;
+  DWORD dwPictAspectRatioY;
+  DWORD dwReserved1;
+  DWORD dwReserved2;
+  KS_BITMAPINFOHEADER bmiHeader;
+} KS_VIDEOINFOHEADER2,*PKS_VIDEOINFOHEADER2;
+
+typedef struct tagKS_MPEG1VIDEOINFO {
+  KS_VIDEOINFOHEADER hdr;
+  DWORD dwStartTimeCode;
+  DWORD cbSequenceHeader;
+  BYTE bSequenceHeader[1];
+} KS_MPEG1VIDEOINFO,*PKS_MPEG1VIDEOINFO;
+
+#define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO	140
+#define KS_SIZE_MPEG1VIDEOINFO(pv)	(FIELD_OFFSET(KS_MPEG1VIDEOINFO,bSequenceHeader[0]) + (pv)->cbSequenceHeader)
+#define KS_MPEG1_SEQUENCE_INFO(pv)	((const BYTE *)(pv)->bSequenceHeader)
+
+typedef struct tagKS_MPEGVIDEOINFO2 {
+  KS_VIDEOINFOHEADER2 hdr;
+  DWORD dwStartTimeCode;
+  DWORD cbSequenceHeader;
+  DWORD dwProfile;
+  DWORD dwLevel;
+  DWORD dwFlags;
+  DWORD bSequenceHeader[1];
+} KS_MPEGVIDEOINFO2,*PKS_MPEGVIDEOINFO2;
+
+#define KS_SIZE_MPEGVIDEOINFO2(pv)	(FIELD_OFFSET(KS_MPEGVIDEOINFO2,bSequenceHeader[0]) + (pv)->cbSequenceHeader)
+#define KS_MPEG1_SEQUENCE_INFO(pv)	((const BYTE *)(pv)->bSequenceHeader)
+
+#define KS_MPEGAUDIOINFO_27MhzTimebase	0x00000001
+
+typedef struct tagKS_MPEAUDIOINFO {
+  DWORD dwFlags;
+  DWORD dwReserved1;
+  DWORD dwReserved2;
+  DWORD dwReserved3;
+} KS_MPEGAUDIOINFO,*PKS_MPEGAUDIOINFO;
+
+typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {
+  KSDATAFORMAT DataFormat;
+  KS_VIDEOINFOHEADER VideoInfoHeader;
+} KS_DATAFORMAT_VIDEOINFOHEADER,*PKS_DATAFORMAT_VIDEOINFOHEADER;
+
+typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {
+  KSDATAFORMAT DataFormat;
+  KS_VIDEOINFOHEADER2 VideoInfoHeader2;
+} KS_DATAFORMAT_VIDEOINFOHEADER2,*PKS_DATAFORMAT_VIDEOINFOHEADER2;
+
+typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {
+  KSDATAFORMAT DataFormat;
+  KS_VIDEOINFO VideoInfo;
+} KS_DATAFORMAT_VIDEOINFO_PALETTE,*PKS_DATAFORMAT_VIDEOINFO_PALETTE;
+
+typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {
+  KSDATAFORMAT DataFormat;
+  KS_VBIINFOHEADER VBIInfoHeader;
+} KS_DATAFORMAT_VBIINFOHEADER,*PKS_DATAFORMAT_VBIINFOHEADER;
+
+typedef struct _KS_VIDEO_STREAM_CONFIG_CAPS {
+  GUID guid;
+  ULONG VideoStandard;
+  SIZE InputSize;
+  SIZE MinCroppingSize;
+  SIZE MaxCroppingSize;
+  int CropGranularityX;
+  int CropGranularityY;
+  int CropAlignX;
+  int CropAlignY;
+  SIZE MinOutputSize;
+  SIZE MaxOutputSize;
+  int OutputGranularityX;
+  int OutputGranularityY;
+  int StretchTapsX;
+  int StretchTapsY;
+  int ShrinkTapsX;
+  int ShrinkTapsY;
+  LONGLONG MinFrameInterval;
+  LONGLONG MaxFrameInterval;
+  LONG MinBitsPerSecond;
+  LONG MaxBitsPerSecond;
+} KS_VIDEO_STREAM_CONFIG_CAPS,*PKS_VIDEO_STREAM_CONFIG_CAPS;
+
+typedef struct tagKS_DATARANGE_VIDEO {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_VIDEOINFOHEADER VideoInfoHeader;
+} KS_DATARANGE_VIDEO,*PKS_DATARANGE_VIDEO;
+
+typedef struct tagKS_DATARANGE_VIDEO2 {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_VIDEOINFOHEADER2 VideoInfoHeader;
+} KS_DATARANGE_VIDEO2,*PKS_DATARANGE_VIDEO2;
+
+typedef struct tagKS_DATARANGE_MPEG1_VIDEO {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_MPEG1VIDEOINFO VideoInfoHeader;
+} KS_DATARANGE_MPEG1_VIDEO,*PKS_DATARANGE_MPEG1_VIDEO;
+
+typedef struct tagKS_DATARANGE_MPEG2_VIDEO {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_MPEGVIDEOINFO2 VideoInfoHeader;
+} KS_DATARANGE_MPEG2_VIDEO,*PKS_DATARANGE_MPEG2_VIDEO;
+
+typedef struct tagKS_DATARANGE_VIDEO_PALETTE {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_VIDEOINFO VideoInfo;
+} KS_DATARANGE_VIDEO_PALETTE,*PKS_DATARANGE_VIDEO_PALETTE;
+
+typedef struct tagKS_DATARANGE_VIDEO_VBI {
+  KSDATARANGE DataRange;
+  WINBOOL bFixedSizeSamples;
+  WINBOOL bTemporalCompression;
+  DWORD StreamDescriptionFlags;
+  DWORD MemoryAllocationFlags;
+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
+  KS_VBIINFOHEADER VBIInfoHeader;
+} KS_DATARANGE_VIDEO_VBI,*PKS_DATARANGE_VIDEO_VBI;
+
+typedef struct tagKS_DATARANGE_ANALOGVIDEO {
+  KSDATARANGE DataRange;
+  KS_ANALOGVIDEOINFO AnalogVideoInfo;
+} KS_DATARANGE_ANALOGVIDEO,*PKS_DATARANGE_ANALOGVIDEO;
+
+#define KS_VIDEOSTREAM_PREVIEW		0x0001
+#define KS_VIDEOSTREAM_CAPTURE		0x0002
+#define KS_VIDEOSTREAM_VBI		0x0010
+#define KS_VIDEOSTREAM_NABTS		0x0020
+#define KS_VIDEOSTREAM_CC		0x0100
+#define KS_VIDEOSTREAM_EDS		0x0200
+#define KS_VIDEOSTREAM_TELETEXT		0x0400
+#define KS_VIDEOSTREAM_STILL		0x1000
+#define KS_VIDEOSTREAM_IS_VPE		0x8000
+
+#define KS_VIDEO_ALLOC_VPE_SYSTEM	0x0001
+#define KS_VIDEO_ALLOC_VPE_DISPLAY	0x0002
+#define KS_VIDEO_ALLOC_VPE_AGP		0x0004
+
+#define STATIC_KSPROPSETID_VBICAP_PROPERTIES				\
+	0xf162c607,0x7b35,0x496f,0xad,0x7f,0x2d,0xca,0x3b,0x46,0xb7,0x18
+DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718",KSPROPSETID_VBICAP_PROPERTIES);
+#define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES)
+
+typedef enum {
+  KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01
+} KSPROPERTY_VBICAP;
+
+typedef struct _VBICAP_PROPERTIES_PROTECTION_S {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  ULONG Status;
+} VBICAP_PROPERTIES_PROTECTION_S,*PVBICAP_PROPERTIES_PROTECTION_S;
+
+#define KS_VBICAP_PROTECTION_MV_PRESENT				0x0001L
+#define KS_VBICAP_PROTECTION_MV_HARDWARE			0x0002L
+#define KS_VBICAP_PROTECTION_MV_DETECTED			0x0004L
+
+#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE			0x800
+#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE	0x810
+
+#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE	0x820
+#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE	0x830
+
+#define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE		0x840
+#define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE	0x850
+
+#define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE		0x860
+#define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE		0x870
+
+#define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE	0x880
+#define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE	0x890
+
+#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE	0x8A0
+#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE	0x8B0
+
+#define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE	0x8F0
+
+#define STATIC_KSDATAFORMAT_TYPE_NABTS					\
+	0xe757bca0,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f
+DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_TYPE_NABTS);
+#define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC				\
+	0xe757bca1,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f
+DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_SUBTYPE_NABTS_FEC);
+#define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)
+
+#define MAX_NABTS_VBI_LINES_PER_FIELD	11
+#define NABTS_LINES_PER_BUNDLE		16
+#define NABTS_PAYLOAD_PER_LINE		28
+#define NABTS_BYTES_PER_LINE		36
+
+typedef struct _NABTSFEC_BUFFER {
+  ULONG dataSize;
+  USHORT groupID;
+  USHORT Reserved;
+  UCHAR data[NABTS_LINES_PER_BUNDLE *NABTS_PAYLOAD_PER_LINE];
+} NABTSFEC_BUFFER,*PNABTSFEC_BUFFER;
+
+#define STATIC_KSPROPSETID_VBICodecFiltering				\
+	0xcafeb0caL,0x8715,0x11d0,0xbd,0x6a,0x00,0x35,0xc0,0xed,0xba,0xbe
+DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe",KSPROPSETID_VBICodecFiltering);
+#define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)
+
+typedef enum {
+  KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,
+  KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
+  KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
+  KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
+  KSPROPERTY_VBICODECFILTERING_STATISTICS
+} KSPROPERTY_VBICODECFILTERING;
+
+typedef struct _VBICODECFILTERING_SCANLINES {
+  DWORD DwordBitArray[32];
+} VBICODECFILTERING_SCANLINES,*PVBICODECFILTERING_SCANLINES;
+
+typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {
+  DWORD SubstreamMask[128];
+} VBICODECFILTERING_NABTS_SUBSTREAMS,*PVBICODECFILTERING_NABTS_SUBSTREAMS;
+
+typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {
+  DWORD SubstreamMask;
+} VBICODECFILTERING_CC_SUBSTREAMS,*PVBICODECFILTERING_CC_SUBSTREAMS;
+
+#define KS_CC_SUBSTREAM_ODD		0x0001L
+#define KS_CC_SUBSTREAM_EVEN		0x0002L
+
+#define KS_CC_SUBSTREAM_FIELD1_MASK	0x00F0L
+#define KS_CC_SUBSTREAM_SERVICE_CC1	0x0010L
+#define KS_CC_SUBSTREAM_SERVICE_CC2	0x0020L
+#define KS_CC_SUBSTREAM_SERVICE_T1	0x0040L
+#define KS_CC_SUBSTREAM_SERVICE_T2	0x0080L
+
+#define KS_CC_SUBSTREAM_FIELD2_MASK	0x1F00L
+#define KS_CC_SUBSTREAM_SERVICE_CC3	0x0100L
+#define KS_CC_SUBSTREAM_SERVICE_CC4	0x0200L
+#define KS_CC_SUBSTREAM_SERVICE_T3	0x0400L
+#define KS_CC_SUBSTREAM_SERVICE_T4	0x0800L
+#define KS_CC_SUBSTREAM_SERVICE_XDS	0x1000L
+
+#define CC_MAX_HW_DECODE_LINES		12
+typedef struct _CC_BYTE_PAIR {
+  BYTE Decoded[2];
+  USHORT Reserved;
+} CC_BYTE_PAIR,*PCC_BYTE_PAIR;
+
+typedef struct _CC_HW_FIELD {
+  VBICODECFILTERING_SCANLINES ScanlinesRequested;
+  ULONG fieldFlags;
+  LONGLONG PictureNumber;
+  CC_BYTE_PAIR Lines[CC_MAX_HW_DECODE_LINES];
+} CC_HW_FIELD,*PCC_HW_FIELD;
+
+#ifndef PACK_PRAGMAS_NOT_SUPPORTED
+#include <pshpack1.h>
+#endif
+typedef struct _NABTS_BUFFER_LINE {
+  BYTE Confidence;
+  BYTE Bytes[NABTS_BYTES_PER_LINE];
+} NABTS_BUFFER_LINE,*PNABTS_BUFFER_LINE;
+
+#define NABTS_BUFFER_PICTURENUMBER_SUPPORT	1
+typedef struct _NABTS_BUFFER {
+  VBICODECFILTERING_SCANLINES ScanlinesRequested;
+  LONGLONG PictureNumber;
+  NABTS_BUFFER_LINE NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];
+} NABTS_BUFFER,*PNABTS_BUFFER;
+#ifndef PACK_PRAGMAS_NOT_SUPPORTED
+#include <poppack.h>
+#endif
+
+#define WST_TVTUNER_CHANGE_BEGIN_TUNE	0x1000L
+#define WST_TVTUNER_CHANGE_END_TUNE	0x2000L
+
+#define MAX_WST_VBI_LINES_PER_FIELD	17
+#define WST_BYTES_PER_LINE		42
+
+typedef struct _WST_BUFFER_LINE {
+  BYTE Confidence;
+  BYTE Bytes[WST_BYTES_PER_LINE];
+} WST_BUFFER_LINE,*PWST_BUFFER_LINE;
+
+typedef struct _WST_BUFFER {
+  VBICODECFILTERING_SCANLINES ScanlinesRequested;
+  WST_BUFFER_LINE WstLines[MAX_WST_VBI_LINES_PER_FIELD];
+} WST_BUFFER,*PWST_BUFFER;
+
+typedef struct _VBICODECFILTERING_STATISTICS_COMMON {
+  DWORD InputSRBsProcessed;
+  DWORD OutputSRBsProcessed;
+  DWORD SRBsIgnored;
+  DWORD InputSRBsMissing;
+  DWORD OutputSRBsMissing;
+  DWORD OutputFailures;
+  DWORD InternalErrors;
+  DWORD ExternalErrors;
+  DWORD InputDiscontinuities;
+  DWORD DSPFailures;
+  DWORD TvTunerChanges;
+  DWORD VBIHeaderChanges;
+  DWORD LineConfidenceAvg;
+  DWORD BytesOutput;
+} VBICODECFILTERING_STATISTICS_COMMON,*PVBICODECFILTERING_STATISTICS_COMMON;
+
+typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {
+  DWORD SRBsProcessed;
+  DWORD SRBsIgnored;
+  DWORD SRBsMissing;
+  DWORD InternalErrors;
+  DWORD ExternalErrors;
+  DWORD Discontinuities;
+  DWORD LineConfidenceAvg;
+  DWORD BytesOutput;
+} VBICODECFILTERING_STATISTICS_COMMON_PIN,*PVBICODECFILTERING_STATISTICS_COMMON_PIN;
+
+typedef struct _VBICODECFILTERING_STATISTICS_NABTS {
+  VBICODECFILTERING_STATISTICS_COMMON Common;
+  DWORD FECBundleBadLines;
+  DWORD FECQueueOverflows;
+  DWORD FECCorrectedLines;
+  DWORD FECUncorrectableLines;
+  DWORD BundlesProcessed;
+  DWORD BundlesSent2IP;
+  DWORD FilteredLines;
+} VBICODECFILTERING_STATISTICS_NABTS,*PVBICODECFILTERING_STATISTICS_NABTS;
+
+typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {
+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;
+} VBICODECFILTERING_STATISTICS_NABTS_PIN,*PVBICODECFILTERING_STATISTICS_NABTS_PIN;
+
+typedef struct _VBICODECFILTERING_STATISTICS_CC {
+  VBICODECFILTERING_STATISTICS_COMMON Common;
+} VBICODECFILTERING_STATISTICS_CC,*PVBICODECFILTERING_STATISTICS_CC;
+
+typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {
+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;
+} VBICODECFILTERING_STATISTICS_CC_PIN,*PVBICODECFILTERING_STATISTICS_CC_PIN;
+
+typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT {
+  VBICODECFILTERING_STATISTICS_COMMON Common;
+} VBICODECFILTERING_STATISTICS_TELETEXT,*PVBICODECFILTERING_STATISTICS_TELETEXT;
+
+typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;
+} VBICODECFILTERING_STATISTICS_TELETEXT_PIN,*PVBICODECFILTERING_STATISTICS_TELETEXT_PIN;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_SCANLINES Scanlines;
+} KSPROPERTY_VBICODECFILTERING_SCANLINES_S,*PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_NABTS_SUBSTREAMS Substreams;
+} KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_CC_SUBSTREAMS Substreams;
+} KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_COMMON Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_NABTS Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_NABTS_PIN Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_CC Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  VBICODECFILTERING_STATISTICS_CC_PIN Statistics;
+} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
+
+#define STATIC_PINNAME_VIDEO_CAPTURE					\
+	0xfb6c4281,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+#define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE
+DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CAPTURE);
+#define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)
+#define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE
+
+#define STATIC_PINNAME_VIDEO_CC_CAPTURE					\
+	0x1aad8061,0x12d,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe
+#define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE
+DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_CC_CAPTURE);
+#define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE)
+
+#define STATIC_PINNAME_VIDEO_NABTS_CAPTURE				\
+	0x29703660,0x498a,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe
+#define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE
+DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_NABTS_CAPTURE);
+#define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE)
+
+#define STATIC_PINNAME_VIDEO_PREVIEW					\
+	0xfb6c4282,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+#define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW
+DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_PREVIEW);
+#define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)
+#define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW
+
+#define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN				\
+	0xfb6c4283,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_ANALOGVIDEOIN);
+#define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)
+
+#define STATIC_PINNAME_VIDEO_VBI					\
+	0xfb6c4284,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VBI);
+#define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)
+
+#define STATIC_PINNAME_VIDEO_VIDEOPORT					\
+	0xfb6c4285,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT);
+#define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)
+
+#define STATIC_PINNAME_VIDEO_NABTS					\
+	0xfb6c4286,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_NABTS);
+#define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)
+
+#define STATIC_PINNAME_VIDEO_EDS					\
+	0xfb6c4287,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_EDS);
+#define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)
+
+#define STATIC_PINNAME_VIDEO_TELETEXT					\
+	0xfb6c4288,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TELETEXT);
+#define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)
+
+#define STATIC_PINNAME_VIDEO_CC						\
+	0xfb6c4289,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CC);
+#define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)
+
+#define STATIC_PINNAME_VIDEO_STILL					\
+	0xfb6c428A,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_STILL);
+#define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)
+
+#define STATIC_PINNAME_VIDEO_TIMECODE					\
+	0xfb6c428B,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TIMECODE);
+#define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)
+
+#define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI				\
+	0xfb6c428C,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT_VBI);
+#define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)
+
+#define KS_VIDEO_FLAG_FRAME		0x0000L
+#define KS_VIDEO_FLAG_FIELD1		0x0001L
+#define KS_VIDEO_FLAG_FIELD2		0x0002L
+
+#define KS_VIDEO_FLAG_I_FRAME		0x0000L
+#define KS_VIDEO_FLAG_P_FRAME		0x0010L
+#define KS_VIDEO_FLAG_B_FRAME		0x0020L
+
+typedef struct tagKS_FRAME_INFO {
+  ULONG ExtendedHeaderSize;
+  DWORD dwFrameFlags;
+  LONGLONG PictureNumber;
+  LONGLONG DropCount;
+  HANDLE hDirectDraw;
+  HANDLE hSurfaceHandle;
+  RECT DirectDrawRect;
+
+  DWORD Reserved1;
+  DWORD Reserved2;
+  DWORD Reserved3;
+  DWORD Reserved4;
+} KS_FRAME_INFO,*PKS_FRAME_INFO;
+
+#define KS_VBI_FLAG_FIELD1		0x0001L
+#define KS_VBI_FLAG_FIELD2		0x0002L
+
+#define KS_VBI_FLAG_MV_PRESENT		0x0100L
+#define KS_VBI_FLAG_MV_HARDWARE		0x0200L
+#define KS_VBI_FLAG_MV_DETECTED		0x0400L
+
+#define KS_VBI_FLAG_TVTUNER_CHANGE	0x0010L
+#define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L
+
+typedef struct tagKS_VBI_FRAME_INFO {
+  ULONG ExtendedHeaderSize;
+  DWORD dwFrameFlags;
+  LONGLONG PictureNumber;
+  LONGLONG DropCount;
+  DWORD dwSamplingFrequency;
+  KS_TVTUNER_CHANGE_INFO TvTunerChangeInfo;
+  KS_VBIINFOHEADER VBIInfoHeader;
+} KS_VBI_FRAME_INFO,*PKS_VBI_FRAME_INFO;
+
+typedef enum
+{
+  KS_AnalogVideo_None = 0x00000000,
+  KS_AnalogVideo_NTSC_M = 0x00000001,
+  KS_AnalogVideo_NTSC_M_J = 0x00000002,
+  KS_AnalogVideo_NTSC_433 = 0x00000004,
+  KS_AnalogVideo_PAL_B = 0x00000010,
+  KS_AnalogVideo_PAL_D = 0x00000020,
+  KS_AnalogVideo_PAL_G = 0x00000040,
+  KS_AnalogVideo_PAL_H = 0x00000080,
+  KS_AnalogVideo_PAL_I = 0x00000100,
+  KS_AnalogVideo_PAL_M = 0x00000200,
+  KS_AnalogVideo_PAL_N = 0x00000400,
+  KS_AnalogVideo_PAL_60 = 0x00000800,
+  KS_AnalogVideo_SECAM_B = 0x00001000,
+  KS_AnalogVideo_SECAM_D = 0x00002000,
+  KS_AnalogVideo_SECAM_G = 0x00004000,
+  KS_AnalogVideo_SECAM_H = 0x00008000,
+  KS_AnalogVideo_SECAM_K = 0x00010000,
+  KS_AnalogVideo_SECAM_K1 = 0x00020000,
+  KS_AnalogVideo_SECAM_L = 0x00040000,
+  KS_AnalogVideo_SECAM_L1 = 0x00080000,
+  KS_AnalogVideo_PAL_N_COMBO = 0x00100000
+} KS_AnalogVideoStandard;
+
+#define KS_AnalogVideo_NTSC_Mask	0x00000007
+#define KS_AnalogVideo_PAL_Mask		0x00100FF0
+#define KS_AnalogVideo_SECAM_Mask	0x000FF000
+
+#define STATIC_PROPSETID_ALLOCATOR_CONTROL				\
+	0x53171960,0x148e,0x11d2,0x99,0x79,0x0,0x0,0xc0,0xcc,0x16,0xba
+DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA",PROPSETID_ALLOCATOR_CONTROL);
+#define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)
+
+typedef enum {
+  KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT,
+  KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE,
+  KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS,
+  KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE
+} KSPROPERTY_ALLOCATOR_CONTROL;
+
+typedef struct {
+  ULONG CX;
+  ULONG CY;
+} KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S;
+
+typedef struct {
+  ULONG InterleavedCapSupported;
+} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S;
+
+typedef struct {
+  ULONG InterleavedCapPossible;
+} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S;
+
+#define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP				\
+	0xC6E13360L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xA0,0xC9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOPROCAMP);
+#define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)
+
+typedef enum {
+  KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,
+  KSPROPERTY_VIDEOPROCAMP_CONTRAST,
+  KSPROPERTY_VIDEOPROCAMP_HUE,
+  KSPROPERTY_VIDEOPROCAMP_SATURATION,
+  KSPROPERTY_VIDEOPROCAMP_SHARPNESS,
+  KSPROPERTY_VIDEOPROCAMP_GAMMA,
+  KSPROPERTY_VIDEOPROCAMP_COLORENABLE,
+  KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,
+  KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,
+  KSPROPERTY_VIDEOPROCAMP_GAIN,
+  KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER,
+  KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT,
+  KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT,
+  KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY
+} KSPROPERTY_VIDCAP_VIDEOPROCAMP;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_VIDEOPROCAMP_S,*PKSPROPERTY_VIDEOPROCAMP_S;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_VIDEOPROCAMP_NODE_S,*PKSPROPERTY_VIDEOPROCAMP_NODE_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value1;
+  ULONG Flags;
+  ULONG Capabilities;
+  LONG Value2;
+} KSPROPERTY_VIDEOPROCAMP_S2,*PKSPROPERTY_VIDEOPROCAMP_S2;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  LONG Value1;
+  ULONG Flags;
+  ULONG Capabilities;
+  LONG Value2;
+} KSPROPERTY_VIDEOPROCAMP_NODE_S2,*PKSPROPERTY_VIDEOPROCAMP_NODE_S2;
+
+#define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO	0X0001L
+#define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL	0X0002L
+
+#define STATIC_PROPSETID_VIDCAP_SELECTOR				\
+	0x1ABDAECA,0x68B6,0x4F83,0x93,0x71,0xB4,0x13,0x90,0x7C,0x7B,0x9F
+DEFINE_GUIDSTRUCT("1ABDAECA-68B6-4F83-9371-B413907C7B9F",PROPSETID_VIDCAP_SELECTOR);
+#define PROPSETID_VIDCAP_SELECTOR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_SELECTOR)
+
+typedef enum {
+  KSPROPERTY_SELECTOR_SOURCE_NODE_ID,
+  KSPROPERTY_SELECTOR_NUM_SOURCES
+} KSPROPERTY_VIDCAP_SELECTOR,*PKSPROPERTY_VIDCAP_SELECTOR;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_SELECTOR_S,*PKSPROPERTY_SELECTOR_S;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_SELECTOR_NODE_S,*PKSPROPERTY_SELECTOR_NODE_S;
+
+#define STATIC_PROPSETID_TUNER						\
+	0x6a2e0605L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956",PROPSETID_TUNER);
+#define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)
+
+typedef enum {
+  KSPROPERTY_TUNER_CAPS,
+  KSPROPERTY_TUNER_MODE_CAPS,
+  KSPROPERTY_TUNER_MODE,
+  KSPROPERTY_TUNER_STANDARD,
+  KSPROPERTY_TUNER_FREQUENCY,
+  KSPROPERTY_TUNER_INPUT,
+  KSPROPERTY_TUNER_STATUS,
+  KSPROPERTY_TUNER_IF_MEDIUM
+} KSPROPERTY_TUNER;
+
+typedef enum {
+  KSPROPERTY_TUNER_MODE_TV = 0X0001,
+  KSPROPERTY_TUNER_MODE_FM_RADIO = 0X0002,
+  KSPROPERTY_TUNER_MODE_AM_RADIO = 0X0004,
+  KSPROPERTY_TUNER_MODE_DSS = 0X0008,
+  KSPROPERTY_TUNER_MODE_ATSC = 0X0010
+} KSPROPERTY_TUNER_MODES;
+
+typedef enum {
+  KS_TUNER_TUNING_EXACT = 1,
+  KS_TUNER_TUNING_FINE,
+  KS_TUNER_TUNING_COARSE
+} KS_TUNER_TUNING_FLAGS;
+
+typedef enum {
+  KS_TUNER_STRATEGY_PLL = 0X01,
+  KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02,
+  KS_TUNER_STRATEGY_DRIVER_TUNES = 0X04
+} KS_TUNER_STRATEGY;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG ModesSupported;
+  KSPIN_MEDIUM VideoMedium;
+  KSPIN_MEDIUM TVAudioMedium;
+  KSPIN_MEDIUM RadioAudioMedium;
+} KSPROPERTY_TUNER_CAPS_S,*PKSPROPERTY_TUNER_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  KSPIN_MEDIUM IFMedium;
+} KSPROPERTY_TUNER_IF_MEDIUM_S,*PKSPROPERTY_TUNER_IF_MEDIUM_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Mode;
+  ULONG StandardsSupported;
+  ULONG MinFrequency;
+  ULONG MaxFrequency;
+  ULONG TuningGranularity;
+  ULONG NumberOfInputs;
+  ULONG SettlingTime;
+  ULONG Strategy;
+} KSPROPERTY_TUNER_MODE_CAPS_S,*PKSPROPERTY_TUNER_MODE_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Mode;
+} KSPROPERTY_TUNER_MODE_S,*PKSPROPERTY_TUNER_MODE_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Frequency;
+  ULONG LastFrequency;
+  ULONG TuningFlags;
+  ULONG VideoSubChannel;
+  ULONG AudioSubChannel;
+  ULONG Channel;
+  ULONG Country;
+} KSPROPERTY_TUNER_FREQUENCY_S,*PKSPROPERTY_TUNER_FREQUENCY_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Standard;
+} KSPROPERTY_TUNER_STANDARD_S,*PKSPROPERTY_TUNER_STANDARD_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG InputIndex;
+} KSPROPERTY_TUNER_INPUT_S,*PKSPROPERTY_TUNER_INPUT_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG CurrentFrequency;
+  ULONG PLLOffset;
+  ULONG SignalStrength;
+  ULONG Busy;
+} KSPROPERTY_TUNER_STATUS_S,*PKSPROPERTY_TUNER_STATUS_S;
+
+#define STATIC_EVENTSETID_TUNER						\
+	0x6a2e0606L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956",EVENTSETID_TUNER);
+#define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)
+
+typedef enum {
+  KSEVENT_TUNER_CHANGED
+} KSEVENT_TUNER;
+
+#define STATIC_KSNODETYPE_VIDEO_STREAMING				\
+	0xDFF229E1L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_STREAMING);
+#define KSNODETYPE_VIDEO_STREAMING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_STREAMING)
+
+#define STATIC_KSNODETYPE_VIDEO_INPUT_TERMINAL				\
+	0xDFF229E2L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_TERMINAL);
+#define KSNODETYPE_VIDEO_INPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_TERMINAL)
+
+#define STATIC_KSNODETYPE_VIDEO_OUTPUT_TERMINAL				\
+	0xDFF229E3L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_TERMINAL);
+#define KSNODETYPE_VIDEO_OUTPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_TERMINAL)
+
+#define STATIC_KSNODETYPE_VIDEO_SELECTOR				\
+	0xDFF229E4L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_SELECTOR);
+#define KSNODETYPE_VIDEO_SELECTOR DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_SELECTOR)
+
+#define STATIC_KSNODETYPE_VIDEO_PROCESSING				\
+	0xDFF229E5L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_PROCESSING);
+#define KSNODETYPE_VIDEO_PROCESSING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_PROCESSING)
+
+#define STATIC_KSNODETYPE_VIDEO_CAMERA_TERMINAL				\
+	0xDFF229E6L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_CAMERA_TERMINAL);
+#define KSNODETYPE_VIDEO_CAMERA_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_CAMERA_TERMINAL)
+
+#define STATIC_KSNODETYPE_VIDEO_INPUT_MTT				\
+	0xDFF229E7L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_MTT);
+#define KSNODETYPE_VIDEO_INPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_MTT)
+
+#define STATIC_KSNODETYPE_VIDEO_OUTPUT_MTT				\
+	0xDFF229E8L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("DFF229E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_MTT);
+#define KSNODETYPE_VIDEO_OUTPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_MTT)
+
+#define STATIC_PROPSETID_VIDCAP_VIDEOENCODER				\
+	0x6a2e0610L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOENCODER);
+#define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)
+
+typedef enum {
+  KSPROPERTY_VIDEOENCODER_CAPS,
+  KSPROPERTY_VIDEOENCODER_STANDARD,
+  KSPROPERTY_VIDEOENCODER_COPYPROTECTION,
+  KSPROPERTY_VIDEOENCODER_CC_ENABLE
+} KSPROPERTY_VIDCAP_VIDEOENCODER;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_VIDEOENCODER_S,*PKSPROPERTY_VIDEOENCODER_S;
+
+#define STATIC_PROPSETID_VIDCAP_VIDEODECODER				\
+	0xC6E13350L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEODECODER);
+#define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)
+
+typedef enum {
+  KSPROPERTY_VIDEODECODER_CAPS,
+  KSPROPERTY_VIDEODECODER_STANDARD,
+  KSPROPERTY_VIDEODECODER_STATUS,
+  KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,
+  KSPROPERTY_VIDEODECODER_VCR_TIMING
+} KSPROPERTY_VIDCAP_VIDEODECODER;
+
+typedef enum {
+  KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT = 0X0001,
+  KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002,
+  KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004
+} KS_VIDEODECODER_FLAGS;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StandardsSupported;
+  ULONG Capabilities;
+  ULONG SettlingTime;
+  ULONG HSyncPerVSync;
+} KSPROPERTY_VIDEODECODER_CAPS_S,*PKSPROPERTY_VIDEODECODER_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG NumberOfLines;
+  ULONG SignalLocked;
+} KSPROPERTY_VIDEODECODER_STATUS_S,*PKSPROPERTY_VIDEODECODER_STATUS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Value;
+} KSPROPERTY_VIDEODECODER_S,*PKSPROPERTY_VIDEODECODER_S;
+
+#define STATIC_EVENTSETID_VIDEODECODER					\
+	0x6a2e0621L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956",EVENTSETID_VIDEODECODER);
+#define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)
+
+typedef enum {
+  KSEVENT_VIDEODECODER_CHANGED
+} KSEVENT_VIDEODECODER;
+
+#define STATIC_PROPSETID_VIDCAP_CAMERACONTROL				\
+	0xC6E13370L,0x30AC,0x11d0,0xa1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_CAMERACONTROL);
+#define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)
+
+typedef enum {
+  KSPROPERTY_CAMERACONTROL_PAN,
+  KSPROPERTY_CAMERACONTROL_TILT,
+  KSPROPERTY_CAMERACONTROL_ROLL,
+  KSPROPERTY_CAMERACONTROL_ZOOM,
+  KSPROPERTY_CAMERACONTROL_EXPOSURE,
+  KSPROPERTY_CAMERACONTROL_IRIS,
+  KSPROPERTY_CAMERACONTROL_FOCUS,
+  KSPROPERTY_CAMERACONTROL_SCANMODE,
+  KSPROPERTY_CAMERACONTROL_PRIVACY,
+  KSPROPERTY_CAMERACONTROL_PANTILT,
+  KSPROPERTY_CAMERACONTROL_PAN_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_TILT_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE,
+  KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH
+} KSPROPERTY_VIDCAP_CAMERACONTROL;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_CAMERACONTROL_S,*PKSPROPERTY_CAMERACONTROL_S;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  LONG Value;
+  ULONG Flags;
+  ULONG Capabilities;
+} KSPROPERTY_CAMERACONTROL_NODE_S,PKSPROPERTY_CAMERACONTROL_NODE_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG Value1;
+  ULONG Flags;
+  ULONG Capabilities;
+  LONG Value2;
+} KSPROPERTY_CAMERACONTROL_S2,*PKSPROPERTY_CAMERACONTROL_S2;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  LONG Value1;
+  ULONG Flags;
+  ULONG Capabilities;
+  LONG Value2;
+} KSPROPERTY_CAMERACONTROL_NODE_S2,*PKSPROPERTY_CAMERACONTROL_NODE_S2;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONG lOcularFocalLength;
+  LONG lObjectiveFocalLengthMin;
+  LONG lObjectiveFocalLengthMax;
+} KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S;
+
+typedef struct {
+  KSNODEPROPERTY NodeProperty;
+  LONG lOcularFocalLength;
+  LONG lObjectiveFocalLengthMin;
+  LONG lObjectiveFocalLengthMax;
+} KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S;
+
+#define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO	0X0001L
+#define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL	0X0002L
+
+#define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE	0X0000L
+#define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE	0X0010L
+
+#ifndef __EDevCtrl__
+#define __EDevCtrl__
+
+#define STATIC_PROPSETID_EXT_DEVICE					\
+	0xB5730A90L,0x1A2C,0x11cf,0x8c,0x23,0x00,0xAA,0x00,0x6B,0x68,0x14
+DEFINE_GUIDSTRUCT("B5730A90-1A2C-11cf-8C23-00AA006B6814",PROPSETID_EXT_DEVICE);
+#define PROPSETID_EXT_DEVICE DEFINE_GUIDNAMED(PROPSETID_EXT_DEVICE)
+
+typedef enum {
+  KSPROPERTY_EXTDEVICE_ID,
+  KSPROPERTY_EXTDEVICE_VERSION,
+  KSPROPERTY_EXTDEVICE_POWER_STATE,
+  KSPROPERTY_EXTDEVICE_PORT,
+  KSPROPERTY_EXTDEVICE_CAPABILITIES
+} KSPROPERTY_EXTDEVICE;
+
+typedef struct tagDEVCAPS{
+  LONG CanRecord;
+  LONG CanRecordStrobe;
+  LONG HasAudio;
+  LONG HasVideo;
+  LONG UsesFiles;
+  LONG CanSave;
+  LONG DeviceType;
+  LONG TCRead;
+  LONG TCWrite;
+  LONG CTLRead;
+  LONG IndexRead;
+  LONG Preroll;
+  LONG Postroll;
+  LONG SyncAcc;
+  LONG NormRate;
+  LONG CanPreview;
+  LONG CanMonitorSrc;
+  LONG CanTest;
+  LONG VideoIn;
+  LONG AudioIn;
+  LONG Calibrate;
+  LONG SeekType;
+  LONG SimulatedHardware;
+} DEVCAPS,*PDEVCAPS;
+
+typedef struct {
+  KSPROPERTY Property;
+  union {
+    DEVCAPS Capabilities;
+    ULONG DevPort;
+    ULONG PowerState;
+    WCHAR pawchString[MAX_PATH];
+    DWORD NodeUniqueID[2];
+  } u;
+} KSPROPERTY_EXTDEVICE_S,*PKSPROPERTY_EXTDEVICE_S;
+
+#define STATIC_PROPSETID_EXT_TRANSPORT					\
+	0xA03CD5F0L,0x3045,0x11cf,0x8c,0x44,0x00,0xAA,0x00,0x6B,0x68,0x14
+DEFINE_GUIDSTRUCT("A03CD5F0-3045-11cf-8C44-00AA006B6814",PROPSETID_EXT_TRANSPORT);
+#define PROPSETID_EXT_TRANSPORT DEFINE_GUIDNAMED(PROPSETID_EXT_TRANSPORT)
+
+typedef enum {
+  KSPROPERTY_EXTXPORT_CAPABILITIES,
+  KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE,
+  KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE,
+  KSPROPERTY_EXTXPORT_LOAD_MEDIUM,
+  KSPROPERTY_EXTXPORT_MEDIUM_INFO,
+  KSPROPERTY_EXTXPORT_STATE,
+  KSPROPERTY_EXTXPORT_STATE_NOTIFY,
+  KSPROPERTY_EXTXPORT_TIMECODE_SEARCH,
+  KSPROPERTY_EXTXPORT_ATN_SEARCH,
+  KSPROPERTY_EXTXPORT_RTC_SEARCH,
+  KSPROPERTY_RAW_AVC_CMD
+} KSPROPERTY_EXTXPORT;
+
+typedef struct tagTRANSPORTSTATUS {
+  LONG Mode;
+  LONG LastError;
+  LONG RecordInhibit;
+  LONG ServoLock;
+  LONG MediaPresent;
+  LONG MediaLength;
+  LONG MediaSize;
+  LONG MediaTrackCount;
+  LONG MediaTrackLength;
+  LONG MediaTrackSide;
+  LONG MediaType;
+  LONG LinkMode;
+  LONG NotifyOn;
+} TRANSPORTSTATUS,*PTRANSPORTSTATUS;
+
+typedef struct tagTRANSPORTBASICPARMS {
+  LONG TimeFormat;
+  LONG TimeReference;
+  LONG Superimpose;
+  LONG EndStopAction;
+  LONG RecordFormat;
+  LONG StepFrames;
+  LONG SetpField;
+  LONG Preroll;
+  LONG RecPreroll;
+  LONG Postroll;
+  LONG EditDelay;
+  LONG PlayTCDelay;
+  LONG RecTCDelay;
+  LONG EditField;
+  LONG FrameServo;
+  LONG ColorFrameServo;
+  LONG ServoRef;
+  LONG WarnGenlock;
+  LONG SetTracking;
+  TCHAR VolumeName[40];
+  LONG Ballistic[20];
+  LONG Speed;
+  LONG CounterFormat;
+  LONG TunerChannel;
+  LONG TunerNumber;
+  LONG TimerEvent;
+  LONG TimerStartDay;
+  LONG TimerStartTime;
+  LONG TimerStopDay;
+  LONG TimerStopTime;
+} TRANSPORTBASICPARMS,*PTRANSPORTBASICPARMS;
+
+typedef struct tagTRANSPORTVIDEOPARMS {
+  LONG OutputMode;
+  LONG Input;
+} TRANSPORTVIDEOPARMS,*PTRANSPORTVIDEOPARMS;
+
+typedef struct tagTRANSPORTAUDIOPARMS {
+  LONG EnableOutput;
+  LONG EnableRecord;
+  LONG EnableSelsync;
+  LONG Input;
+  LONG MonitorSource;
+} TRANSPORTAUDIOPARMS,*PTRANSPORTAUDIOPARMS;
+
+typedef struct {
+  WINBOOL MediaPresent;
+  ULONG MediaType;
+  WINBOOL RecordInhibit;
+} MEDIUM_INFO,*PMEDIUM_INFO;
+
+typedef struct {
+  ULONG Mode;
+  ULONG State;
+} TRANSPORT_STATE,*PTRANSPORT_STATE;
+
+typedef struct {
+  KSPROPERTY Property;
+  union {
+    ULONG Capabilities;
+    ULONG SignalMode;
+    ULONG LoadMedium;
+    MEDIUM_INFO MediumInfo;
+    TRANSPORT_STATE XPrtState;
+    struct {
+      BYTE frame;
+      BYTE second;
+      BYTE minute;
+      BYTE hour;
+    } Timecode;
+    DWORD dwTimecode;
+    DWORD dwAbsTrackNumber;
+    struct {
+      ULONG PayloadSize;
+      BYTE Payload[512];
+    } RawAVC;
+  } u;
+} KSPROPERTY_EXTXPORT_S,*PKSPROPERTY_EXTXPORT_S;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  union {
+    ULONG Capabilities;
+    ULONG SignalMode;
+    ULONG LoadMedium;
+    MEDIUM_INFO MediumInfo;
+    TRANSPORT_STATE XPrtState;
+    struct {
+      BYTE frame;
+      BYTE second;
+      BYTE minute;
+      BYTE hour;
+    } Timecode;
+    DWORD dwTimecode;
+    DWORD dwAbsTrackNumber;
+    struct {
+      ULONG PayloadSize;
+      BYTE Payload[512];
+    } RawAVC;
+  } u;
+} KSPROPERTY_EXTXPORT_NODE_S,*PKSPROPERTY_EXTXPORT_NODE_S;
+
+#define STATIC_PROPSETID_TIMECODE_READER				\
+	0x9B496CE1L,0x811B,0x11cf,0x8C,0x77,0x00,0xAA,0x00,0x6B,0x68,0x14
+DEFINE_GUIDSTRUCT("9B496CE1-811B-11cf-8C77-00AA006B6814",PROPSETID_TIMECODE_READER);
+#define PROPSETID_TIMECODE_READER DEFINE_GUIDNAMED(PROPSETID_TIMECODE_READER)
+
+typedef enum {
+  KSPROPERTY_TIMECODE_READER,
+  KSPROPERTY_ATN_READER,
+  KSPROPERTY_RTC_READER
+} KSPROPERTY_TIMECODE;
+
+#ifndef TIMECODE_DEFINED
+#define TIMECODE_DEFINED
+typedef union _timecode {
+  struct {
+    WORD wFrameRate;
+    WORD wFrameFract;
+    DWORD dwFrames;
+  };
+  DWORDLONG qw;
+} TIMECODE;
+typedef TIMECODE *PTIMECODE;
+
+typedef struct tagTIMECODE_SAMPLE {
+  LONGLONG qwTick;
+  TIMECODE timecode;
+  DWORD dwUser;
+  DWORD dwFlags;
+} TIMECODE_SAMPLE;
+
+typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE;
+#endif /* TIMECODE_DEFINED */
+
+typedef struct {
+  KSPROPERTY Property;
+  TIMECODE_SAMPLE TimecodeSamp;
+} KSPROPERTY_TIMECODE_S,*PKSPROPERTY_TIMECODE_S;
+
+typedef struct {
+  KSP_NODE NodeProperty;
+  TIMECODE_SAMPLE TimecodeSamp;
+} KSPROPERTY_TIMECODE_NODE_S,*PKSPROPERTY_TIMECODE_NODE_S;
+
+#define STATIC_KSEVENTSETID_EXTDEV_Command				\
+	0x109c7988L,0xb3cb,0x11d2,0xb4,0x8e,0x00,0x60,0x97,0xb3,0x39,0x1b
+DEFINE_GUIDSTRUCT("109c7988-b3cb-11d2-b48e-006097b3391b",KSEVENTSETID_EXTDEV_Command);
+#define KSEVENTSETID_EXTDEV_Command DEFINE_GUIDNAMED(KSEVENTSETID_EXTDEV_Command)
+
+typedef enum {
+  KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY,
+  KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY,
+  KSEVENT_EXTDEV_COMMAND_BUSRESET,
+  KSEVENT_EXTDEV_TIMECODE_UPDATE,
+  KSEVENT_EXTDEV_OPERATION_MODE_UPDATE,
+  KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE,
+  KSEVENT_EXTDEV_NOTIFY_REMOVAL,
+  KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE
+} KSEVENT_DEVCMD;
+#endif /* __EDevCtrl__ */
+
+#define STATIC_PROPSETID_VIDCAP_CROSSBAR				\
+	0x6a2e0640L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_CROSSBAR);
+#define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)
+
+typedef enum {
+  KSPROPERTY_CROSSBAR_CAPS,
+  KSPROPERTY_CROSSBAR_PININFO,
+  KSPROPERTY_CROSSBAR_CAN_ROUTE,
+  KSPROPERTY_CROSSBAR_ROUTE
+} KSPROPERTY_VIDCAP_CROSSBAR;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG NumberOfInputs;
+  ULONG NumberOfOutputs;
+} KSPROPERTY_CROSSBAR_CAPS_S,*PKSPROPERTY_CROSSBAR_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  KSPIN_DATAFLOW Direction;
+  ULONG Index;
+  ULONG PinType;
+  ULONG RelatedPinIndex;
+  KSPIN_MEDIUM Medium;
+} KSPROPERTY_CROSSBAR_PININFO_S,*PKSPROPERTY_CROSSBAR_PININFO_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG IndexInputPin;
+  ULONG IndexOutputPin;
+  ULONG CanRoute;
+} KSPROPERTY_CROSSBAR_ROUTE_S,*PKSPROPERTY_CROSSBAR_ROUTE_S;
+
+#define STATIC_EVENTSETID_CROSSBAR					\
+	0x6a2e0641L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956",EVENTSETID_CROSSBAR);
+#define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)
+
+typedef enum {
+  KSEVENT_CROSSBAR_CHANGED
+} KSEVENT_CROSSBAR;
+
+typedef enum {
+  KS_PhysConn_Video_Tuner = 1,
+  KS_PhysConn_Video_Composite,
+  KS_PhysConn_Video_SVideo,
+  KS_PhysConn_Video_RGB,
+  KS_PhysConn_Video_YRYBY,
+  KS_PhysConn_Video_SerialDigital,
+  KS_PhysConn_Video_ParallelDigital,
+  KS_PhysConn_Video_SCSI,
+  KS_PhysConn_Video_AUX,
+  KS_PhysConn_Video_1394,
+  KS_PhysConn_Video_USB,
+  KS_PhysConn_Video_VideoDecoder,
+  KS_PhysConn_Video_VideoEncoder,
+  KS_PhysConn_Video_SCART,
+  KS_PhysConn_Audio_Tuner = 4096,
+  KS_PhysConn_Audio_Line,
+  KS_PhysConn_Audio_Mic,
+  KS_PhysConn_Audio_AESDigital,
+  KS_PhysConn_Audio_SPDIFDigital,
+  KS_PhysConn_Audio_SCSI,
+  KS_PhysConn_Audio_AUX,
+  KS_PhysConn_Audio_1394,
+  KS_PhysConn_Audio_USB,
+  KS_PhysConn_Audio_AudioDecoder
+} KS_PhysicalConnectorType;
+
+#define STATIC_PROPSETID_VIDCAP_TVAUDIO					\
+	0x6a2e0650L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_TVAUDIO);
+#define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)
+
+typedef enum {
+  KSPROPERTY_TVAUDIO_CAPS,
+  KSPROPERTY_TVAUDIO_MODE,
+  KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES
+} KSPROPERTY_VIDCAP_TVAUDIO;
+
+#define KS_TVAUDIO_MODE_MONO	0x0001
+#define KS_TVAUDIO_MODE_STEREO	0x0002
+#define KS_TVAUDIO_MODE_LANG_A	0x0010
+#define KS_TVAUDIO_MODE_LANG_B	0x0020
+#define KS_TVAUDIO_MODE_LANG_C	0x0040
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Capabilities;
+  KSPIN_MEDIUM InputMedium;
+  KSPIN_MEDIUM OutputMedium;
+} KSPROPERTY_TVAUDIO_CAPS_S,*PKSPROPERTY_TVAUDIO_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG Mode;
+} KSPROPERTY_TVAUDIO_S,*PKSPROPERTY_TVAUDIO_S;
+
+#define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO				\
+	0x6a2e0651L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956",KSEVENTSETID_VIDCAP_TVAUDIO);
+#define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)
+
+typedef enum {
+  KSEVENT_TVAUDIO_CHANGED
+} KSEVENT_TVAUDIO;
+
+#define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION			\
+	0xC6E13343L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOCOMPRESSION);
+#define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)
+
+typedef enum {
+  KSPROPERTY_VIDEOCOMPRESSION_GETINFO,
+  KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,
+  KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME,
+  KSPROPERTY_VIDEOCOMPRESSION_QUALITY,
+  KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,
+  KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,
+  KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE
+} KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;
+
+typedef enum {
+  KS_CompressionCaps_CanQuality = 1,
+  KS_CompressionCaps_CanCrunch = 2,
+  KS_CompressionCaps_CanKeyFrame = 4,
+  KS_CompressionCaps_CanBFrame = 8,
+  KS_CompressionCaps_CanWindow = 0x10
+} KS_CompressionCaps;
+
+typedef enum {
+  KS_StreamingHint_FrameInterval = 0x0100,
+  KS_StreamingHint_KeyFrameRate = 0x0200,
+  KS_StreamingHint_PFrameRate = 0x0400,
+  KS_StreamingHint_CompQuality = 0x0800,
+  KS_StreamingHint_CompWindowSize = 0x1000
+} KS_VideoStreamingHints;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  LONG DefaultKeyFrameRate;
+  LONG DefaultPFrameRate;
+  LONG DefaultQuality;
+  LONG NumberOfQualitySettings;
+  LONG Capabilities;
+} KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S,*PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  LONG Value;
+} KSPROPERTY_VIDEOCOMPRESSION_S,*PKSPROPERTY_VIDEOCOMPRESSION_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  LONG Value;
+  ULONG Flags;
+} KSPROPERTY_VIDEOCOMPRESSION_S1,*PKSPROPERTY_VIDEOCOMPRESSION_S1;
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY				\
+	0xe436eb7fL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70
+DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_OVERLAY);
+#define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)
+
+#define STATIC_KSPROPSETID_OverlayUpdate				\
+	0x490EA5CFL,0x7681,0x11D1,0xA2,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96
+DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196",KSPROPSETID_OverlayUpdate);
+#define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)
+
+typedef enum {
+  KSPROPERTY_OVERLAYUPDATE_INTERESTS,
+  KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,
+  KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,
+  KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,
+  KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,
+  KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,
+  KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000
+} KSPROPERTY_OVERLAYUPDATE;
+
+typedef struct {
+  ULONG PelsWidth;
+  ULONG PelsHeight;
+  ULONG BitsPerPel;
+  WCHAR DeviceID[1];
+} KSDISPLAYCHANGE,*PKSDISPLAYCHANGE;
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_INTERESTS,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(ULONG),				\
+				NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_PALETTE,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				0,					\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_COLORKEY,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				sizeof(COLORKEY),			\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_CLIPLIST,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				2 *sizeof(RECT) + sizeof(RGNDATAHEADER),\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				2 *sizeof(RECT),			\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)	\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,	\
+				NULL,					\
+				sizeof(KSPROPERTY),			\
+				sizeof(KSDISPLAYCHANGE),		\
+				(Handler),				\
+				NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)		\
+	DEFINE_KSPROPERTY_ITEM(						\
+				KSPROPERTY_OVERLAYUPDATE_COLORREF,	\
+				(Handler),				\
+				sizeof(KSPROPERTY),			\
+				sizeof(COLORREF),			\
+				NULL,					\
+				NULL, 0, NULL, NULL, 0)
+
+#define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL				\
+	0x6a2e0670L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOCONTROL);
+#define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)
+
+typedef enum {
+  KSPROPERTY_VIDEOCONTROL_CAPS,
+  KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,
+  KSPROPERTY_VIDEOCONTROL_FRAME_RATES,
+  KSPROPERTY_VIDEOCONTROL_MODE
+} KSPROPERTY_VIDCAP_VIDEOCONTROL;
+
+typedef enum {
+  KS_VideoControlFlag_FlipHorizontal = 0x0001,
+  KS_VideoControlFlag_FlipVertical = 0x0002,
+  KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010,
+  KS_Obsolete_VideoControlFlag_Trigger = 0x0020,
+  KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,
+  KS_VideoControlFlag_Trigger = 0x0008
+} KS_VideoControlFlags;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  ULONG VideoControlCaps;
+} KSPROPERTY_VIDEOCONTROL_CAPS_S,*PKSPROPERTY_VIDEOCONTROL_CAPS_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  LONG Mode;
+} KSPROPERTY_VIDEOCONTROL_MODE_S,*PKSPROPERTY_VIDEOCONTROL_MODE_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  ULONG RangeIndex;
+  SIZE Dimensions;
+  LONGLONG CurrentActualFrameRate;
+  LONGLONG CurrentMaxAvailableFrameRate;
+} KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S,*PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
+
+typedef struct {
+  KSPROPERTY Property;
+  ULONG StreamIndex;
+  ULONG RangeIndex;
+  SIZE Dimensions;
+} KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S,*PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
+
+#define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES				\
+	0xC6E13344L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56
+DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_DROPPEDFRAMES);
+#define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)
+
+typedef enum {
+  KSPROPERTY_DROPPEDFRAMES_CURRENT
+} KSPROPERTY_VIDCAP_DROPPEDFRAMES;
+
+typedef struct {
+  KSPROPERTY Property;
+  LONGLONG PictureNumber;
+  LONGLONG DropCount;
+  ULONG AverageFrameSize;
+} KSPROPERTY_DROPPEDFRAMES_CURRENT_S,*PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
+
+#define STATIC_KSPROPSETID_VPConfig					\
+	0xbc29a660L,0x30e3,0x11d0,0x9e,0x69,0x00,0xc0,0x4f,0xd7,0xc1,0x5b
+DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b",KSPROPSETID_VPConfig);
+#define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)
+
+#define STATIC_KSPROPSETID_VPVBIConfig					\
+	0xec529b00L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a",KSPROPSETID_VPVBIConfig);
+#define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)
+
+typedef enum {
+  KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
+  KSPROPERTY_VPCONFIG_GETCONNECTINFO,
+  KSPROPERTY_VPCONFIG_SETCONNECTINFO,
+  KSPROPERTY_VPCONFIG_VPDATAINFO,
+  KSPROPERTY_VPCONFIG_MAXPIXELRATE,
+  KSPROPERTY_VPCONFIG_INFORMVPINPUT,
+  KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
+  KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
+  KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
+  KSPROPERTY_VPCONFIG_INVERTPOLARITY,
+  KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,
+  KSPROPERTY_VPCONFIG_SCALEFACTOR,
+  KSPROPERTY_VPCONFIG_DDRAWHANDLE,
+  KSPROPERTY_VPCONFIG_VIDEOPORTID,
+  KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
+  KSPROPERTY_VPCONFIG_SURFACEPARAMS
+} KSPROPERTY_VPCONFIG;
+
+#define STATIC_CLSID_KsIBasicAudioInterfaceHandler			\
+	0xb9f8ac3e,0x0f71,0x11d2,0xb7,0x2c,0x00,0xc0,0x4f,0xb6,0xbd,0x3d
+DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d",CLSID_KsIBasicAudioInterfaceHandler);
+#define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler)
+
+#ifdef __IVPType__
+typedef struct {
+  AMVPSIZE Size;
+  DWORD MaxPixelsPerSecond;
+  DWORD Reserved;
+} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE;
+
+typedef struct {
+  KSPROPERTY Property;
+  AMVPSIZE Size;
+} KSVPSIZE_PROP,*PKSVPSIZE_PROP;
+
+typedef struct {
+  DWORD dwPitch;
+  DWORD dwXOrigin;
+  DWORD dwYOrigin;
+} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS;
+#else /* __IVPType__ */
+
+#ifndef __DDRAW_INCLUDED__
+#define DDPF_FOURCC 0x00000004l
+
+typedef struct _DDPIXELFORMAT
+{
+  DWORD dwSize;
+  DWORD dwFlags;
+  DWORD dwFourCC;
+  __MINGW_EXTENSION union
+  {
+    DWORD dwRGBBitCount;
+    DWORD dwYUVBitCount;
+    DWORD dwZBufferBitDepth;
+    DWORD dwAlphaBitDepth;
+  };
+  __MINGW_EXTENSION union
+  {
+    DWORD dwRBitMask;
+    DWORD dwYBitMask;
+  };
+  __MINGW_EXTENSION union
+  {
+    DWORD dwGBitMask;
+    DWORD dwUBitMask;
+  };
+  __MINGW_EXTENSION union
+  {
+    DWORD dwBBitMask;
+    DWORD dwVBitMask;
+  };
+  __MINGW_EXTENSION union
+  {
+    DWORD dwRGBAlphaBitMask;
+    DWORD dwYUVAlphaBitMask;
+    DWORD dwRGBZBitMask;
+    DWORD dwYUVZBitMask;
+  };
+} DDPIXELFORMAT,*LPDDPIXELFORMAT;
+#endif /* __DDRAW_INCLUDED__ */
+
+#ifndef __DVP_INCLUDED__
+typedef struct _DDVIDEOPORTCONNECT {
+  DWORD dwSize;
+  DWORD dwPortWidth;
+  GUID guidTypeID;
+  DWORD dwFlags;
+  ULONG_PTR dwReserved1;
+} DDVIDEOPORTCONNECT,*LPDDVIDEOPORTCONNECT;
+
+#define DDVPTYPE_E_HREFH_VREFH						\
+	0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
+
+#define DDVPTYPE_E_HREFL_VREFL						\
+	0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
+#endif /* __DVP_INCLUDED__ */
+
+typedef enum
+{
+  KS_PixAspectRatio_NTSC4x3,
+  KS_PixAspectRatio_NTSC16x9,
+  KS_PixAspectRatio_PAL4x3,
+  KS_PixAspectRatio_PAL16x9
+} KS_AMPixAspectRatio;
+
+typedef enum
+{
+  KS_AMVP_DO_NOT_CARE,
+  KS_AMVP_BEST_BANDWIDTH,
+  KS_AMVP_INPUT_SAME_AS_OUTPUT
+} KS_AMVP_SELECTFORMATBY;
+
+typedef enum
+{
+  KS_AMVP_MODE_WEAVE,
+  KS_AMVP_MODE_BOBINTERLEAVED,
+  KS_AMVP_MODE_BOBNONINTERLEAVED,
+  KS_AMVP_MODE_SKIPEVEN,
+  KS_AMVP_MODE_SKIPODD
+} KS_AMVP_MODE;
+
+typedef struct tagKS_AMVPDIMINFO
+{
+  DWORD dwFieldWidth;
+  DWORD dwFieldHeight;
+  DWORD dwVBIWidth;
+  DWORD dwVBIHeight;
+  RECT rcValidRegion;
+} KS_AMVPDIMINFO,*PKS_AMVPDIMINFO;
+
+typedef struct tagKS_AMVPDATAINFO
+{
+  DWORD dwSize;
+  DWORD dwMicrosecondsPerField;
+  KS_AMVPDIMINFO amvpDimInfo;
+  DWORD dwPictAspectRatioX;
+  DWORD dwPictAspectRatioY;
+  WINBOOL bEnableDoubleClock;
+  WINBOOL bEnableVACT;
+  WINBOOL bDataIsInterlaced;
+  LONG lHalfLinesOdd;
+  WINBOOL bFieldPolarityInverted;
+  DWORD dwNumLinesInVREF;
+  LONG lHalfLinesEven;
+  DWORD dwReserved1;
+} KS_AMVPDATAINFO,*PKS_AMVPDATAINFO;
+
+typedef struct tagKS_AMVPSIZE
+{
+  DWORD dwWidth;
+  DWORD dwHeight;
+} KS_AMVPSIZE,*PKS_AMVPSIZE;
+
+typedef struct {
+  KS_AMVPSIZE Size;
+  DWORD MaxPixelsPerSecond;
+  DWORD Reserved;
+} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE;
+
+typedef struct {
+  KSPROPERTY Property;
+  KS_AMVPSIZE Size;
+} KSVPSIZE_PROP,*PKSVPSIZE_PROP;
+
+typedef struct {
+  DWORD dwPitch;
+  DWORD dwXOrigin;
+  DWORD dwYOrigin;
+} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS;
+#endif /* __IVPType__ */
+
+#define STATIC_KSEVENTSETID_VPNotify					\
+	0x20c5598eL,0xd3c8,0x11d0,0x8d,0xfc,0x00,0xc0,0x4f,0xd7,0xc0,0x8b
+DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b",KSEVENTSETID_VPNotify);
+#define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)
+
+typedef enum {
+  KSEVENT_VPNOTIFY_FORMATCHANGE
+} KSEVENT_VPNOTIFY;
+
+#define STATIC_KSEVENTSETID_VIDCAPTOSTI					\
+	0xdb47de20,0xf628,0x11d1,0xba,0x41,0x0,0xa0,0xc9,0xd,0x2b,0x5
+DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05",KSEVENTSETID_VIDCAPTOSTI);
+#define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)
+
+typedef enum {
+  KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,
+  KSEVENT_VIDCAP_AUTO_UPDATE,
+  KSEVENT_VIDCAP_SEARCH
+} KSEVENT_VIDCAPTOSTI;
+
+typedef enum {
+  KSPROPERTY_EXTENSION_UNIT_INFO,
+  KSPROPERTY_EXTENSION_UNIT_CONTROL,
+  KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH = 0xffff
+} KSPROPERTY_EXTENSION_UNIT,*PKSPROPERTY_EXTENSION_UNIT;
+
+#define STATIC_KSEVENTSETID_VPVBINotify					\
+	0xec529b01L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a
+DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a",KSEVENTSETID_VPVBINotify);
+#define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)
+
+typedef enum {
+  KSEVENT_VPVBINOTIFY_FORMATCHANGE
+} KSEVENT_VPVBINOTIFY;
+
+#define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data				\
+	0x670aea80L,0x3a82,0x11d0,0xb7,0x9b,0x00,0xaa,0x00,0x37,0x67,0xa7
+DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7",KSDATAFORMAT_TYPE_AUXLine21Data);
+#define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair			\
+	0x6e8d4a22L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7
+DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_BytePair);
+#define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)
+
+#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket			\
+	0x6e8d4a23L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7
+DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);
+#define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)
+
+typedef struct _KSGOP_USERDATA {
+  ULONG sc;
+  ULONG reserved1;
+  BYTE cFields;
+  CHAR l21Data[3];
+} KSGOP_USERDATA,*PKSGOP_USERDATA;
+
+#define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK			\
+	0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x4f,0xc3,0x1d,0x60
+DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60",KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);
+#define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)
+
+#define KS_AM_UseNewCSSKey			0x1
+
+#define STATIC_KSPROPSETID_TSRateChange					\
+	0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0
+DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000",KSPROPSETID_TSRateChange);
+#define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)
+
+typedef enum {
+  KS_AM_RATE_SimpleRateChange = 1,
+  KS_AM_RATE_ExactRateChange = 2,
+  KS_AM_RATE_MaxFullDataRate = 3,
+  KS_AM_RATE_Step = 4
+} KS_AM_PROPERTY_TS_RATE_CHANGE;
+
+typedef struct {
+  REFERENCE_TIME StartTime;
+  LONG Rate;
+} KS_AM_SimpleRateChange,*PKS_AM_SimpleRateChange;
+
+typedef struct {
+  REFERENCE_TIME OutputZeroTime;
+  LONG Rate;
+} KS_AM_ExactRateChange,*PKS_AM_ExactRateChange;
+
+typedef LONG KS_AM_MaxFullDataRate;
+typedef DWORD KS_AM_Step;
+
+#define STATIC_KSCATEGORY_ENCODER					\
+	0x19689bf6,0xc384,0x48fd,0xad,0x51,0x90,0xe5,0x8c,0x79,0xf7,0xb
+DEFINE_GUIDSTRUCT("19689BF6-C384-48fd-AD51-90E58C79F70B",KSCATEGORY_ENCODER);
+#define KSCATEGORY_ENCODER DEFINE_GUIDNAMED(KSCATEGORY_ENCODER)
+
+#define STATIC_KSCATEGORY_MULTIPLEXER					\
+	0x7a5de1d3,0x1a1,0x452c,0xb4,0x81,0x4f,0xa2,0xb9,0x62,0x71,0xe8
+DEFINE_GUIDSTRUCT("7A5DE1D3-01A1-452c-B481-4FA2B96271E8",KSCATEGORY_MULTIPLEXER);
+#define KSCATEGORY_MULTIPLEXER DEFINE_GUIDNAMED(KSCATEGORY_MULTIPLEXER)
+
+#ifndef __ENCODER_API_GUIDS__
+#define __ENCODER_API_GUIDS__
+
+#define STATIC_ENCAPIPARAM_BITRATE					\
+	0x49cc4c43,0xca83,0x4ad4,0xa9,0xaf,0xf3,0x69,0x6a,0xf6,0x66,0xdf
+DEFINE_GUIDSTRUCT("49CC4C43-CA83-4ad4-A9AF-F3696AF666DF",ENCAPIPARAM_BITRATE);
+#define ENCAPIPARAM_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE)
+
+#define STATIC_ENCAPIPARAM_PEAK_BITRATE					\
+	0x703f16a9,0x3d48,0x44a1,0xb0,0x77,0x1,0x8d,0xff,0x91,0x5d,0x19
+DEFINE_GUIDSTRUCT("703F16A9-3D48-44a1-B077-018DFF915D19",ENCAPIPARAM_PEAK_BITRATE);
+#define ENCAPIPARAM_PEAK_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_PEAK_BITRATE)
+
+#define STATIC_ENCAPIPARAM_BITRATE_MODE					\
+	0xee5fb25c,0xc713,0x40d1,0x9d,0x58,0xc0,0xd7,0x24,0x1e,0x25,0xf
+DEFINE_GUIDSTRUCT("EE5FB25C-C713-40d1-9D58-C0D7241E250F",ENCAPIPARAM_BITRATE_MODE);
+#define ENCAPIPARAM_BITRATE_MODE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE_MODE)
+
+#define STATIC_CODECAPI_CHANGELISTS					\
+	0x62b12acf,0xf6b0,0x47d9,0x94,0x56,0x96,0xf2,0x2c,0x4e,0x0b,0x9d
+DEFINE_GUIDSTRUCT("62B12ACF-F6B0-47D9-9456-96F22C4E0B9D",CODECAPI_CHANGELISTS);
+#define CODECAPI_CHANGELISTS DEFINE_GUIDNAMED(CODECAPI_CHANGELISTS)
+
+#define STATIC_CODECAPI_VIDEO_ENCODER					\
+	0x7112e8e1,0x3d03,0x47ef,0x8e,0x60,0x03,0xf1,0xcf,0x53,0x73,0x01
+DEFINE_GUIDSTRUCT("7112E8E1-3D03-47EF-8E60-03F1CF537301",CODECAPI_VIDEO_ENCODER);
+#define CODECAPI_VIDEO_ENCODER DEFINE_GUIDNAMED(CODECAPI_VIDEO_ENCODER)
+
+#define STATIC_CODECAPI_AUDIO_ENCODER					\
+	0xb9d19a3e,0xf897,0x429c,0xbc,0x46,0x81,0x38,0xb7,0x27,0x2b,0x2d
+DEFINE_GUIDSTRUCT("B9D19A3E-F897-429C-BC46-8138B7272B2D",CODECAPI_AUDIO_ENCODER);
+#define CODECAPI_AUDIO_ENCODER DEFINE_GUIDNAMED(CODECAPI_AUDIO_ENCODER)
+
+#define STATIC_CODECAPI_SETALLDEFAULTS					\
+	0x6c5e6a7c,0xacf8,0x4f55,0xa9,0x99,0x1a,0x62,0x81,0x09,0x05,0x1b
+DEFINE_GUIDSTRUCT("6C5E6A7C-ACF8-4F55-A999-1A628109051B",CODECAPI_SETALLDEFAULTS);
+#define CODECAPI_SETALLDEFAULTS DEFINE_GUIDNAMED(CODECAPI_SETALLDEFAULTS)
+
+#define STATIC_CODECAPI_ALLSETTINGS					\
+	0x6a577e92,0x83e1,0x4113,0xad,0xc2,0x4f,0xce,0xc3,0x2f,0x83,0xa1
+DEFINE_GUIDSTRUCT("6A577E92-83E1-4113-ADC2-4FCEC32F83A1",CODECAPI_ALLSETTINGS);
+#define CODECAPI_ALLSETTINGS DEFINE_GUIDNAMED(CODECAPI_ALLSETTINGS)
+
+#define STATIC_CODECAPI_SUPPORTSEVENTS					\
+	0x0581af97,0x7693,0x4dbd,0x9d,0xca,0x3f,0x9e,0xbd,0x65,0x85,0xa1
+DEFINE_GUIDSTRUCT("0581AF97-7693-4DBD-9DCA-3F9EBD6585A1",CODECAPI_SUPPORTSEVENTS);
+#define CODECAPI_SUPPORTSEVENTS DEFINE_GUIDNAMED(CODECAPI_SUPPORTSEVENTS)
+
+#define STATIC_CODECAPI_CURRENTCHANGELIST				\
+	0x1cb14e83,0x7d72,0x4657,0x83,0xfd,0x47,0xa2,0xc5,0xb9,0xd1,0x3d
+DEFINE_GUIDSTRUCT("1CB14E83-7D72-4657-83FD-47A2C5B9D13D",CODECAPI_CURRENTCHANGELIST);
+#define CODECAPI_CURRENTCHANGELIST DEFINE_GUIDNAMED(CODECAPI_CURRENTCHANGELIST)
+#endif /* __ENCODER_API_GUIDS__ */
+
+#ifndef __ENCODER_API_DEFINES__
+#define __ENCODER_API_DEFINES__
+typedef enum {
+  ConstantBitRate = 0,
+  VariableBitRateAverage,
+  VariableBitRatePeak
+} VIDEOENCODER_BITRATE_MODE;
+#endif /* __ENCODER_API_DEFINES__ */
+
+#define STATIC_KSPROPSETID_Jack\
+    0x4509f757, 0x2d46, 0x4637, 0x8e, 0x62, 0xce, 0x7d, 0xb9, 0x44, 0xf5, 0x7b
+DEFINE_GUIDSTRUCT("4509F757-2D46-4637-8E62-CE7DB944F57B", KSPROPSETID_Jack);
+#define KSPROPSETID_Jack DEFINE_GUIDNAMED(KSPROPSETID_Jack)
+
+typedef enum {
+    KSPROPERTY_JACK_DESCRIPTION = 1,
+    KSPROPERTY_JACK_DESCRIPTION2,
+    KSPROPERTY_JACK_SINK_INFO
+} KSPROPERTY_JACK;
+
+typedef enum
+{
+    eConnTypeUnknown,
+    eConnType3Point5mm,
+    eConnTypeQuarter,
+    eConnTypeAtapiInternal,
+    eConnTypeRCA,
+    eConnTypeOptical,
+    eConnTypeOtherDigital,
+    eConnTypeOtherAnalog,
+    eConnTypeMultichannelAnalogDIN,
+    eConnTypeXlrProfessional,
+    eConnTypeRJ11Modem,
+    eConnTypeCombination
+} EPcxConnectionType;
+
+typedef enum
+{
+    eGeoLocRear = 0x1,
+    eGeoLocFront,
+    eGeoLocLeft,
+    eGeoLocRight,
+    eGeoLocTop,
+    eGeoLocBottom,
+    eGeoLocRearPanel,
+    eGeoLocRiser,
+    eGeoLocInsideMobileLid,
+    eGeoLocDrivebay,
+    eGeoLocHDMI,
+    eGeoLocOutsideMobileLid,
+    eGeoLocATAPI,
+    eGeoLocReserved5,
+    eGeoLocReserved6,
+    EPcxGeoLocation_enum_count
+} EPcxGeoLocation;
+
+typedef enum
+{
+    eGenLocPrimaryBox = 0,
+    eGenLocInternal,
+    eGenLocSeparate,
+    eGenLocOther,
+    EPcxGenLocation_enum_count
+} EPcxGenLocation;
+
+typedef enum
+{
+    ePortConnJack = 0,
+    ePortConnIntegratedDevice,
+    ePortConnBothIntegratedAndJack,
+    ePortConnUnknown
+} EPxcPortConnection;
+
+typedef struct 
+{
+    DWORD                 ChannelMapping;
+    COLORREF              Color;
+    EPcxConnectionType    ConnectionType;
+    EPcxGeoLocation       GeoLocation;
+    EPcxGenLocation       GenLocation;
+    EPxcPortConnection    PortConnection;
+    BOOL                  IsConnected;
+} KSJACK_DESCRIPTION, *PKSJACK_DESCRIPTION;
+
+typedef enum 
+{
+    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,           
+    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT,         
+} KSJACK_SINK_CONNECTIONTYPE;
+
+#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32
+typedef struct _tagKSJACK_SINK_INFORMATION
+{
+  KSJACK_SINK_CONNECTIONTYPE ConnType;              
+  WORD  ManufacturerId;                            
+  WORD  ProductId;                                  
+  WORD  AudioLatency;                               
+  BOOL  HDCPCapable;                                
+  BOOL  AICapable;                                  
+  UCHAR SinkDescriptionLength;                      
+  WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH];
+  LUID  PortId;                                 
+}  KSJACK_SINK_INFORMATION, *PKSJACK_SINK_INFORMATION;
+
+#define JACKDESC2_PRESENCE_DETECT_CAPABILITY       0x00000001 
+#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x00000002
+
+typedef struct _tagKSJACK_DESCRIPTION2
+{
+  DWORD              DeviceStateInfo;
+  DWORD              JackCapabilities;
+} KSJACK_DESCRIPTION2, *PKSJACK_DESCRIPTION2;
+
+#endif /* _KSMEDIA_ */
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h b/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h
new file mode 100644
index 000000000..e6e049dab
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h
@@ -0,0 +1,639 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef __KSPROXY__
+#define __KSPROXY__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#undef KSDDKAPI
+#ifdef _KSDDK_
+#define KSDDKAPI
+#else
+#define KSDDKAPI DECLSPEC_IMPORT
+#endif
+
+#define STATIC_IID_IKsObject						\
+	0x423c13a2L,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1
+
+#define STATIC_IID_IKsPinEx						\
+	0x7bb38260L,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e
+
+#define STATIC_IID_IKsPin						\
+	0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1
+
+#define STATIC_IID_IKsPinPipe						\
+	0xe539cd90L,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02
+
+#define STATIC_IID_IKsDataTypeHandler					\
+	0x5ffbaa02L,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1
+
+#define STATIC_IID_IKsDataTypeCompletion				\
+	0x827D1A0EL,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#define STATIC_IID_IKsInterfaceHandler					\
+	0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#define STATIC_IID_IKsClockPropertySet					\
+	0x5C5CBD84L,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#define STATIC_IID_IKsAllocator						\
+	0x8da64899L,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a
+
+#define STATIC_IID_IKsAllocatorEx					\
+	0x091bb63aL,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
+
+#ifndef STATIC_IID_IKsPropertySet
+#define STATIC_IID_IKsPropertySet					\
+	0x31EFAC30L,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93
+#endif
+
+#define STATIC_IID_IKsTopology						\
+	0x28F54683L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#ifndef STATIC_IID_IKsControl
+#define STATIC_IID_IKsControl						\
+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
+#endif
+
+#define STATIC_IID_IKsAggregateControl					\
+	0x7F40EAC0L,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#define STATIC_CLSID_Proxy						\
+	0x17CCA71BL,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96
+
+#ifdef _KS_
+
+DEFINE_GUIDEX(IID_IKsObject);
+
+DEFINE_GUIDEX(IID_IKsPin);
+
+DEFINE_GUIDEX(IID_IKsPinEx);
+
+DEFINE_GUIDEX(IID_IKsPinPipe);
+
+DEFINE_GUIDEX(IID_IKsDataTypeHandler);
+
+DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
+
+DEFINE_GUIDEX(IID_IKsInterfaceHandler);
+
+DEFINE_GUIDEX(IID_IKsClockPropertySet);
+
+DEFINE_GUIDEX(IID_IKsAllocator);
+
+DEFINE_GUIDEX(IID_IKsAllocatorEx);
+
+#define IID_IKsQualityForwarder KSCATEGORY_QUALITY
+#define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
+
+typedef enum {
+  KsAllocatorMode_User,
+  KsAllocatorMode_Kernel
+} KSALLOCATORMODE;
+
+typedef enum {
+  FramingProp_Uninitialized,
+  FramingProp_None,
+  FramingProp_Old,
+  FramingProp_Ex
+} FRAMING_PROP;
+
+typedef FRAMING_PROP *PFRAMING_PROP;
+
+typedef enum {
+  Framing_Cache_Update,
+  Framing_Cache_ReadLast,
+  Framing_Cache_ReadOrig,
+  Framing_Cache_Write
+} FRAMING_CACHE_OPS;
+
+typedef struct {
+  LONGLONG MinTotalNominator;
+  LONGLONG MaxTotalNominator;
+  LONGLONG TotalDenominator;
+} OPTIMAL_WEIGHT_TOTALS;
+
+typedef struct IPin IPin;
+typedef struct IKsPin IKsPin;
+typedef struct IKsAllocator IKsAllocator;
+typedef struct IKsAllocatorEx IKsAllocatorEx;
+
+#define AllocatorStrategy_DontCare			0
+#define AllocatorStrategy_MinimizeNumberOfFrames	0x00000001
+#define AllocatorStrategy_MinimizeFrameSize		0x00000002
+#define AllocatorStrategy_MinimizeNumberOfAllocators	0x00000004
+#define AllocatorStrategy_MaximizeSpeed			0x00000008
+
+#define PipeFactor_None					0
+#define PipeFactor_UserModeUpstream			0x00000001
+#define PipeFactor_UserModeDownstream			0x00000002
+#define PipeFactor_MemoryTypes				0x00000004
+#define PipeFactor_Flags				0x00000008
+#define PipeFactor_PhysicalRanges			0x00000010
+#define PipeFactor_OptimalRanges			0x00000020
+#define PipeFactor_FixedCompression			0x00000040
+#define PipeFactor_UnknownCompression			0x00000080
+
+#define PipeFactor_Buffers				0x00000100
+#define PipeFactor_Align				0x00000200
+#define PipeFactor_PhysicalEnd				0x00000400
+#define PipeFactor_LogicalEnd				0x00000800
+
+typedef enum {
+  PipeState_DontCare,
+  PipeState_RangeNotFixed,
+  PipeState_RangeFixed,
+  PipeState_CompressionUnknown,
+  PipeState_Finalized
+} PIPE_STATE;
+
+typedef struct _PIPE_DIMENSIONS {
+  KS_COMPRESSION AllocatorPin;
+  KS_COMPRESSION MaxExpansionPin;
+  KS_COMPRESSION EndPin;
+} PIPE_DIMENSIONS,*PPIPE_DIMENSIONS;
+
+typedef enum {
+  Pipe_Allocator_None,
+  Pipe_Allocator_FirstPin,
+  Pipe_Allocator_LastPin,
+  Pipe_Allocator_MiddlePin
+} PIPE_ALLOCATOR_PLACE;
+
+typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE;
+
+typedef enum {
+  KS_MemoryTypeDontCare = 0,
+  KS_MemoryTypeKernelPaged,
+  KS_MemoryTypeKernelNonPaged,
+  KS_MemoryTypeDeviceHostMapped,
+  KS_MemoryTypeDeviceSpecific,
+  KS_MemoryTypeUser,
+  KS_MemoryTypeAnyHost
+} KS_LogicalMemoryType;
+
+typedef KS_LogicalMemoryType *PKS_LogicalMemoryType;
+
+typedef struct _PIPE_TERMINATION {
+  ULONG Flags;
+  ULONG OutsideFactors;
+  ULONG Weigth;
+  KS_FRAMING_RANGE PhysicalRange;
+  KS_FRAMING_RANGE_WEIGHTED OptimalRange;
+  KS_COMPRESSION Compression;
+} PIPE_TERMINATION;
+
+typedef struct _ALLOCATOR_PROPERTIES_EX
+{
+  long cBuffers;
+  long cbBuffer;
+  long cbAlign;
+  long cbPrefix;
+
+  GUID MemoryType;
+  GUID BusType;
+  PIPE_STATE State;
+  PIPE_TERMINATION Input;
+  PIPE_TERMINATION Output;
+  ULONG Strategy;
+  ULONG Flags;
+  ULONG Weight;
+  KS_LogicalMemoryType LogicalMemoryType;
+  PIPE_ALLOCATOR_PLACE AllocatorPlace;
+  PIPE_DIMENSIONS Dimensions;
+  KS_FRAMING_RANGE PhysicalRange;
+  IKsAllocatorEx *PrevSegment;
+  ULONG CountNextSegments;
+  IKsAllocatorEx **NextSegments;
+  ULONG InsideFactors;
+  ULONG NumberPins;
+} ALLOCATOR_PROPERTIES_EX;
+
+typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
+
+#ifdef __STREAMS__
+
+struct IKsClockPropertySet;
+#undef INTERFACE
+#define INTERFACE IKsClockPropertySet
+DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)
+{
+  STDMETHOD(KsGetTime)			(THIS_
+						LONGLONG *Time
+					) PURE;
+  STDMETHOD(KsSetTime)			(THIS_
+						LONGLONG Time
+					) PURE;
+  STDMETHOD(KsGetPhysicalTime)		(THIS_
+						LONGLONG *Time
+					) PURE;
+  STDMETHOD(KsSetPhysicalTime)		(THIS_
+						LONGLONG Time
+					) PURE;
+  STDMETHOD(KsGetCorrelatedTime)	(THIS_
+						KSCORRELATED_TIME *CorrelatedTime
+					) PURE;
+  STDMETHOD(KsSetCorrelatedTime)	(THIS_
+						KSCORRELATED_TIME *CorrelatedTime
+					) PURE;
+  STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_
+						KSCORRELATED_TIME *CorrelatedTime
+					) PURE;
+  STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_
+						KSCORRELATED_TIME *CorrelatedTime
+					) PURE;
+  STDMETHOD(KsGetResolution)		(THIS_
+						KSRESOLUTION *Resolution
+					) PURE;
+  STDMETHOD(KsGetState)			(THIS_
+						KSSTATE *State
+					) PURE;
+};
+
+struct IKsAllocator;
+#undef INTERFACE
+#define INTERFACE IKsAllocator
+DECLARE_INTERFACE_(IKsAllocator,IUnknown)
+{
+  STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE;
+  STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE;
+  STDMETHOD(KsGetAllocatorStatus)	(THIS_
+						PKSSTREAMALLOCATOR_STATUS AllocatorStatus
+					) PURE;
+  STDMETHOD_(VOID,KsSetAllocatorMode)	(THIS_
+						KSALLOCATORMODE Mode
+					) PURE;
+};
+
+struct IKsAllocatorEx;
+#undef INTERFACE
+#define INTERFACE IKsAllocatorEx
+DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)
+{
+  STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE;
+  STDMETHOD_(VOID,KsSetProperties)	(THIS_
+						PALLOCATOR_PROPERTIES_EX
+					) PURE;
+  STDMETHOD_(VOID,KsSetAllocatorHandle)	(THIS_
+						HANDLE AllocatorHandle
+					) PURE;
+  STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_
+						IKsPin *KsPin
+					) PURE;
+};
+
+typedef enum {
+  KsPeekOperation_PeekOnly,
+  KsPeekOperation_AddRef
+} KSPEEKOPERATION;
+
+typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
+struct IKsPin;
+
+#undef INTERFACE
+#define INTERFACE IKsPin
+DECLARE_INTERFACE_(IKsPin,IUnknown)
+{
+  STDMETHOD(KsQueryMediums)		(THIS_
+						PKSMULTIPLE_ITEM *MediumList
+					) PURE;
+  STDMETHOD(KsQueryInterfaces)		(THIS_
+						PKSMULTIPLE_ITEM *InterfaceList
+					) PURE;
+  STDMETHOD(KsCreateSinkPinHandle)	(THIS_
+						KSPIN_INTERFACE& Interface,
+						KSPIN_MEDIUM& Medium
+					) PURE;
+  STDMETHOD(KsGetCurrentCommunication)	(THIS_
+						KSPIN_COMMUNICATION *Communication,
+						KSPIN_INTERFACE *Interface,
+						KSPIN_MEDIUM *Medium
+					) PURE;
+  STDMETHOD(KsPropagateAcquire)		(THIS) PURE;
+  STDMETHOD(KsDeliver)			(THIS_
+						IMediaSample *Sample,
+						ULONG Flags
+					) PURE;
+  STDMETHOD(KsMediaSamplesCompleted)	(THIS_
+						PKSSTREAM_SEGMENT StreamSegment
+					) PURE;
+  STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_
+						KSPEEKOPERATION Operation
+					) PURE;
+  STDMETHOD(KsReceiveAllocator)		(THIS_
+						IMemAllocator *MemAllocator
+					) PURE;
+  STDMETHOD(KsRenegotiateAllocator)	(THIS) PURE;
+  STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE;
+  STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE;
+  STDMETHOD(KsQualityNotify)		(THIS_
+						ULONG Proportion,
+						REFERENCE_TIME TimeDelta
+					) PURE;
+};
+
+struct IKsPinEx;
+#undef INTERFACE
+#define INTERFACE IKsPinEx
+DECLARE_INTERFACE_(IKsPinEx,IKsPin)
+{
+  STDMETHOD_(VOID,KsNotifyError)	(THIS_
+						IMediaSample *Sample,
+						HRESULT hr
+					) PURE;
+};
+
+struct IKsPinPipe;
+#undef INTERFACE
+#define INTERFACE IKsPinPipe
+DECLARE_INTERFACE_(IKsPinPipe,IUnknown)
+{
+  STDMETHOD(KsGetPinFramingCache)	(THIS_
+						PKSALLOCATOR_FRAMING_EX *FramingEx,
+						PFRAMING_PROP FramingProp,
+						FRAMING_CACHE_OPS Option
+					) PURE;
+  STDMETHOD(KsSetPinFramingCache)	(THIS_
+						PKSALLOCATOR_FRAMING_EX FramingEx,
+						PFRAMING_PROP FramingProp,
+						FRAMING_CACHE_OPS Option
+					) PURE;
+  STDMETHOD_(IPin*,KsGetConnectedPin)	(THIS) PURE;
+  STDMETHOD_(IKsAllocatorEx*,KsGetPipe)	(THIS_
+						KSPEEKOPERATION Operation
+					) PURE;
+  STDMETHOD(KsSetPipe)			(THIS_
+						IKsAllocatorEx *KsAllocator
+					) PURE;
+  STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE;
+  STDMETHOD(KsSetPipeAllocatorFlag)	(THIS_
+						ULONG Flag
+					) PURE;
+  STDMETHOD_(GUID,KsGetPinBusCache)	(THIS) PURE;
+  STDMETHOD(KsSetPinBusCache)		(THIS_
+						GUID Bus
+					) PURE;
+  STDMETHOD_(PWCHAR,KsGetPinName)	(THIS) PURE;
+  STDMETHOD_(PWCHAR,KsGetFilterName)	(THIS) PURE;
+};
+
+struct IKsPinFactory;
+#undef INTERFACE
+#define INTERFACE IKsPinFactory
+DECLARE_INTERFACE_(IKsPinFactory,IUnknown)
+{
+  STDMETHOD(KsPinFactory)		(THIS_
+						ULONG *PinFactory
+					) PURE;
+};
+
+typedef enum {
+  KsIoOperation_Write,
+  KsIoOperation_Read
+} KSIOOPERATION;
+
+struct IKsDataTypeHandler;
+#undef INTERFACE
+#define INTERFACE IKsDataTypeHandler
+DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)
+{
+  STDMETHOD(KsCompleteIoOperation)	(THIS_
+						IMediaSample *Sample,
+						PVOID StreamHeader,
+						KSIOOPERATION IoOperation,
+						WINBOOL Cancelled
+					) PURE;
+  STDMETHOD(KsIsMediaTypeInRanges)	(THIS_
+						PVOID DataRanges
+					) PURE;
+  STDMETHOD(KsPrepareIoOperation)	(THIS_
+						IMediaSample *Sample,
+						PVOID StreamHeader,
+						KSIOOPERATION IoOperation
+					) PURE;
+  STDMETHOD(KsQueryExtendedSize)	(THIS_
+						ULONG *ExtendedSize
+					) PURE;
+  STDMETHOD(KsSetMediaType)		(THIS_
+						const AM_MEDIA_TYPE *AmMediaType
+					) PURE;
+};
+
+struct IKsDataTypeCompletion;
+#undef INTERFACE
+#define INTERFACE IKsDataTypeCompletion
+DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)
+{
+  STDMETHOD(KsCompleteMediaType)	(THIS_
+						HANDLE FilterHandle,
+						ULONG PinFactoryId,
+						AM_MEDIA_TYPE *AmMediaType
+					) PURE;
+};
+
+struct IKsInterfaceHandler;
+#undef INTERFACE
+#define INTERFACE IKsInterfaceHandler
+DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)
+{
+  STDMETHOD(KsSetPin)			(THIS_
+						IKsPin *KsPin
+					) PURE;
+  STDMETHOD(KsProcessMediaSamples)	(THIS_
+						IKsDataTypeHandler *KsDataTypeHandler,
+						IMediaSample **SampleList,
+						PLONG SampleCount,
+						KSIOOPERATION IoOperation,
+						PKSSTREAM_SEGMENT *StreamSegment
+					) PURE;
+  STDMETHOD(KsCompleteIo)		(THIS_
+						PKSSTREAM_SEGMENT StreamSegment
+					) PURE;
+};
+
+typedef struct _KSSTREAM_SEGMENT {
+  IKsInterfaceHandler *KsInterfaceHandler;
+  IKsDataTypeHandler *KsDataTypeHandler;
+  KSIOOPERATION IoOperation;
+  HANDLE CompletionEvent;
+} KSSTREAM_SEGMENT;
+
+struct IKsObject;
+#undef INTERFACE
+#define INTERFACE IKsObject
+DECLARE_INTERFACE_(IKsObject,IUnknown)
+{
+  STDMETHOD_(HANDLE,KsGetObjectHandle)	(THIS) PURE;
+};
+
+struct IKsQualityForwarder;
+#undef INTERFACE
+#define INTERFACE IKsQualityForwarder
+DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)
+{
+  STDMETHOD_(VOID,KsFlushClient)	(THIS_
+						IKsPin *Pin
+					) PURE;
+};
+
+struct IKsNotifyEvent;
+#undef INTERFACE
+#define INTERFACE IKsNotifyEvent
+DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)
+{
+  STDMETHOD(KsNotifyEvent)		(THIS_
+						ULONG Event,
+						ULONG_PTR lParam1,
+						ULONG_PTR lParam2
+					) PURE;
+};
+
+KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes);
+KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle);
+KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned);
+KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items);
+KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount);
+KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId);
+#endif /* __STREAMS__ */
+
+#ifndef _IKsPropertySet_
+DEFINE_GUIDEX(IID_IKsPropertySet);
+#endif
+
+#ifndef _IKsControl_
+DEFINE_GUIDEX(IID_IKsControl);
+#endif
+
+DEFINE_GUIDEX(IID_IKsAggregateControl);
+#ifndef _IKsTopology_
+DEFINE_GUIDEX(IID_IKsTopology);
+#endif
+DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy);
+#define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
+
+#else /* _KS_ */
+
+#ifndef _IKsPropertySet_
+DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet);
+#endif
+
+DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy);
+
+#endif /* _KS_ */
+
+#ifndef _IKsPropertySet_
+#define _IKsPropertySet_
+#define KSPROPERTY_SUPPORT_GET 1
+#define KSPROPERTY_SUPPORT_SET 2
+
+#ifdef DECLARE_INTERFACE_
+struct IKsPropertySet;
+#undef INTERFACE
+#define INTERFACE IKsPropertySet
+DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
+{
+  STDMETHOD(Set)			(THIS_
+						REFGUID PropSet,
+						ULONG Id,
+						LPVOID InstanceData,
+						ULONG InstanceLength,
+						LPVOID PropertyData,
+						ULONG DataLength
+					) PURE;
+  STDMETHOD(Get)			(THIS_
+						REFGUID PropSet,
+						ULONG Id,
+						LPVOID InstanceData,
+						ULONG InstanceLength,
+						LPVOID PropertyData,
+						ULONG DataLength,
+						ULONG *BytesReturned
+					) PURE;
+  STDMETHOD(QuerySupported)		(THIS_
+						REFGUID PropSet,
+						ULONG Id,
+						ULONG *TypeSupport
+					) PURE;
+};
+#endif /* DECLARE_INTERFACE_ */
+#endif /* _IKsPropertySet_ */
+
+#ifndef _IKsControl_
+#define _IKsControl_
+#ifdef DECLARE_INTERFACE_
+struct IKsControl;
+#undef INTERFACE
+#define INTERFACE IKsControl
+DECLARE_INTERFACE_(IKsControl,IUnknown)
+{
+  STDMETHOD(KsProperty)			(THIS_
+						PKSPROPERTY Property,
+						ULONG PropertyLength,
+						LPVOID PropertyData,
+						ULONG DataLength,
+						ULONG *BytesReturned
+					) PURE;
+  STDMETHOD(KsMethod)			(THIS_
+						PKSMETHOD Method,
+						ULONG MethodLength,
+						LPVOID MethodData,
+						ULONG DataLength,
+						ULONG *BytesReturned
+					) PURE;
+  STDMETHOD(KsEvent)			(THIS_
+						PKSEVENT Event,
+						ULONG EventLength,
+						LPVOID EventData,
+						ULONG DataLength,
+						ULONG *BytesReturned
+					) PURE;
+};
+#endif /* DECLARE_INTERFACE_ */
+#endif /* _IKsControl_ */
+
+#ifdef DECLARE_INTERFACE_
+struct IKsAggregateControl;
+#undef INTERFACE
+#define INTERFACE IKsAggregateControl
+DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)
+{
+  STDMETHOD(KsAddAggregate)		(THIS_
+						REFGUID AggregateClass
+					) PURE;
+  STDMETHOD(KsRemoveAggregate)		(THIS_
+						REFGUID AggregateClass
+					) PURE;
+};
+#endif /* DECLARE_INTERFACE_ */
+
+#ifndef _IKsTopology_
+#define _IKsTopology_
+#ifdef DECLARE_INTERFACE_
+struct IKsTopology;
+#undef INTERFACE
+#define INTERFACE IKsTopology
+DECLARE_INTERFACE_(IKsTopology,IUnknown)
+{
+  STDMETHOD(CreateNodeInstance)		(THIS_
+						ULONG NodeId,
+						ULONG Flags,
+						ACCESS_MASK DesiredAccess,
+						IUnknown *UnkOuter,
+						REFGUID InterfaceId,
+						LPVOID *Interface
+					) PURE;
+};
+#endif /* DECLARE_INTERFACE_ */
+#endif /* _IKsTopology_ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __KSPROXY__ */
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h b/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h
new file mode 100644
index 000000000..7d0efff65
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h
@@ -0,0 +1,159 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK,
+		0x36523B13,0x8EE5,0x11d1,0x8C,0xA3,0x00,0x60,0xB0,0x57,0x66,0x4A)
+
+OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES,
+		0xe06d8020,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS,
+		0x455f176c,0x4b06,0x47ce,0x9a,0xef,0x8c,0xae,0xf7,0x3d,0xf7,0xb5)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI,
+		0xb3c7397c,0xd303,0x414d,0xb3,0x3c,0x4e,0xd2,0xc9,0xd2,0x97,0x33)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI,
+		0xe9dd31a3,0x221d,0x4adb,0x85,0x32,0x9a,0xf3,0x9,0xc1,0xa4,0x8)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA,
+		0xc892e55b,0x252d,0x42b5,0xa3,0x16,0xd9,0x97,0xe7,0xa5,0xd9,0x95)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO,
+		0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO,
+		0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_VIDEOINFO2,
+		0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x0,0x0,0xc0,0xcc,0x16,0xba)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM,
+		0xe06d8022,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT,
+		0xe06d8023,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE,
+		0x138aa9a4,0x1ee2,0x4c5b,0x98,0x8e,0x19,0xab,0xfd,0xbc,0x8a,0x11)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO,
+		0xe06d802b,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3,
+		0xe06d802c,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE,
+		0xe06d802d,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO,
+		0xe06d8032,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DTS,
+		0xe06d8033,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS,
+		0xe06d8034,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK,
+		0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x04f,0xc3,0x1d,0x60)
+
+OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION,
+		0xe06d802e,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI,
+		0xe06d802f,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI,
+		0xe06d8030,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER,
+		0xe06d8031,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_MPEG2Video,
+		0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_DolbyAC3,
+		0xe06d80e4,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_MPEG2Audio,
+		0xe06d80e5,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio,
+		0xe06d80e6,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_AC3,
+		0xBFABE720,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic,
+		0xac390460,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt,
+		0x0E8A0A40,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange,
+		0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange,
+		0x3577eb09,0x9582,0x477f,0xb2,0x9c,0xb0,0xc4,0x52,0xa4,0xff,0x9a)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke,
+		0xae4720ae,0xaa71,0x42d8,0xb8,0x2a,0xff,0xfd,0xf5,0x8b,0x76,0xfd)
+
+OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep,
+		0xc830acbd,0xab07,0x492f,0x88,0x52,0x45,0xb6,0x98,0x7c,0x29,0x79)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE,
+		0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER,
+		0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR,
+		0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO,
+		0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO,
+		0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER,
+		0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR,
+		0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO,
+		0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC,
+		0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI,
+		0x9c24a977,0x951,0x451a,0x80,0x6,0xe,0x49,0xbd,0x28,0xcd,0x5f)
+
+OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER,
+		0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
+
+OUR_GUID_ENTRY(IID_IKsInterfaceHandler,
+		0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(IID_IKsDataTypeHandler,
+		0x5FFBAA02L,0x49A3,0x11D0,0x9F,0x36,0x00,0xAA,0x00,0xA2,0x16,0xA1)
+
+OUR_GUID_ENTRY(IID_IKsPin,
+		0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1)
+
+OUR_GUID_ENTRY(IID_IKsControl,
+		0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(IID_IKsPinFactory,
+		0xCD5EBE6BL,0x8B6E,0x11D1,0x8A,0xE0,0x00,0xA0,0xC9,0x22,0x31,0x96)
+
+OUR_GUID_ENTRY(AM_INTERFACESETID_Standard,
+		0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h b/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h
new file mode 100644
index 000000000..c1e7925f6
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h
@@ -0,0 +1,929 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for mmdeviceapi.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __mmdeviceapi_h__
+#define __mmdeviceapi_h__
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IMMNotificationClient_FWD_DEFINED__
+#define __IMMNotificationClient_FWD_DEFINED__
+typedef interface IMMNotificationClient IMMNotificationClient;
+#endif 	/* __IMMNotificationClient_FWD_DEFINED__ */
+
+
+#ifndef __IMMDevice_FWD_DEFINED__
+#define __IMMDevice_FWD_DEFINED__
+typedef interface IMMDevice IMMDevice;
+#endif 	/* __IMMDevice_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceCollection_FWD_DEFINED__
+#define __IMMDeviceCollection_FWD_DEFINED__
+typedef interface IMMDeviceCollection IMMDeviceCollection;
+#endif 	/* __IMMDeviceCollection_FWD_DEFINED__ */
+
+
+#ifndef __IMMEndpoint_FWD_DEFINED__
+#define __IMMEndpoint_FWD_DEFINED__
+typedef interface IMMEndpoint IMMEndpoint;
+#endif 	/* __IMMEndpoint_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceEnumerator_FWD_DEFINED__
+#define __IMMDeviceEnumerator_FWD_DEFINED__
+typedef interface IMMDeviceEnumerator IMMDeviceEnumerator;
+#endif 	/* __IMMDeviceEnumerator_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceActivator_FWD_DEFINED__
+#define __IMMDeviceActivator_FWD_DEFINED__
+typedef interface IMMDeviceActivator IMMDeviceActivator;
+#endif 	/* __IMMDeviceActivator_FWD_DEFINED__ */
+
+
+#ifndef __MMDeviceEnumerator_FWD_DEFINED__
+#define __MMDeviceEnumerator_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class MMDeviceEnumerator MMDeviceEnumerator;
+#else
+typedef struct MMDeviceEnumerator MMDeviceEnumerator;
+#endif /* __cplusplus */
+
+#endif 	/* __MMDeviceEnumerator_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "unknwn.h"
+#include "propsys.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_mmdeviceapi_0000_0000 */
+/* [local] */ 
+
+#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
+#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)
+#define DEVICE_STATE_ACTIVE      0x00000001
+#define DEVICE_STATE_DISABLED    0x00000002
+#define DEVICE_STATE_NOTPRESENT  0x00000004
+#define DEVICE_STATE_UNPLUGGED   0x00000008
+#define DEVICE_STATEMASK_ALL     0x0000000f
+#ifdef DEFINE_PROPERTYKEY
+#undef DEFINE_PROPERTYKEY
+#endif
+#ifdef INITGUID
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name = { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name
+#endif // INITGUID
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 0); 
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 1); 
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 2);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 3);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 4);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 5);
+#define ENDPOINT_SYSFX_ENABLED          0x00000000  // System Effects are enabled.
+#define ENDPOINT_SYSFX_DISABLED         0x00000001  // System Effects are disabled.
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 6);
+DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); 
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
+    {
+    DWORD cbDirectXAudioActivationParams;
+    GUID guidAudioSession;
+    DWORD dwAudioStreamFlags;
+    } 	DIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef /* [public][public][public][public][public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0001
+    {	eRender	= 0,
+	eCapture	= ( eRender + 1 ) ,
+	eAll	= ( eCapture + 1 ) ,
+	EDataFlow_enum_count	= ( eAll + 1 ) 
+    } 	EDataFlow;
+
+typedef /* [public][public][public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0002
+    {	eConsole	= 0,
+	eMultimedia	= ( eConsole + 1 ) ,
+	eCommunications	= ( eMultimedia + 1 ) ,
+	ERole_enum_count	= ( eCommunications + 1 ) 
+    } 	ERole;
+
+typedef /* [public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0003
+    {	RemoteNetworkDevice	= 0,
+	Speakers	= ( RemoteNetworkDevice + 1 ) ,
+	LineLevel	= ( Speakers + 1 ) ,
+	Headphones	= ( LineLevel + 1 ) ,
+	Microphone	= ( Headphones + 1 ) ,
+	Headset	= ( Microphone + 1 ) ,
+	Handset	= ( Headset + 1 ) ,
+	UnknownDigitalPassthrough	= ( Handset + 1 ) ,
+	SPDIF	= ( UnknownDigitalPassthrough + 1 ) ,
+	HDMI	= ( SPDIF + 1 ) ,
+	UnknownFormFactor	= ( HDMI + 1 ) 
+    } 	EndpointFormFactor;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IMMNotificationClient_INTERFACE_DEFINED__
+#define __IMMNotificationClient_INTERFACE_DEFINED__
+
+/* interface IMMNotificationClient */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMNotificationClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7991EEC9-7E89-4D85-8390-6C703CEC60C0")
+    IMMNotificationClient : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceStateChanged( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  DWORD dwNewState) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceAdded( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceRemoved( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged( 
+            /* [in] */ 
+            __in  EDataFlow flow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDefaultDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnPropertyValueChanged( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  const PROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMNotificationClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMNotificationClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMNotificationClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMNotificationClient * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceStateChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  DWORD dwNewState);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceAdded )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceRemoved )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDefaultDeviceChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  EDataFlow flow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDefaultDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnPropertyValueChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  const PROPERTYKEY key);
+        
+        END_INTERFACE
+    } IMMNotificationClientVtbl;
+
+    interface IMMNotificationClient
+    {
+        CONST_VTBL struct IMMNotificationClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMNotificationClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMNotificationClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMNotificationClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMNotificationClient_OnDeviceStateChanged(This,pwstrDeviceId,dwNewState)	\
+    ( (This)->lpVtbl -> OnDeviceStateChanged(This,pwstrDeviceId,dwNewState) ) 
+
+#define IMMNotificationClient_OnDeviceAdded(This,pwstrDeviceId)	\
+    ( (This)->lpVtbl -> OnDeviceAdded(This,pwstrDeviceId) ) 
+
+#define IMMNotificationClient_OnDeviceRemoved(This,pwstrDeviceId)	\
+    ( (This)->lpVtbl -> OnDeviceRemoved(This,pwstrDeviceId) ) 
+
+#define IMMNotificationClient_OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId)	\
+    ( (This)->lpVtbl -> OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId) ) 
+
+#define IMMNotificationClient_OnPropertyValueChanged(This,pwstrDeviceId,key)	\
+    ( (This)->lpVtbl -> OnPropertyValueChanged(This,pwstrDeviceId,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMNotificationClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDevice_INTERFACE_DEFINED__
+#define __IMMDevice_INTERFACE_DEFINED__
+
+/* interface IMMDevice */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDevice;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("D666063F-1587-4E43-81F1-B948E807363F")
+    IMMDevice : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  DWORD dwClsCtx,
+            /* [unique][in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OpenPropertyStore( 
+            /* [in] */ 
+            __in  DWORD stgmAccess,
+            /* [out] */ 
+            __out  IPropertyStore **ppProperties) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppstrId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetState( 
+            /* [out] */ 
+            __out  DWORD *pdwState) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDevice * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDevice * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDevice * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IMMDevice * This,
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  DWORD dwClsCtx,
+            /* [unique][in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OpenPropertyStore )( 
+            IMMDevice * This,
+            /* [in] */ 
+            __in  DWORD stgmAccess,
+            /* [out] */ 
+            __out  IPropertyStore **ppProperties);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetId )( 
+            IMMDevice * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppstrId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetState )( 
+            IMMDevice * This,
+            /* [out] */ 
+            __out  DWORD *pdwState);
+        
+        END_INTERFACE
+    } IMMDeviceVtbl;
+
+    interface IMMDevice
+    {
+        CONST_VTBL struct IMMDeviceVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDevice_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDevice_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDevice_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDevice_Activate(This,iid,dwClsCtx,pActivationParams,ppInterface)	\
+    ( (This)->lpVtbl -> Activate(This,iid,dwClsCtx,pActivationParams,ppInterface) ) 
+
+#define IMMDevice_OpenPropertyStore(This,stgmAccess,ppProperties)	\
+    ( (This)->lpVtbl -> OpenPropertyStore(This,stgmAccess,ppProperties) ) 
+
+#define IMMDevice_GetId(This,ppstrId)	\
+    ( (This)->lpVtbl -> GetId(This,ppstrId) ) 
+
+#define IMMDevice_GetState(This,pdwState)	\
+    ( (This)->lpVtbl -> GetState(This,pdwState) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDevice_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceCollection_INTERFACE_DEFINED__
+#define __IMMDeviceCollection_INTERFACE_DEFINED__
+
+/* interface IMMDeviceCollection */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0BD7A1BE-7A1A-44DB-8397-CC5392387B5E")
+    IMMDeviceCollection : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ 
+            __out  UINT *pcDevices) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Item( 
+            /* [in] */ 
+            __in  UINT nDevice,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceCollectionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceCollection * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceCollection * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceCollection * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IMMDeviceCollection * This,
+            /* [out] */ 
+            __out  UINT *pcDevices);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Item )( 
+            IMMDeviceCollection * This,
+            /* [in] */ 
+            __in  UINT nDevice,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice);
+        
+        END_INTERFACE
+    } IMMDeviceCollectionVtbl;
+
+    interface IMMDeviceCollection
+    {
+        CONST_VTBL struct IMMDeviceCollectionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceCollection_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceCollection_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceCollection_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceCollection_GetCount(This,pcDevices)	\
+    ( (This)->lpVtbl -> GetCount(This,pcDevices) ) 
+
+#define IMMDeviceCollection_Item(This,nDevice,ppDevice)	\
+    ( (This)->lpVtbl -> Item(This,nDevice,ppDevice) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMEndpoint_INTERFACE_DEFINED__
+#define __IMMEndpoint_INTERFACE_DEFINED__
+
+/* interface IMMEndpoint */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMEndpoint;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1BE09788-6894-4089-8586-9A2A6C265AC5")
+    IMMEndpoint : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( 
+            /* [out] */ 
+            __out  EDataFlow *pDataFlow) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMEndpointVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMEndpoint * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMEndpoint * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMEndpoint * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( 
+            IMMEndpoint * This,
+            /* [out] */ 
+            __out  EDataFlow *pDataFlow);
+        
+        END_INTERFACE
+    } IMMEndpointVtbl;
+
+    interface IMMEndpoint
+    {
+        CONST_VTBL struct IMMEndpointVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMEndpoint_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMEndpoint_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMEndpoint_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMEndpoint_GetDataFlow(This,pDataFlow)	\
+    ( (This)->lpVtbl -> GetDataFlow(This,pDataFlow) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMEndpoint_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceEnumerator_INTERFACE_DEFINED__
+#define __IMMDeviceEnumerator_INTERFACE_DEFINED__
+
+/* interface IMMDeviceEnumerator */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceEnumerator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A95664D2-9614-4F35-A746-DE8DB63617E6")
+    IMMDeviceEnumerator : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumAudioEndpoints( 
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  DWORD dwStateMask,
+            /* [out] */ 
+            __out  IMMDeviceCollection **ppDevices) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDefaultAudioEndpoint( 
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [out] */ 
+            __out  IMMDevice **ppEndpoint) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevice( 
+            /*  */ 
+            __in  LPCWSTR pwstrId,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterEndpointNotificationCallback( 
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterEndpointNotificationCallback( 
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceEnumeratorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceEnumerator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceEnumerator * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumAudioEndpoints )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  DWORD dwStateMask,
+            /* [out] */ 
+            __out  IMMDeviceCollection **ppDevices);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDefaultAudioEndpoint )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [out] */ 
+            __out  IMMDevice **ppEndpoint);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
+            IMMDeviceEnumerator * This,
+            /*  */ 
+            __in  LPCWSTR pwstrId,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterEndpointNotificationCallback )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterEndpointNotificationCallback )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient);
+        
+        END_INTERFACE
+    } IMMDeviceEnumeratorVtbl;
+
+    interface IMMDeviceEnumerator
+    {
+        CONST_VTBL struct IMMDeviceEnumeratorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceEnumerator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceEnumerator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceEnumerator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceEnumerator_EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices)	\
+    ( (This)->lpVtbl -> EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices) ) 
+
+#define IMMDeviceEnumerator_GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint)	\
+    ( (This)->lpVtbl -> GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint) ) 
+
+#define IMMDeviceEnumerator_GetDevice(This,pwstrId,ppDevice)	\
+    ( (This)->lpVtbl -> GetDevice(This,pwstrId,ppDevice) ) 
+
+#define IMMDeviceEnumerator_RegisterEndpointNotificationCallback(This,pClient)	\
+    ( (This)->lpVtbl -> RegisterEndpointNotificationCallback(This,pClient) ) 
+
+#define IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(This,pClient)	\
+    ( (This)->lpVtbl -> UnregisterEndpointNotificationCallback(This,pClient) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceEnumerator_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceActivator_INTERFACE_DEFINED__
+#define __IMMDeviceActivator_INTERFACE_DEFINED__
+
+/* interface IMMDeviceActivator */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceActivator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3B0D0EA4-D0A9-4B0E-935B-09516746FAC0")
+    IMMDeviceActivator : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  IMMDevice *pDevice,
+            /* [in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceActivatorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceActivator * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceActivator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceActivator * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IMMDeviceActivator * This,
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  IMMDevice *pDevice,
+            /* [in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface);
+        
+        END_INTERFACE
+    } IMMDeviceActivatorVtbl;
+
+    interface IMMDeviceActivator
+    {
+        CONST_VTBL struct IMMDeviceActivatorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceActivator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceActivator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceActivator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceActivator_Activate(This,iid,pDevice,pActivationParams,ppInterface)	\
+    ( (This)->lpVtbl -> Activate(This,iid,pDevice,pActivationParams,ppInterface) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceActivator_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_mmdeviceapi_0000_0006 */
+/* [local] */ 
+
+typedef /* [public] */ struct __MIDL___MIDL_itf_mmdeviceapi_0000_0006_0001
+    {
+    LPARAM AddPageParam;
+    IMMDevice *pEndpoint;
+    IMMDevice *pPnpInterface;
+    IMMDevice *pPnpDevnode;
+    } 	AudioExtensionParams;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_s_ifspec;
+
+
+#ifndef __MMDeviceAPILib_LIBRARY_DEFINED__
+#define __MMDeviceAPILib_LIBRARY_DEFINED__
+
+/* library MMDeviceAPILib */
+/* [helpstring][version][uuid] */ 
+
+
+EXTERN_C const IID LIBID_MMDeviceAPILib;
+
+EXTERN_C const CLSID CLSID_MMDeviceEnumerator;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("BCDE0395-E52F-467C-8E3D-C4579291692E")
+MMDeviceEnumerator;
+#endif
+#endif /* __MMDeviceAPILib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/propidl.h b/portaudio/src/hostapi/wasapi/mingw-include/propidl.h
new file mode 100644
index 000000000..7efbfcdf4
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/propidl.h
@@ -0,0 +1,1275 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for propidl.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __propidl_h__
+#define __propidl_h__
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define interface struct
+#include "sal.h"
+#include "rpcsal.h"
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IPropertyStorage_FWD_DEFINED__
+#define __IPropertyStorage_FWD_DEFINED__
+typedef interface IPropertyStorage IPropertyStorage;
+#endif 	/* __IPropertyStorage_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySetStorage_FWD_DEFINED__
+#define __IPropertySetStorage_FWD_DEFINED__
+typedef interface IPropertySetStorage IPropertySetStorage;
+#endif 	/* __IPropertySetStorage_FWD_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif 	/* __IEnumSTATPROPSTG_FWD_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif 	/* __IEnumSTATPROPSETSTG_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oaidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+/* interface __MIDL_itf_propidl_0000_0000 */
+/* [local] */
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//--------------------------------------------------------------------------
+#if ( _MSC_VER >= 800 )
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+#pragma warning(disable:4201)    /* Nameless struct/union */
+#pragma warning(disable:4237)    /* obsolete member named 'bool' */
+#endif
+#if ( _MSC_VER >= 1020 )
+#pragma once
+#endif
+
+
+
+typedef struct tagVersionedStream
+    {
+    GUID guidVersion;
+    IStream *pStream;
+    } 	VERSIONEDSTREAM;
+
+typedef struct tagVersionedStream *LPVERSIONEDSTREAM;
+
+
+// Flags for IPropertySetStorage::Create
+#define	PROPSETFLAG_DEFAULT	( 0 )
+
+#define	PROPSETFLAG_NONSIMPLE	( 1 )
+
+#define	PROPSETFLAG_ANSI	( 2 )
+
+//   (This flag is only supported on StgCreatePropStg & StgOpenPropStg
+#define	PROPSETFLAG_UNBUFFERED	( 4 )
+
+//   (This flag causes a version-1 property set to be created
+#define	PROPSETFLAG_CASE_SENSITIVE	( 8 )
+
+
+// Flags for the reservied PID_BEHAVIOR property
+#define	PROPSET_BEHAVIOR_CASE_SENSITIVE	( 1 )
+
+#ifdef MIDL_PASS
+// This is the PROPVARIANT definition for marshaling.
+typedef struct tag_inner_PROPVARIANT PROPVARIANT;
+
+#else
+// This is the standard C layout of the PROPVARIANT.
+typedef struct tagPROPVARIANT PROPVARIANT;
+#endif
+typedef struct tagCAC
+    {
+    ULONG cElems;
+    CHAR *pElems;
+    } 	CAC;
+#ifdef WIN64
+typedef struct tagCAUB
+    {
+    ULONG cElems;
+    UCHAR *pElems;
+    } 	CAUB;
+
+typedef struct tagCAI
+    {
+    ULONG cElems;
+    SHORT *pElems;
+    } 	CAI;
+
+typedef struct tagCAUI
+    {
+    ULONG cElems;
+    USHORT *pElems;
+    } 	CAUI;
+
+typedef struct tagCAL
+    {
+    ULONG cElems;
+    LONG *pElems;
+    } 	CAL;
+
+typedef struct tagCAUL
+    {
+    ULONG cElems;
+    ULONG *pElems;
+    } 	CAUL;
+
+typedef struct tagCAFLT
+    {
+    ULONG cElems;
+    FLOAT *pElems;
+    } 	CAFLT;
+
+typedef struct tagCADBL
+    {
+    ULONG cElems;
+    DOUBLE *pElems;
+    } 	CADBL;
+
+typedef struct tagCACY
+    {
+    ULONG cElems;
+    CY *pElems;
+    } 	CACY;
+
+typedef struct tagCADATE
+    {
+    ULONG cElems;
+    DATE *pElems;
+    } 	CADATE;
+
+typedef struct tagCABSTR
+    {
+    ULONG cElems;
+    BSTR *pElems;
+    } 	CABSTR;
+
+typedef struct tagCABSTRBLOB
+    {
+    ULONG cElems;
+    BSTRBLOB *pElems;
+    } 	CABSTRBLOB;
+
+typedef struct tagCABOOL
+    {
+    ULONG cElems;
+    VARIANT_BOOL *pElems;
+    } 	CABOOL;
+
+typedef struct tagCASCODE
+    {
+    ULONG cElems;
+    SCODE *pElems;
+    } 	CASCODE;
+
+typedef struct tagCAPROPVARIANT
+    {
+    ULONG cElems;
+    PROPVARIANT *pElems;
+    } 	CAPROPVARIANT;
+
+typedef struct tagCAH
+    {
+    ULONG cElems;
+    LARGE_INTEGER *pElems;
+    } 	CAH;
+
+typedef struct tagCAUH
+    {
+    ULONG cElems;
+    ULARGE_INTEGER *pElems;
+    } 	CAUH;
+
+typedef struct tagCALPSTR
+    {
+    ULONG cElems;
+    LPSTR *pElems;
+    } 	CALPSTR;
+
+typedef struct tagCALPWSTR
+    {
+    ULONG cElems;
+    LPWSTR *pElems;
+    } 	CALPWSTR;
+
+typedef struct tagCAFILETIME
+    {
+    ULONG cElems;
+    FILETIME *pElems;
+    } 	CAFILETIME;
+
+typedef struct tagCACLIPDATA
+    {
+    ULONG cElems;
+    CLIPDATA *pElems;
+    } 	CACLIPDATA;
+
+typedef struct tagCACLSID
+    {
+    ULONG cElems;
+    CLSID *pElems;
+    } 	CACLSID;
+#endif
+#ifdef MIDL_PASS
+// This is the PROPVARIANT padding layout for marshaling.
+typedef BYTE PROPVAR_PAD1;
+
+typedef BYTE PROPVAR_PAD2;
+
+typedef ULONG PROPVAR_PAD3;
+
+#else
+// This is the standard C layout of the structure.
+typedef WORD PROPVAR_PAD1;
+typedef WORD PROPVAR_PAD2;
+typedef WORD PROPVAR_PAD3;
+#define tag_inner_PROPVARIANT
+#endif
+#ifdef WIN64
+#ifndef MIDL_PASS
+struct tagPROPVARIANT {
+  union {
+#endif
+struct tag_inner_PROPVARIANT
+    {
+    VARTYPE vt;
+    PROPVAR_PAD1 wReserved1;
+    PROPVAR_PAD2 wReserved2;
+    PROPVAR_PAD3 wReserved3;
+    /* [switch_type] */ union
+        {
+         /* Empty union arm */
+        CHAR cVal;
+        UCHAR bVal;
+        SHORT iVal;
+        USHORT uiVal;
+        LONG lVal;
+        ULONG ulVal;
+        INT intVal;
+        UINT uintVal;
+        LARGE_INTEGER hVal;
+        ULARGE_INTEGER uhVal;
+        FLOAT fltVal;
+        DOUBLE dblVal;
+        VARIANT_BOOL boolVal;
+        //_VARIANT_BOOL bool;
+        SCODE scode;
+        CY cyVal;
+        DATE date;
+        FILETIME filetime;
+        CLSID *puuid;
+        CLIPDATA *pclipdata;
+        BSTR bstrVal;
+        BSTRBLOB bstrblobVal;
+        BLOB blob;
+        LPSTR pszVal;
+        LPWSTR pwszVal;
+        IUnknown *punkVal;
+        IDispatch *pdispVal;
+        IStream *pStream;
+        IStorage *pStorage;
+        LPVERSIONEDSTREAM pVersionedStream;
+        LPSAFEARRAY parray;
+        CAC cac;
+        CAUB caub;
+        CAI cai;
+        CAUI caui;
+        CAL cal;
+        CAUL caul;
+        CAH cah;
+        CAUH cauh;
+        CAFLT caflt;
+        CADBL cadbl;
+        CABOOL cabool;
+        CASCODE cascode;
+        CACY cacy;
+        CADATE cadate;
+        CAFILETIME cafiletime;
+        CACLSID cauuid;
+        CACLIPDATA caclipdata;
+        CABSTR cabstr;
+        CABSTRBLOB cabstrblob;
+        CALPSTR calpstr;
+        CALPWSTR calpwstr;
+        CAPROPVARIANT capropvar;
+        CHAR *pcVal;
+        UCHAR *pbVal;
+        SHORT *piVal;
+        USHORT *puiVal;
+        LONG *plVal;
+        ULONG *pulVal;
+        INT *pintVal;
+        UINT *puintVal;
+        FLOAT *pfltVal;
+        DOUBLE *pdblVal;
+        VARIANT_BOOL *pboolVal;
+        DECIMAL *pdecVal;
+        SCODE *pscode;
+        CY *pcyVal;
+        DATE *pdate;
+        BSTR *pbstrVal;
+        IUnknown **ppunkVal;
+        IDispatch **ppdispVal;
+        LPSAFEARRAY *pparray;
+        PROPVARIANT *pvarVal;
+        } 	;
+    } ;
+#ifndef MIDL_PASS
+    DECIMAL decVal;
+  };
+};
+#endif
+#endif
+#ifdef MIDL_PASS
+// This is the LPPROPVARIANT definition for marshaling.
+typedef struct tag_inner_PROPVARIANT *LPPROPVARIANT;
+
+typedef const PROPVARIANT *REFPROPVARIANT;
+
+#else
+
+// This is the standard C layout of the PROPVARIANT.
+#ifdef WIN64
+typedef struct tagPROPVARIANT * LPPROPVARIANT;
+#endif
+
+#ifndef _REFPROPVARIANT_DEFINED
+#define _REFPROPVARIANT_DEFINED
+#ifdef __cplusplus
+#define REFPROPVARIANT const PROPVARIANT &
+#else
+#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST
+#endif
+#endif
+
+#endif // MIDL_PASS
+
+// Reserved global Property IDs
+#define	PID_DICTIONARY	( 0 )
+
+#define	PID_CODEPAGE	( 0x1 )
+
+#define	PID_FIRST_USABLE	( 0x2 )
+
+#define	PID_FIRST_NAME_DEFAULT	( 0xfff )
+
+#define	PID_LOCALE	( 0x80000000 )
+
+#define	PID_MODIFY_TIME	( 0x80000001 )
+
+#define	PID_SECURITY	( 0x80000002 )
+
+#define	PID_BEHAVIOR	( 0x80000003 )
+
+#define	PID_ILLEGAL	( 0xffffffff )
+
+// Range which is read-only to downlevel implementations
+#define	PID_MIN_READONLY	( 0x80000000 )
+
+#define	PID_MAX_READONLY	( 0xbfffffff )
+
+// Property IDs for the DiscardableInformation Property Set
+
+#define PIDDI_THUMBNAIL          0x00000002L // VT_BLOB
+
+// Property IDs for the SummaryInformation Property Set
+
+#define PIDSI_TITLE               0x00000002L  // VT_LPSTR
+#define PIDSI_SUBJECT             0x00000003L  // VT_LPSTR
+#define PIDSI_AUTHOR              0x00000004L  // VT_LPSTR
+#define PIDSI_KEYWORDS            0x00000005L  // VT_LPSTR
+#define PIDSI_COMMENTS            0x00000006L  // VT_LPSTR
+#define PIDSI_TEMPLATE            0x00000007L  // VT_LPSTR
+#define PIDSI_LASTAUTHOR          0x00000008L  // VT_LPSTR
+#define PIDSI_REVNUMBER           0x00000009L  // VT_LPSTR
+#define PIDSI_EDITTIME            0x0000000aL  // VT_FILETIME (UTC)
+#define PIDSI_LASTPRINTED         0x0000000bL  // VT_FILETIME (UTC)
+#define PIDSI_CREATE_DTM          0x0000000cL  // VT_FILETIME (UTC)
+#define PIDSI_LASTSAVE_DTM        0x0000000dL  // VT_FILETIME (UTC)
+#define PIDSI_PAGECOUNT           0x0000000eL  // VT_I4
+#define PIDSI_WORDCOUNT           0x0000000fL  // VT_I4
+#define PIDSI_CHARCOUNT           0x00000010L  // VT_I4
+#define PIDSI_THUMBNAIL           0x00000011L  // VT_CF
+#define PIDSI_APPNAME             0x00000012L  // VT_LPSTR
+#define PIDSI_DOC_SECURITY        0x00000013L  // VT_I4
+
+// Property IDs for the DocSummaryInformation Property Set
+
+#define PIDDSI_CATEGORY          0x00000002 // VT_LPSTR
+#define PIDDSI_PRESFORMAT        0x00000003 // VT_LPSTR
+#define PIDDSI_BYTECOUNT         0x00000004 // VT_I4
+#define PIDDSI_LINECOUNT         0x00000005 // VT_I4
+#define PIDDSI_PARCOUNT          0x00000006 // VT_I4
+#define PIDDSI_SLIDECOUNT        0x00000007 // VT_I4
+#define PIDDSI_NOTECOUNT         0x00000008 // VT_I4
+#define PIDDSI_HIDDENCOUNT       0x00000009 // VT_I4
+#define PIDDSI_MMCLIPCOUNT       0x0000000A // VT_I4
+#define PIDDSI_SCALE             0x0000000B // VT_BOOL
+#define PIDDSI_HEADINGPAIR       0x0000000C // VT_VARIANT | VT_VECTOR
+#define PIDDSI_DOCPARTS          0x0000000D // VT_LPSTR | VT_VECTOR
+#define PIDDSI_MANAGER           0x0000000E // VT_LPSTR
+#define PIDDSI_COMPANY           0x0000000F // VT_LPSTR
+#define PIDDSI_LINKSDIRTY        0x00000010 // VT_BOOL
+
+
+//  FMTID_MediaFileSummaryInfo - Property IDs
+
+#define PIDMSI_EDITOR                   0x00000002L  // VT_LPWSTR
+#define PIDMSI_SUPPLIER                 0x00000003L  // VT_LPWSTR
+#define PIDMSI_SOURCE                   0x00000004L  // VT_LPWSTR
+#define PIDMSI_SEQUENCE_NO              0x00000005L  // VT_LPWSTR
+#define PIDMSI_PROJECT                  0x00000006L  // VT_LPWSTR
+#define PIDMSI_STATUS                   0x00000007L  // VT_UI4
+#define PIDMSI_OWNER                    0x00000008L  // VT_LPWSTR
+#define PIDMSI_RATING                   0x00000009L  // VT_LPWSTR
+#define PIDMSI_PRODUCTION               0x0000000AL  // VT_FILETIME (UTC)
+#define PIDMSI_COPYRIGHT                0x0000000BL  // VT_LPWSTR
+
+//  PIDMSI_STATUS value definitions
+
+enum PIDMSI_STATUS_VALUE
+    {	PIDMSI_STATUS_NORMAL	= 0,
+	PIDMSI_STATUS_NEW	= ( PIDMSI_STATUS_NORMAL + 1 ) ,
+	PIDMSI_STATUS_PRELIM	= ( PIDMSI_STATUS_NEW + 1 ) ,
+	PIDMSI_STATUS_DRAFT	= ( PIDMSI_STATUS_PRELIM + 1 ) ,
+	PIDMSI_STATUS_INPROGRESS	= ( PIDMSI_STATUS_DRAFT + 1 ) ,
+	PIDMSI_STATUS_EDIT	= ( PIDMSI_STATUS_INPROGRESS + 1 ) ,
+	PIDMSI_STATUS_REVIEW	= ( PIDMSI_STATUS_EDIT + 1 ) ,
+	PIDMSI_STATUS_PROOF	= ( PIDMSI_STATUS_REVIEW + 1 ) ,
+	PIDMSI_STATUS_FINAL	= ( PIDMSI_STATUS_PROOF + 1 ) ,
+	PIDMSI_STATUS_OTHER	= 0x7fff
+    } ;
+#define	PRSPEC_INVALID	( 0xffffffff )
+
+#define	PRSPEC_LPWSTR	( 0 )
+
+#define	PRSPEC_PROPID	( 1 )
+
+#ifdef WIN64
+typedef struct tagPROPSPEC
+    {
+    ULONG ulKind;
+    /* [switch_type] */ union
+        {
+        PROPID propid;
+        LPOLESTR lpwstr;
+         /* Empty union arm */
+        } 	;
+    } 	PROPSPEC;
+
+typedef struct tagSTATPROPSTG
+    {
+    LPOLESTR lpwstrName;
+    PROPID propid;
+    VARTYPE vt;
+    } 	STATPROPSTG;
+#endif
+
+// Macros for parsing the OS Version of the Property Set Header
+#define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )
+#define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF
+#ifdef WIN64
+typedef struct tagSTATPROPSETSTG
+    {
+    FMTID fmtid;
+    CLSID clsid;
+    DWORD grfFlags;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD dwOSVersion;
+    } 	STATPROPSETSTG;
+#endif
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IPropertyStorage_INTERFACE_DEFINED__
+#define __IPropertyStorage_INTERFACE_DEFINED__
+
+/* interface IPropertyStorage */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IPropertyStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("00000138-0000-0000-C000-000000000046")
+    IPropertyStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+            /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[  ],
+            /* [in] */ PROPID propidNameFirst) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+            /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Commit(
+            /* [in] */ DWORD grfCommitFlags) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Revert( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Enum(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE SetTimes(
+            /* [in] */ __RPC__in const FILETIME *pctime,
+            /* [in] */ __RPC__in const FILETIME *patime,
+            /* [in] */ __RPC__in const FILETIME *pmtime) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE SetClass(
+            /* [in] */ __RPC__in REFCLSID clsid) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Stat(
+            /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IPropertyStorageVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IPropertyStorage * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IPropertyStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *ReadMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+//            /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *WriteMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[  ],
+//            /* [in] */ PROPID propidNameFirst);
+//
+//        HRESULT ( STDMETHODCALLTYPE *DeleteMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *ReadPropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+//            /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *WritePropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *DeletePropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Commit )(
+//            IPropertyStorage * This,
+//            /* [in] */ DWORD grfCommitFlags);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Revert )(
+//            IPropertyStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Enum )(
+//            IPropertyStorage * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum);
+//
+//        HRESULT ( STDMETHODCALLTYPE *SetTimes )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in const FILETIME *pctime,
+//            /* [in] */ __RPC__in const FILETIME *patime,
+//            /* [in] */ __RPC__in const FILETIME *pmtime);
+//
+//        HRESULT ( STDMETHODCALLTYPE *SetClass )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in REFCLSID clsid);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Stat )(
+//            IPropertyStorage * This,
+//            /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg);
+//
+//        END_INTERFACE
+//    } IPropertyStorageVtbl;
+//
+//    interface IPropertyStorage
+//    {
+//        CONST_VTBL struct IPropertyStorageVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IPropertyStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IPropertyStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IPropertyStorage_ReadMultiple(This,cpspec,rgpspec,rgpropvar)	\
+    ( (This)->lpVtbl -> ReadMultiple(This,cpspec,rgpspec,rgpropvar) )
+
+#define IPropertyStorage_WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst)	\
+    ( (This)->lpVtbl -> WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) )
+
+#define IPropertyStorage_DeleteMultiple(This,cpspec,rgpspec)	\
+    ( (This)->lpVtbl -> DeleteMultiple(This,cpspec,rgpspec) )
+
+#define IPropertyStorage_ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName)	\
+    ( (This)->lpVtbl -> ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) )
+
+#define IPropertyStorage_WritePropertyNames(This,cpropid,rgpropid,rglpwstrName)	\
+    ( (This)->lpVtbl -> WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) )
+
+#define IPropertyStorage_DeletePropertyNames(This,cpropid,rgpropid)	\
+    ( (This)->lpVtbl -> DeletePropertyNames(This,cpropid,rgpropid) )
+
+#define IPropertyStorage_Commit(This,grfCommitFlags)	\
+    ( (This)->lpVtbl -> Commit(This,grfCommitFlags) )
+
+#define IPropertyStorage_Revert(This)	\
+    ( (This)->lpVtbl -> Revert(This) )
+
+#define IPropertyStorage_Enum(This,ppenum)	\
+    ( (This)->lpVtbl -> Enum(This,ppenum) )
+
+#define IPropertyStorage_SetTimes(This,pctime,patime,pmtime)	\
+    ( (This)->lpVtbl -> SetTimes(This,pctime,patime,pmtime) )
+
+#define IPropertyStorage_SetClass(This,clsid)	\
+    ( (This)->lpVtbl -> SetClass(This,clsid) )
+
+#define IPropertyStorage_Stat(This,pstatpsstg)	\
+    ( (This)->lpVtbl -> Stat(This,pstatpsstg) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertySetStorage_INTERFACE_DEFINED__
+#define __IPropertySetStorage_INTERFACE_DEFINED__
+
+/* interface IPropertySetStorage */
+/* [unique][uuid][object] */
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertySetStorage *LPPROPERTYSETSTORAGE;
+
+
+EXTERN_C const IID IID_IPropertySetStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("0000013A-0000-0000-C000-000000000046")
+    IPropertySetStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Create(
+            /* [in] */ __RPC__in REFFMTID rfmtid,
+            /* [unique][in] */ __RPC__in_opt const CLSID *pclsid,
+            /* [in] */ DWORD grfFlags,
+            /* [in] */ DWORD grfMode,
+            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Open(
+            /* [in] */ __RPC__in REFFMTID rfmtid,
+            /* [in] */ DWORD grfMode,
+            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Delete(
+            /* [in] */ __RPC__in REFFMTID rfmtid) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Enum(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IPropertySetStorageVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IPropertySetStorage * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IPropertySetStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Create )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid,
+//            /* [unique][in] */ __RPC__in_opt const CLSID *pclsid,
+//            /* [in] */ DWORD grfFlags,
+//            /* [in] */ DWORD grfMode,
+//            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Open )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid,
+//            /* [in] */ DWORD grfMode,
+//            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Delete )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Enum )(
+//            IPropertySetStorage * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IPropertySetStorageVtbl;
+//
+//    interface IPropertySetStorage
+//    {
+//        CONST_VTBL struct IPropertySetStorageVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IPropertySetStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IPropertySetStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IPropertySetStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IPropertySetStorage_Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg)	\
+    ( (This)->lpVtbl -> Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) )
+
+#define IPropertySetStorage_Open(This,rfmtid,grfMode,ppprstg)	\
+    ( (This)->lpVtbl -> Open(This,rfmtid,grfMode,ppprstg) )
+
+#define IPropertySetStorage_Delete(This,rfmtid)	\
+    ( (This)->lpVtbl -> Delete(This,rfmtid) )
+
+#define IPropertySetStorage_Enum(This,ppenum)	\
+    ( (This)->lpVtbl -> Enum(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySetStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+
+/* interface IEnumSTATPROPSTG */
+/* [unique][uuid][object] */
+
+//typedef /* [unique] */  __RPC_unique_pointer IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+
+
+EXTERN_C const IID IID_IEnumSTATPROPSTG;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("00000139-0000-0000-C000-000000000046")
+    IEnumSTATPROPSTG : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next(
+            /* [in] */ ULONG celt,
+            /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+            /* [out] */ ULONG *pceltFetched) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Skip(
+            /* [in] */ ULONG celt) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Clone(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IEnumSTATPROPSTGVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IEnumSTATPROPSTG * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IEnumSTATPROPSTG * This);
+//
+//        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ ULONG celt,
+//            /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+//            /* [out] */ ULONG *pceltFetched);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Skip )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ ULONG celt);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Reset )(
+//            IEnumSTATPROPSTG * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Clone )(
+//            IEnumSTATPROPSTG * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IEnumSTATPROPSTGVtbl;
+//
+//    interface IEnumSTATPROPSTG
+//    {
+//        CONST_VTBL struct IEnumSTATPROPSTGVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IEnumSTATPROPSTG_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IEnumSTATPROPSTG_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IEnumSTATPROPSTG_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IEnumSTATPROPSTG_Next(This,celt,rgelt,pceltFetched)	\
+    ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) )
+
+#define IEnumSTATPROPSTG_Skip(This,celt)	\
+    ( (This)->lpVtbl -> Skip(This,celt) )
+
+#define IEnumSTATPROPSTG_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) )
+
+#define IEnumSTATPROPSTG_Clone(This,ppenum)	\
+    ( (This)->lpVtbl -> Clone(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+
+/* interface IEnumSTATPROPSETSTG */
+/* [unique][uuid][object] */
+
+typedef /* [unique] */  __RPC_unique_pointer IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+
+
+EXTERN_C const IID IID_IEnumSTATPROPSETSTG;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("0000013B-0000-0000-C000-000000000046")
+    IEnumSTATPROPSETSTG : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next(
+            /* [in] */ ULONG celt,
+            /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+            /* [out] */ ULONG *pceltFetched) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Skip(
+            /* [in] */ ULONG celt) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Clone(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IEnumSTATPROPSETSTGVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ ULONG celt,
+//            /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+//            /* [out] */ ULONG *pceltFetched);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Skip )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ ULONG celt);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Reset )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Clone )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IEnumSTATPROPSETSTGVtbl;
+//
+//    interface IEnumSTATPROPSETSTG
+//    {
+//        CONST_VTBL struct IEnumSTATPROPSETSTGVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IEnumSTATPROPSETSTG_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IEnumSTATPROPSETSTG_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IEnumSTATPROPSETSTG_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IEnumSTATPROPSETSTG_Next(This,celt,rgelt,pceltFetched)	\
+    ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) )
+
+#define IEnumSTATPROPSETSTG_Skip(This,celt)	\
+    ( (This)->lpVtbl -> Skip(This,celt) )
+
+#define IEnumSTATPROPSETSTG_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) )
+
+#define IEnumSTATPROPSETSTG_Clone(This,ppenum)	\
+    ( (This)->lpVtbl -> Clone(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propidl_0000_0004 */
+/* [local] */
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertyStorage *LPPROPERTYSTORAGE;
+
+WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );
+WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );
+WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );
+
+#define _PROPVARIANTINIT_DEFINED_
+#   ifdef __cplusplus
+inline void PropVariantInit ( PROPVARIANT * pvar )
+{
+    memset ( pvar, 0, sizeof(PROPVARIANT) );
+}
+#   else
+#   define PropVariantInit(pvar) memset ( (pvar), 0, sizeof(PROPVARIANT) )
+#   endif
+
+
+#ifndef _STGCREATEPROPSTG_DEFINED_
+WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
+WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
+WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);
+
+#define CCH_MAX_PROPSTG_NAME    31
+__checkReturn WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, __out_ecount(CCH_MAX_PROPSTG_NAME+1) LPOLESTR oszName );
+WINOLEAPI PropStgNameToFmtId( __in __nullterminated const LPOLESTR oszName, FMTID *pfmtid );
+#endif
+#ifndef _SERIALIZEDPROPERTYVALUE_DEFINED_
+#define _SERIALIZEDPROPERTYVALUE_DEFINED_
+typedef struct tagSERIALIZEDPROPERTYVALUE		// prop
+{
+    DWORD	dwType;
+    BYTE	rgb[1];
+} SERIALIZEDPROPERTYVALUE;
+#endif
+
+EXTERN_C SERIALIZEDPROPERTYVALUE* __stdcall
+StgConvertVariantToProperty(
+            __in const PROPVARIANT* pvar,
+            USHORT CodePage,
+            __out_bcount_opt(*pcb) SERIALIZEDPROPERTYVALUE* pprop,
+            __inout ULONG* pcb,
+            PROPID pid,
+            __reserved BOOLEAN fReserved,
+            __out_opt ULONG* pcIndirect);
+
+#ifdef __cplusplus
+class PMemoryAllocator;
+
+EXTERN_C BOOLEAN __stdcall
+StgConvertPropertyToVariant(
+            __in const SERIALIZEDPROPERTYVALUE* pprop,
+            USHORT CodePage,
+            __out PROPVARIANT* pvar,
+            __in PMemoryAllocator* pma);
+#endif
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#else
+#pragma warning(default:4201)    /* Nameless struct/union */
+#pragma warning(default:4237)    /* keywords bool, true, false, etc.. */
+#endif
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * );
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * );
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * );
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * );
+
+unsigned long             __RPC_USER  BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * );
+unsigned char * __RPC_USER  BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER  BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * );
+void                      __RPC_USER  BSTR_UserFree64(     unsigned long *, BSTR * );
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * );
+void                      __RPC_USER  LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * );
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Proxy(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+    /* [out] */ ULONG *pceltFetched);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Stub(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Proxy(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+    /* [out] */ ULONG *pceltFetched);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Stub(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/propkey.h b/portaudio/src/hostapi/wasapi/mingw-include/propkey.h
new file mode 100644
index 000000000..ea94fcf9b
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/propkey.h
@@ -0,0 +1,4274 @@
+//===========================================================================
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//===========================================================================
+
+
+#ifndef _INC_PROPKEY
+#define _INC_PROPKEY
+
+#ifndef DEFINE_API_PKEY
+#define DEFINE_API_PKEY(name, managed_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid)
+#endif
+
+#include <propkeydef.h>
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0501
+#else
+#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
+#error _WIN32_IE setting conflicts with _WIN32_WINNT setting
+#endif
+#endif
+
+ 
+//-----------------------------------------------------------------------------
+// Audio properties
+
+//  Name:     System.Audio.ChannelCount -- PKEY_Audio_ChannelCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 7 (PIDASI_CHANNEL_COUNT)
+//
+//  Indicates the channel count for the audio file.  Values: 1 (mono), 2 (stereo).
+DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7);
+
+// Possible discrete values for PKEY_Audio_ChannelCount are:
+#define AUDIO_CHANNELCOUNT_MONO             1ul
+#define AUDIO_CHANNELCOUNT_STEREO           2ul
+
+//  Name:     System.Audio.Compression -- PKEY_Audio_Compression
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 10 (PIDASI_COMPRESSION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10);
+
+//  Name:     System.Audio.EncodingBitrate -- PKEY_Audio_EncodingBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 4 (PIDASI_AVG_DATA_RATE)
+//
+//  Indicates the average data rate in Hz for the audio file in "bits per second".
+DEFINE_PROPERTYKEY(PKEY_Audio_EncodingBitrate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+//  Name:     System.Audio.Format -- PKEY_Audio_Format
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_BSTR.
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 2 (PIDASI_FORMAT)
+//
+//  Indicates the format of the audio file.
+DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2);
+
+//  Name:     System.Audio.IsVariableBitRate -- PKEY_Audio_IsVariableBitRate
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: E6822FEE-8C17-4D62-823C-8E9CFCBD1D5C, 100
+DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xE6822FEE, 0x8C17, 0x4D62, 0x82, 0x3C, 0x8E, 0x9C, 0xFC, 0xBD, 0x1D, 0x5C, 100);
+
+//  Name:     System.Audio.PeakValue -- PKEY_Audio_PeakValue
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2579E5D0-1116-4084-BD9A-9B4F7CB4DF5E, 100
+DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579E5D0, 0x1116, 0x4084, 0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E, 100);
+
+//  Name:     System.Audio.SampleRate -- PKEY_Audio_SampleRate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 5 (PIDASI_SAMPLE_RATE)
+//
+//  Indicates the audio sample rate for the audio file in "samples per second".
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5);
+
+//  Name:     System.Audio.SampleSize -- PKEY_Audio_SampleSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 6 (PIDASI_SAMPLE_SIZE)
+//
+//  Indicates the audio sample size for the audio file in "bits per sample".
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Audio.StreamName -- PKEY_Audio_StreamName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 9 (PIDASI_STREAM_NAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+//  Name:     System.Audio.StreamNumber -- PKEY_Audio_StreamNumber
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 8 (PIDASI_STREAM_NUMBER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Calendar properties
+
+//  Name:     System.Calendar.Duration -- PKEY_Calendar_Duration
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 293CA35A-09AA-4DD2-B180-1FE245728A52, 100
+//
+//  The duration as specified in a string.
+DEFINE_PROPERTYKEY(PKEY_Calendar_Duration, 0x293CA35A, 0x09AA, 0x4DD2, 0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52, 100);
+
+//  Name:     System.Calendar.IsOnline -- PKEY_Calendar_IsOnline
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: BFEE9149-E3E2-49A7-A862-C05988145CEC, 100
+//
+//  Identifies if the event is an online event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_IsOnline, 0xBFEE9149, 0xE3E2, 0x49A7, 0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC, 100);
+
+//  Name:     System.Calendar.IsRecurring -- PKEY_Calendar_IsRecurring
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 315B9C8D-80A9-4EF9-AE16-8E746DA51D70, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_IsRecurring, 0x315B9C8D, 0x80A9, 0x4EF9, 0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70, 100);
+
+//  Name:     System.Calendar.Location -- PKEY_Calendar_Location
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F6272D18-CECC-40B1-B26A-3911717AA7BD, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_Location, 0xF6272D18, 0xCECC, 0x40B1, 0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD, 100);
+
+//  Name:     System.Calendar.OptionalAttendeeAddresses -- PKEY_Calendar_OptionalAttendeeAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D55BAE5A-3892-417A-A649-C6AC5AAAEAB3, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeAddresses, 0xD55BAE5A, 0x3892, 0x417A, 0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3, 100);
+
+//  Name:     System.Calendar.OptionalAttendeeNames -- PKEY_Calendar_OptionalAttendeeNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 09429607-582D-437F-84C3-DE93A2B24C3C, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeNames, 0x09429607, 0x582D, 0x437F, 0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C, 100);
+
+//  Name:     System.Calendar.OrganizerAddress -- PKEY_Calendar_OrganizerAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 744C8242-4DF5-456C-AB9E-014EFB9021E3, 100
+//
+//  Address of the organizer organizing the event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerAddress, 0x744C8242, 0x4DF5, 0x456C, 0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3, 100);
+
+//  Name:     System.Calendar.OrganizerName -- PKEY_Calendar_OrganizerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AAA660F9-9865-458E-B484-01BC7FE3973E, 100
+//
+//  Name of the organizer organizing the event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerName, 0xAAA660F9, 0x9865, 0x458E, 0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E, 100);
+
+//  Name:     System.Calendar.ReminderTime -- PKEY_Calendar_ReminderTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 72FC5BA4-24F9-4011-9F3F-ADD27AFAD818, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_ReminderTime, 0x72FC5BA4, 0x24F9, 0x4011, 0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18, 100);
+
+//  Name:     System.Calendar.RequiredAttendeeAddresses -- PKEY_Calendar_RequiredAttendeeAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 0BA7D6C3-568D-4159-AB91-781A91FB71E5, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeAddresses, 0x0BA7D6C3, 0x568D, 0x4159, 0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5, 100);
+
+//  Name:     System.Calendar.RequiredAttendeeNames -- PKEY_Calendar_RequiredAttendeeNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: B33AF30B-F552-4584-936C-CB93E5CDA29F, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeNames, 0xB33AF30B, 0xF552, 0x4584, 0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F, 100);
+
+//  Name:     System.Calendar.Resources -- PKEY_Calendar_Resources
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 00F58A38-C54B-4C40-8696-97235980EAE1, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_Resources, 0x00F58A38, 0xC54B, 0x4C40, 0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1, 100);
+
+//  Name:     System.Calendar.ShowTimeAs -- PKEY_Calendar_ShowTimeAs
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 5BF396D4-5EB2-466F-BDE9-2FB3F2361D6E, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAs, 0x5BF396D4, 0x5EB2, 0x466F, 0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E, 100);
+
+// Possible discrete values for PKEY_Calendar_ShowTimeAs are:
+#define CALENDAR_SHOWTIMEAS_FREE            0u
+#define CALENDAR_SHOWTIMEAS_TENTATIVE       1u
+#define CALENDAR_SHOWTIMEAS_BUSY            2u
+#define CALENDAR_SHOWTIMEAS_OOF             3u
+
+//  Name:     System.Calendar.ShowTimeAsText -- PKEY_Calendar_ShowTimeAsText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 53DA57CF-62C0-45C4-81DE-7610BCEFD7F5, 100
+//  
+//  This is the user-friendly form of System.Calendar.ShowTimeAs.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAsText, 0x53DA57CF, 0x62C0, 0x45C4, 0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5, 100);
+ 
+//-----------------------------------------------------------------------------
+// Communication properties
+
+
+
+//  Name:     System.Communication.AccountName -- PKEY_Communication_AccountName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 9
+//
+//  Account Name
+DEFINE_PROPERTYKEY(PKEY_Communication_AccountName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 9);
+
+//  Name:     System.Communication.Suffix -- PKEY_Communication_Suffix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 807B653A-9E91-43EF-8F97-11CE04EE20C5, 100
+DEFINE_PROPERTYKEY(PKEY_Communication_Suffix, 0x807B653A, 0x9E91, 0x43EF, 0x8F, 0x97, 0x11, 0xCE, 0x04, 0xEE, 0x20, 0xC5, 100);
+
+//  Name:     System.Communication.TaskStatus -- PKEY_Communication_TaskStatus
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: BE1A72C6-9A1D-46B7-AFE7-AFAF8CEF4999, 100
+DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatus, 0xBE1A72C6, 0x9A1D, 0x46B7, 0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99, 100);
+
+// Possible discrete values for PKEY_Communication_TaskStatus are:
+#define TASKSTATUS_NOTSTARTED               0u
+#define TASKSTATUS_INPROGRESS               1u
+#define TASKSTATUS_COMPLETE                 2u
+#define TASKSTATUS_WAITING                  3u
+#define TASKSTATUS_DEFERRED                 4u
+
+//  Name:     System.Communication.TaskStatusText -- PKEY_Communication_TaskStatusText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A6744477-C237-475B-A075-54F34498292A, 100
+//  
+//  This is the user-friendly form of System.Communication.TaskStatus.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatusText, 0xA6744477, 0xC237, 0x475B, 0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A, 100);
+ 
+//-----------------------------------------------------------------------------
+// Computer properties
+
+
+
+//  Name:     System.Computer.DecoratedFreeSpace -- PKEY_Computer_DecoratedFreeSpace
+//  Type:     Multivalue UInt64 -- VT_VECTOR | VT_UI8  (For variants: VT_ARRAY | VT_UI8)
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 7  (Filesystem Volume Properties)
+//
+//  Free space and total space: "%s free of %s"
+DEFINE_PROPERTYKEY(PKEY_Computer_DecoratedFreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 7);
+ 
+//-----------------------------------------------------------------------------
+// Contact properties
+
+
+
+//  Name:     System.Contact.Anniversary -- PKEY_Contact_Anniversary
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 9AD5BADB-CEA7-4470-A03D-B84E51B9949E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Anniversary, 0x9AD5BADB, 0xCEA7, 0x4470, 0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E, 100);
+
+//  Name:     System.Contact.AssistantName -- PKEY_Contact_AssistantName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CD102C9C-5540-4A88-A6F6-64E4981C8CD1, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_AssistantName, 0xCD102C9C, 0x5540, 0x4A88, 0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1, 100);
+
+//  Name:     System.Contact.AssistantTelephone -- PKEY_Contact_AssistantTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9A93244D-A7AD-4FF8-9B99-45EE4CC09AF6, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_AssistantTelephone, 0x9A93244D, 0xA7AD, 0x4FF8, 0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6, 100);
+
+//  Name:     System.Contact.Birthday -- PKEY_Contact_Birthday
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 47
+DEFINE_PROPERTYKEY(PKEY_Contact_Birthday, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 47);
+
+//  Name:     System.Contact.BusinessAddress -- PKEY_Contact_BusinessAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 730FB6DD-CF7C-426B-A03F-BD166CC9EE24, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddress, 0x730FB6DD, 0xCF7C, 0x426B, 0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24, 100);
+
+//  Name:     System.Contact.BusinessAddressCity -- PKEY_Contact_BusinessAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 402B5934-EC5A-48C3-93E6-85E86A2D934E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCity, 0x402B5934, 0xEC5A, 0x48C3, 0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E, 100);
+
+//  Name:     System.Contact.BusinessAddressCountry -- PKEY_Contact_BusinessAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: B0B87314-FCF6-4FEB-8DFF-A50DA6AF561C, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCountry, 0xB0B87314, 0xFCF6, 0x4FEB, 0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C, 100);
+
+//  Name:     System.Contact.BusinessAddressPostalCode -- PKEY_Contact_BusinessAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E1D4A09E-D758-4CD1-B6EC-34A8B5A73F80, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostalCode, 0xE1D4A09E, 0xD758, 0x4CD1, 0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80, 100);
+
+//  Name:     System.Contact.BusinessAddressPostOfficeBox -- PKEY_Contact_BusinessAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BC4E71CE-17F9-48D5-BEE9-021DF0EA5409, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostOfficeBox, 0xBC4E71CE, 0x17F9, 0x48D5, 0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09, 100);
+
+//  Name:     System.Contact.BusinessAddressState -- PKEY_Contact_BusinessAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 446F787F-10C4-41CB-A6C4-4D0343551597, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressState, 0x446F787F, 0x10C4, 0x41CB, 0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97, 100);
+
+//  Name:     System.Contact.BusinessAddressStreet -- PKEY_Contact_BusinessAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DDD1460F-C0BF-4553-8CE4-10433C908FB0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressStreet, 0xDDD1460F, 0xC0BF, 0x4553, 0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0, 100);
+
+//  Name:     System.Contact.BusinessFaxNumber -- PKEY_Contact_BusinessFaxNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 91EFF6F3-2E27-42CA-933E-7C999FBE310B, 100
+//
+//  Business fax number of the contact.
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessFaxNumber, 0x91EFF6F3, 0x2E27, 0x42CA, 0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B, 100);
+
+//  Name:     System.Contact.BusinessHomePage -- PKEY_Contact_BusinessHomePage
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 56310920-2491-4919-99CE-EADB06FAFDB2, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessHomePage, 0x56310920, 0x2491, 0x4919, 0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2, 100);
+
+//  Name:     System.Contact.BusinessTelephone -- PKEY_Contact_BusinessTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6A15E5A0-0A1E-4CD7-BB8C-D2F1B0C929BC, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessTelephone, 0x6A15E5A0, 0x0A1E, 0x4CD7, 0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC, 100);
+
+//  Name:     System.Contact.CallbackTelephone -- PKEY_Contact_CallbackTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BF53D1C3-49E0-4F7F-8567-5A821D8AC542, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CallbackTelephone, 0xBF53D1C3, 0x49E0, 0x4F7F, 0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42, 100);
+
+//  Name:     System.Contact.CarTelephone -- PKEY_Contact_CarTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8FDC6DEA-B929-412B-BA90-397A257465FE, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CarTelephone, 0x8FDC6DEA, 0xB929, 0x412B, 0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE, 100);
+
+//  Name:     System.Contact.Children -- PKEY_Contact_Children
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D4729704-8EF1-43EF-9024-2BD381187FD5, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Children, 0xD4729704, 0x8EF1, 0x43EF, 0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5, 100);
+
+//  Name:     System.Contact.CompanyMainTelephone -- PKEY_Contact_CompanyMainTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8589E481-6040-473D-B171-7FA89C2708ED, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CompanyMainTelephone, 0x8589E481, 0x6040, 0x473D, 0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED, 100);
+
+//  Name:     System.Contact.Department -- PKEY_Contact_Department
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FC9F7306-FF8F-4D49-9FB6-3FFE5C0951EC, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Department, 0xFC9F7306, 0xFF8F, 0x4D49, 0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC, 100);
+
+//  Name:     System.Contact.EmailAddress -- PKEY_Contact_EmailAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F8FA7FA3-D12B-4785-8A4E-691A94F7A3E7, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress, 0xF8FA7FA3, 0xD12B, 0x4785, 0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7, 100);
+
+//  Name:     System.Contact.EmailAddress2 -- PKEY_Contact_EmailAddress2
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 38965063-EDC8-4268-8491-B7723172CF29, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress2, 0x38965063, 0xEDC8, 0x4268, 0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29, 100);
+
+//  Name:     System.Contact.EmailAddress3 -- PKEY_Contact_EmailAddress3
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 644D37B4-E1B3-4BAD-B099-7E7C04966ACA, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress3, 0x644D37B4, 0xE1B3, 0x4BAD, 0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA, 100);
+
+//  Name:     System.Contact.EmailAddresses -- PKEY_Contact_EmailAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 84D8F337-981D-44B3-9615-C7596DBA17E3, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddresses, 0x84D8F337, 0x981D, 0x44B3, 0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3, 100);
+
+//  Name:     System.Contact.EmailName -- PKEY_Contact_EmailName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CC6F4F24-6083-4BD4-8754-674D0DE87AB8, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailName, 0xCC6F4F24, 0x6083, 0x4BD4, 0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8, 100);
+
+//  Name:     System.Contact.FileAsName -- PKEY_Contact_FileAsName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F1A24AA7-9CA7-40F6-89EC-97DEF9FFE8DB, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FileAsName, 0xF1A24AA7, 0x9CA7, 0x40F6, 0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB, 100);
+
+//  Name:     System.Contact.FirstName -- PKEY_Contact_FirstName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 14977844-6B49-4AAD-A714-A4513BF60460, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FirstName, 0x14977844, 0x6B49, 0x4AAD, 0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60, 100);
+
+//  Name:     System.Contact.FullName -- PKEY_Contact_FullName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 635E9051-50A5-4BA2-B9DB-4ED056C77296, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FullName, 0x635E9051, 0x50A5, 0x4BA2, 0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96, 100);
+
+//  Name:     System.Contact.Gender -- PKEY_Contact_Gender
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3C8CEE58-D4F0-4CF9-B756-4E5D24447BCD, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Gender, 0x3C8CEE58, 0xD4F0, 0x4CF9, 0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD, 100);
+
+//  Name:     System.Contact.Hobbies -- PKEY_Contact_Hobbies
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 5DC2253F-5E11-4ADF-9CFE-910DD01E3E70, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Hobbies, 0x5DC2253F, 0x5E11, 0x4ADF, 0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70, 100);
+
+//  Name:     System.Contact.HomeAddress -- PKEY_Contact_HomeAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 98F98354-617A-46B8-8560-5B1B64BF1F89, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddress, 0x98F98354, 0x617A, 0x46B8, 0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89, 100);
+
+//  Name:     System.Contact.HomeAddressCity -- PKEY_Contact_HomeAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 65
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCity, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 65);
+
+//  Name:     System.Contact.HomeAddressCountry -- PKEY_Contact_HomeAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 08A65AA1-F4C9-43DD-9DDF-A33D8E7EAD85, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCountry, 0x08A65AA1, 0xF4C9, 0x43DD, 0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85, 100);
+
+//  Name:     System.Contact.HomeAddressPostalCode -- PKEY_Contact_HomeAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8AFCC170-8A46-4B53-9EEE-90BAE7151E62, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostalCode, 0x8AFCC170, 0x8A46, 0x4B53, 0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62, 100);
+
+//  Name:     System.Contact.HomeAddressPostOfficeBox -- PKEY_Contact_HomeAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7B9F6399-0A3F-4B12-89BD-4ADC51C918AF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostOfficeBox, 0x7B9F6399, 0x0A3F, 0x4B12, 0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF, 100);
+
+//  Name:     System.Contact.HomeAddressState -- PKEY_Contact_HomeAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C89A23D0-7D6D-4EB8-87D4-776A82D493E5, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressState, 0xC89A23D0, 0x7D6D, 0x4EB8, 0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5, 100);
+
+//  Name:     System.Contact.HomeAddressStreet -- PKEY_Contact_HomeAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0ADEF160-DB3F-4308-9A21-06237B16FA2A, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressStreet, 0x0ADEF160, 0xDB3F, 0x4308, 0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A, 100);
+
+//  Name:     System.Contact.HomeFaxNumber -- PKEY_Contact_HomeFaxNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 660E04D6-81AB-4977-A09F-82313113AB26, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeFaxNumber, 0x660E04D6, 0x81AB, 0x4977, 0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26, 100);
+
+//  Name:     System.Contact.HomeTelephone -- PKEY_Contact_HomeTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 20
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 20);
+
+//  Name:     System.Contact.IMAddress -- PKEY_Contact_IMAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D68DBD8A-3374-4B81-9972-3EC30682DB3D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_IMAddress, 0xD68DBD8A, 0x3374, 0x4B81, 0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D, 100);
+
+//  Name:     System.Contact.Initials -- PKEY_Contact_Initials
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F3D8F40D-50CB-44A2-9718-40CB9119495D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Initials, 0xF3D8F40D, 0x50CB, 0x44A2, 0x97, 0x18, 0x40, 0xCB, 0x91, 0x19, 0x49, 0x5D, 100);
+
+//  Name:     System.Contact.JA.CompanyNamePhonetic -- PKEY_Contact_JA_CompanyNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 2
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_CompanyNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 2);
+
+//  Name:     System.Contact.JA.FirstNamePhonetic -- PKEY_Contact_JA_FirstNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 3
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_FirstNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 3);
+
+//  Name:     System.Contact.JA.LastNamePhonetic -- PKEY_Contact_JA_LastNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 4
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_LastNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 4);
+
+//  Name:     System.Contact.JobTitle -- PKEY_Contact_JobTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 6
+DEFINE_PROPERTYKEY(PKEY_Contact_JobTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 6);
+
+//  Name:     System.Contact.Label -- PKEY_Contact_Label
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 97B0AD89-DF49-49CC-834E-660974FD755B, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Label, 0x97B0AD89, 0xDF49, 0x49CC, 0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B, 100);
+
+//  Name:     System.Contact.LastName -- PKEY_Contact_LastName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8F367200-C270-457C-B1D4-E07C5BCD90C7, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_LastName, 0x8F367200, 0xC270, 0x457C, 0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7, 100);
+
+//  Name:     System.Contact.MailingAddress -- PKEY_Contact_MailingAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C0AC206A-827E-4650-95AE-77E2BB74FCC9, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_MailingAddress, 0xC0AC206A, 0x827E, 0x4650, 0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9, 100);
+
+//  Name:     System.Contact.MiddleName -- PKEY_Contact_MiddleName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 71
+DEFINE_PROPERTYKEY(PKEY_Contact_MiddleName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 71);
+
+//  Name:     System.Contact.MobileTelephone -- PKEY_Contact_MobileTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 35
+DEFINE_PROPERTYKEY(PKEY_Contact_MobileTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 35);
+
+//  Name:     System.Contact.NickName -- PKEY_Contact_NickName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 74
+DEFINE_PROPERTYKEY(PKEY_Contact_NickName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 74);
+
+//  Name:     System.Contact.OfficeLocation -- PKEY_Contact_OfficeLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 7
+DEFINE_PROPERTYKEY(PKEY_Contact_OfficeLocation, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 7);
+
+//  Name:     System.Contact.OtherAddress -- PKEY_Contact_OtherAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 508161FA-313B-43D5-83A1-C1ACCF68622C, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddress, 0x508161FA, 0x313B, 0x43D5, 0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C, 100);
+
+//  Name:     System.Contact.OtherAddressCity -- PKEY_Contact_OtherAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6E682923-7F7B-4F0C-A337-CFCA296687BF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCity, 0x6E682923, 0x7F7B, 0x4F0C, 0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF, 100);
+
+//  Name:     System.Contact.OtherAddressCountry -- PKEY_Contact_OtherAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8F167568-0AAE-4322-8ED9-6055B7B0E398, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCountry, 0x8F167568, 0x0AAE, 0x4322, 0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98, 100);
+
+//  Name:     System.Contact.OtherAddressPostalCode -- PKEY_Contact_OtherAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 95C656C1-2ABF-4148-9ED3-9EC602E3B7CD, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostalCode, 0x95C656C1, 0x2ABF, 0x4148, 0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD, 100);
+
+//  Name:     System.Contact.OtherAddressPostOfficeBox -- PKEY_Contact_OtherAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8B26EA41-058F-43F6-AECC-4035681CE977, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostOfficeBox, 0x8B26EA41, 0x058F, 0x43F6, 0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77, 100);
+
+//  Name:     System.Contact.OtherAddressState -- PKEY_Contact_OtherAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 71B377D6-E570-425F-A170-809FAE73E54E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressState, 0x71B377D6, 0xE570, 0x425F, 0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E, 100);
+
+//  Name:     System.Contact.OtherAddressStreet -- PKEY_Contact_OtherAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FF962609-B7D6-4999-862D-95180D529AEA, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressStreet, 0xFF962609, 0xB7D6, 0x4999, 0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA, 100);
+
+//  Name:     System.Contact.PagerTelephone -- PKEY_Contact_PagerTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D6304E01-F8F5-4F45-8B15-D024A6296789, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PagerTelephone, 0xD6304E01, 0xF8F5, 0x4F45, 0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89, 100);
+
+//  Name:     System.Contact.PersonalTitle -- PKEY_Contact_PersonalTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 69
+DEFINE_PROPERTYKEY(PKEY_Contact_PersonalTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 69);
+
+//  Name:     System.Contact.PrimaryAddressCity -- PKEY_Contact_PrimaryAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C8EA94F0-A9E3-4969-A94B-9C62A95324E0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCity, 0xC8EA94F0, 0xA9E3, 0x4969, 0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0, 100);
+
+//  Name:     System.Contact.PrimaryAddressCountry -- PKEY_Contact_PrimaryAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E53D799D-0F3F-466E-B2FF-74634A3CB7A4, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCountry, 0xE53D799D, 0x0F3F, 0x466E, 0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4, 100);
+
+//  Name:     System.Contact.PrimaryAddressPostalCode -- PKEY_Contact_PrimaryAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 18BBD425-ECFD-46EF-B612-7B4A6034EDA0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostalCode, 0x18BBD425, 0xECFD, 0x46EF, 0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0, 100);
+
+//  Name:     System.Contact.PrimaryAddressPostOfficeBox -- PKEY_Contact_PrimaryAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE5EF3C7-46E1-484E-9999-62C5308394C1, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostOfficeBox, 0xDE5EF3C7, 0x46E1, 0x484E, 0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1, 100);
+
+//  Name:     System.Contact.PrimaryAddressState -- PKEY_Contact_PrimaryAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F1176DFE-7138-4640-8B4C-AE375DC70A6D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressState, 0xF1176DFE, 0x7138, 0x4640, 0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D, 100);
+
+//  Name:     System.Contact.PrimaryAddressStreet -- PKEY_Contact_PrimaryAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 63C25B20-96BE-488F-8788-C09C407AD812, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressStreet, 0x63C25B20, 0x96BE, 0x488F, 0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12, 100);
+
+//  Name:     System.Contact.PrimaryEmailAddress -- PKEY_Contact_PrimaryEmailAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 48
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryEmailAddress, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 48);
+
+//  Name:     System.Contact.PrimaryTelephone -- PKEY_Contact_PrimaryTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 25
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 25);
+
+//  Name:     System.Contact.Profession -- PKEY_Contact_Profession
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7268AF55-1CE4-4F6E-A41F-B6E4EF10E4A9, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Profession, 0x7268AF55, 0x1CE4, 0x4F6E, 0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9, 100);
+
+//  Name:     System.Contact.SpouseName -- PKEY_Contact_SpouseName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9D2408B6-3167-422B-82B0-F583B7A7CFE3, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_SpouseName, 0x9D2408B6, 0x3167, 0x422B, 0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3, 100);
+
+//  Name:     System.Contact.Suffix -- PKEY_Contact_Suffix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 73
+DEFINE_PROPERTYKEY(PKEY_Contact_Suffix, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 73);
+
+//  Name:     System.Contact.TelexNumber -- PKEY_Contact_TelexNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C554493C-C1F7-40C1-A76C-EF8C0614003E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_TelexNumber, 0xC554493C, 0xC1F7, 0x40C1, 0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E, 100);
+
+//  Name:     System.Contact.TTYTDDTelephone -- PKEY_Contact_TTYTDDTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AAF16BAC-2B55-45E6-9F6D-415EB94910DF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_TTYTDDTelephone, 0xAAF16BAC, 0x2B55, 0x45E6, 0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF, 100);
+
+//  Name:     System.Contact.WebPage -- PKEY_Contact_WebPage
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 18
+DEFINE_PROPERTYKEY(PKEY_Contact_WebPage, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 18);
+ 
+//-----------------------------------------------------------------------------
+// Core properties
+
+
+
+//  Name:     System.AcquisitionID -- PKEY_AcquisitionID
+//  Type:     Int32 -- VT_I4
+//  FormatID: 65A98875-3C80-40AB-ABBC-EFDAF77DBEE2, 100
+//
+//  Hash to determine acquisition session.
+DEFINE_PROPERTYKEY(PKEY_AcquisitionID, 0x65A98875, 0x3C80, 0x40AB, 0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2, 100);
+
+//  Name:     System.ApplicationName -- PKEY_ApplicationName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 18 (PIDSI_APPNAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ApplicationName, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 18);
+
+//  Name:     System.Author -- PKEY_Author
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 4 (PIDSI_AUTHOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Author, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 4);
+
+//  Name:     System.Capacity -- PKEY_Capacity
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 3 (PID_VOLUME_CAPACITY)  (Filesystem Volume Properties)
+//
+//  The amount of total space in bytes.
+DEFINE_PROPERTYKEY(PKEY_Capacity, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 3);
+
+//  Name:     System.Category -- PKEY_Category
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 2 (PIDDSI_CATEGORY)
+//
+//  Legacy code treats this as VT_LPSTR.
+DEFINE_PROPERTYKEY(PKEY_Category, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 2);
+
+//  Name:     System.Comment -- PKEY_Comment
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 6 (PIDSI_COMMENTS)
+//
+//  Comments.
+DEFINE_PROPERTYKEY(PKEY_Comment, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 6);
+
+//  Name:     System.Company -- PKEY_Company
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 15 (PIDDSI_COMPANY)
+//
+//  The company or publisher.
+DEFINE_PROPERTYKEY(PKEY_Company, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 15);
+
+//  Name:     System.ComputerName -- PKEY_ComputerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 5 (PID_COMPUTERNAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ComputerName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 5);
+
+//  Name:     System.ContainedItems -- PKEY_ContainedItems
+//  Type:     Multivalue Guid -- VT_VECTOR | VT_CLSID  (For variants: VT_ARRAY | VT_CLSID)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 29
+//  
+//  The list of type of items, this item contains. For example, this item contains urls, attachments etc.
+//  This is represented as a vector array of GUIDs where each GUID represents certain type.
+DEFINE_PROPERTYKEY(PKEY_ContainedItems, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 29);
+
+//  Name:     System.ContentStatus -- PKEY_ContentStatus
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 27
+DEFINE_PROPERTYKEY(PKEY_ContentStatus, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 27);
+
+//  Name:     System.ContentType -- PKEY_ContentType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 26
+DEFINE_PROPERTYKEY(PKEY_ContentType, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 26);
+
+//  Name:     System.Copyright -- PKEY_Copyright
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 11 (PIDMSI_COPYRIGHT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Copyright, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11);
+
+//  Name:     System.DateAccessed -- PKEY_DateAccessed
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 16 (PID_STG_ACCESSTIME)
+//
+//  The time of the last access to the item.  The Indexing Service friendly name is 'access'.
+DEFINE_PROPERTYKEY(PKEY_DateAccessed, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 16);
+
+//  Name:     System.DateAcquired -- PKEY_DateAcquired
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 2CBAA8F5-D81F-47CA-B17A-F8D822300131, 100
+//  
+//  The time the file entered the system via acquisition.  This is not the same as System.DateImported.
+//  Examples are when pictures are acquired from a camera, or when music is purchased online.
+DEFINE_PROPERTYKEY(PKEY_DateAcquired, 0x2CBAA8F5, 0xD81F, 0x47CA, 0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31, 100);
+
+//  Name:     System.DateArchived -- PKEY_DateArchived
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 43F8D7B7-A444-4F87-9383-52271C9B915C, 100
+DEFINE_PROPERTYKEY(PKEY_DateArchived, 0x43F8D7B7, 0xA444, 0x4F87, 0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C, 100);
+
+//  Name:     System.DateCompleted -- PKEY_DateCompleted
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 72FAB781-ACDA-43E5-B155-B2434F85E678, 100
+DEFINE_PROPERTYKEY(PKEY_DateCompleted, 0x72FAB781, 0xACDA, 0x43E5, 0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78, 100);
+
+//  Name:     System.DateCreated -- PKEY_DateCreated
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 15 (PID_STG_CREATETIME)
+//
+//  The date and time the item was created. The Indexing Service friendly name is 'create'.
+DEFINE_PROPERTYKEY(PKEY_DateCreated, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 15);
+
+//  Name:     System.DateImported -- PKEY_DateImported
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18258
+//
+//  The time the file is imported into a separate database.  This is not the same as System.DateAcquired.  (Eg, 2003:05:22 13:55:04)
+DEFINE_PROPERTYKEY(PKEY_DateImported, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18258);
+
+//  Name:     System.DateModified -- PKEY_DateModified
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 14 (PID_STG_WRITETIME)
+//
+//  The date and time of the last write to the item. The Indexing Service friendly name is 'write'.
+DEFINE_PROPERTYKEY(PKEY_DateModified, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 14);
+
+//  Name:     System.DueDate -- PKEY_DueDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 3F8472B5-E0AF-4DB2-8071-C53FE76AE7CE, 100
+DEFINE_PROPERTYKEY(PKEY_DueDate, 0x3F8472B5, 0xE0AF, 0x4DB2, 0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE, 100);
+
+//  Name:     System.EndDate -- PKEY_EndDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: C75FAA05-96FD-49E7-9CB4-9F601082D553, 100
+DEFINE_PROPERTYKEY(PKEY_EndDate, 0xC75FAA05, 0x96FD, 0x49E7, 0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53, 100);
+
+//  Name:     System.FileAllocationSize -- PKEY_FileAllocationSize
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 18 (PID_STG_ALLOCSIZE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileAllocationSize, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 18);
+
+//  Name:     System.FileAttributes -- PKEY_FileAttributes
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 13 (PID_STG_ATTRIBUTES)
+//  
+//  This is the WIN32_FIND_DATA dwFileAttributes for the file-based item.
+DEFINE_PROPERTYKEY(PKEY_FileAttributes, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 13);
+
+//  Name:     System.FileCount -- PKEY_FileCount
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 12
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileCount, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 12);
+
+//  Name:     System.FileDescription -- PKEY_FileDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 3 (PIDVSI_FileDescription)
+//  
+//  This is a user-friendly description of the file.
+DEFINE_PROPERTYKEY(PKEY_FileDescription, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 3);
+
+//  Name:     System.FileExtension -- PKEY_FileExtension
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E4F10A3C-49E6-405D-8288-A23BD4EEAA6C, 100
+//  
+//  This is the file extension of the file based item, including the leading period.  
+//  
+//  If System.FileName is VT_EMPTY, then this property should be too.  Otherwise, it should be derived
+//  appropriately by the data source from System.FileName.  If System.FileName does not have a file 
+//  extension, this value should be VT_EMPTY.
+//  
+//  To obtain the type of any item (including an item that is not a file), use System.ItemType.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                ".txt"
+//      "\\server\share\mydir\goodnews.doc"   ".doc"
+//      "\\server\share\numbers.xls"          ".xls"
+//      "\\server\share\folder"               VT_EMPTY
+//      "c:\foo\MyFolder"                     VT_EMPTY
+//      [desktop]                             VT_EMPTY
+DEFINE_PROPERTYKEY(PKEY_FileExtension, 0xE4F10A3C, 0x49E6, 0x405D, 0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C, 100);
+
+//  Name:     System.FileFRN -- PKEY_FileFRN
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 21 (PID_STG_FRN)
+//  
+//  This is the unique file ID, also known as the File Reference Number. For a given file, this is the same value
+//  as is found in the structure variable FILE_ID_BOTH_DIR_INFO.FileId, via GetFileInformationByHandleEx().
+DEFINE_PROPERTYKEY(PKEY_FileFRN, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 21);
+
+//  Name:     System.FileName -- PKEY_FileName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 41CF5AE0-F75A-4806-BD87-59C7D9248EB9, 100
+//  
+//  This is the file name (including extension) of the file.
+//  
+//  It is possible that the item might not exist on a filesystem (ie, it may not be opened 
+//  using CreateFile).  Nonetheless, if the item is represented as a file from the logical sense 
+//  (and its name follows standard Win32 file-naming syntax), then the data source should emit this property.
+//  
+//  If an item is not a file, then the value for this property is VT_EMPTY.  See 
+//  System.ItemNameDisplay.
+//  
+//  This has the same value as System.ParsingName for items that are provided by the Shell's file folder.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "hello.txt"
+//      "\\server\share\mydir\goodnews.doc"   "goodnews.doc"
+//      "\\server\share\numbers.xls"          "numbers.xls"
+//      "c:\foo\MyFolder"                     "MyFolder"
+//      (email message)                       VT_EMPTY
+//      (song on portable device)             "song.wma"
+DEFINE_PROPERTYKEY(PKEY_FileName, 0x41CF5AE0, 0xF75A, 0x4806, 0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9, 100);
+
+//  Name:     System.FileOwner -- PKEY_FileOwner
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Misc) 9B174B34-40FF-11D2-A27E-00C04FC30871, 4 (PID_MISC_OWNER)
+//  
+//  This is the owner of the file, according to the file system.
+DEFINE_PROPERTYKEY(PKEY_FileOwner, 0x9B174B34, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4);
+
+//  Name:     System.FileVersion -- PKEY_FileVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 4 (PIDVSI_FileVersion)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileVersion, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 4);
+
+//  Name:     System.FindData -- PKEY_FindData
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 0 (PID_FINDDATA)
+//
+//  WIN32_FIND_DATAW in buffer of bytes.
+DEFINE_PROPERTYKEY(PKEY_FindData, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 0);
+
+//  Name:     System.FlagColor -- PKEY_FlagColor
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 67DF94DE-0CA7-4D6F-B792-053A3E4F03CF, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FlagColor, 0x67DF94DE, 0x0CA7, 0x4D6F, 0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF, 100);
+
+// Possible discrete values for PKEY_FlagColor are:
+#define FLAGCOLOR_PURPLE                    1u
+#define FLAGCOLOR_ORANGE                    2u
+#define FLAGCOLOR_GREEN                     3u
+#define FLAGCOLOR_YELLOW                    4u
+#define FLAGCOLOR_BLUE                      5u
+#define FLAGCOLOR_RED                       6u
+
+//  Name:     System.FlagColorText -- PKEY_FlagColorText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 45EAE747-8E2A-40AE-8CBF-CA52ABA6152A, 100
+//  
+//  This is the user-friendly form of System.FlagColor.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_FlagColorText, 0x45EAE747, 0x8E2A, 0x40AE, 0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A, 100);
+
+//  Name:     System.FlagStatus -- PKEY_FlagStatus
+//  Type:     Int32 -- VT_I4
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 12
+//
+//  Status of Flag.  Values: (0=none 1=white 2=Red).  cdoPR_FLAG_STATUS
+DEFINE_PROPERTYKEY(PKEY_FlagStatus, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 12);
+
+// Possible discrete values for PKEY_FlagStatus are:
+#define FLAGSTATUS_NOTFLAGGED               0l
+#define FLAGSTATUS_COMPLETED                1l
+#define FLAGSTATUS_FOLLOWUP                 2l
+
+//  Name:     System.FlagStatusText -- PKEY_FlagStatusText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DC54FD2E-189D-4871-AA01-08C2F57A4ABC, 100
+//  
+//  This is the user-friendly form of System.FlagStatus.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_FlagStatusText, 0xDC54FD2E, 0x189D, 0x4871, 0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC, 100);
+
+//  Name:     System.FreeSpace -- PKEY_FreeSpace
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 2 (PID_VOLUME_FREE)  (Filesystem Volume Properties)
+//
+//  The amount of free space in bytes.
+DEFINE_PROPERTYKEY(PKEY_FreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 2);
+
+//  Name:     System.Identity -- PKEY_Identity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A26F4AFC-7346-4299-BE47-EB1AE613139F, 100
+DEFINE_PROPERTYKEY(PKEY_Identity, 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 100);
+
+//  Name:     System.Importance -- PKEY_Importance
+//  Type:     Int32 -- VT_I4
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 11
+DEFINE_PROPERTYKEY(PKEY_Importance, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 11);
+
+// Possible range of values for PKEY_Importance are:
+#define IMPORTANCE_LOW_MIN                  0l
+#define IMPORTANCE_LOW_SET                  1l
+#define IMPORTANCE_LOW_MAX                  1l
+
+#define IMPORTANCE_NORMAL_MIN               2l
+#define IMPORTANCE_NORMAL_SET               3l
+#define IMPORTANCE_NORMAL_MAX               4l
+
+#define IMPORTANCE_HIGH_MIN                 5l
+#define IMPORTANCE_HIGH_SET                 5l
+#define IMPORTANCE_HIGH_MAX                 5l
+
+
+//  Name:     System.ImportanceText -- PKEY_ImportanceText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A3B29791-7713-4E1D-BB40-17DB85F01831, 100
+//  
+//  This is the user-friendly form of System.Importance.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_ImportanceText, 0xA3B29791, 0x7713, 0x4E1D, 0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31, 100);
+
+//  Name:     System.IsAttachment -- PKEY_IsAttachment
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: F23F425C-71A1-4FA8-922F-678EA4A60408, 100
+//
+//  Identifies if this item is an attachment.
+DEFINE_PROPERTYKEY(PKEY_IsAttachment, 0xF23F425C, 0x71A1, 0x4FA8, 0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08, 100);
+
+//  Name:     System.IsDeleted -- PKEY_IsDeleted
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 5CDA5FC8-33EE-4FF3-9094-AE7BD8868C4D, 100
+DEFINE_PROPERTYKEY(PKEY_IsDeleted, 0x5CDA5FC8, 0x33EE, 0x4FF3, 0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D, 100);
+
+//  Name:     System.IsFlagged -- PKEY_IsFlagged
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 5DA84765-E3FF-4278-86B0-A27967FBDD03, 100
+DEFINE_PROPERTYKEY(PKEY_IsFlagged, 0x5DA84765, 0xE3FF, 0x4278, 0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03, 100);
+
+//  Name:     System.IsFlaggedComplete -- PKEY_IsFlaggedComplete
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: A6F360D2-55F9-48DE-B909-620E090A647C, 100
+DEFINE_PROPERTYKEY(PKEY_IsFlaggedComplete, 0xA6F360D2, 0x55F9, 0x48DE, 0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C, 100);
+
+//  Name:     System.IsIncomplete -- PKEY_IsIncomplete
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 346C8BD1-2E6A-4C45-89A4-61B78E8E700F, 100
+//
+//  Identifies if the message was not completely received for some error condition.
+DEFINE_PROPERTYKEY(PKEY_IsIncomplete, 0x346C8BD1, 0x2E6A, 0x4C45, 0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F, 100);
+
+//  Name:     System.IsRead -- PKEY_IsRead
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 10
+//
+//  Has the item been read?
+DEFINE_PROPERTYKEY(PKEY_IsRead, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 10);
+
+//  Name:     System.IsSendToTarget -- PKEY_IsSendToTarget
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 33
+//
+//  Provided by certain shell folders. Return TRUE if the folder is a valid Send To target.
+DEFINE_PROPERTYKEY(PKEY_IsSendToTarget, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 33);
+
+//  Name:     System.IsShared -- PKEY_IsShared
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 100
+//
+//  Is this item shared?
+DEFINE_PROPERTYKEY(PKEY_IsShared, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 100);
+
+//  Name:     System.ItemAuthors -- PKEY_ItemAuthors
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D0A04F0A-462A-48A4-BB2F-3706E88DBD7D, 100
+//  
+//  This is the generic list of authors associated with an item. 
+//  
+//  For example, the artist name for a track is the item author.
+DEFINE_PROPERTYKEY(PKEY_ItemAuthors, 0xD0A04F0A, 0x462A, 0x48A4, 0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D, 100);
+
+//  Name:     System.ItemDate -- PKEY_ItemDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: F7DB74B4-4287-4103-AFBA-F1B13DCD75CF, 100
+//  
+//  This is the main date for an item. The date of interest. 
+//  
+//  For example, for photos this maps to System.Photo.DateTaken.
+DEFINE_PROPERTYKEY(PKEY_ItemDate, 0xF7DB74B4, 0x4287, 0x4103, 0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF, 100);
+
+//  Name:     System.ItemFolderNameDisplay -- PKEY_ItemFolderNameDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 2 (PID_STG_DIRECTORY)
+//  
+//  This is the user-friendly display name of the parent folder of an item.
+//  
+//  If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it 
+//  should be derived appropriately by the data source from System.ItemFolderPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "bar"
+//      "\\server\share\mydir\goodnews.doc"   "mydir"
+//      "\\server\share\numbers.xls"          "share"
+//      "c:\foo\MyFolder"                     "foo"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 2);
+
+//  Name:     System.ItemFolderPathDisplay -- PKEY_ItemFolderPathDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 6
+//  
+//  This is the user-friendly display path of the parent folder of an item.
+//  
+//  If System.ItemPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it should 
+//  be derived appropriately by the data source from System.ItemPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "c:\foo\bar"
+//      "\\server\share\mydir\goodnews.doc"   "\\server\share\mydir"
+//      "\\server\share\numbers.xls"          "\\server\share"
+//      "c:\foo\MyFolder"                     "c:\foo"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 6);
+
+//  Name:     System.ItemFolderPathDisplayNarrow -- PKEY_ItemFolderPathDisplayNarrow
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DABD30ED-0043-4789-A7F8-D013A4736622, 100
+//  
+//  This is the user-friendly display path of the parent folder of an item.  The format of the string
+//  should be tailored such that the folder name comes first, to optimize for a narrow viewing column.
+//  
+//  If the folder is a file folder, the value includes localized names if they are present.
+//  
+//  If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it should
+//  be derived appropriately by the data source from System.ItemFolderPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "bar (c:\foo)"
+//      "\\server\share\mydir\goodnews.doc"   "mydir (\\server\share)"
+//      "\\server\share\numbers.xls"          "share (\\server)"
+//      "c:\foo\MyFolder"                     "foo (c:\)"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox (/Mailbox Account)"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplayNarrow, 0xDABD30ED, 0x0043, 0x4789, 0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22, 100);
+
+//  Name:     System.ItemName -- PKEY_ItemName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6B8DA074-3B5C-43BC-886F-0A2CDCE00B6F, 100
+//  
+//  This is the base-name of the System.ItemNameDisplay.
+//  
+//  If the item is a file this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  If the item is a message, then the value of this property does not include the forwarding or
+//  reply prefixes (see System.ItemNamePrefix).
+DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6B8DA074, 0x3B5C, 0x43BC, 0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F, 100);
+
+//  Name:     System.ItemNameDisplay -- PKEY_ItemNameDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 10 (PID_STG_NAME)
+//  
+//  This is the display name in "most complete" form.  This is the best effort unique representation
+//  of the name of an item that makes sense for end users to read.  It is the concatentation of
+//  System.ItemNamePrefix and System.ItemName.
+//  
+//  If the item is a file this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  There are acceptable cases when System.FileName is not VT_EMPTY, yet the value of this property 
+//  is completely different.  Email messages are a key example.  If the item is an email message, 
+//  the item name is likely the subject.  In that case, the value must be the concatenation of the
+//  System.ItemNamePrefix and System.ItemName.  Since the value of System.ItemNamePrefix excludes
+//  any trailing whitespace, the concatenation must include a whitespace when generating System.ItemNameDisplay.
+//  
+//  Note that this property is not guaranteed to be unique, but the idea is to promote the most likely
+//  candidate that can be unique and also makes sense for end users. For example, for documents, you
+//  might think about using System.Title as the System.ItemNameDisplay, but in practice the title of
+//  the documents may not be useful or unique enough to be of value as the sole System.ItemNameDisplay.  
+//  Instead, providing the value of System.FileName as the value of System.ItemNameDisplay is a better
+//  candidate.  In Windows Mail, the emails are stored in the file system as .eml files and the 
+//  System.FileName for those files are not human-friendly as they contain GUIDs. In this example, 
+//  promoting System.Subject as System.ItemNameDisplay makes more sense.
+//  
+//  Compatibility notes:
+//  
+//  Shell folder implementations on Vista: use PKEY_ItemNameDisplay for the name column when
+//  you want Explorer to call ISF::GetDisplayNameOf(SHGDN_NORMAL) to get the value of the name. Use
+//  another PKEY (like PKEY_ItemName) when you want Explorer to call either the folder's property store or
+//  ISF2::GetDetailsEx in order to get the value of the name.
+//  
+//  Shell folder implementations on XP: the first column needs to be the name column, and Explorer
+//  will call ISF::GetDisplayNameOf to get the value of the name.  The PKEY/SCID does not matter.
+//  
+//  Example values:
+//  
+//      File:          "hello.txt"
+//      Message:       "Re: Let's talk about Tom's argyle socks!"
+//      Device folder: "song.wma"
+//      Folder:        "Documents"
+DEFINE_PROPERTYKEY(PKEY_ItemNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 10);
+
+//  Name:     System.ItemNamePrefix -- PKEY_ItemNamePrefix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D7313FF1-A77A-401C-8C99-3DBDD68ADD36, 100
+//  
+//  This is the prefix of an item, used for email messages.
+//  where the subject begins with "Re:" which is the prefix.
+//  
+//  If the item is a file, then the value of this property is VT_EMPTY.
+//  
+//  If the item is a message, then the value of this property is the forwarding or reply 
+//  prefixes (including delimiting colon, but no whitespace), or VT_EMPTY if there is no prefix.
+//  
+//  Example values:
+//  
+//  System.ItemNamePrefix    System.ItemName      System.ItemNameDisplay
+//  ---------------------    -------------------  ----------------------
+//  VT_EMPTY                 "Great day"          "Great day"
+//  "Re:"                    "Great day"          "Re: Great day"
+//  "Fwd: "                  "Monthly budget"     "Fwd: Monthly budget"
+//  VT_EMPTY                 "accounts.xls"       "accounts.xls"
+DEFINE_PROPERTYKEY(PKEY_ItemNamePrefix, 0xD7313FF1, 0xA77A, 0x401C, 0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36, 100);
+
+//  Name:     System.ItemParticipants -- PKEY_ItemParticipants
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D4D0AA16-9948-41A4-AA85-D97FF9646993, 100
+//  
+//  This is the generic list of people associated with an item and who contributed 
+//  to the item. 
+//  
+//  For example, this is the combination of people in the To list, Cc list and 
+//  sender of an email message.
+DEFINE_PROPERTYKEY(PKEY_ItemParticipants, 0xD4D0AA16, 0x9948, 0x41A4, 0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93, 100);
+
+//  Name:     System.ItemPathDisplay -- PKEY_ItemPathDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 7
+//  
+//  This is the user-friendly display path to the item.
+//  
+//  If the item is a file or folder this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  For other items,this is the user-friendly equivalent, assuming the item exists in hierarchical storage.
+//  
+//  Unlike System.ItemUrl, this property value does not include the URL scheme.
+//  
+//  To parse an item path, use System.ItemUrl or System.ParsingPath.  To reference shell 
+//  namespace items using shell APIs, use System.ParsingPath.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "c:\foo\bar\hello.txt"
+//      "\\server\share\mydir\goodnews.doc"   "\\server\share\mydir\goodnews.doc"
+//      "\\server\share\numbers.xls"          "\\server\share\numbers.xls"
+//      "c:\foo\MyFolder"                     "c:\foo\MyFolder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox/'Re: Hello!'"
+DEFINE_PROPERTYKEY(PKEY_ItemPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 7);
+
+//  Name:     System.ItemPathDisplayNarrow -- PKEY_ItemPathDisplayNarrow
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 8
+//  
+//  This is the user-friendly display path to the item. The format of the string should be 
+//  tailored such that the name comes first, to optimize for a narrow viewing column.
+//  
+//  If the item is a file, the value excludes the file extension, and includes localized names if they are present.
+//  If the item is a message, the value includes the System.ItemNamePrefix.
+//  
+//  To parse an item path, use System.ItemUrl or System.ParsingPath.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "hello (c:\foo\bar)"
+//      "\\server\share\mydir\goodnews.doc"   "goodnews (\\server\share\mydir)"
+//      "\\server\share\folder"               "folder (\\server\share)"
+//      "c:\foo\MyFolder"                     "MyFolder (c:\foo)"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Re: Hello! (/Mailbox Account/Inbox)"
+DEFINE_PROPERTYKEY(PKEY_ItemPathDisplayNarrow, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 8);
+
+//  Name:     System.ItemType -- PKEY_ItemType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 11
+//  
+//  This is the canonical type of the item and is intended to be programmatically
+//  parsed.
+//  
+//  If there is no canonical type, the value is VT_EMPTY.
+//  
+//  If the item is a file (ie, System.FileName is not VT_EMPTY), the value is the same as
+//  System.FileExtension.
+//  
+//  Use System.ItemTypeText when you want to display the type to end users in a view.  (If
+//   the item is a file, passing the System.ItemType value to PSFormatForDisplay will
+//   result in the same value as System.ItemTypeText.)
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                ".txt"
+//      "\\server\share\mydir\goodnews.doc"   ".doc"
+//      "\\server\share\folder"               "Directory"
+//      "c:\foo\MyFolder"                     "Directory"
+//      [desktop]                             "Folder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "MAPI/IPM.Message"
+DEFINE_PROPERTYKEY(PKEY_ItemType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 11);
+
+//  Name:     System.ItemTypeText -- PKEY_ItemTypeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 4 (PID_STG_STORAGETYPE)
+//  
+//  This is the user friendly type name of the item.  This is not intended to be
+//  programmatically parsed.
+//  
+//  If System.ItemType is VT_EMPTY, the value of this property is also VT_EMPTY.
+//  
+//  If the item is a file, the value of this property is the same as if you passed the 
+//  file's System.ItemType value to PSFormatForDisplay.
+//  
+//  This property should not be confused with System.Kind, where System.Kind is a high-level
+//  user friendly kind name. For example, for a document, System.Kind = "Document" and 
+//  System.Item.Type = ".doc" and System.Item.TypeText = "Microsoft Word Document"
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "Text File"
+//      "\\server\share\mydir\goodnews.doc"   "Microsoft Word Document"
+//      "\\server\share\folder"               "File Folder"
+//      "c:\foo\MyFolder"                     "File Folder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Outlook E-Mail Message"
+DEFINE_PROPERTYKEY(PKEY_ItemTypeText, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 4);
+
+//  Name:     System.ItemUrl -- PKEY_ItemUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 9 (PROPID_QUERY_VIRTUALPATH)
+//  
+//  This always represents a well formed URL that points to the item.  
+//  
+//  To reference shell namespace items using shell APIs, use System.ParsingPath.
+//  
+//  Example values:
+//  
+//      Files:    "file:///c:/foo/bar/hello.txt"
+//                "csc://{GUID}/..."
+//      Messages: "mapi://..."
+DEFINE_PROPERTYKEY(PKEY_ItemUrl, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 9);
+
+//  Name:     System.Keywords -- PKEY_Keywords
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 5 (PIDSI_KEYWORDS)
+//
+//  The keywords for the item.  Also referred to as tags.
+DEFINE_PROPERTYKEY(PKEY_Keywords, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 5);
+
+//  Name:     System.Kind -- PKEY_Kind
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 1E3EE840-BC2B-476C-8237-2ACD1A839B22, 3
+//  
+//  System.Kind is used to map extensions to various .Search folders.
+//  Extensions are mapped to Kinds at HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\KindMap
+//  The list of kinds is not extensible.
+DEFINE_PROPERTYKEY(PKEY_Kind, 0x1E3EE840, 0xBC2B, 0x476C, 0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22, 3);
+
+// Possible discrete values for PKEY_Kind are:
+#define KIND_CALENDAR                       L"calendar"
+#define KIND_COMMUNICATION                  L"communication"
+#define KIND_CONTACT                        L"contact"
+#define KIND_DOCUMENT                       L"document"
+#define KIND_EMAIL                          L"email"
+#define KIND_FEED                           L"feed"
+#define KIND_FOLDER                         L"folder"
+#define KIND_GAME                           L"game"
+#define KIND_INSTANTMESSAGE                 L"instantmessage"
+#define KIND_JOURNAL                        L"journal"
+#define KIND_LINK                           L"link"
+#define KIND_MOVIE                          L"movie"
+#define KIND_MUSIC                          L"music"
+#define KIND_NOTE                           L"note"
+#define KIND_PICTURE                        L"picture"
+#define KIND_PROGRAM                        L"program"
+#define KIND_RECORDEDTV                     L"recordedtv"
+#define KIND_SEARCHFOLDER                   L"searchfolder"
+#define KIND_TASK                           L"task"
+#define KIND_VIDEO                          L"video"
+#define KIND_WEBHISTORY                     L"webhistory"
+
+//  Name:     System.KindText -- PKEY_KindText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F04BEF95-C585-4197-A2B7-DF46FDC9EE6D, 100
+//  
+//  This is the user-friendly form of System.Kind.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_KindText, 0xF04BEF95, 0xC585, 0x4197, 0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D, 100);
+
+//  Name:     System.Language -- PKEY_Language
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 28
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Language, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 28);
+
+//  Name:     System.MileageInformation -- PKEY_MileageInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FDF84370-031A-4ADD-9E91-0D775F1C6605, 100
+DEFINE_PROPERTYKEY(PKEY_MileageInformation, 0xFDF84370, 0x031A, 0x4ADD, 0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05, 100);
+
+//  Name:     System.MIMEType -- PKEY_MIMEType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 5
+//
+//  The MIME type.  Eg, for EML files: 'message/rfc822'.
+DEFINE_PROPERTYKEY(PKEY_MIMEType, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 5);
+
+//  Name:     System.Null -- PKEY_Null
+//  Type:     Null -- VT_NULL
+//  FormatID: 00000000-0000-0000-0000-000000000000, 0
+DEFINE_PROPERTYKEY(PKEY_Null, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0);
+
+//  Name:     System.OfflineAvailability -- PKEY_OfflineAvailability
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A94688B6-7D9F-4570-A648-E3DFC0AB2B3F, 100
+DEFINE_PROPERTYKEY(PKEY_OfflineAvailability, 0xA94688B6, 0x7D9F, 0x4570, 0xA6, 0x48, 0xE3, 0xDF, 0xC0, 0xAB, 0x2B, 0x3F, 100);
+
+// Possible discrete values for PKEY_OfflineAvailability are:
+#define OFFLINEAVAILABILITY_NOT_AVAILABLE   0ul
+#define OFFLINEAVAILABILITY_AVAILABLE       1ul
+#define OFFLINEAVAILABILITY_ALWAYS_AVAILABLE 2ul
+
+//  Name:     System.OfflineStatus -- PKEY_OfflineStatus
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D24888F-4718-4BDA-AFED-EA0FB4386CD8, 100
+DEFINE_PROPERTYKEY(PKEY_OfflineStatus, 0x6D24888F, 0x4718, 0x4BDA, 0xAF, 0xED, 0xEA, 0x0F, 0xB4, 0x38, 0x6C, 0xD8, 100);
+
+// Possible discrete values for PKEY_OfflineStatus are:
+#define OFFLINESTATUS_ONLINE                0ul
+#define OFFLINESTATUS_OFFLINE               1ul
+#define OFFLINESTATUS_OFFLINE_FORCED        2ul
+#define OFFLINESTATUS_OFFLINE_SLOW          3ul
+#define OFFLINESTATUS_OFFLINE_ERROR         4ul
+#define OFFLINESTATUS_OFFLINE_ITEM_VERSION_CONFLICT 5ul
+#define OFFLINESTATUS_OFFLINE_SUSPENDED     6ul
+
+//  Name:     System.OriginalFileName -- PKEY_OriginalFileName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 6
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_OriginalFileName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 6);
+
+//  Name:     System.ParentalRating -- PKEY_ParentalRating
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 21 (PIDMSI_PARENTAL_RATING)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ParentalRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 21);
+
+//  Name:     System.ParentalRatingReason -- PKEY_ParentalRatingReason
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 10984E0A-F9F2-4321-B7EF-BAF195AF4319, 100
+DEFINE_PROPERTYKEY(PKEY_ParentalRatingReason, 0x10984E0A, 0xF9F2, 0x4321, 0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19, 100);
+
+//  Name:     System.ParentalRatingsOrganization -- PKEY_ParentalRatingsOrganization
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A7FE0840-1344-46F0-8D37-52ED712A4BF9, 100
+DEFINE_PROPERTYKEY(PKEY_ParentalRatingsOrganization, 0xA7FE0840, 0x1344, 0x46F0, 0x8D, 0x37, 0x52, 0xED, 0x71, 0x2A, 0x4B, 0xF9, 100);
+
+//  Name:     System.ParsingBindContext -- PKEY_ParsingBindContext
+//  Type:     Any -- VT_NULL  Legacy code may treat this as VT_UNKNOWN.
+//  FormatID: DFB9A04D-362F-4CA3-B30B-0254B17B5B84, 100
+//  
+//  used to get the IBindCtx for an item for parsing
+DEFINE_PROPERTYKEY(PKEY_ParsingBindContext, 0xDFB9A04D, 0x362F, 0x4CA3, 0xB3, 0x0B, 0x02, 0x54, 0xB1, 0x7B, 0x5B, 0x84, 100);
+
+//  Name:     System.ParsingName -- PKEY_ParsingName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 24
+//  
+//  The shell namespace name of an item relative to a parent folder.  This name may be passed to 
+//  IShellFolder::ParseDisplayName() of the parent shell folder.
+DEFINE_PROPERTYKEY(PKEY_ParsingName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 24);
+
+//  Name:     System.ParsingPath -- PKEY_ParsingPath
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 30
+//  
+//  This is the shell namespace path to the item.  This path may be passed to 
+//  SHParseDisplayName to parse the path to the correct shell folder.
+//  
+//  If the item is a file, the value is identical to System.ItemPathDisplay.
+//  
+//  If the item cannot be accessed through the shell namespace, this value is VT_EMPTY.
+DEFINE_PROPERTYKEY(PKEY_ParsingPath, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 30);
+
+//  Name:     System.PerceivedType -- PKEY_PerceivedType
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 9
+//
+//  The perceived type of a shell item, based upon its canonical type.
+DEFINE_PROPERTYKEY(PKEY_PerceivedType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 9);
+
+// For the enumerated values of PKEY_PerceivedType, see the PERCEIVED_TYPE_* values in shtypes.idl.
+
+//  Name:     System.PercentFull -- PKEY_PercentFull
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 5  (Filesystem Volume Properties)
+//
+//  The amount filled as a percentage, multiplied by 100 (ie, the valid range is 0 through 100).
+DEFINE_PROPERTYKEY(PKEY_PercentFull, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 5);
+
+//  Name:     System.Priority -- PKEY_Priority
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 5
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Priority, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 5);
+
+// Possible discrete values for PKEY_Priority are:
+#define PRIORITY_PROP_LOW                   0u
+#define PRIORITY_PROP_NORMAL                1u
+#define PRIORITY_PROP_HIGH                  2u
+
+//  Name:     System.PriorityText -- PKEY_PriorityText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D98BE98B-B86B-4095-BF52-9D23B2E0A752, 100
+//  
+//  This is the user-friendly form of System.Priority.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_PriorityText, 0xD98BE98B, 0xB86B, 0x4095, 0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52, 100);
+
+//  Name:     System.Project -- PKEY_Project
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 39A7F922-477C-48DE-8BC8-B28441E342E3, 100
+DEFINE_PROPERTYKEY(PKEY_Project, 0x39A7F922, 0x477C, 0x48DE, 0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3, 100);
+
+//  Name:     System.ProviderItemID -- PKEY_ProviderItemID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F21D9941-81F0-471A-ADEE-4E74B49217ED, 100
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_ProviderItemID, 0xF21D9941, 0x81F0, 0x471A, 0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED, 100);
+
+//  Name:     System.Rating -- PKEY_Rating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 9 (PIDMSI_RATING)
+//  
+//  Indicates the users preference rating of an item on a scale of 0-99 (0 = unrated, 1-12 = One Star, 
+//  13-37 = Two Stars, 38-62 = Three Stars, 63-87 = Four Stars, 88-99 = Five Stars).
+DEFINE_PROPERTYKEY(PKEY_Rating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+// Use the following constants to convert between visual stars and the ratings value:
+#define RATING_UNRATED_MIN                  0ul
+#define RATING_UNRATED_SET                  0ul
+#define RATING_UNRATED_MAX                  0ul
+
+#define RATING_ONE_STAR_MIN                 1ul
+#define RATING_ONE_STAR_SET                 1ul
+#define RATING_ONE_STAR_MAX                 12ul
+
+#define RATING_TWO_STARS_MIN                13ul
+#define RATING_TWO_STARS_SET                25ul
+#define RATING_TWO_STARS_MAX                37ul
+
+#define RATING_THREE_STARS_MIN              38ul
+#define RATING_THREE_STARS_SET              50ul
+#define RATING_THREE_STARS_MAX              62ul
+
+#define RATING_FOUR_STARS_MIN               63ul
+#define RATING_FOUR_STARS_SET               75ul
+#define RATING_FOUR_STARS_MAX               87ul
+
+#define RATING_FIVE_STARS_MIN               88ul
+#define RATING_FIVE_STARS_SET               99ul
+#define RATING_FIVE_STARS_MAX               99ul
+
+
+//  Name:     System.RatingText -- PKEY_RatingText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 90197CA7-FD8F-4E8C-9DA3-B57E1E609295, 100
+//  
+//  This is the user-friendly form of System.Rating.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_RatingText, 0x90197CA7, 0xFD8F, 0x4E8C, 0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95, 100);
+
+//  Name:     System.Sensitivity -- PKEY_Sensitivity
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: F8D3F6AC-4874-42CB-BE59-AB454B30716A, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Sensitivity, 0xF8D3F6AC, 0x4874, 0x42CB, 0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A, 100);
+
+// Possible discrete values for PKEY_Sensitivity are:
+#define SENSITIVITY_PROP_NORMAL             0u
+#define SENSITIVITY_PROP_PERSONAL           1u
+#define SENSITIVITY_PROP_PRIVATE            2u
+#define SENSITIVITY_PROP_CONFIDENTIAL       3u
+
+//  Name:     System.SensitivityText -- PKEY_SensitivityText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D0C7F054-3F72-4725-8527-129A577CB269, 100
+//  
+//  This is the user-friendly form of System.Sensitivity.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_SensitivityText, 0xD0C7F054, 0x3F72, 0x4725, 0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69, 100);
+
+//  Name:     System.SFGAOFlags -- PKEY_SFGAOFlags
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 25
+//
+//  IShellFolder::GetAttributesOf flags, with SFGAO_PKEYSFGAOMASK attributes masked out.
+DEFINE_PROPERTYKEY(PKEY_SFGAOFlags, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 25);
+
+//  Name:     System.SharedWith -- PKEY_SharedWith
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 200
+//
+//  Who is the item shared with?
+DEFINE_PROPERTYKEY(PKEY_SharedWith, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 200);
+
+//  Name:     System.ShareUserRating -- PKEY_ShareUserRating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 12 (PIDMSI_SHARE_USER_RATING)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ShareUserRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12);
+
+//  Name:     System.Shell.OmitFromView -- PKEY_Shell_OmitFromView
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE35258C-C695-4CBC-B982-38B0AD24CED0, 2
+//  
+//  Set this to a string value of 'True' to omit this item from shell views
+DEFINE_PROPERTYKEY(PKEY_Shell_OmitFromView, 0xDE35258C, 0xC695, 0x4CBC, 0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0, 2);
+
+//  Name:     System.SimpleRating -- PKEY_SimpleRating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A09F084E-AD41-489F-8076-AA5BE3082BCA, 100
+//  
+//  Indicates the users preference rating of an item on a scale of 0-5 (0=unrated, 1=One Star, 2=Two Stars, 3=Three Stars,
+//  4=Four Stars, 5=Five Stars)
+DEFINE_PROPERTYKEY(PKEY_SimpleRating, 0xA09F084E, 0xAD41, 0x489F, 0x80, 0x76, 0xAA, 0x5B, 0xE3, 0x08, 0x2B, 0xCA, 100);
+
+//  Name:     System.Size -- PKEY_Size
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 12 (PID_STG_SIZE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Size, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 12);
+
+//  Name:     System.SoftwareUsed -- PKEY_SoftwareUsed
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 305
+//
+//  PropertyTagSoftwareUsed
+DEFINE_PROPERTYKEY(PKEY_SoftwareUsed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 305);
+
+//  Name:     System.SourceItem -- PKEY_SourceItem
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 668CDFA5-7A1B-4323-AE4B-E527393A1D81, 100
+DEFINE_PROPERTYKEY(PKEY_SourceItem, 0x668CDFA5, 0x7A1B, 0x4323, 0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81, 100);
+
+//  Name:     System.StartDate -- PKEY_StartDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 48FD6EC8-8A12-4CDF-A03E-4EC5A511EDDE, 100
+DEFINE_PROPERTYKEY(PKEY_StartDate, 0x48FD6EC8, 0x8A12, 0x4CDF, 0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE, 100);
+
+//  Name:     System.Status -- PKEY_Status
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_IntSite) 000214A1-0000-0000-C000-000000000046, 9
+DEFINE_PROPERTYKEY(PKEY_Status, 0x000214A1, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 9);
+
+//  Name:     System.Subject -- PKEY_Subject
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 3 (PIDSI_SUBJECT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Subject, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 3);
+
+//  Name:     System.Thumbnail -- PKEY_Thumbnail
+//  Type:     Clipboard -- VT_CF
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 17 (PIDSI_THUMBNAIL)
+//
+//  A data that represents the thumbnail in VT_CF format.
+DEFINE_PROPERTYKEY(PKEY_Thumbnail, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 17);
+
+//  Name:     System.ThumbnailCacheId -- PKEY_ThumbnailCacheId
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: 446D16B1-8DAD-4870-A748-402EA43D788C, 100
+//  
+//  Unique value that can be used as a key to cache thumbnails. The value changes when the name, volume, or data modified 
+//  of an item changes.
+DEFINE_PROPERTYKEY(PKEY_ThumbnailCacheId, 0x446D16B1, 0x8DAD, 0x4870, 0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C, 100);
+
+//  Name:     System.ThumbnailStream -- PKEY_ThumbnailStream
+//  Type:     Stream -- VT_STREAM
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 27
+//
+//  Data that represents the thumbnail in VT_STREAM format that GDI+/WindowsCodecs supports (jpg, png, etc).
+DEFINE_PROPERTYKEY(PKEY_ThumbnailStream, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 27);
+
+//  Name:     System.Title -- PKEY_Title
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 2 (PIDSI_TITLE)
+//
+//  Title of item.
+DEFINE_PROPERTYKEY(PKEY_Title, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2);
+
+//  Name:     System.TotalFileSize -- PKEY_TotalFileSize
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 14
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_TotalFileSize, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 14);
+
+//  Name:     System.Trademarks -- PKEY_Trademarks
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 9 (PIDVSI_Trademarks)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Trademarks, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 9);
+ 
+//-----------------------------------------------------------------------------
+// Document properties
+
+
+
+//  Name:     System.Document.ByteCount -- PKEY_Document_ByteCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 4 (PIDDSI_BYTECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_ByteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 4);
+
+//  Name:     System.Document.CharacterCount -- PKEY_Document_CharacterCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 16 (PIDSI_CHARCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_CharacterCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 16);
+
+//  Name:     System.Document.ClientID -- PKEY_Document_ClientID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 276D7BB0-5B34-4FB0-AA4B-158ED12A1809, 100
+DEFINE_PROPERTYKEY(PKEY_Document_ClientID, 0x276D7BB0, 0x5B34, 0x4FB0, 0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09, 100);
+
+//  Name:     System.Document.Contributor -- PKEY_Document_Contributor
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: F334115E-DA1B-4509-9B3D-119504DC7ABB, 100
+DEFINE_PROPERTYKEY(PKEY_Document_Contributor, 0xF334115E, 0xDA1B, 0x4509, 0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB, 100);
+
+//  Name:     System.Document.DateCreated -- PKEY_Document_DateCreated
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 12 (PIDSI_CREATE_DTM)
+//  
+//  This property is stored in the document, not obtained from the file system.
+DEFINE_PROPERTYKEY(PKEY_Document_DateCreated, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 12);
+
+//  Name:     System.Document.DatePrinted -- PKEY_Document_DatePrinted
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 11 (PIDSI_LASTPRINTED)
+//
+//  Legacy name: "DocLastPrinted".
+DEFINE_PROPERTYKEY(PKEY_Document_DatePrinted, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 11);
+
+//  Name:     System.Document.DateSaved -- PKEY_Document_DateSaved
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 13 (PIDSI_LASTSAVE_DTM)
+//
+//  Legacy name: "DocLastSavedTm".
+DEFINE_PROPERTYKEY(PKEY_Document_DateSaved, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 13);
+
+//  Name:     System.Document.Division -- PKEY_Document_Division
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 1E005EE6-BF27-428B-B01C-79676ACD2870, 100
+DEFINE_PROPERTYKEY(PKEY_Document_Division, 0x1E005EE6, 0xBF27, 0x428B, 0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70, 100);
+
+//  Name:     System.Document.DocumentID -- PKEY_Document_DocumentID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E08805C8-E395-40DF-80D2-54F0D6C43154, 100
+DEFINE_PROPERTYKEY(PKEY_Document_DocumentID, 0xE08805C8, 0xE395, 0x40DF, 0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54, 100);
+
+//  Name:     System.Document.HiddenSlideCount -- PKEY_Document_HiddenSlideCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 9 (PIDDSI_HIDDENCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_HiddenSlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 9);
+
+//  Name:     System.Document.LastAuthor -- PKEY_Document_LastAuthor
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 8 (PIDSI_LASTAUTHOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_LastAuthor, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 8);
+
+//  Name:     System.Document.LineCount -- PKEY_Document_LineCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 5 (PIDDSI_LINECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_LineCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 5);
+
+//  Name:     System.Document.Manager -- PKEY_Document_Manager
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 14 (PIDDSI_MANAGER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_Manager, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 14);
+
+//  Name:     System.Document.MultimediaClipCount -- PKEY_Document_MultimediaClipCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 10 (PIDDSI_MMCLIPCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_MultimediaClipCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 10);
+
+//  Name:     System.Document.NoteCount -- PKEY_Document_NoteCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 8 (PIDDSI_NOTECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_NoteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 8);
+
+//  Name:     System.Document.PageCount -- PKEY_Document_PageCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 14 (PIDSI_PAGECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_PageCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 14);
+
+//  Name:     System.Document.ParagraphCount -- PKEY_Document_ParagraphCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 6 (PIDDSI_PARCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_ParagraphCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 6);
+
+//  Name:     System.Document.PresentationFormat -- PKEY_Document_PresentationFormat
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 3 (PIDDSI_PRESFORMAT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_PresentationFormat, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 3);
+
+//  Name:     System.Document.RevisionNumber -- PKEY_Document_RevisionNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 9 (PIDSI_REVNUMBER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_RevisionNumber, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 9);
+
+//  Name:     System.Document.Security -- PKEY_Document_Security
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 19
+//
+//  Access control information, from SummaryInfo propset
+DEFINE_PROPERTYKEY(PKEY_Document_Security, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 19);
+
+//  Name:     System.Document.SlideCount -- PKEY_Document_SlideCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 7 (PIDDSI_SLIDECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_SlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 7);
+
+//  Name:     System.Document.Template -- PKEY_Document_Template
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 7 (PIDSI_TEMPLATE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_Template, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 7);
+
+//  Name:     System.Document.TotalEditingTime -- PKEY_Document_TotalEditingTime
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 10 (PIDSI_EDITTIME)
+//
+//  100ns units, not milliseconds. VT_FILETIME for IPropertySetStorage handlers (legacy)
+DEFINE_PROPERTYKEY(PKEY_Document_TotalEditingTime, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 10);
+
+//  Name:     System.Document.Version -- PKEY_Document_Version
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 29
+DEFINE_PROPERTYKEY(PKEY_Document_Version, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 29);
+
+//  Name:     System.Document.WordCount -- PKEY_Document_WordCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 15 (PIDSI_WORDCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_WordCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 15);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// DRM properties
+
+//  Name:     System.DRM.DatePlayExpires -- PKEY_DRM_DatePlayExpires
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 6 (PIDDRSI_PLAYEXPIRES)
+//
+//  Indicates when play expires for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayExpires, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 6);
+
+//  Name:     System.DRM.DatePlayStarts -- PKEY_DRM_DatePlayStarts
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 5 (PIDDRSI_PLAYSTARTS)
+//
+//  Indicates when play starts for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayStarts, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 5);
+
+//  Name:     System.DRM.Description -- PKEY_DRM_Description
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 3 (PIDDRSI_DESCRIPTION)
+//
+//  Displays the description for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_Description, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 3);
+
+//  Name:     System.DRM.IsProtected -- PKEY_DRM_IsProtected
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 2 (PIDDRSI_PROTECTED)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_DRM_IsProtected, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 2);
+
+//  Name:     System.DRM.PlayCount -- PKEY_DRM_PlayCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 4 (PIDDRSI_PLAYCOUNT)
+//
+//  Indicates the play count for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_PlayCount, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 4);
+ 
+//-----------------------------------------------------------------------------
+// GPS properties
+
+//  Name:     System.GPS.Altitude -- PKEY_GPS_Altitude
+//  Type:     Double -- VT_R8
+//  FormatID: 827EDB4F-5B73-44A7-891D-FDFFABEA35CA, 100
+//  
+//  Indicates the altitude based on the reference in PKEY_GPS_AltitudeRef.  Calculated from PKEY_GPS_AltitudeNumerator and 
+//  PKEY_GPS_AltitudeDenominator
+DEFINE_PROPERTYKEY(PKEY_GPS_Altitude, 0x827EDB4F, 0x5B73, 0x44A7, 0x89, 0x1D, 0xFD, 0xFF, 0xAB, 0xEA, 0x35, 0xCA, 100);
+
+//  Name:     System.GPS.AltitudeDenominator -- PKEY_GPS_AltitudeDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 78342DCB-E358-4145-AE9A-6BFE4E0F9F51, 100
+//
+//  Denominator of PKEY_GPS_Altitude
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeDenominator, 0x78342DCB, 0xE358, 0x4145, 0xAE, 0x9A, 0x6B, 0xFE, 0x4E, 0x0F, 0x9F, 0x51, 100);
+
+//  Name:     System.GPS.AltitudeNumerator -- PKEY_GPS_AltitudeNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2DAD1EB7-816D-40D3-9EC3-C9773BE2AADE, 100
+//
+//  Numerator of PKEY_GPS_Altitude
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeNumerator, 0x2DAD1EB7, 0x816D, 0x40D3, 0x9E, 0xC3, 0xC9, 0x77, 0x3B, 0xE2, 0xAA, 0xDE, 100);
+
+//  Name:     System.GPS.AltitudeRef -- PKEY_GPS_AltitudeRef
+//  Type:     Byte -- VT_UI1
+//  FormatID: 46AC629D-75EA-4515-867F-6DC4321C5844, 100
+//
+//  Indicates the reference for the altitude property. (eg: above sea level, below sea level, absolute value)
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeRef, 0x46AC629D, 0x75EA, 0x4515, 0x86, 0x7F, 0x6D, 0xC4, 0x32, 0x1C, 0x58, 0x44, 100);
+
+//  Name:     System.GPS.AreaInformation -- PKEY_GPS_AreaInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 972E333E-AC7E-49F1-8ADF-A70D07A9BCAB, 100
+//
+//  Represents the name of the GPS area
+DEFINE_PROPERTYKEY(PKEY_GPS_AreaInformation, 0x972E333E, 0xAC7E, 0x49F1, 0x8A, 0xDF, 0xA7, 0x0D, 0x07, 0xA9, 0xBC, 0xAB, 100);
+
+//  Name:     System.GPS.Date -- PKEY_GPS_Date
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 3602C812-0F3B-45F0-85AD-603468D69423, 100
+//
+//  Date and time of the GPS record
+DEFINE_PROPERTYKEY(PKEY_GPS_Date, 0x3602C812, 0x0F3B, 0x45F0, 0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23, 100);
+
+//  Name:     System.GPS.DestBearing -- PKEY_GPS_DestBearing
+//  Type:     Double -- VT_R8
+//  FormatID: C66D4B3C-E888-47CC-B99F-9DCA3EE34DEA, 100
+//  
+//  Indicates the bearing to the destination point.  Calculated from PKEY_GPS_DestBearingNumerator and 
+//  PKEY_GPS_DestBearingDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearing, 0xC66D4B3C, 0xE888, 0x47CC, 0xB9, 0x9F, 0x9D, 0xCA, 0x3E, 0xE3, 0x4D, 0xEA, 100);
+
+//  Name:     System.GPS.DestBearingDenominator -- PKEY_GPS_DestBearingDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7ABCF4F8-7C3F-4988-AC91-8D2C2E97ECA5, 100
+//
+//  Denominator of PKEY_GPS_DestBearing
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingDenominator, 0x7ABCF4F8, 0x7C3F, 0x4988, 0xAC, 0x91, 0x8D, 0x2C, 0x2E, 0x97, 0xEC, 0xA5, 100);
+
+//  Name:     System.GPS.DestBearingNumerator -- PKEY_GPS_DestBearingNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: BA3B1DA9-86EE-4B5D-A2A4-A271A429F0CF, 100
+//
+//  Numerator of PKEY_GPS_DestBearing
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingNumerator, 0xBA3B1DA9, 0x86EE, 0x4B5D, 0xA2, 0xA4, 0xA2, 0x71, 0xA4, 0x29, 0xF0, 0xCF, 100);
+
+//  Name:     System.GPS.DestBearingRef -- PKEY_GPS_DestBearingRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9AB84393-2A0F-4B75-BB22-7279786977CB, 100
+//
+//  Indicates the reference used for the giving the bearing to the destination point.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingRef, 0x9AB84393, 0x2A0F, 0x4B75, 0xBB, 0x22, 0x72, 0x79, 0x78, 0x69, 0x77, 0xCB, 100);
+
+//  Name:     System.GPS.DestDistance -- PKEY_GPS_DestDistance
+//  Type:     Double -- VT_R8
+//  FormatID: A93EAE04-6804-4F24-AC81-09B266452118, 100
+//  
+//  Indicates the distance to the destination point.  Calculated from PKEY_GPS_DestDistanceNumerator and 
+//  PKEY_GPS_DestDistanceDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistance, 0xA93EAE04, 0x6804, 0x4F24, 0xAC, 0x81, 0x09, 0xB2, 0x66, 0x45, 0x21, 0x18, 100);
+
+//  Name:     System.GPS.DestDistanceDenominator -- PKEY_GPS_DestDistanceDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 9BC2C99B-AC71-4127-9D1C-2596D0D7DCB7, 100
+//
+//  Denominator of PKEY_GPS_DestDistance
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceDenominator, 0x9BC2C99B, 0xAC71, 0x4127, 0x9D, 0x1C, 0x25, 0x96, 0xD0, 0xD7, 0xDC, 0xB7, 100);
+
+//  Name:     System.GPS.DestDistanceNumerator -- PKEY_GPS_DestDistanceNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2BDA47DA-08C6-4FE1-80BC-A72FC517C5D0, 100
+//
+//  Numerator of PKEY_GPS_DestDistance
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceNumerator, 0x2BDA47DA, 0x08C6, 0x4FE1, 0x80, 0xBC, 0xA7, 0x2F, 0xC5, 0x17, 0xC5, 0xD0, 100);
+
+//  Name:     System.GPS.DestDistanceRef -- PKEY_GPS_DestDistanceRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: ED4DF2D3-8695-450B-856F-F5C1C53ACB66, 100
+//
+//  Indicates the unit used to express the distance to the destination.  (eg: kilometers, miles, knots)
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceRef, 0xED4DF2D3, 0x8695, 0x450B, 0x85, 0x6F, 0xF5, 0xC1, 0xC5, 0x3A, 0xCB, 0x66, 100);
+
+//  Name:     System.GPS.DestLatitude -- PKEY_GPS_DestLatitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 9D1D7CC5-5C39-451C-86B3-928E2D18CC47, 100
+//  
+//  Indicates the latitude of the destination point.  This is an array of three values.  Index 0 is the degrees, index 1 
+//  is the minutes, index 2 is the seconds.  Each is calculated from the values in PKEY_GPS_DestLatitudeNumerator and 
+//  PKEY_GPS_DestLatitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitude, 0x9D1D7CC5, 0x5C39, 0x451C, 0x86, 0xB3, 0x92, 0x8E, 0x2D, 0x18, 0xCC, 0x47, 100);
+
+//  Name:     System.GPS.DestLatitudeDenominator -- PKEY_GPS_DestLatitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 3A372292-7FCA-49A7-99D5-E47BB2D4E7AB, 100
+//
+//  Denominator of PKEY_GPS_DestLatitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeDenominator, 0x3A372292, 0x7FCA, 0x49A7, 0x99, 0xD5, 0xE4, 0x7B, 0xB2, 0xD4, 0xE7, 0xAB, 100);
+
+//  Name:     System.GPS.DestLatitudeNumerator -- PKEY_GPS_DestLatitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: ECF4B6F6-D5A6-433C-BB92-4076650FC890, 100
+//
+//  Numerator of PKEY_GPS_DestLatitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeNumerator, 0xECF4B6F6, 0xD5A6, 0x433C, 0xBB, 0x92, 0x40, 0x76, 0x65, 0x0F, 0xC8, 0x90, 100);
+
+//  Name:     System.GPS.DestLatitudeRef -- PKEY_GPS_DestLatitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CEA820B9-CE61-4885-A128-005D9087C192, 100
+//
+//  Indicates whether the latitude destination point is north or south latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeRef, 0xCEA820B9, 0xCE61, 0x4885, 0xA1, 0x28, 0x00, 0x5D, 0x90, 0x87, 0xC1, 0x92, 100);
+
+//  Name:     System.GPS.DestLongitude -- PKEY_GPS_DestLongitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 47A96261-CB4C-4807-8AD3-40B9D9DBC6BC, 100
+//  
+//  Indicates the latitude of the destination point.  This is an array of three values.  Index 0 is the degrees, index 1 
+//  is the minutes, index 2 is the seconds.  Each is calculated from the values in PKEY_GPS_DestLongitudeNumerator and 
+//  PKEY_GPS_DestLongitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitude, 0x47A96261, 0xCB4C, 0x4807, 0x8A, 0xD3, 0x40, 0xB9, 0xD9, 0xDB, 0xC6, 0xBC, 100);
+
+//  Name:     System.GPS.DestLongitudeDenominator -- PKEY_GPS_DestLongitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 425D69E5-48AD-4900-8D80-6EB6B8D0AC86, 100
+//
+//  Denominator of PKEY_GPS_DestLongitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeDenominator, 0x425D69E5, 0x48AD, 0x4900, 0x8D, 0x80, 0x6E, 0xB6, 0xB8, 0xD0, 0xAC, 0x86, 100);
+
+//  Name:     System.GPS.DestLongitudeNumerator -- PKEY_GPS_DestLongitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: A3250282-FB6D-48D5-9A89-DBCACE75CCCF, 100
+//
+//  Numerator of PKEY_GPS_DestLongitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeNumerator, 0xA3250282, 0xFB6D, 0x48D5, 0x9A, 0x89, 0xDB, 0xCA, 0xCE, 0x75, 0xCC, 0xCF, 100);
+
+//  Name:     System.GPS.DestLongitudeRef -- PKEY_GPS_DestLongitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 182C1EA6-7C1C-4083-AB4B-AC6C9F4ED128, 100
+//
+//  Indicates whether the longitude destination point is east or west longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeRef, 0x182C1EA6, 0x7C1C, 0x4083, 0xAB, 0x4B, 0xAC, 0x6C, 0x9F, 0x4E, 0xD1, 0x28, 100);
+
+//  Name:     System.GPS.Differential -- PKEY_GPS_Differential
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: AAF4EE25-BD3B-4DD7-BFC4-47F77BB00F6D, 100
+//
+//  Indicates whether differential correction was applied to the GPS receiver
+DEFINE_PROPERTYKEY(PKEY_GPS_Differential, 0xAAF4EE25, 0xBD3B, 0x4DD7, 0xBF, 0xC4, 0x47, 0xF7, 0x7B, 0xB0, 0x0F, 0x6D, 100);
+
+//  Name:     System.GPS.DOP -- PKEY_GPS_DOP
+//  Type:     Double -- VT_R8
+//  FormatID: 0CF8FB02-1837-42F1-A697-A7017AA289B9, 100
+//
+//  Indicates the GPS DOP (data degree of precision).  Calculated from PKEY_GPS_DOPNumerator and PKEY_GPS_DOPDenominator
+DEFINE_PROPERTYKEY(PKEY_GPS_DOP, 0x0CF8FB02, 0x1837, 0x42F1, 0xA6, 0x97, 0xA7, 0x01, 0x7A, 0xA2, 0x89, 0xB9, 100);
+
+//  Name:     System.GPS.DOPDenominator -- PKEY_GPS_DOPDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A0BE94C5-50BA-487B-BD35-0654BE8881ED, 100
+//
+//  Denominator of PKEY_GPS_DOP
+DEFINE_PROPERTYKEY(PKEY_GPS_DOPDenominator, 0xA0BE94C5, 0x50BA, 0x487B, 0xBD, 0x35, 0x06, 0x54, 0xBE, 0x88, 0x81, 0xED, 100);
+
+//  Name:     System.GPS.DOPNumerator -- PKEY_GPS_DOPNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 47166B16-364F-4AA0-9F31-E2AB3DF449C3, 100
+//
+//  Numerator of PKEY_GPS_DOP
+DEFINE_PROPERTYKEY(PKEY_GPS_DOPNumerator, 0x47166B16, 0x364F, 0x4AA0, 0x9F, 0x31, 0xE2, 0xAB, 0x3D, 0xF4, 0x49, 0xC3, 100);
+
+//  Name:     System.GPS.ImgDirection -- PKEY_GPS_ImgDirection
+//  Type:     Double -- VT_R8
+//  FormatID: 16473C91-D017-4ED9-BA4D-B6BAA55DBCF8, 100
+//  
+//  Indicates direction of the image when it was captured.  Calculated from PKEY_GPS_ImgDirectionNumerator and 
+//  PKEY_GPS_ImgDirectionDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirection, 0x16473C91, 0xD017, 0x4ED9, 0xBA, 0x4D, 0xB6, 0xBA, 0xA5, 0x5D, 0xBC, 0xF8, 100);
+
+//  Name:     System.GPS.ImgDirectionDenominator -- PKEY_GPS_ImgDirectionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 10B24595-41A2-4E20-93C2-5761C1395F32, 100
+//
+//  Denominator of PKEY_GPS_ImgDirection
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionDenominator, 0x10B24595, 0x41A2, 0x4E20, 0x93, 0xC2, 0x57, 0x61, 0xC1, 0x39, 0x5F, 0x32, 100);
+
+//  Name:     System.GPS.ImgDirectionNumerator -- PKEY_GPS_ImgDirectionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: DC5877C7-225F-45F7-BAC7-E81334B6130A, 100
+//
+//  Numerator of PKEY_GPS_ImgDirection
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionNumerator, 0xDC5877C7, 0x225F, 0x45F7, 0xBA, 0xC7, 0xE8, 0x13, 0x34, 0xB6, 0x13, 0x0A, 100);
+
+//  Name:     System.GPS.ImgDirectionRef -- PKEY_GPS_ImgDirectionRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A4AAA5B7-1AD0-445F-811A-0F8F6E67F6B5, 100
+//
+//  Indicates reference for giving the direction of the image when it was captured.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionRef, 0xA4AAA5B7, 0x1AD0, 0x445F, 0x81, 0x1A, 0x0F, 0x8F, 0x6E, 0x67, 0xF6, 0xB5, 100);
+
+//  Name:     System.GPS.Latitude -- PKEY_GPS_Latitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 8727CFFF-4868-4EC6-AD5B-81B98521D1AB, 100
+//  
+//  Indicates the latitude.  This is an array of three values.  Index 0 is the degrees, index 1 is the minutes, index 2 
+//  is the seconds.  Each is calculated from the values in PKEY_GPS_LatitudeNumerator and PKEY_GPS_LatitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Latitude, 0x8727CFFF, 0x4868, 0x4EC6, 0xAD, 0x5B, 0x81, 0xB9, 0x85, 0x21, 0xD1, 0xAB, 100);
+
+//  Name:     System.GPS.LatitudeDenominator -- PKEY_GPS_LatitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 16E634EE-2BFF-497B-BD8A-4341AD39EEB9, 100
+//
+//  Denominator of PKEY_GPS_Latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeDenominator, 0x16E634EE, 0x2BFF, 0x497B, 0xBD, 0x8A, 0x43, 0x41, 0xAD, 0x39, 0xEE, 0xB9, 100);
+
+//  Name:     System.GPS.LatitudeNumerator -- PKEY_GPS_LatitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 7DDAAAD1-CCC8-41AE-B750-B2CB8031AEA2, 100
+//
+//  Numerator of PKEY_GPS_Latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeNumerator, 0x7DDAAAD1, 0xCCC8, 0x41AE, 0xB7, 0x50, 0xB2, 0xCB, 0x80, 0x31, 0xAE, 0xA2, 100);
+
+//  Name:     System.GPS.LatitudeRef -- PKEY_GPS_LatitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 029C0252-5B86-46C7-ACA0-2769FFC8E3D4, 100
+//
+//  Indicates whether latitude is north or south latitude 
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeRef, 0x029C0252, 0x5B86, 0x46C7, 0xAC, 0xA0, 0x27, 0x69, 0xFF, 0xC8, 0xE3, 0xD4, 100);
+
+//  Name:     System.GPS.Longitude -- PKEY_GPS_Longitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: C4C4DBB2-B593-466B-BBDA-D03D27D5E43A, 100
+//  
+//  Indicates the longitude.  This is an array of three values.  Index 0 is the degrees, index 1 is the minutes, index 2 
+//  is the seconds.  Each is calculated from the values in PKEY_GPS_LongitudeNumerator and PKEY_GPS_LongitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Longitude, 0xC4C4DBB2, 0xB593, 0x466B, 0xBB, 0xDA, 0xD0, 0x3D, 0x27, 0xD5, 0xE4, 0x3A, 100);
+
+//  Name:     System.GPS.LongitudeDenominator -- PKEY_GPS_LongitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: BE6E176C-4534-4D2C-ACE5-31DEDAC1606B, 100
+//
+//  Denominator of PKEY_GPS_Longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeDenominator, 0xBE6E176C, 0x4534, 0x4D2C, 0xAC, 0xE5, 0x31, 0xDE, 0xDA, 0xC1, 0x60, 0x6B, 100);
+
+//  Name:     System.GPS.LongitudeNumerator -- PKEY_GPS_LongitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 02B0F689-A914-4E45-821D-1DDA452ED2C4, 100
+//
+//  Numerator of PKEY_GPS_Longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeNumerator, 0x02B0F689, 0xA914, 0x4E45, 0x82, 0x1D, 0x1D, 0xDA, 0x45, 0x2E, 0xD2, 0xC4, 100);
+
+//  Name:     System.GPS.LongitudeRef -- PKEY_GPS_LongitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 33DCF22B-28D5-464C-8035-1EE9EFD25278, 100
+//
+//  Indicates whether longitude is east or west longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeRef, 0x33DCF22B, 0x28D5, 0x464C, 0x80, 0x35, 0x1E, 0xE9, 0xEF, 0xD2, 0x52, 0x78, 100);
+
+//  Name:     System.GPS.MapDatum -- PKEY_GPS_MapDatum
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 2CA2DAE6-EDDC-407D-BEF1-773942ABFA95, 100
+//
+//  Indicates the geodetic survey data used by the GPS receiver
+DEFINE_PROPERTYKEY(PKEY_GPS_MapDatum, 0x2CA2DAE6, 0xEDDC, 0x407D, 0xBE, 0xF1, 0x77, 0x39, 0x42, 0xAB, 0xFA, 0x95, 100);
+
+//  Name:     System.GPS.MeasureMode -- PKEY_GPS_MeasureMode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A015ED5D-AAEA-4D58-8A86-3C586920EA0B, 100
+//
+//  Indicates the GPS measurement mode.  (eg: 2-dimensional, 3-dimensional)
+DEFINE_PROPERTYKEY(PKEY_GPS_MeasureMode, 0xA015ED5D, 0xAAEA, 0x4D58, 0x8A, 0x86, 0x3C, 0x58, 0x69, 0x20, 0xEA, 0x0B, 100);
+
+//  Name:     System.GPS.ProcessingMethod -- PKEY_GPS_ProcessingMethod
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 59D49E61-840F-4AA9-A939-E2099B7F6399, 100
+//
+//  Indicates the name of the method used for location finding
+DEFINE_PROPERTYKEY(PKEY_GPS_ProcessingMethod, 0x59D49E61, 0x840F, 0x4AA9, 0xA9, 0x39, 0xE2, 0x09, 0x9B, 0x7F, 0x63, 0x99, 100);
+
+//  Name:     System.GPS.Satellites -- PKEY_GPS_Satellites
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 467EE575-1F25-4557-AD4E-B8B58B0D9C15, 100
+//
+//  Indicates the GPS satellites used for measurements
+DEFINE_PROPERTYKEY(PKEY_GPS_Satellites, 0x467EE575, 0x1F25, 0x4557, 0xAD, 0x4E, 0xB8, 0xB5, 0x8B, 0x0D, 0x9C, 0x15, 100);
+
+//  Name:     System.GPS.Speed -- PKEY_GPS_Speed
+//  Type:     Double -- VT_R8
+//  FormatID: DA5D0862-6E76-4E1B-BABD-70021BD25494, 100
+//  
+//  Indicates the speed of the GPS receiver movement.  Calculated from PKEY_GPS_SpeedNumerator and 
+//  PKEY_GPS_SpeedDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Speed, 0xDA5D0862, 0x6E76, 0x4E1B, 0xBA, 0xBD, 0x70, 0x02, 0x1B, 0xD2, 0x54, 0x94, 100);
+
+//  Name:     System.GPS.SpeedDenominator -- PKEY_GPS_SpeedDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7D122D5A-AE5E-4335-8841-D71E7CE72F53, 100
+//
+//  Denominator of PKEY_GPS_Speed
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedDenominator, 0x7D122D5A, 0xAE5E, 0x4335, 0x88, 0x41, 0xD7, 0x1E, 0x7C, 0xE7, 0x2F, 0x53, 100);
+
+//  Name:     System.GPS.SpeedNumerator -- PKEY_GPS_SpeedNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: ACC9CE3D-C213-4942-8B48-6D0820F21C6D, 100
+//
+//  Numerator of PKEY_GPS_Speed
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedNumerator, 0xACC9CE3D, 0xC213, 0x4942, 0x8B, 0x48, 0x6D, 0x08, 0x20, 0xF2, 0x1C, 0x6D, 100);
+
+//  Name:     System.GPS.SpeedRef -- PKEY_GPS_SpeedRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: ECF7F4C9-544F-4D6D-9D98-8AD79ADAF453, 100
+//  
+//  Indicates the unit used to express the speed of the GPS receiver movement.  (eg: kilometers per hour, 
+//  miles per hour, knots).
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedRef, 0xECF7F4C9, 0x544F, 0x4D6D, 0x9D, 0x98, 0x8A, 0xD7, 0x9A, 0xDA, 0xF4, 0x53, 100);
+
+//  Name:     System.GPS.Status -- PKEY_GPS_Status
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 125491F4-818F-46B2-91B5-D537753617B2, 100
+//  
+//  Indicates the status of the GPS receiver when the image was recorded.  (eg: measurement in progress, 
+//  measurement interoperability).
+DEFINE_PROPERTYKEY(PKEY_GPS_Status, 0x125491F4, 0x818F, 0x46B2, 0x91, 0xB5, 0xD5, 0x37, 0x75, 0x36, 0x17, 0xB2, 100);
+
+//  Name:     System.GPS.Track -- PKEY_GPS_Track
+//  Type:     Double -- VT_R8
+//  FormatID: 76C09943-7C33-49E3-9E7E-CDBA872CFADA, 100
+//  
+//  Indicates the direction of the GPS receiver movement.  Calculated from PKEY_GPS_TrackNumerator and 
+//  PKEY_GPS_TrackDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Track, 0x76C09943, 0x7C33, 0x49E3, 0x9E, 0x7E, 0xCD, 0xBA, 0x87, 0x2C, 0xFA, 0xDA, 100);
+
+//  Name:     System.GPS.TrackDenominator -- PKEY_GPS_TrackDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C8D1920C-01F6-40C0-AC86-2F3A4AD00770, 100
+//
+//  Denominator of PKEY_GPS_Track
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackDenominator, 0xC8D1920C, 0x01F6, 0x40C0, 0xAC, 0x86, 0x2F, 0x3A, 0x4A, 0xD0, 0x07, 0x70, 100);
+
+//  Name:     System.GPS.TrackNumerator -- PKEY_GPS_TrackNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 702926F4-44A6-43E1-AE71-45627116893B, 100
+//
+//  Numerator of PKEY_GPS_Track
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackNumerator, 0x702926F4, 0x44A6, 0x43E1, 0xAE, 0x71, 0x45, 0x62, 0x71, 0x16, 0x89, 0x3B, 100);
+
+//  Name:     System.GPS.TrackRef -- PKEY_GPS_TrackRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 35DBE6FE-44C3-4400-AAAE-D2C799C407E8, 100
+//
+//  Indicates reference for the direction of the GPS receiver movement.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackRef, 0x35DBE6FE, 0x44C3, 0x4400, 0xAA, 0xAE, 0xD2, 0xC7, 0x99, 0xC4, 0x07, 0xE8, 100);
+
+//  Name:     System.GPS.VersionID -- PKEY_GPS_VersionID
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: 22704DA4-C6B2-4A99-8E56-F16DF8C92599, 100
+//
+//  Indicates the version of the GPS information
+DEFINE_PROPERTYKEY(PKEY_GPS_VersionID, 0x22704DA4, 0xC6B2, 0x4A99, 0x8E, 0x56, 0xF1, 0x6D, 0xF8, 0xC9, 0x25, 0x99, 100);
+ 
+//-----------------------------------------------------------------------------
+// Image properties
+
+
+
+//  Name:     System.Image.BitDepth -- PKEY_Image_BitDepth
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 7 (PIDISI_BITDEPTH)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_BitDepth, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7);
+
+//  Name:     System.Image.ColorSpace -- PKEY_Image_ColorSpace
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 40961
+//
+//  PropertyTagExifColorSpace
+DEFINE_PROPERTYKEY(PKEY_Image_ColorSpace, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 40961);
+
+// Possible discrete values for PKEY_Image_ColorSpace are:
+#define IMAGE_COLORSPACE_SRGB               1u
+#define IMAGE_COLORSPACE_UNCALIBRATED       0xFFFFu
+
+//  Name:     System.Image.CompressedBitsPerPixel -- PKEY_Image_CompressedBitsPerPixel
+//  Type:     Double -- VT_R8
+//  FormatID: 364B6FA9-37AB-482A-BE2B-AE02F60D4318, 100
+//
+//  Calculated from PKEY_Image_CompressedBitsPerPixelNumerator and PKEY_Image_CompressedBitsPerPixelDenominator.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixel, 0x364B6FA9, 0x37AB, 0x482A, 0xBE, 0x2B, 0xAE, 0x02, 0xF6, 0x0D, 0x43, 0x18, 100);
+
+//  Name:     System.Image.CompressedBitsPerPixelDenominator -- PKEY_Image_CompressedBitsPerPixelDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1F8844E1-24AD-4508-9DFD-5326A415CE02, 100
+//
+//  Denominator of PKEY_Image_CompressedBitsPerPixel.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelDenominator, 0x1F8844E1, 0x24AD, 0x4508, 0x9D, 0xFD, 0x53, 0x26, 0xA4, 0x15, 0xCE, 0x02, 100);
+
+//  Name:     System.Image.CompressedBitsPerPixelNumerator -- PKEY_Image_CompressedBitsPerPixelNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: D21A7148-D32C-4624-8900-277210F79C0F, 100
+//
+//  Numerator of PKEY_Image_CompressedBitsPerPixel.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelNumerator, 0xD21A7148, 0xD32C, 0x4624, 0x89, 0x00, 0x27, 0x72, 0x10, 0xF7, 0x9C, 0x0F, 100);
+
+//  Name:     System.Image.Compression -- PKEY_Image_Compression
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 259
+//
+//  Indicates the image compression level.  PropertyTagCompression.
+DEFINE_PROPERTYKEY(PKEY_Image_Compression, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 259);
+
+// Possible discrete values for PKEY_Image_Compression are:
+#define IMAGE_COMPRESSION_UNCOMPRESSED      1u
+#define IMAGE_COMPRESSION_CCITT_T3          2u
+#define IMAGE_COMPRESSION_CCITT_T4          3u
+#define IMAGE_COMPRESSION_CCITT_T6          4u
+#define IMAGE_COMPRESSION_LZW               5u
+#define IMAGE_COMPRESSION_JPEG              6u
+#define IMAGE_COMPRESSION_PACKBITS          32773u
+
+//  Name:     System.Image.CompressionText -- PKEY_Image_CompressionText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3F08E66F-2F44-4BB9-A682-AC35D2562322, 100
+//  
+//  This is the user-friendly form of System.Image.Compression.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressionText, 0x3F08E66F, 0x2F44, 0x4BB9, 0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22, 100);
+
+//  Name:     System.Image.Dimensions -- PKEY_Image_Dimensions
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 13 (PIDISI_DIMENSIONS)
+//
+//  Indicates the dimensions of the image.
+DEFINE_PROPERTYKEY(PKEY_Image_Dimensions, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13);
+
+//  Name:     System.Image.HorizontalResolution -- PKEY_Image_HorizontalResolution
+//  Type:     Double -- VT_R8
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 5 (PIDISI_RESOLUTIONX)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_HorizontalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5);
+
+//  Name:     System.Image.HorizontalSize -- PKEY_Image_HorizontalSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 3 (PIDISI_CX)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_HorizontalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Image.ImageID -- PKEY_Image_ImageID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 10DABE05-32AA-4C29-BF1A-63E2D220587F, 100
+DEFINE_PROPERTYKEY(PKEY_Image_ImageID, 0x10DABE05, 0x32AA, 0x4C29, 0xBF, 0x1A, 0x63, 0xE2, 0xD2, 0x20, 0x58, 0x7F, 100);
+
+//  Name:     System.Image.ResolutionUnit -- PKEY_Image_ResolutionUnit
+//  Type:     Int16 -- VT_I2
+//  FormatID: 19B51FA6-1F92-4A5C-AB48-7DF0ABD67444, 100
+DEFINE_PROPERTYKEY(PKEY_Image_ResolutionUnit, 0x19B51FA6, 0x1F92, 0x4A5C, 0xAB, 0x48, 0x7D, 0xF0, 0xAB, 0xD6, 0x74, 0x44, 100);
+
+//  Name:     System.Image.VerticalResolution -- PKEY_Image_VerticalResolution
+//  Type:     Double -- VT_R8
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 6 (PIDISI_RESOLUTIONY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_VerticalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Image.VerticalSize -- PKEY_Image_VerticalSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 4 (PIDISI_CY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_VerticalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Journal properties
+
+//  Name:     System.Journal.Contacts -- PKEY_Journal_Contacts
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: DEA7C82C-1D89-4A66-9427-A4E3DEBABCB1, 100
+DEFINE_PROPERTYKEY(PKEY_Journal_Contacts, 0xDEA7C82C, 0x1D89, 0x4A66, 0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1, 100);
+
+//  Name:     System.Journal.EntryType -- PKEY_Journal_EntryType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 95BEB1FC-326D-4644-B396-CD3ED90E6DDF, 100
+DEFINE_PROPERTYKEY(PKEY_Journal_EntryType, 0x95BEB1FC, 0x326D, 0x4644, 0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF, 100);
+ 
+//-----------------------------------------------------------------------------
+// Link properties
+
+
+
+//  Name:     System.Link.Comment -- PKEY_Link_Comment
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 5
+DEFINE_PROPERTYKEY(PKEY_Link_Comment, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 5);
+
+//  Name:     System.Link.DateVisited -- PKEY_Link_DateVisited
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 23  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_DateVisited, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 23);
+
+//  Name:     System.Link.Description -- PKEY_Link_Description
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 21  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_Description, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 21);
+
+//  Name:     System.Link.Status -- PKEY_Link_Status
+//  Type:     Int32 -- VT_I4
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 3 (PID_LINK_TARGET_TYPE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Link_Status, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 3);
+
+// Possible discrete values for PKEY_Link_Status are:
+#define LINK_STATUS_RESOLVED                1l
+#define LINK_STATUS_BROKEN                  2l
+
+//  Name:     System.Link.TargetExtension -- PKEY_Link_TargetExtension
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 7A7D76F4-B630-4BD7-95FF-37CC51A975C9, 2
+//
+//  The file extension of the link target.  See System.File.Extension
+DEFINE_PROPERTYKEY(PKEY_Link_TargetExtension, 0x7A7D76F4, 0xB630, 0x4BD7, 0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9, 2);
+
+//  Name:     System.Link.TargetParsingPath -- PKEY_Link_TargetParsingPath
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 2 (PID_LINK_TARGET)
+//  
+//  This is the shell namespace path to the target of the link item.  This path may be passed to 
+//  SHParseDisplayName to parse the path to the correct shell folder.
+//  
+//  If the target item is a file, the value is identical to System.ItemPathDisplay.
+//  
+//  If the target item cannot be accessed through the shell namespace, this value is VT_EMPTY.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetParsingPath, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 2);
+
+//  Name:     System.Link.TargetSFGAOFlags -- PKEY_Link_TargetSFGAOFlags
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 8
+//  
+//  IShellFolder::GetAttributesOf flags for the target of a link, with SFGAO_PKEYSFGAOMASK 
+//  attributes masked out.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlags, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 8);
+ 
+//-----------------------------------------------------------------------------
+// Media properties
+
+
+
+//  Name:     System.Media.AuthorUrl -- PKEY_Media_AuthorUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 32 (PIDMSI_AUTHOR_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_AuthorUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 32);
+
+//  Name:     System.Media.AverageLevel -- PKEY_Media_AverageLevel
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 09EDD5B6-B301-43C5-9990-D00302EFFD46, 100
+DEFINE_PROPERTYKEY(PKEY_Media_AverageLevel, 0x09EDD5B6, 0xB301, 0x43C5, 0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46, 100);
+
+//  Name:     System.Media.ClassPrimaryID -- PKEY_Media_ClassPrimaryID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 13 (PIDMSI_CLASS_PRIMARY_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ClassPrimaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13);
+
+//  Name:     System.Media.ClassSecondaryID -- PKEY_Media_ClassSecondaryID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 14 (PIDMSI_CLASS_SECONDARY_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ClassSecondaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 14);
+
+//  Name:     System.Media.CollectionGroupID -- PKEY_Media_CollectionGroupID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 24 (PIDMSI_COLLECTION_GROUP_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CollectionGroupID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 24);
+
+//  Name:     System.Media.CollectionID -- PKEY_Media_CollectionID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 25 (PIDMSI_COLLECTION_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CollectionID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 25);
+
+//  Name:     System.Media.ContentDistributor -- PKEY_Media_ContentDistributor
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 18 (PIDMSI_CONTENTDISTRIBUTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ContentDistributor, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 18);
+
+//  Name:     System.Media.ContentID -- PKEY_Media_ContentID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 26 (PIDMSI_CONTENT_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ContentID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 26);
+
+//  Name:     System.Media.CreatorApplication -- PKEY_Media_CreatorApplication
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 27 (PIDMSI_TOOL_NAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplication, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 27);
+
+//  Name:     System.Media.CreatorApplicationVersion -- PKEY_Media_CreatorApplicationVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 28 (PIDMSI_TOOL_VERSION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplicationVersion, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 28);
+
+//  Name:     System.Media.DateEncoded -- PKEY_Media_DateEncoded
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 2E4B640D-5019-46D8-8881-55414CC5CAA0, 100
+//
+//  DateTime is in UTC (in the doc, not file system).
+DEFINE_PROPERTYKEY(PKEY_Media_DateEncoded, 0x2E4B640D, 0x5019, 0x46D8, 0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0, 100);
+
+//  Name:     System.Media.DateReleased -- PKEY_Media_DateReleased
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE41CC29-6971-4290-B472-F59F2E2F31E2, 100
+DEFINE_PROPERTYKEY(PKEY_Media_DateReleased, 0xDE41CC29, 0x6971, 0x4290, 0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2, 100);
+
+//  Name:     System.Media.Duration -- PKEY_Media_Duration
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 3 (PIDASI_TIMELENGTH)
+//
+//  100ns units, not milliseconds
+DEFINE_PROPERTYKEY(PKEY_Media_Duration, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Media.DVDID -- PKEY_Media_DVDID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 15 (PIDMSI_DVDID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_DVDID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 15);
+
+//  Name:     System.Media.EncodedBy -- PKEY_Media_EncodedBy
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 36 (PIDMSI_ENCODED_BY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_EncodedBy, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 36);
+
+//  Name:     System.Media.EncodingSettings -- PKEY_Media_EncodingSettings
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 37 (PIDMSI_ENCODING_SETTINGS)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_EncodingSettings, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 37);
+
+//  Name:     System.Media.FrameCount -- PKEY_Media_FrameCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 12 (PIDISI_FRAMECOUNT)
+//
+//  Indicates the frame count for the image.
+DEFINE_PROPERTYKEY(PKEY_Media_FrameCount, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12);
+
+//  Name:     System.Media.MCDI -- PKEY_Media_MCDI
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 16 (PIDMSI_MCDI)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_MCDI, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 16);
+
+//  Name:     System.Media.MetadataContentProvider -- PKEY_Media_MetadataContentProvider
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 17 (PIDMSI_PROVIDER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_MetadataContentProvider, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 17);
+
+//  Name:     System.Media.Producer -- PKEY_Media_Producer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 22 (PIDMSI_PRODUCER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Producer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 22);
+
+//  Name:     System.Media.PromotionUrl -- PKEY_Media_PromotionUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 33 (PIDMSI_PROMOTION_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_PromotionUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 33);
+
+//  Name:     System.Media.ProtectionType -- PKEY_Media_ProtectionType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 38
+//  
+//  If media is protected, how is it protected?
+DEFINE_PROPERTYKEY(PKEY_Media_ProtectionType, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 38);
+
+//  Name:     System.Media.ProviderRating -- PKEY_Media_ProviderRating
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 39
+//  
+//  Rating (0 - 99) supplied by metadata provider
+DEFINE_PROPERTYKEY(PKEY_Media_ProviderRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 39);
+
+//  Name:     System.Media.ProviderStyle -- PKEY_Media_ProviderStyle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 40
+//  
+//  Style of music or video, supplied by metadata provider
+DEFINE_PROPERTYKEY(PKEY_Media_ProviderStyle, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 40);
+
+//  Name:     System.Media.Publisher -- PKEY_Media_Publisher
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 30 (PIDMSI_PUBLISHER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Publisher, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 30);
+
+//  Name:     System.Media.SubscriptionContentId -- PKEY_Media_SubscriptionContentId
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9AEBAE7A-9644-487D-A92C-657585ED751A, 100
+DEFINE_PROPERTYKEY(PKEY_Media_SubscriptionContentId, 0x9AEBAE7A, 0x9644, 0x487D, 0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A, 100);
+
+//  Name:     System.Media.SubTitle -- PKEY_Media_SubTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 38 (PIDSI_MUSIC_SUB_TITLE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_SubTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 38);
+
+//  Name:     System.Media.UniqueFileIdentifier -- PKEY_Media_UniqueFileIdentifier
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 35 (PIDMSI_UNIQUE_FILE_IDENTIFIER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_UniqueFileIdentifier, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 35);
+
+//  Name:     System.Media.UserNoAutoInfo -- PKEY_Media_UserNoAutoInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 41
+//  
+//  If true, do NOT alter this file's metadata. Set by user.
+DEFINE_PROPERTYKEY(PKEY_Media_UserNoAutoInfo, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 41);
+
+//  Name:     System.Media.UserWebUrl -- PKEY_Media_UserWebUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 34 (PIDMSI_USER_WEB_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_UserWebUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 34);
+
+//  Name:     System.Media.Writer -- PKEY_Media_Writer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 23 (PIDMSI_WRITER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Writer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 23);
+
+//  Name:     System.Media.Year -- PKEY_Media_Year
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 5 (PIDSI_MUSIC_YEAR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Year, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 5);
+ 
+//-----------------------------------------------------------------------------
+// Message properties
+
+
+
+//  Name:     System.Message.AttachmentContents -- PKEY_Message_AttachmentContents
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3143BF7C-80A8-4854-8880-E2E40189BDD0, 100
+DEFINE_PROPERTYKEY(PKEY_Message_AttachmentContents, 0x3143BF7C, 0x80A8, 0x4854, 0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0, 100);
+
+//  Name:     System.Message.AttachmentNames -- PKEY_Message_AttachmentNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 21
+//
+//  The names of the attachments in a message
+DEFINE_PROPERTYKEY(PKEY_Message_AttachmentNames, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 21);
+
+//  Name:     System.Message.BccAddress -- PKEY_Message_BccAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 2
+//
+//  Addresses in Bcc: field
+DEFINE_PROPERTYKEY(PKEY_Message_BccAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 2);
+
+//  Name:     System.Message.BccName -- PKEY_Message_BccName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 3
+//
+//  person names in Bcc: field
+DEFINE_PROPERTYKEY(PKEY_Message_BccName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 3);
+
+//  Name:     System.Message.CcAddress -- PKEY_Message_CcAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 4
+//
+//  Addresses in Cc: field
+DEFINE_PROPERTYKEY(PKEY_Message_CcAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 4);
+
+//  Name:     System.Message.CcName -- PKEY_Message_CcName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 5
+//
+//  person names in Cc: field
+DEFINE_PROPERTYKEY(PKEY_Message_CcName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 5);
+
+//  Name:     System.Message.ConversationID -- PKEY_Message_ConversationID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 100
+DEFINE_PROPERTYKEY(PKEY_Message_ConversationID, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 100);
+
+//  Name:     System.Message.ConversationIndex -- PKEY_Message_ConversationIndex
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 101
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Message_ConversationIndex, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 101);
+
+//  Name:     System.Message.DateReceived -- PKEY_Message_DateReceived
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 20
+//
+//  Date and Time communication was received
+DEFINE_PROPERTYKEY(PKEY_Message_DateReceived, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 20);
+
+//  Name:     System.Message.DateSent -- PKEY_Message_DateSent
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 19
+//
+//  Date and Time communication was sent
+DEFINE_PROPERTYKEY(PKEY_Message_DateSent, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 19);
+
+//  Name:     System.Message.FromAddress -- PKEY_Message_FromAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 13
+DEFINE_PROPERTYKEY(PKEY_Message_FromAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 13);
+
+//  Name:     System.Message.FromName -- PKEY_Message_FromName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 14
+//
+//  Address in from field as person name
+DEFINE_PROPERTYKEY(PKEY_Message_FromName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 14);
+
+//  Name:     System.Message.HasAttachments -- PKEY_Message_HasAttachments
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 8
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Message_HasAttachments, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 8);
+
+//  Name:     System.Message.IsFwdOrReply -- PKEY_Message_IsFwdOrReply
+//  Type:     Int32 -- VT_I4
+//  FormatID: 9A9BC088-4F6D-469E-9919-E705412040F9, 100
+DEFINE_PROPERTYKEY(PKEY_Message_IsFwdOrReply, 0x9A9BC088, 0x4F6D, 0x469E, 0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9, 100);
+
+//  Name:     System.Message.MessageClass -- PKEY_Message_MessageClass
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CD9ED458-08CE-418F-A70E-F912C7BB9C5C, 103
+//  
+//  What type of outlook msg this is (meeting, task, mail, etc.)
+DEFINE_PROPERTYKEY(PKEY_Message_MessageClass, 0xCD9ED458, 0x08CE, 0x418F, 0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C, 103);
+
+//  Name:     System.Message.SenderAddress -- PKEY_Message_SenderAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0BE1C8E7-1981-4676-AE14-FDD78F05A6E7, 100
+DEFINE_PROPERTYKEY(PKEY_Message_SenderAddress, 0x0BE1C8E7, 0x1981, 0x4676, 0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7, 100);
+
+//  Name:     System.Message.SenderName -- PKEY_Message_SenderName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0DA41CFA-D224-4A18-AE2F-596158DB4B3A, 100
+DEFINE_PROPERTYKEY(PKEY_Message_SenderName, 0x0DA41CFA, 0xD224, 0x4A18, 0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A, 100);
+
+//  Name:     System.Message.Store -- PKEY_Message_Store
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 15
+//
+//  The store (aka protocol handler) FILE, MAIL, OUTLOOKEXPRESS
+DEFINE_PROPERTYKEY(PKEY_Message_Store, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 15);
+
+//  Name:     System.Message.ToAddress -- PKEY_Message_ToAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 16
+//
+//  Addresses in To: field
+DEFINE_PROPERTYKEY(PKEY_Message_ToAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 16);
+
+//  Name:     System.Message.ToDoTitle -- PKEY_Message_ToDoTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BCCC8A3C-8CEF-42E5-9B1C-C69079398BC7, 100
+DEFINE_PROPERTYKEY(PKEY_Message_ToDoTitle, 0xBCCC8A3C, 0x8CEF, 0x42E5, 0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7, 100);
+
+//  Name:     System.Message.ToName -- PKEY_Message_ToName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 17
+//
+//  Person names in To: field
+DEFINE_PROPERTYKEY(PKEY_Message_ToName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 17);
+ 
+//-----------------------------------------------------------------------------
+// Music properties
+
+//  Name:     System.Music.AlbumArtist -- PKEY_Music_AlbumArtist
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 13 (PIDSI_MUSIC_ALBUM_ARTIST)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_AlbumArtist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 13);
+
+//  Name:     System.Music.AlbumTitle -- PKEY_Music_AlbumTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 4 (PIDSI_MUSIC_ALBUM)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_AlbumTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 4);
+
+//  Name:     System.Music.Artist -- PKEY_Music_Artist
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 2 (PIDSI_MUSIC_ARTIST)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Artist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 2);
+
+//  Name:     System.Music.BeatsPerMinute -- PKEY_Music_BeatsPerMinute
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 35 (PIDSI_MUSIC_BEATS_PER_MINUTE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_BeatsPerMinute, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 35);
+
+//  Name:     System.Music.Composer -- PKEY_Music_Composer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 19 (PIDMSI_COMPOSER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Composer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 19);
+
+//  Name:     System.Music.Conductor -- PKEY_Music_Conductor
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 36 (PIDSI_MUSIC_CONDUCTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Conductor, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 36);
+
+//  Name:     System.Music.ContentGroupDescription -- PKEY_Music_ContentGroupDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 33 (PIDSI_MUSIC_CONTENT_GROUP_DESCRIPTION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_ContentGroupDescription, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 33);
+
+//  Name:     System.Music.Genre -- PKEY_Music_Genre
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 11 (PIDSI_MUSIC_GENRE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Genre, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 11);
+
+//  Name:     System.Music.InitialKey -- PKEY_Music_InitialKey
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 34 (PIDSI_MUSIC_INITIAL_KEY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_InitialKey, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 34);
+
+//  Name:     System.Music.Lyrics -- PKEY_Music_Lyrics
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 12 (PIDSI_MUSIC_LYRICS)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Lyrics, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 12);
+
+//  Name:     System.Music.Mood -- PKEY_Music_Mood
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 39 (PIDSI_MUSIC_MOOD)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Mood, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 39);
+
+//  Name:     System.Music.PartOfSet -- PKEY_Music_PartOfSet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 37 (PIDSI_MUSIC_PART_OF_SET)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_PartOfSet, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 37);
+
+//  Name:     System.Music.Period -- PKEY_Music_Period
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 31 (PIDMSI_PERIOD)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Period, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 31);
+
+//  Name:     System.Music.SynchronizedLyrics -- PKEY_Music_SynchronizedLyrics
+//  Type:     Blob -- VT_BLOB
+//  FormatID: 6B223B6A-162E-4AA9-B39F-05D678FC6D77, 100
+DEFINE_PROPERTYKEY(PKEY_Music_SynchronizedLyrics, 0x6B223B6A, 0x162E, 0x4AA9, 0xB3, 0x9F, 0x05, 0xD6, 0x78, 0xFC, 0x6D, 0x77, 100);
+
+//  Name:     System.Music.TrackNumber -- PKEY_Music_TrackNumber
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 7 (PIDSI_MUSIC_TRACK)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_TrackNumber, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 7);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Note properties
+
+//  Name:     System.Note.Color -- PKEY_Note_Color
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 4776CAFA-BCE4-4CB1-A23E-265E76D8EB11, 100
+DEFINE_PROPERTYKEY(PKEY_Note_Color, 0x4776CAFA, 0xBCE4, 0x4CB1, 0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11, 100);
+
+// Possible discrete values for PKEY_Note_Color are:
+#define NOTE_COLOR_BLUE                     0u
+#define NOTE_COLOR_GREEN                    1u
+#define NOTE_COLOR_PINK                     2u
+#define NOTE_COLOR_YELLOW                   3u
+#define NOTE_COLOR_WHITE                    4u
+#define NOTE_COLOR_LIGHTGREEN               5u
+
+//  Name:     System.Note.ColorText -- PKEY_Note_ColorText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 46B4E8DE-CDB2-440D-885C-1658EB65B914, 100
+//  
+//  This is the user-friendly form of System.Note.Color.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Note_ColorText, 0x46B4E8DE, 0xCDB2, 0x440D, 0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14, 100);
+ 
+//-----------------------------------------------------------------------------
+// Photo properties
+
+
+
+//  Name:     System.Photo.Aperture -- PKEY_Photo_Aperture
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37378
+//
+//  PropertyTagExifAperture.  Calculated from PKEY_Photo_ApertureNumerator and PKEY_Photo_ApertureDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_Aperture, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37378);
+
+//  Name:     System.Photo.ApertureDenominator -- PKEY_Photo_ApertureDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: E1A9A38B-6685-46BD-875E-570DC7AD7320, 100
+//
+//  Denominator of PKEY_Photo_Aperture
+DEFINE_PROPERTYKEY(PKEY_Photo_ApertureDenominator, 0xE1A9A38B, 0x6685, 0x46BD, 0x87, 0x5E, 0x57, 0x0D, 0xC7, 0xAD, 0x73, 0x20, 100);
+
+//  Name:     System.Photo.ApertureNumerator -- PKEY_Photo_ApertureNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0337ECEC-39FB-4581-A0BD-4C4CC51E9914, 100
+//
+//  Numerator of PKEY_Photo_Aperture
+DEFINE_PROPERTYKEY(PKEY_Photo_ApertureNumerator, 0x0337ECEC, 0x39FB, 0x4581, 0xA0, 0xBD, 0x4C, 0x4C, 0xC5, 0x1E, 0x99, 0x14, 100);
+
+//  Name:     System.Photo.Brightness -- PKEY_Photo_Brightness
+//  Type:     Double -- VT_R8
+//  FormatID: 1A701BF6-478C-4361-83AB-3701BB053C58, 100 (PropertyTagExifBrightness)
+//  
+//  This is the brightness of the photo.
+//  
+//  Calculated from PKEY_Photo_BrightnessNumerator and PKEY_Photo_BrightnessDenominator.
+//  
+//  The units are "APEX", normally in the range of -99.99 to 99.99. If the numerator of 
+//  the recorded value is FFFFFFFF.H, "Unknown" should be indicated.
+DEFINE_PROPERTYKEY(PKEY_Photo_Brightness, 0x1A701BF6, 0x478C, 0x4361, 0x83, 0xAB, 0x37, 0x01, 0xBB, 0x05, 0x3C, 0x58, 100);
+
+//  Name:     System.Photo.BrightnessDenominator -- PKEY_Photo_BrightnessDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6EBE6946-2321-440A-90F0-C043EFD32476, 100
+//
+//  Denominator of PKEY_Photo_Brightness
+DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessDenominator, 0x6EBE6946, 0x2321, 0x440A, 0x90, 0xF0, 0xC0, 0x43, 0xEF, 0xD3, 0x24, 0x76, 100);
+
+//  Name:     System.Photo.BrightnessNumerator -- PKEY_Photo_BrightnessNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 9E7D118F-B314-45A0-8CFB-D654B917C9E9, 100
+//
+//  Numerator of PKEY_Photo_Brightness
+DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessNumerator, 0x9E7D118F, 0xB314, 0x45A0, 0x8C, 0xFB, 0xD6, 0x54, 0xB9, 0x17, 0xC9, 0xE9, 100);
+
+//  Name:     System.Photo.CameraManufacturer -- PKEY_Photo_CameraManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 271 (PropertyTagEquipMake)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraManufacturer, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 271);
+
+//  Name:     System.Photo.CameraModel -- PKEY_Photo_CameraModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 272 (PropertyTagEquipModel)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraModel, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 272);
+
+//  Name:     System.Photo.CameraSerialNumber -- PKEY_Photo_CameraSerialNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 273
+//
+//  Serial number of camera that produced this photo
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraSerialNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 273);
+
+//  Name:     System.Photo.Contrast -- PKEY_Photo_Contrast
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2A785BA9-8D23-4DED-82E6-60A350C86A10, 100
+//  
+//  This indicates the direction of contrast processing applied by the camera 
+//  when the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Contrast, 0x2A785BA9, 0x8D23, 0x4DED, 0x82, 0xE6, 0x60, 0xA3, 0x50, 0xC8, 0x6A, 0x10, 100);
+
+// Possible discrete values for PKEY_Photo_Contrast are:
+#define PHOTO_CONTRAST_NORMAL               0ul
+#define PHOTO_CONTRAST_SOFT                 1ul
+#define PHOTO_CONTRAST_HARD                 2ul
+
+//  Name:     System.Photo.ContrastText -- PKEY_Photo_ContrastText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 59DDE9F2-5253-40EA-9A8B-479E96C6249A, 100
+//  
+//  This is the user-friendly form of System.Photo.Contrast.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ContrastText, 0x59DDE9F2, 0x5253, 0x40EA, 0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A, 100);
+
+//  Name:     System.Photo.DateTaken -- PKEY_Photo_DateTaken
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 36867
+//
+//  PropertyTagExifDTOrig
+DEFINE_PROPERTYKEY(PKEY_Photo_DateTaken, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 36867);
+
+//  Name:     System.Photo.DigitalZoom -- PKEY_Photo_DigitalZoom
+//  Type:     Double -- VT_R8
+//  FormatID: F85BF840-A925-4BC2-B0C4-8E36B598679E, 100
+//
+//  PropertyTagExifDigitalZoom.  Calculated from PKEY_Photo_DigitalZoomNumerator and PKEY_Photo_DigitalZoomDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoom, 0xF85BF840, 0xA925, 0x4BC2, 0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E, 100);
+
+//  Name:     System.Photo.DigitalZoomDenominator -- PKEY_Photo_DigitalZoomDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 745BAF0E-E5C1-4CFB-8A1B-D031A0A52393, 100
+//
+//  Denominator of PKEY_Photo_DigitalZoom
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomDenominator, 0x745BAF0E, 0xE5C1, 0x4CFB, 0x8A, 0x1B, 0xD0, 0x31, 0xA0, 0xA5, 0x23, 0x93, 100);
+
+//  Name:     System.Photo.DigitalZoomNumerator -- PKEY_Photo_DigitalZoomNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 16CBB924-6500-473B-A5BE-F1599BCBE413, 100
+//
+//  Numerator of PKEY_Photo_DigitalZoom
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomNumerator, 0x16CBB924, 0x6500, 0x473B, 0xA5, 0xBE, 0xF1, 0x59, 0x9B, 0xCB, 0xE4, 0x13, 100);
+
+//  Name:     System.Photo.Event -- PKEY_Photo_Event
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18248
+//
+//  The event at which the photo was taken
+DEFINE_PROPERTYKEY(PKEY_Photo_Event, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18248);
+
+//  Name:     System.Photo.EXIFVersion -- PKEY_Photo_EXIFVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D35F743A-EB2E-47F2-A286-844132CB1427, 100
+//
+//  The EXIF version.
+DEFINE_PROPERTYKEY(PKEY_Photo_EXIFVersion, 0xD35F743A, 0xEB2E, 0x47F2, 0xA2, 0x86, 0x84, 0x41, 0x32, 0xCB, 0x14, 0x27, 100);
+
+//  Name:     System.Photo.ExposureBias -- PKEY_Photo_ExposureBias
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37380
+//
+//  PropertyTagExifExposureBias.  Calculated from PKEY_Photo_ExposureBiasNumerator and PKEY_Photo_ExposureBiasDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBias, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37380);
+
+//  Name:     System.Photo.ExposureBiasDenominator -- PKEY_Photo_ExposureBiasDenominator
+//  Type:     Int32 -- VT_I4
+//  FormatID: AB205E50-04B7-461C-A18C-2F233836E627, 100
+//
+//  Denominator of PKEY_Photo_ExposureBias
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasDenominator, 0xAB205E50, 0x04B7, 0x461C, 0xA1, 0x8C, 0x2F, 0x23, 0x38, 0x36, 0xE6, 0x27, 100);
+
+//  Name:     System.Photo.ExposureBiasNumerator -- PKEY_Photo_ExposureBiasNumerator
+//  Type:     Int32 -- VT_I4
+//  FormatID: 738BF284-1D87-420B-92CF-5834BF6EF9ED, 100
+//
+//  Numerator of PKEY_Photo_ExposureBias
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasNumerator, 0x738BF284, 0x1D87, 0x420B, 0x92, 0xCF, 0x58, 0x34, 0xBF, 0x6E, 0xF9, 0xED, 100);
+
+//  Name:     System.Photo.ExposureIndex -- PKEY_Photo_ExposureIndex
+//  Type:     Double -- VT_R8
+//  FormatID: 967B5AF8-995A-46ED-9E11-35B3C5B9782D, 100
+//
+//  PropertyTagExifExposureIndex.  Calculated from PKEY_Photo_ExposureIndexNumerator and PKEY_Photo_ExposureIndexDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndex, 0x967B5AF8, 0x995A, 0x46ED, 0x9E, 0x11, 0x35, 0xB3, 0xC5, 0xB9, 0x78, 0x2D, 100);
+
+//  Name:     System.Photo.ExposureIndexDenominator -- PKEY_Photo_ExposureIndexDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 93112F89-C28B-492F-8A9D-4BE2062CEE8A, 100
+//
+//  Denominator of PKEY_Photo_ExposureIndex
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexDenominator, 0x93112F89, 0xC28B, 0x492F, 0x8A, 0x9D, 0x4B, 0xE2, 0x06, 0x2C, 0xEE, 0x8A, 100);
+
+//  Name:     System.Photo.ExposureIndexNumerator -- PKEY_Photo_ExposureIndexNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: CDEDCF30-8919-44DF-8F4C-4EB2FFDB8D89, 100
+//
+//  Numerator of PKEY_Photo_ExposureIndex
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexNumerator, 0xCDEDCF30, 0x8919, 0x44DF, 0x8F, 0x4C, 0x4E, 0xB2, 0xFF, 0xDB, 0x8D, 0x89, 100);
+
+//  Name:     System.Photo.ExposureProgram -- PKEY_Photo_ExposureProgram
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34850 (PropertyTagExifExposureProg)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgram, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34850);
+
+// Possible discrete values for PKEY_Photo_ExposureProgram are:
+#define PHOTO_EXPOSUREPROGRAM_UNKNOWN       0ul
+#define PHOTO_EXPOSUREPROGRAM_MANUAL        1ul
+#define PHOTO_EXPOSUREPROGRAM_NORMAL        2ul
+#define PHOTO_EXPOSUREPROGRAM_APERTURE      3ul
+#define PHOTO_EXPOSUREPROGRAM_SHUTTER       4ul
+#define PHOTO_EXPOSUREPROGRAM_CREATIVE      5ul
+#define PHOTO_EXPOSUREPROGRAM_ACTION        6ul
+#define PHOTO_EXPOSUREPROGRAM_PORTRAIT      7ul
+#define PHOTO_EXPOSUREPROGRAM_LANDSCAPE     8ul
+
+//  Name:     System.Photo.ExposureProgramText -- PKEY_Photo_ExposureProgramText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FEC690B7-5F30-4646-AE47-4CAAFBA884A3, 100
+//  
+//  This is the user-friendly form of System.Photo.ExposureProgram.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgramText, 0xFEC690B7, 0x5F30, 0x4646, 0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3, 100);
+
+//  Name:     System.Photo.ExposureTime -- PKEY_Photo_ExposureTime
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33434
+//
+//  PropertyTagExifExposureTime.  Calculated from  PKEY_Photo_ExposureTimeNumerator and PKEY_Photo_ExposureTimeDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTime, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33434);
+
+//  Name:     System.Photo.ExposureTimeDenominator -- PKEY_Photo_ExposureTimeDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 55E98597-AD16-42E0-B624-21599A199838, 100
+//
+//  Denominator of PKEY_Photo_ExposureTime
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeDenominator, 0x55E98597, 0xAD16, 0x42E0, 0xB6, 0x24, 0x21, 0x59, 0x9A, 0x19, 0x98, 0x38, 100);
+
+//  Name:     System.Photo.ExposureTimeNumerator -- PKEY_Photo_ExposureTimeNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 257E44E2-9031-4323-AC38-85C552871B2E, 100
+//
+//  Numerator of PKEY_Photo_ExposureTime
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeNumerator, 0x257E44E2, 0x9031, 0x4323, 0xAC, 0x38, 0x85, 0xC5, 0x52, 0x87, 0x1B, 0x2E, 100);
+
+//  Name:     System.Photo.Flash -- PKEY_Photo_Flash
+//  Type:     Byte -- VT_UI1
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37385
+//
+//  PropertyTagExifFlash
+DEFINE_PROPERTYKEY(PKEY_Photo_Flash, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37385);
+
+// Possible discrete values for PKEY_Photo_Flash are:
+#define PHOTO_FLASH_NONE                    0
+#define PHOTO_FLASH_FLASH                   1
+#define PHOTO_FLASH_WITHOUTSTROBE           5
+#define PHOTO_FLASH_WITHSTROBE              7
+
+//  Name:     System.Photo.FlashEnergy -- PKEY_Photo_FlashEnergy
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 41483
+//
+//  PropertyTagExifFlashEnergy.  Calculated from PKEY_Photo_FlashEnergyNumerator and PKEY_Photo_FlashEnergyDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergy, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 41483);
+
+//  Name:     System.Photo.FlashEnergyDenominator -- PKEY_Photo_FlashEnergyDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: D7B61C70-6323-49CD-A5FC-C84277162C97, 100
+//
+//  Denominator of PKEY_Photo_FlashEnergy
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyDenominator, 0xD7B61C70, 0x6323, 0x49CD, 0xA5, 0xFC, 0xC8, 0x42, 0x77, 0x16, 0x2C, 0x97, 100);
+
+//  Name:     System.Photo.FlashEnergyNumerator -- PKEY_Photo_FlashEnergyNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: FCAD3D3D-0858-400F-AAA3-2F66CCE2A6BC, 100
+//
+//  Numerator of PKEY_Photo_FlashEnergy
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyNumerator, 0xFCAD3D3D, 0x0858, 0x400F, 0xAA, 0xA3, 0x2F, 0x66, 0xCC, 0xE2, 0xA6, 0xBC, 100);
+
+//  Name:     System.Photo.FlashManufacturer -- PKEY_Photo_FlashManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AABAF6C9-E0C5-4719-8585-57B103E584FE, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashManufacturer, 0xAABAF6C9, 0xE0C5, 0x4719, 0x85, 0x85, 0x57, 0xB1, 0x03, 0xE5, 0x84, 0xFE, 100);
+
+//  Name:     System.Photo.FlashModel -- PKEY_Photo_FlashModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FE83BB35-4D1A-42E2-916B-06F3E1AF719E, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashModel, 0xFE83BB35, 0x4D1A, 0x42E2, 0x91, 0x6B, 0x06, 0xF3, 0xE1, 0xAF, 0x71, 0x9E, 100);
+
+//  Name:     System.Photo.FlashText -- PKEY_Photo_FlashText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6B8B68F6-200B-47EA-8D25-D8050F57339F, 100
+//  
+//  This is the user-friendly form of System.Photo.Flash.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashText, 0x6B8B68F6, 0x200B, 0x47EA, 0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F, 100);
+
+//  Name:     System.Photo.FNumber -- PKEY_Photo_FNumber
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33437
+//
+//  PropertyTagExifFNumber.  Calculated from PKEY_Photo_FNumberNumerator and PKEY_Photo_FNumberDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33437);
+
+//  Name:     System.Photo.FNumberDenominator -- PKEY_Photo_FNumberDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: E92A2496-223B-4463-A4E3-30EABBA79D80, 100
+//
+//  Denominator of PKEY_Photo_FNumber
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumberDenominator, 0xE92A2496, 0x223B, 0x4463, 0xA4, 0xE3, 0x30, 0xEA, 0xBB, 0xA7, 0x9D, 0x80, 100);
+
+//  Name:     System.Photo.FNumberNumerator -- PKEY_Photo_FNumberNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1B97738A-FDFC-462F-9D93-1957E08BE90C, 100
+//
+//  Numerator of PKEY_Photo_FNumber
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumberNumerator, 0x1B97738A, 0xFDFC, 0x462F, 0x9D, 0x93, 0x19, 0x57, 0xE0, 0x8B, 0xE9, 0x0C, 100);
+
+//  Name:     System.Photo.FocalLength -- PKEY_Photo_FocalLength
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37386
+//
+//  PropertyTagExifFocalLength.  Calculated from PKEY_Photo_FocalLengthNumerator and PKEY_Photo_FocalLengthDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLength, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37386);
+
+//  Name:     System.Photo.FocalLengthDenominator -- PKEY_Photo_FocalLengthDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 305BC615-DCA1-44A5-9FD4-10C0BA79412E, 100
+//
+//  Denominator of PKEY_Photo_FocalLength
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthDenominator, 0x305BC615, 0xDCA1, 0x44A5, 0x9F, 0xD4, 0x10, 0xC0, 0xBA, 0x79, 0x41, 0x2E, 100);
+
+//  Name:     System.Photo.FocalLengthInFilm -- PKEY_Photo_FocalLengthInFilm
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: A0E74609-B84D-4F49-B860-462BD9971F98, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthInFilm, 0xA0E74609, 0xB84D, 0x4F49, 0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98, 100);
+
+//  Name:     System.Photo.FocalLengthNumerator -- PKEY_Photo_FocalLengthNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 776B6B3B-1E3D-4B0C-9A0E-8FBAF2A8492A, 100
+//
+//  Numerator of PKEY_Photo_FocalLength
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthNumerator, 0x776B6B3B, 0x1E3D, 0x4B0C, 0x9A, 0x0E, 0x8F, 0xBA, 0xF2, 0xA8, 0x49, 0x2A, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolution -- PKEY_Photo_FocalPlaneXResolution
+//  Type:     Double -- VT_R8
+//  FormatID: CFC08D97-C6F7-4484-89DD-EBEF4356FE76, 100
+//  
+//  PropertyTagExifFocalXRes.  Calculated from PKEY_Photo_FocalPlaneXResolutionNumerator and 
+//  PKEY_Photo_FocalPlaneXResolutionDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolution, 0xCFC08D97, 0xC6F7, 0x4484, 0x89, 0xDD, 0xEB, 0xEF, 0x43, 0x56, 0xFE, 0x76, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolutionDenominator -- PKEY_Photo_FocalPlaneXResolutionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0933F3F5-4786-4F46-A8E8-D64DD37FA521, 100
+//
+//  Denominator of PKEY_Photo_FocalPlaneXResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionDenominator, 0x0933F3F5, 0x4786, 0x4F46, 0xA8, 0xE8, 0xD6, 0x4D, 0xD3, 0x7F, 0xA5, 0x21, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolutionNumerator -- PKEY_Photo_FocalPlaneXResolutionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: DCCB10AF-B4E2-4B88-95F9-031B4D5AB490, 100
+//
+//  Numerator of PKEY_Photo_FocalPlaneXResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionNumerator, 0xDCCB10AF, 0xB4E2, 0x4B88, 0x95, 0xF9, 0x03, 0x1B, 0x4D, 0x5A, 0xB4, 0x90, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolution -- PKEY_Photo_FocalPlaneYResolution
+//  Type:     Double -- VT_R8
+//  FormatID: 4FFFE4D0-914F-4AC4-8D6F-C9C61DE169B1, 100
+//  
+//  PropertyTagExifFocalYRes.  Calculated from PKEY_Photo_FocalPlaneYResolutionNumerator and 
+//  PKEY_Photo_FocalPlaneYResolutionDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolution, 0x4FFFE4D0, 0x914F, 0x4AC4, 0x8D, 0x6F, 0xC9, 0xC6, 0x1D, 0xE1, 0x69, 0xB1, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolutionDenominator -- PKEY_Photo_FocalPlaneYResolutionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1D6179A6-A876-4031-B013-3347B2B64DC8, 100
+//
+//  Denominator of PKEY_Photo_FocalPlaneYResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionDenominator, 0x1D6179A6, 0xA876, 0x4031, 0xB0, 0x13, 0x33, 0x47, 0xB2, 0xB6, 0x4D, 0xC8, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolutionNumerator -- PKEY_Photo_FocalPlaneYResolutionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A2E541C5-4440-4BA8-867E-75CFC06828CD, 100
+//
+//  Numerator of PKEY_Photo_FocalPlaneYResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionNumerator, 0xA2E541C5, 0x4440, 0x4BA8, 0x86, 0x7E, 0x75, 0xCF, 0xC0, 0x68, 0x28, 0xCD, 100);
+
+//  Name:     System.Photo.GainControl -- PKEY_Photo_GainControl
+//  Type:     Double -- VT_R8
+//  FormatID: FA304789-00C7-4D80-904A-1E4DCC7265AA, 100 (PropertyTagExifGainControl)
+//  
+//  This indicates the degree of overall image gain adjustment.
+//  
+//  Calculated from PKEY_Photo_GainControlNumerator and PKEY_Photo_GainControlDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControl, 0xFA304789, 0x00C7, 0x4D80, 0x90, 0x4A, 0x1E, 0x4D, 0xCC, 0x72, 0x65, 0xAA, 100);
+
+// Possible discrete values for PKEY_Photo_GainControl are:
+#define PHOTO_GAINCONTROL_NONE              0.0
+#define PHOTO_GAINCONTROL_LOWGAINUP         1.0
+#define PHOTO_GAINCONTROL_HIGHGAINUP        2.0
+#define PHOTO_GAINCONTROL_LOWGAINDOWN       3.0
+#define PHOTO_GAINCONTROL_HIGHGAINDOWN      4.0
+
+//  Name:     System.Photo.GainControlDenominator -- PKEY_Photo_GainControlDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 42864DFD-9DA4-4F77-BDED-4AAD7B256735, 100
+//
+//  Denominator of PKEY_Photo_GainControl
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlDenominator, 0x42864DFD, 0x9DA4, 0x4F77, 0xBD, 0xED, 0x4A, 0xAD, 0x7B, 0x25, 0x67, 0x35, 100);
+
+//  Name:     System.Photo.GainControlNumerator -- PKEY_Photo_GainControlNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 8E8ECF7C-B7B8-4EB8-A63F-0EE715C96F9E, 100
+//
+//  Numerator of PKEY_Photo_GainControl
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlNumerator, 0x8E8ECF7C, 0xB7B8, 0x4EB8, 0xA6, 0x3F, 0x0E, 0xE7, 0x15, 0xC9, 0x6F, 0x9E, 100);
+
+//  Name:     System.Photo.GainControlText -- PKEY_Photo_GainControlText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C06238B2-0BF9-4279-A723-25856715CB9D, 100
+//  
+//  This is the user-friendly form of System.Photo.GainControl.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlText, 0xC06238B2, 0x0BF9, 0x4279, 0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D, 100);
+
+//  Name:     System.Photo.ISOSpeed -- PKEY_Photo_ISOSpeed
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34855
+//
+//  PropertyTagExifISOSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ISOSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34855);
+
+//  Name:     System.Photo.LensManufacturer -- PKEY_Photo_LensManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E6DDCAF7-29C5-4F0A-9A68-D19412EC7090, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_LensManufacturer, 0xE6DDCAF7, 0x29C5, 0x4F0A, 0x9A, 0x68, 0xD1, 0x94, 0x12, 0xEC, 0x70, 0x90, 100);
+
+//  Name:     System.Photo.LensModel -- PKEY_Photo_LensModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E1277516-2B5F-4869-89B1-2E585BD38B7A, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_LensModel, 0xE1277516, 0x2B5F, 0x4869, 0x89, 0xB1, 0x2E, 0x58, 0x5B, 0xD3, 0x8B, 0x7A, 100);
+
+//  Name:     System.Photo.LightSource -- PKEY_Photo_LightSource
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37384
+//
+//  PropertyTagExifLightSource
+DEFINE_PROPERTYKEY(PKEY_Photo_LightSource, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37384);
+
+// Possible discrete values for PKEY_Photo_LightSource are:
+#define PHOTO_LIGHTSOURCE_UNKNOWN           0ul
+#define PHOTO_LIGHTSOURCE_DAYLIGHT          1ul
+#define PHOTO_LIGHTSOURCE_FLUORESCENT       2ul
+#define PHOTO_LIGHTSOURCE_TUNGSTEN          3ul
+#define PHOTO_LIGHTSOURCE_STANDARD_A        17ul
+#define PHOTO_LIGHTSOURCE_STANDARD_B        18ul
+#define PHOTO_LIGHTSOURCE_STANDARD_C        19ul
+#define PHOTO_LIGHTSOURCE_D55               20ul
+#define PHOTO_LIGHTSOURCE_D65               21ul
+#define PHOTO_LIGHTSOURCE_D75               22ul
+
+//  Name:     System.Photo.MakerNote -- PKEY_Photo_MakerNote
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: FA303353-B659-4052-85E9-BCAC79549B84, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_MakerNote, 0xFA303353, 0xB659, 0x4052, 0x85, 0xE9, 0xBC, 0xAC, 0x79, 0x54, 0x9B, 0x84, 100);
+
+//  Name:     System.Photo.MakerNoteOffset -- PKEY_Photo_MakerNoteOffset
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: 813F4124-34E6-4D17-AB3E-6B1F3C2247A1, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_MakerNoteOffset, 0x813F4124, 0x34E6, 0x4D17, 0xAB, 0x3E, 0x6B, 0x1F, 0x3C, 0x22, 0x47, 0xA1, 100);
+
+//  Name:     System.Photo.MaxAperture -- PKEY_Photo_MaxAperture
+//  Type:     Double -- VT_R8
+//  FormatID: 08F6D7C2-E3F2-44FC-AF1E-5AA5C81A2D3E, 100
+//
+//  Calculated from PKEY_Photo_MaxApertureNumerator and PKEY_Photo_MaxApertureDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxAperture, 0x08F6D7C2, 0xE3F2, 0x44FC, 0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E, 100);
+
+//  Name:     System.Photo.MaxApertureDenominator -- PKEY_Photo_MaxApertureDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C77724D4-601F-46C5-9B89-C53F93BCEB77, 100
+//
+//  Denominator of PKEY_Photo_MaxAperture
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureDenominator, 0xC77724D4, 0x601F, 0x46C5, 0x9B, 0x89, 0xC5, 0x3F, 0x93, 0xBC, 0xEB, 0x77, 100);
+
+//  Name:     System.Photo.MaxApertureNumerator -- PKEY_Photo_MaxApertureNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C107E191-A459-44C5-9AE6-B952AD4B906D, 100
+//
+//  Numerator of PKEY_Photo_MaxAperture
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureNumerator, 0xC107E191, 0xA459, 0x44C5, 0x9A, 0xE6, 0xB9, 0x52, 0xAD, 0x4B, 0x90, 0x6D, 100);
+
+//  Name:     System.Photo.MeteringMode -- PKEY_Photo_MeteringMode
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37383
+//
+//  PropertyTagExifMeteringMode
+DEFINE_PROPERTYKEY(PKEY_Photo_MeteringMode, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37383);
+
+// Possible discrete values for PKEY_Photo_MeteringMode are:
+#define PHOTO_METERINGMODE_UNKNOWN          0u
+#define PHOTO_METERINGMODE_AVERAGE          1u
+#define PHOTO_METERINGMODE_CENTER           2u
+#define PHOTO_METERINGMODE_SPOT             3u
+#define PHOTO_METERINGMODE_MULTISPOT        4u
+#define PHOTO_METERINGMODE_PATTERN          5u
+#define PHOTO_METERINGMODE_PARTIAL          6u
+
+//  Name:     System.Photo.MeteringModeText -- PKEY_Photo_MeteringModeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F628FD8C-7BA8-465A-A65B-C5AA79263A9E, 100
+//  
+//  This is the user-friendly form of System.Photo.MeteringMode.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_MeteringModeText, 0xF628FD8C, 0x7BA8, 0x465A, 0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E, 100);
+
+//  Name:     System.Photo.Orientation -- PKEY_Photo_Orientation
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 274 (PropertyTagOrientation)
+//  
+//  This is the image orientation viewed in terms of rows and columns.
+DEFINE_PROPERTYKEY(PKEY_Photo_Orientation, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 274);
+
+// Possible discrete values for PKEY_Photo_Orientation are:
+#define PHOTO_ORIENTATION_NORMAL            1u
+#define PHOTO_ORIENTATION_FLIPHORIZONTAL    2u
+#define PHOTO_ORIENTATION_ROTATE180         3u
+#define PHOTO_ORIENTATION_FLIPVERTICAL      4u
+#define PHOTO_ORIENTATION_TRANSPOSE         5u
+#define PHOTO_ORIENTATION_ROTATE270         6u
+#define PHOTO_ORIENTATION_TRANSVERSE        7u
+#define PHOTO_ORIENTATION_ROTATE90          8u
+
+//  Name:     System.Photo.OrientationText -- PKEY_Photo_OrientationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A9EA193C-C511-498A-A06B-58E2776DCC28, 100
+//  
+//  This is the user-friendly form of System.Photo.Orientation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_OrientationText, 0xA9EA193C, 0xC511, 0x498A, 0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28, 100);
+
+//  Name:     System.Photo.PhotometricInterpretation -- PKEY_Photo_PhotometricInterpretation
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 341796F1-1DF9-4B1C-A564-91BDEFA43877, 100
+//  
+//  This is the pixel composition. In JPEG compressed data, a JPEG marker is used 
+//  instead of this property.
+DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretation, 0x341796F1, 0x1DF9, 0x4B1C, 0xA5, 0x64, 0x91, 0xBD, 0xEF, 0xA4, 0x38, 0x77, 100);
+
+// Possible discrete values for PKEY_Photo_PhotometricInterpretation are:
+#define PHOTO_PHOTOMETRIC_RGB               2u
+#define PHOTO_PHOTOMETRIC_YCBCR             6u
+
+//  Name:     System.Photo.PhotometricInterpretationText -- PKEY_Photo_PhotometricInterpretationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 821437D6-9EAB-4765-A589-3B1CBBD22A61, 100
+//  
+//  This is the user-friendly form of System.Photo.PhotometricInterpretation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretationText, 0x821437D6, 0x9EAB, 0x4765, 0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61, 100);
+
+//  Name:     System.Photo.ProgramMode -- PKEY_Photo_ProgramMode
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D217F6D-3F6A-4825-B470-5F03CA2FBE9B, 100
+//  
+//  This is the class of the program used by the camera to set exposure when the 
+//  picture is taken.
+DEFINE_PROPERTYKEY(PKEY_Photo_ProgramMode, 0x6D217F6D, 0x3F6A, 0x4825, 0xB4, 0x70, 0x5F, 0x03, 0xCA, 0x2F, 0xBE, 0x9B, 100);
+
+// Possible discrete values for PKEY_Photo_ProgramMode are:
+#define PHOTO_PROGRAMMODE_NOTDEFINED        0ul
+#define PHOTO_PROGRAMMODE_MANUAL            1ul
+#define PHOTO_PROGRAMMODE_NORMAL            2ul
+#define PHOTO_PROGRAMMODE_APERTURE          3ul
+#define PHOTO_PROGRAMMODE_SHUTTER           4ul
+#define PHOTO_PROGRAMMODE_CREATIVE          5ul
+#define PHOTO_PROGRAMMODE_ACTION            6ul
+#define PHOTO_PROGRAMMODE_PORTRAIT          7ul
+#define PHOTO_PROGRAMMODE_LANDSCAPE         8ul
+
+//  Name:     System.Photo.ProgramModeText -- PKEY_Photo_ProgramModeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7FE3AA27-2648-42F3-89B0-454E5CB150C3, 100
+//  
+//  This is the user-friendly form of System.Photo.ProgramMode.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ProgramModeText, 0x7FE3AA27, 0x2648, 0x42F3, 0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3, 100);
+
+//  Name:     System.Photo.RelatedSoundFile -- PKEY_Photo_RelatedSoundFile
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 318A6B45-087F-4DC2-B8CC-05359551FC9E, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_RelatedSoundFile, 0x318A6B45, 0x087F, 0x4DC2, 0xB8, 0xCC, 0x05, 0x35, 0x95, 0x51, 0xFC, 0x9E, 100);
+
+//  Name:     System.Photo.Saturation -- PKEY_Photo_Saturation
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 49237325-A95A-4F67-B211-816B2D45D2E0, 100
+//  
+//  This indicates the direction of saturation processing applied by the camera when 
+//  the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Saturation, 0x49237325, 0xA95A, 0x4F67, 0xB2, 0x11, 0x81, 0x6B, 0x2D, 0x45, 0xD2, 0xE0, 100);
+
+// Possible discrete values for PKEY_Photo_Saturation are:
+#define PHOTO_SATURATION_NORMAL             0ul
+#define PHOTO_SATURATION_LOW                1ul
+#define PHOTO_SATURATION_HIGH               2ul
+
+//  Name:     System.Photo.SaturationText -- PKEY_Photo_SaturationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 61478C08-B600-4A84-BBE4-E99C45F0A072, 100
+//  
+//  This is the user-friendly form of System.Photo.Saturation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_SaturationText, 0x61478C08, 0xB600, 0x4A84, 0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72, 100);
+
+//  Name:     System.Photo.Sharpness -- PKEY_Photo_Sharpness
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: FC6976DB-8349-4970-AE97-B3C5316A08F0, 100
+//  
+//  This indicates the direction of sharpness processing applied by the camera when 
+//  the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Sharpness, 0xFC6976DB, 0x8349, 0x4970, 0xAE, 0x97, 0xB3, 0xC5, 0x31, 0x6A, 0x08, 0xF0, 100);
+
+// Possible discrete values for PKEY_Photo_Sharpness are:
+#define PHOTO_SHARPNESS_NORMAL              0ul
+#define PHOTO_SHARPNESS_SOFT                1ul
+#define PHOTO_SHARPNESS_HARD                2ul
+
+//  Name:     System.Photo.SharpnessText -- PKEY_Photo_SharpnessText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 51EC3F47-DD50-421D-8769-334F50424B1E, 100
+//  
+//  This is the user-friendly form of System.Photo.Sharpness.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_SharpnessText, 0x51EC3F47, 0xDD50, 0x421D, 0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E, 100);
+
+//  Name:     System.Photo.ShutterSpeed -- PKEY_Photo_ShutterSpeed
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37377
+//
+//  PropertyTagExifShutterSpeed.  Calculated from PKEY_Photo_ShutterSpeedNumerator and PKEY_Photo_ShutterSpeedDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37377);
+
+//  Name:     System.Photo.ShutterSpeedDenominator -- PKEY_Photo_ShutterSpeedDenominator
+//  Type:     Int32 -- VT_I4
+//  FormatID: E13D8975-81C7-4948-AE3F-37CAE11E8FF7, 100
+//
+//  Denominator of PKEY_Photo_ShutterSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedDenominator, 0xE13D8975, 0x81C7, 0x4948, 0xAE, 0x3F, 0x37, 0xCA, 0xE1, 0x1E, 0x8F, 0xF7, 100);
+
+//  Name:     System.Photo.ShutterSpeedNumerator -- PKEY_Photo_ShutterSpeedNumerator
+//  Type:     Int32 -- VT_I4
+//  FormatID: 16EA4042-D6F4-4BCA-8349-7C78D30FB333, 100
+//
+//  Numerator of PKEY_Photo_ShutterSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedNumerator, 0x16EA4042, 0xD6F4, 0x4BCA, 0x83, 0x49, 0x7C, 0x78, 0xD3, 0x0F, 0xB3, 0x33, 100);
+
+//  Name:     System.Photo.SubjectDistance -- PKEY_Photo_SubjectDistance
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37382
+//
+//  PropertyTagExifSubjectDist.  Calculated from PKEY_Photo_SubjectDistanceNumerator and PKEY_Photo_SubjectDistanceDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistance, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37382);
+
+//  Name:     System.Photo.SubjectDistanceDenominator -- PKEY_Photo_SubjectDistanceDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0C840A88-B043-466D-9766-D4B26DA3FA77, 100
+//
+//  Denominator of PKEY_Photo_SubjectDistance
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceDenominator, 0x0C840A88, 0xB043, 0x466D, 0x97, 0x66, 0xD4, 0xB2, 0x6D, 0xA3, 0xFA, 0x77, 100);
+
+//  Name:     System.Photo.SubjectDistanceNumerator -- PKEY_Photo_SubjectDistanceNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 8AF4961C-F526-43E5-AA81-DB768219178D, 100
+//
+//  Numerator of PKEY_Photo_SubjectDistance
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceNumerator, 0x8AF4961C, 0xF526, 0x43E5, 0xAA, 0x81, 0xDB, 0x76, 0x82, 0x19, 0x17, 0x8D, 100);
+
+//  Name:     System.Photo.TranscodedForSync -- PKEY_Photo_TranscodedForSync
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 9A8EBB75-6458-4E82-BACB-35C0095B03BB, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_TranscodedForSync, 0x9A8EBB75, 0x6458, 0x4E82, 0xBA, 0xCB, 0x35, 0xC0, 0x09, 0x5B, 0x03, 0xBB, 100);
+
+//  Name:     System.Photo.WhiteBalance -- PKEY_Photo_WhiteBalance
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: EE3D3D8A-5381-4CFA-B13B-AAF66B5F4EC9, 100
+//  
+//  This indicates the white balance mode set when the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalance, 0xEE3D3D8A, 0x5381, 0x4CFA, 0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9, 100);
+
+// Possible discrete values for PKEY_Photo_WhiteBalance are:
+#define PHOTO_WHITEBALANCE_AUTO             0ul
+#define PHOTO_WHITEBALANCE_MANUAL           1ul
+
+//  Name:     System.Photo.WhiteBalanceText -- PKEY_Photo_WhiteBalanceText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6336B95E-C7A7-426D-86FD-7AE3D39C84B4, 100
+//  
+//  This is the user-friendly form of System.Photo.WhiteBalance.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalanceText, 0x6336B95E, 0xC7A7, 0x426D, 0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4, 100);
+ 
+//-----------------------------------------------------------------------------
+// PropGroup properties
+
+//  Name:     System.PropGroup.Advanced -- PKEY_PropGroup_Advanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 900A403B-097B-4B95-8AE2-071FDAEEB118, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Advanced, 0x900A403B, 0x097B, 0x4B95, 0x8A, 0xE2, 0x07, 0x1F, 0xDA, 0xEE, 0xB1, 0x18, 100);
+
+//  Name:     System.PropGroup.Audio -- PKEY_PropGroup_Audio
+//  Type:     Null -- VT_NULL
+//  FormatID: 2804D469-788F-48AA-8570-71B9C187E138, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Audio, 0x2804D469, 0x788F, 0x48AA, 0x85, 0x70, 0x71, 0xB9, 0xC1, 0x87, 0xE1, 0x38, 100);
+
+//  Name:     System.PropGroup.Calendar -- PKEY_PropGroup_Calendar
+//  Type:     Null -- VT_NULL
+//  FormatID: 9973D2B5-BFD8-438A-BA94-5349B293181A, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Calendar, 0x9973D2B5, 0xBFD8, 0x438A, 0xBA, 0x94, 0x53, 0x49, 0xB2, 0x93, 0x18, 0x1A, 100);
+
+//  Name:     System.PropGroup.Camera -- PKEY_PropGroup_Camera
+//  Type:     Null -- VT_NULL
+//  FormatID: DE00DE32-547E-4981-AD4B-542F2E9007D8, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Camera, 0xDE00DE32, 0x547E, 0x4981, 0xAD, 0x4B, 0x54, 0x2F, 0x2E, 0x90, 0x07, 0xD8, 100);
+
+//  Name:     System.PropGroup.Contact -- PKEY_PropGroup_Contact
+//  Type:     Null -- VT_NULL
+//  FormatID: DF975FD3-250A-4004-858F-34E29A3E37AA, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Contact, 0xDF975FD3, 0x250A, 0x4004, 0x85, 0x8F, 0x34, 0xE2, 0x9A, 0x3E, 0x37, 0xAA, 100);
+
+//  Name:     System.PropGroup.Content -- PKEY_PropGroup_Content
+//  Type:     Null -- VT_NULL
+//  FormatID: D0DAB0BA-368A-4050-A882-6C010FD19A4F, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Content, 0xD0DAB0BA, 0x368A, 0x4050, 0xA8, 0x82, 0x6C, 0x01, 0x0F, 0xD1, 0x9A, 0x4F, 100);
+
+//  Name:     System.PropGroup.Description -- PKEY_PropGroup_Description
+//  Type:     Null -- VT_NULL
+//  FormatID: 8969B275-9475-4E00-A887-FF93B8B41E44, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Description, 0x8969B275, 0x9475, 0x4E00, 0xA8, 0x87, 0xFF, 0x93, 0xB8, 0xB4, 0x1E, 0x44, 100);
+
+//  Name:     System.PropGroup.FileSystem -- PKEY_PropGroup_FileSystem
+//  Type:     Null -- VT_NULL
+//  FormatID: E3A7D2C1-80FC-4B40-8F34-30EA111BDC2E, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_FileSystem, 0xE3A7D2C1, 0x80FC, 0x4B40, 0x8F, 0x34, 0x30, 0xEA, 0x11, 0x1B, 0xDC, 0x2E, 100);
+
+//  Name:     System.PropGroup.General -- PKEY_PropGroup_General
+//  Type:     Null -- VT_NULL
+//  FormatID: CC301630-B192-4C22-B372-9F4C6D338E07, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_General, 0xCC301630, 0xB192, 0x4C22, 0xB3, 0x72, 0x9F, 0x4C, 0x6D, 0x33, 0x8E, 0x07, 100);
+
+//  Name:     System.PropGroup.GPS -- PKEY_PropGroup_GPS
+//  Type:     Null -- VT_NULL
+//  FormatID: F3713ADA-90E3-4E11-AAE5-FDC17685B9BE, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_GPS, 0xF3713ADA, 0x90E3, 0x4E11, 0xAA, 0xE5, 0xFD, 0xC1, 0x76, 0x85, 0xB9, 0xBE, 100);
+
+//  Name:     System.PropGroup.Image -- PKEY_PropGroup_Image
+//  Type:     Null -- VT_NULL
+//  FormatID: E3690A87-0FA8-4A2A-9A9F-FCE8827055AC, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Image, 0xE3690A87, 0x0FA8, 0x4A2A, 0x9A, 0x9F, 0xFC, 0xE8, 0x82, 0x70, 0x55, 0xAC, 100);
+
+//  Name:     System.PropGroup.Media -- PKEY_PropGroup_Media
+//  Type:     Null -- VT_NULL
+//  FormatID: 61872CF7-6B5E-4B4B-AC2D-59DA84459248, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Media, 0x61872CF7, 0x6B5E, 0x4B4B, 0xAC, 0x2D, 0x59, 0xDA, 0x84, 0x45, 0x92, 0x48, 100);
+
+//  Name:     System.PropGroup.MediaAdvanced -- PKEY_PropGroup_MediaAdvanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 8859A284-DE7E-4642-99BA-D431D044B1EC, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_MediaAdvanced, 0x8859A284, 0xDE7E, 0x4642, 0x99, 0xBA, 0xD4, 0x31, 0xD0, 0x44, 0xB1, 0xEC, 100);
+
+//  Name:     System.PropGroup.Message -- PKEY_PropGroup_Message
+//  Type:     Null -- VT_NULL
+//  FormatID: 7FD7259D-16B4-4135-9F97-7C96ECD2FA9E, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Message, 0x7FD7259D, 0x16B4, 0x4135, 0x9F, 0x97, 0x7C, 0x96, 0xEC, 0xD2, 0xFA, 0x9E, 100);
+
+//  Name:     System.PropGroup.Music -- PKEY_PropGroup_Music
+//  Type:     Null -- VT_NULL
+//  FormatID: 68DD6094-7216-40F1-A029-43FE7127043F, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Music, 0x68DD6094, 0x7216, 0x40F1, 0xA0, 0x29, 0x43, 0xFE, 0x71, 0x27, 0x04, 0x3F, 100);
+
+//  Name:     System.PropGroup.Origin -- PKEY_PropGroup_Origin
+//  Type:     Null -- VT_NULL
+//  FormatID: 2598D2FB-5569-4367-95DF-5CD3A177E1A5, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Origin, 0x2598D2FB, 0x5569, 0x4367, 0x95, 0xDF, 0x5C, 0xD3, 0xA1, 0x77, 0xE1, 0xA5, 100);
+
+//  Name:     System.PropGroup.PhotoAdvanced -- PKEY_PropGroup_PhotoAdvanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 0CB2BF5A-9EE7-4A86-8222-F01E07FDADAF, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_PhotoAdvanced, 0x0CB2BF5A, 0x9EE7, 0x4A86, 0x82, 0x22, 0xF0, 0x1E, 0x07, 0xFD, 0xAD, 0xAF, 100);
+
+//  Name:     System.PropGroup.RecordedTV -- PKEY_PropGroup_RecordedTV
+//  Type:     Null -- VT_NULL
+//  FormatID: E7B33238-6584-4170-A5C0-AC25EFD9DA56, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_RecordedTV, 0xE7B33238, 0x6584, 0x4170, 0xA5, 0xC0, 0xAC, 0x25, 0xEF, 0xD9, 0xDA, 0x56, 100);
+
+//  Name:     System.PropGroup.Video -- PKEY_PropGroup_Video
+//  Type:     Null -- VT_NULL
+//  FormatID: BEBE0920-7671-4C54-A3EB-49FDDFC191EE, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Video, 0xBEBE0920, 0x7671, 0x4C54, 0xA3, 0xEB, 0x49, 0xFD, 0xDF, 0xC1, 0x91, 0xEE, 100);
+ 
+//-----------------------------------------------------------------------------
+// PropList properties
+
+
+
+//  Name:     System.PropList.ConflictPrompt -- PKEY_PropList_ConflictPrompt
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 11
+//  
+//  The list of properties to show in the file operation conflict resolution dialog. Properties with empty 
+//  values will not be displayed. Register under the regvalue of "ConflictPrompt".
+DEFINE_PROPERTYKEY(PKEY_PropList_ConflictPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 11);
+
+//  Name:     System.PropList.ExtendedTileInfo -- PKEY_PropList_ExtendedTileInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 9
+//  
+//  The list of properties to show in the listview on extended tiles. Register under the regvalue of 
+//  "ExtendedTileInfo".
+DEFINE_PROPERTYKEY(PKEY_PropList_ExtendedTileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 9);
+
+//  Name:     System.PropList.FileOperationPrompt -- PKEY_PropList_FileOperationPrompt
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 10
+//  
+//  The list of properties to show in the file operation confirmation dialog. Properties with empty values 
+//  will not be displayed. If this list is not specified, then the InfoTip property list is used instead. 
+//  Register under the regvalue of "FileOperationPrompt".
+DEFINE_PROPERTYKEY(PKEY_PropList_FileOperationPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 10);
+
+//  Name:     System.PropList.FullDetails -- PKEY_PropList_FullDetails
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 2
+//  
+//  The list of all the properties to show in the details page.  Property groups can be included in this list 
+//  in order to more easily organize the UI.  Register under the regvalue of "FullDetails".
+DEFINE_PROPERTYKEY(PKEY_PropList_FullDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 2);
+
+//  Name:     System.PropList.InfoTip -- PKEY_PropList_InfoTip
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 4 (PID_PROPLIST_INFOTIP)
+//  
+//  The list of properties to show in the infotip. Properties with empty values will not be displayed. Register 
+//  under the regvalue of "InfoTip".
+DEFINE_PROPERTYKEY(PKEY_PropList_InfoTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 4);
+
+//  Name:     System.PropList.NonPersonal -- PKEY_PropList_NonPersonal
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 49D1091F-082E-493F-B23F-D2308AA9668C, 100
+//  
+//  The list of properties that are considered 'non-personal'. When told to remove all non-personal properties 
+//  from a given file, the system will leave these particular properties untouched. Register under the regvalue 
+//  of "NonPersonal".
+DEFINE_PROPERTYKEY(PKEY_PropList_NonPersonal, 0x49D1091F, 0x082E, 0x493F, 0xB2, 0x3F, 0xD2, 0x30, 0x8A, 0xA9, 0x66, 0x8C, 100);
+
+//  Name:     System.PropList.PreviewDetails -- PKEY_PropList_PreviewDetails
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 8
+//
+//  The list of properties to display in the preview pane.  Register under the regvalue of "PreviewDetails".
+DEFINE_PROPERTYKEY(PKEY_PropList_PreviewDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 8);
+
+//  Name:     System.PropList.PreviewTitle -- PKEY_PropList_PreviewTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 6
+//  
+//  The one or two properties to display in the preview pane title section.  The optional second property is 
+//  displayed as a subtitle.  Register under the regvalue of "PreviewTitle".
+DEFINE_PROPERTYKEY(PKEY_PropList_PreviewTitle, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 6);
+
+//  Name:     System.PropList.QuickTip -- PKEY_PropList_QuickTip
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 5 (PID_PROPLIST_QUICKTIP)
+//  
+//  The list of properties to show in the infotip when the item is on a slow network. Properties with empty 
+//  values will not be displayed. Register under the regvalue of "QuickTip".
+DEFINE_PROPERTYKEY(PKEY_PropList_QuickTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 5);
+
+//  Name:     System.PropList.TileInfo -- PKEY_PropList_TileInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 3 (PID_PROPLIST_TILEINFO)
+//  
+//  The list of properties to show in the listview on tiles. Register under the regvalue of "TileInfo".
+DEFINE_PROPERTYKEY(PKEY_PropList_TileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 3);
+
+//  Name:     System.PropList.XPDetailsPanel -- PKEY_PropList_XPDetailsPanel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_WebView) F2275480-F782-4291-BD94-F13693513AEC, 0 (PID_DISPLAY_PROPERTIES)
+//
+//  The list of properties to display in the XP webview details panel. Obsolete.
+DEFINE_PROPERTYKEY(PKEY_PropList_XPDetailsPanel, 0xF2275480, 0xF782, 0x4291, 0xBD, 0x94, 0xF1, 0x36, 0x93, 0x51, 0x3A, 0xEC, 0);
+ 
+//-----------------------------------------------------------------------------
+// RecordedTV properties
+
+
+
+//  Name:     System.RecordedTV.ChannelNumber -- PKEY_RecordedTV_ChannelNumber
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 7
+//
+//  Example: 42
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_ChannelNumber, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 7);
+
+//  Name:     System.RecordedTV.Credits -- PKEY_RecordedTV_Credits
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 4
+//
+//  Example: "Don Messick/Frank Welker/Casey Kasem/Heather North/Nicole Jaffe;;;"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_Credits, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 4);
+
+//  Name:     System.RecordedTV.DateContentExpires -- PKEY_RecordedTV_DateContentExpires
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 15
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_DateContentExpires, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 15);
+
+//  Name:     System.RecordedTV.EpisodeName -- PKEY_RecordedTV_EpisodeName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 2
+//
+//  Example: "Nowhere to Hyde"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_EpisodeName, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 2);
+
+//  Name:     System.RecordedTV.IsATSCContent -- PKEY_RecordedTV_IsATSCContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 16
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsATSCContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 16);
+
+//  Name:     System.RecordedTV.IsClosedCaptioningAvailable -- PKEY_RecordedTV_IsClosedCaptioningAvailable
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 12
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsClosedCaptioningAvailable, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 12);
+
+//  Name:     System.RecordedTV.IsDTVContent -- PKEY_RecordedTV_IsDTVContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 17
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsDTVContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 17);
+
+//  Name:     System.RecordedTV.IsHDContent -- PKEY_RecordedTV_IsHDContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 18
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsHDContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 18);
+
+//  Name:     System.RecordedTV.IsRepeatBroadcast -- PKEY_RecordedTV_IsRepeatBroadcast
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 13
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsRepeatBroadcast, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 13);
+
+//  Name:     System.RecordedTV.IsSAP -- PKEY_RecordedTV_IsSAP
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 14
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsSAP, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 14);
+
+//  Name:     System.RecordedTV.NetworkAffiliation -- PKEY_RecordedTV_NetworkAffiliation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 2C53C813-FB63-4E22-A1AB-0B331CA1E273, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_NetworkAffiliation, 0x2C53C813, 0xFB63, 0x4E22, 0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73, 100);
+
+//  Name:     System.RecordedTV.OriginalBroadcastDate -- PKEY_RecordedTV_OriginalBroadcastDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 4684FE97-8765-4842-9C13-F006447B178C, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_OriginalBroadcastDate, 0x4684FE97, 0x8765, 0x4842, 0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C, 100);
+
+//  Name:     System.RecordedTV.ProgramDescription -- PKEY_RecordedTV_ProgramDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 3
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_ProgramDescription, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 3);
+
+//  Name:     System.RecordedTV.RecordingTime -- PKEY_RecordedTV_RecordingTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: A5477F61-7A82-4ECA-9DDE-98B69B2479B3, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_RecordingTime, 0xA5477F61, 0x7A82, 0x4ECA, 0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3, 100);
+
+//  Name:     System.RecordedTV.StationCallSign -- PKEY_RecordedTV_StationCallSign
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 5
+//
+//  Example: "TOONP"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationCallSign, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 5);
+
+//  Name:     System.RecordedTV.StationName -- PKEY_RecordedTV_StationName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 1B5439E7-EBA1-4AF8-BDD7-7AF1D4549493, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationName, 0x1B5439E7, 0xEBA1, 0x4AF8, 0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93, 100);
+ 
+//-----------------------------------------------------------------------------
+// Search properties
+
+
+
+//  Name:     System.Search.AutoSummary -- PKEY_Search_AutoSummary
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 2
+//
+//  General Summary of the document.
+DEFINE_PROPERTYKEY(PKEY_Search_AutoSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 2);
+
+//  Name:     System.Search.ContainerHash -- PKEY_Search_ContainerHash
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BCEEE283-35DF-4D53-826A-F36A3EEFC6BE, 100
+//
+//  Hash code used to identify attachments to be deleted based on a common container url
+DEFINE_PROPERTYKEY(PKEY_Search_ContainerHash, 0xBCEEE283, 0x35DF, 0x4D53, 0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE, 100);
+
+//  Name:     System.Search.Contents -- PKEY_Search_Contents
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 19 (PID_STG_CONTENTS)
+//  
+//  The contents of the item. This property is for query restrictions only; it cannot be retrieved in a 
+//  query result. The Indexing Service friendly name is 'contents'.
+DEFINE_PROPERTYKEY(PKEY_Search_Contents, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 19);
+
+//  Name:     System.Search.EntryID -- PKEY_Search_EntryID
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 5 (PROPID_QUERY_WORKID)
+//  
+//  The entry ID for an item within a given catalog in the Windows Search Index.
+//  This value may be recycled, and therefore is not considered unique over time.
+DEFINE_PROPERTYKEY(PKEY_Search_EntryID, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 5);
+
+//  Name:     System.Search.GatherTime -- PKEY_Search_GatherTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 8
+//
+//  The Datetime that the Windows Search Gatherer process last pushed properties of this document to the Windows Search Gatherer Plugins.
+DEFINE_PROPERTYKEY(PKEY_Search_GatherTime, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 8);
+
+//  Name:     System.Search.IsClosedDirectory -- PKEY_Search_IsClosedDirectory
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 23
+//
+//  If this property is emitted with a value of TRUE, then it indicates that this URL's last modified time applies to all of it's children, and if this URL is deleted then all of it's children are deleted as well.  For example, this would be emitted as TRUE when emitting the URL of an email so that all attachments are tied to the last modified time of that email.
+DEFINE_PROPERTYKEY(PKEY_Search_IsClosedDirectory, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 23);
+
+//  Name:     System.Search.IsFullyContained -- PKEY_Search_IsFullyContained
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 24
+//
+//  Any child URL of a URL which has System.Search.IsClosedDirectory=TRUE must emit System.Search.IsFullyContained=TRUE.  This ensures that the URL is not deleted at the end of a crawl because it hasn't been visited (which is the normal mechanism for detecting deletes).  For example an email attachment would emit this property
+DEFINE_PROPERTYKEY(PKEY_Search_IsFullyContained, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 24);
+
+//  Name:     System.Search.QueryFocusedSummary -- PKEY_Search_QueryFocusedSummary
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 3
+//
+//  Query Focused Summary of the document.
+DEFINE_PROPERTYKEY(PKEY_Search_QueryFocusedSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 3);
+
+//  Name:     System.Search.Rank -- PKEY_Search_Rank
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 3 (PROPID_QUERY_RANK)
+//  
+//  Relevance rank of row. Ranges from 0-1000. Larger numbers = better matches.  Query-time only, not 
+//  defined in Search schema, retrievable but not searchable.
+DEFINE_PROPERTYKEY(PKEY_Search_Rank, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 3);
+
+//  Name:     System.Search.Store -- PKEY_Search_Store
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A06992B3-8CAF-4ED7-A547-B259E32AC9FC, 100
+//
+//  The identifier for the protocol handler that produced this item. (E.g. MAPI, CSC, FILE etc.)
+DEFINE_PROPERTYKEY(PKEY_Search_Store, 0xA06992B3, 0x8CAF, 0x4ED7, 0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC, 100);
+
+//  Name:     System.Search.UrlToIndex -- PKEY_Search_UrlToIndex
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 2
+//
+//  This property should be emitted by a container IFilter for each child URL within the container.  The children will eventually be crawled by the indexer if they are within scope.
+DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndex, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 2);
+
+//  Name:     System.Search.UrlToIndexWithModificationTime -- PKEY_Search_UrlToIndexWithModificationTime
+//  Type:     Multivalue Any -- VT_VECTOR | VT_NULL  (For variants: VT_ARRAY | VT_NULL)
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 12
+//
+//  This property is the same as System.Search.UrlToIndex except that it includes the time the URL was last modified.  This is an optimization for the indexer as it doesn't have to call back into the protocol handler to ask for this information to determine if the content needs to be indexed again.  The property is a vector with two elements, a VT_LPWSTR with the URL and a VT_FILETIME for the last modified time.
+DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndexWithModificationTime, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 12);
+ 
+//-----------------------------------------------------------------------------
+// Shell properties
+
+
+
+//  Name:     System.DescriptionID -- PKEY_DescriptionID
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 2 (PID_DESCRIPTIONID)
+//
+//  The contents of a SHDESCRIPTIONID structure as a buffer of bytes.
+DEFINE_PROPERTYKEY(PKEY_DescriptionID, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 2);
+
+//  Name:     System.Link.TargetSFGAOFlagsStrings -- PKEY_Link_TargetSFGAOFlagsStrings
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 3
+//  
+//  Expresses the SFGAO flags of a link as string values and is used as a query optimization.  See 
+//  PKEY_Shell_SFGAOFlagsStrings for possible values of this.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 3);
+
+//  Name:     System.Link.TargetUrl -- PKEY_Link_TargetUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 2  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_TargetUrl, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 2);
+
+//  Name:     System.Shell.SFGAOFlagsStrings -- PKEY_Shell_SFGAOFlagsStrings
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 2
+//
+//  Expresses the SFGAO flags as string values and is used as a query optimization.
+DEFINE_PROPERTYKEY(PKEY_Shell_SFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 2);
+
+// Possible discrete values for PKEY_Shell_SFGAOFlagsStrings are:
+#define SFGAOSTR_FILESYS                    L"filesys"               // SFGAO_FILESYSTEM
+#define SFGAOSTR_FILEANC                    L"fileanc"               // SFGAO_FILESYSANCESTOR
+#define SFGAOSTR_STORAGEANC                 L"storageanc"               // SFGAO_STORAGEANCESTOR
+#define SFGAOSTR_STREAM                     L"stream"               // SFGAO_STREAM
+#define SFGAOSTR_LINK                       L"link"               // SFGAO_LINK
+#define SFGAOSTR_HIDDEN                     L"hidden"               // SFGAO_HIDDEN
+#define SFGAOSTR_FOLDER                     L"folder"               // SFGAO_FOLDER
+#define SFGAOSTR_NONENUM                    L"nonenum"               // SFGAO_NONENUMERATED
+#define SFGAOSTR_BROWSABLE                  L"browsable"               // SFGAO_BROWSABLE
+ 
+//-----------------------------------------------------------------------------
+// Software properties
+
+
+
+//  Name:     System.Software.DateLastUsed -- PKEY_Software_DateLastUsed
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 841E4F90-FF59-4D16-8947-E81BBFFAB36D, 16
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Software_DateLastUsed, 0x841E4F90, 0xFF59, 0x4D16, 0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D, 16);
+
+//  Name:     System.Software.ProductName -- PKEY_Software_ProductName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 7
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Software_ProductName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 7);
+ 
+//-----------------------------------------------------------------------------
+// Sync properties
+
+
+
+//  Name:     System.Sync.Comments -- PKEY_Sync_Comments
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 13
+DEFINE_PROPERTYKEY(PKEY_Sync_Comments, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 13);
+
+//  Name:     System.Sync.ConflictDescription -- PKEY_Sync_ConflictDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 4
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictDescription, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 4);
+
+//  Name:     System.Sync.ConflictFirstLocation -- PKEY_Sync_ConflictFirstLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 6
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictFirstLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 6);
+
+//  Name:     System.Sync.ConflictSecondLocation -- PKEY_Sync_ConflictSecondLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 7
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictSecondLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 7);
+
+//  Name:     System.Sync.HandlerCollectionID -- PKEY_Sync_HandlerCollectionID
+//  Type:     Guid -- VT_CLSID
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 2
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerCollectionID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 2);
+
+//  Name:     System.Sync.HandlerID -- PKEY_Sync_HandlerID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 3
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 3);
+
+//  Name:     System.Sync.HandlerName -- PKEY_Sync_HandlerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 2
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 2);
+
+//  Name:     System.Sync.HandlerType -- PKEY_Sync_HandlerType
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 8
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerType, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 8);
+
+// Possible discrete values for PKEY_Sync_HandlerType are:
+#define SYNC_HANDLERTYPE_OTHER              0ul
+#define SYNC_HANDLERTYPE_PROGRAMS           1ul
+#define SYNC_HANDLERTYPE_DEVICES            2ul
+#define SYNC_HANDLERTYPE_FOLDERS            3ul
+#define SYNC_HANDLERTYPE_WEBSERVICES        4ul
+#define SYNC_HANDLERTYPE_COMPUTERS          5ul
+
+//  Name:     System.Sync.HandlerTypeLabel -- PKEY_Sync_HandlerTypeLabel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 9
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerTypeLabel, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 9);
+
+//  Name:     System.Sync.ItemID -- PKEY_Sync_ItemID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 6
+DEFINE_PROPERTYKEY(PKEY_Sync_ItemID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 6);
+
+//  Name:     System.Sync.ItemName -- PKEY_Sync_ItemName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 3
+DEFINE_PROPERTYKEY(PKEY_Sync_ItemName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 3);
+ 
+//-----------------------------------------------------------------------------
+// Task properties
+
+//  Name:     System.Task.BillingInformation -- PKEY_Task_BillingInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D37D52C6-261C-4303-82B3-08B926AC6F12, 100
+DEFINE_PROPERTYKEY(PKEY_Task_BillingInformation, 0xD37D52C6, 0x261C, 0x4303, 0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12, 100);
+
+//  Name:     System.Task.CompletionStatus -- PKEY_Task_CompletionStatus
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 084D8A0A-E6D5-40DE-BF1F-C8820E7C877C, 100
+DEFINE_PROPERTYKEY(PKEY_Task_CompletionStatus, 0x084D8A0A, 0xE6D5, 0x40DE, 0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C, 100);
+
+//  Name:     System.Task.Owner -- PKEY_Task_Owner
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 08C7CC5F-60F2-4494-AD75-55E3E0B5ADD0, 100
+DEFINE_PROPERTYKEY(PKEY_Task_Owner, 0x08C7CC5F, 0x60F2, 0x4494, 0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0, 100);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Video properties
+
+//  Name:     System.Video.Compression -- PKEY_Video_Compression
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 10 (PIDVSI_COMPRESSION)
+//
+//  Indicates the level of compression for the video stream.  "Compression".
+DEFINE_PROPERTYKEY(PKEY_Video_Compression, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10);
+
+//  Name:     System.Video.Director -- PKEY_Video_Director
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 20 (PIDMSI_DIRECTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Video_Director, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 20);
+
+//  Name:     System.Video.EncodingBitrate -- PKEY_Video_EncodingBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 8 (PIDVSI_DATA_RATE)
+//
+//  Indicates the data rate in "bits per second" for the video stream. "DataRate".
+DEFINE_PROPERTYKEY(PKEY_Video_EncodingBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8);
+
+//  Name:     System.Video.FourCC -- PKEY_Video_FourCC
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 44
+//  
+//  Indicates the 4CC for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FourCC, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 44);
+
+//  Name:     System.Video.FrameHeight -- PKEY_Video_FrameHeight
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 4
+//
+//  Indicates the frame height for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FrameHeight, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+//  Name:     System.Video.FrameRate -- PKEY_Video_FrameRate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 6 (PIDVSI_FRAME_RATE)
+//
+//  Indicates the frame rate in "frames per millisecond" for the video stream.  "FrameRate".
+DEFINE_PROPERTYKEY(PKEY_Video_FrameRate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Video.FrameWidth -- PKEY_Video_FrameWidth
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 3
+//
+//  Indicates the frame width for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FrameWidth, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Video.HorizontalAspectRatio -- PKEY_Video_HorizontalAspectRatio
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 42
+//  
+//  Indicates the horizontal portion of the aspect ratio. The X portion of XX:YY,
+//  like 16:9.
+DEFINE_PROPERTYKEY(PKEY_Video_HorizontalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 42);
+
+//  Name:     System.Video.SampleSize -- PKEY_Video_SampleSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 9 (PIDVSI_SAMPLE_SIZE)
+//
+//  Indicates the sample size in bits for the video stream.  "SampleSize".
+DEFINE_PROPERTYKEY(PKEY_Video_SampleSize, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+//  Name:     System.Video.StreamName -- PKEY_Video_StreamName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 2 (PIDVSI_STREAM_NAME)
+//
+//  Indicates the name for the video stream. "StreamName".
+DEFINE_PROPERTYKEY(PKEY_Video_StreamName, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2);
+
+//  Name:     System.Video.StreamNumber -- PKEY_Video_StreamNumber
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 11 (PIDVSI_STREAM_NUMBER)
+//
+//  "Stream Number".
+DEFINE_PROPERTYKEY(PKEY_Video_StreamNumber, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11);
+
+//  Name:     System.Video.TotalBitrate -- PKEY_Video_TotalBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 43 (PIDVSI_TOTAL_BITRATE)
+//
+//  Indicates the total data rate in "bits per second" for all video and audio streams.
+DEFINE_PROPERTYKEY(PKEY_Video_TotalBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 43);
+
+//  Name:     System.Video.VerticalAspectRatio -- PKEY_Video_VerticalAspectRatio
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 45
+//  
+//  Indicates the vertical portion of the aspect ratio. The Y portion of 
+//  XX:YY, like 16:9.
+DEFINE_PROPERTYKEY(PKEY_Video_VerticalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 45);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Volume properties
+
+//  Name:     System.Volume.FileSystem -- PKEY_Volume_FileSystem
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 4 (PID_VOLUME_FILESYSTEM)  (Filesystem Volume Properties)
+//
+//  Indicates the filesystem of the volume.
+DEFINE_PROPERTYKEY(PKEY_Volume_FileSystem, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4);
+
+//  Name:     System.Volume.IsMappedDrive -- PKEY_Volume_IsMappedDrive
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 149C0B69-2C2D-48FC-808F-D318D78C4636, 2
+DEFINE_PROPERTYKEY(PKEY_Volume_IsMappedDrive, 0x149C0B69, 0x2C2D, 0x48FC, 0x80, 0x8F, 0xD3, 0x18, 0xD7, 0x8C, 0x46, 0x36, 2);
+
+//  Name:     System.Volume.IsRoot -- PKEY_Volume_IsRoot
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 10  (Filesystem Volume Properties)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Volume_IsRoot, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 10);
+
+#endif  /* _INC_PROPKEY */
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h b/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h
new file mode 100644
index 000000000..65fcb8779
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h
@@ -0,0 +1,26 @@
+#ifndef PID_FIRST_USABLE
+#define PID_FIRST_USABLE 2
+#endif
+
+#ifndef REFPROPERTYKEY
+#ifdef __cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY &
+#else // !__cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST
+#endif // __cplusplus
+#endif //REFPROPERTYKEY
+
+#ifdef DEFINE_PROPERTYKEY
+#undef DEFINE_PROPERTYKEY
+#endif
+
+#ifdef INITGUID
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name
+#endif // INITGUID
+
+#ifndef IsEqualPropertyKey
+#define IsEqualPropertyKey(a, b)   (((a).pid == (b).pid) && IsEqualIID((a).fmtid, (b).fmtid) )
+#endif  // IsEqualPropertyKey
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/propsys.h b/portaudio/src/hostapi/wasapi/mingw-include/propsys.h
new file mode 100644
index 000000000..5c1312c07
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/propsys.h
@@ -0,0 +1,3605 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for propsys.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __propsys_h__
+#define __propsys_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IInitializeWithFile_FWD_DEFINED__
+#define __IInitializeWithFile_FWD_DEFINED__
+typedef interface IInitializeWithFile IInitializeWithFile;
+#endif 	/* __IInitializeWithFile_FWD_DEFINED__ */
+
+
+#ifndef __IInitializeWithStream_FWD_DEFINED__
+#define __IInitializeWithStream_FWD_DEFINED__
+typedef interface IInitializeWithStream IInitializeWithStream;
+#endif 	/* __IInitializeWithStream_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStore_FWD_DEFINED__
+#define __IPropertyStore_FWD_DEFINED__
+typedef interface IPropertyStore IPropertyStore;
+#endif 	/* __IPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __INamedPropertyStore_FWD_DEFINED__
+#define __INamedPropertyStore_FWD_DEFINED__
+typedef interface INamedPropertyStore INamedPropertyStore;
+#endif 	/* __INamedPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __IObjectWithPropertyKey_FWD_DEFINED__
+#define __IObjectWithPropertyKey_FWD_DEFINED__
+typedef interface IObjectWithPropertyKey IObjectWithPropertyKey;
+#endif 	/* __IObjectWithPropertyKey_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyChange_FWD_DEFINED__
+#define __IPropertyChange_FWD_DEFINED__
+typedef interface IPropertyChange IPropertyChange;
+#endif 	/* __IPropertyChange_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyChangeArray_FWD_DEFINED__
+#define __IPropertyChangeArray_FWD_DEFINED__
+typedef interface IPropertyChangeArray IPropertyChangeArray;
+#endif 	/* __IPropertyChangeArray_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCapabilities_FWD_DEFINED__
+#define __IPropertyStoreCapabilities_FWD_DEFINED__
+typedef interface IPropertyStoreCapabilities IPropertyStoreCapabilities;
+#endif 	/* __IPropertyStoreCapabilities_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCache_FWD_DEFINED__
+#define __IPropertyStoreCache_FWD_DEFINED__
+typedef interface IPropertyStoreCache IPropertyStoreCache;
+#endif 	/* __IPropertyStoreCache_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyEnumType_FWD_DEFINED__
+#define __IPropertyEnumType_FWD_DEFINED__
+typedef interface IPropertyEnumType IPropertyEnumType;
+#endif 	/* __IPropertyEnumType_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyEnumTypeList_FWD_DEFINED__
+#define __IPropertyEnumTypeList_FWD_DEFINED__
+typedef interface IPropertyEnumTypeList IPropertyEnumTypeList;
+#endif 	/* __IPropertyEnumTypeList_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescription_FWD_DEFINED__
+#define __IPropertyDescription_FWD_DEFINED__
+typedef interface IPropertyDescription IPropertyDescription;
+#endif 	/* __IPropertyDescription_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionAliasInfo_FWD_DEFINED__
+#define __IPropertyDescriptionAliasInfo_FWD_DEFINED__
+typedef interface IPropertyDescriptionAliasInfo IPropertyDescriptionAliasInfo;
+#endif 	/* __IPropertyDescriptionAliasInfo_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionSearchInfo_FWD_DEFINED__
+#define __IPropertyDescriptionSearchInfo_FWD_DEFINED__
+typedef interface IPropertyDescriptionSearchInfo IPropertyDescriptionSearchInfo;
+#endif 	/* __IPropertyDescriptionSearchInfo_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySystem_FWD_DEFINED__
+#define __IPropertySystem_FWD_DEFINED__
+typedef interface IPropertySystem IPropertySystem;
+#endif 	/* __IPropertySystem_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionList_FWD_DEFINED__
+#define __IPropertyDescriptionList_FWD_DEFINED__
+typedef interface IPropertyDescriptionList IPropertyDescriptionList;
+#endif 	/* __IPropertyDescriptionList_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreFactory_FWD_DEFINED__
+#define __IPropertyStoreFactory_FWD_DEFINED__
+typedef interface IPropertyStoreFactory IPropertyStoreFactory;
+#endif 	/* __IPropertyStoreFactory_FWD_DEFINED__ */
+
+
+#ifndef __IDelayedPropertyStoreFactory_FWD_DEFINED__
+#define __IDelayedPropertyStoreFactory_FWD_DEFINED__
+typedef interface IDelayedPropertyStoreFactory IDelayedPropertyStoreFactory;
+#endif 	/* __IDelayedPropertyStoreFactory_FWD_DEFINED__ */
+
+
+#ifndef __IPersistSerializedPropStorage_FWD_DEFINED__
+#define __IPersistSerializedPropStorage_FWD_DEFINED__
+typedef interface IPersistSerializedPropStorage IPersistSerializedPropStorage;
+#endif 	/* __IPersistSerializedPropStorage_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySystemChangeNotify_FWD_DEFINED__
+#define __IPropertySystemChangeNotify_FWD_DEFINED__
+typedef interface IPropertySystemChangeNotify IPropertySystemChangeNotify;
+#endif 	/* __IPropertySystemChangeNotify_FWD_DEFINED__ */
+
+
+#ifndef __ICreateObject_FWD_DEFINED__
+#define __ICreateObject_FWD_DEFINED__
+typedef interface ICreateObject ICreateObject;
+#endif 	/* __ICreateObject_FWD_DEFINED__ */
+
+
+#ifndef __InMemoryPropertyStore_FWD_DEFINED__
+#define __InMemoryPropertyStore_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class InMemoryPropertyStore InMemoryPropertyStore;
+#else
+typedef struct InMemoryPropertyStore InMemoryPropertyStore;
+#endif /* __cplusplus */
+
+#endif 	/* __InMemoryPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __PropertySystem_FWD_DEFINED__
+#define __PropertySystem_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class PropertySystem PropertySystem;
+#else
+typedef struct PropertySystem PropertySystem;
+#endif /* __cplusplus */
+
+#endif 	/* __PropertySystem_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oleidl.h"
+#include "ocidl.h"
+#include "shtypes.h"
+#include "structuredquery.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_propsys_0000_0000 */
+/* [local] */ 
+
+#ifndef PSSTDAPI
+#if defined(_PROPSYS_)
+#define PSSTDAPI          STDAPI
+#define PSSTDAPI_(type)   STDAPI_(type)
+#else
+#define PSSTDAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
+#define PSSTDAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
+#endif
+#endif // PSSTDAPI
+#if 0
+typedef PROPERTYKEY *REFPROPERTYKEY;
+
+#endif // 0
+#include <propkeydef.h>
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IInitializeWithFile_INTERFACE_DEFINED__
+#define __IInitializeWithFile_INTERFACE_DEFINED__
+
+/* interface IInitializeWithFile */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IInitializeWithFile;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("b7d14566-0509-4cce-a71f-0a554233bd9b")
+    IInitializeWithFile : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [string][in] */ __RPC__in LPCWSTR pszFilePath,
+            /* [in] */ DWORD grfMode) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IInitializeWithFileVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInitializeWithFile * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInitializeWithFile * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInitializeWithFile * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IInitializeWithFile * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszFilePath,
+            /* [in] */ DWORD grfMode);
+        
+        END_INTERFACE
+    } IInitializeWithFileVtbl;
+
+    interface IInitializeWithFile
+    {
+        CONST_VTBL struct IInitializeWithFileVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInitializeWithFile_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInitializeWithFile_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInitializeWithFile_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInitializeWithFile_Initialize(This,pszFilePath,grfMode)	\
+    ( (This)->lpVtbl -> Initialize(This,pszFilePath,grfMode) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IInitializeWithFile_INTERFACE_DEFINED__ */
+
+
+#ifndef __IInitializeWithStream_INTERFACE_DEFINED__
+#define __IInitializeWithStream_INTERFACE_DEFINED__
+
+/* interface IInitializeWithStream */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IInitializeWithStream;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("b824b49d-22ac-4161-ac8a-9916e8fa3f7f")
+    IInitializeWithStream : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ IStream *pstream,
+            /* [in] */ DWORD grfMode) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IInitializeWithStreamVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInitializeWithStream * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInitializeWithStream * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInitializeWithStream * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IInitializeWithStream * This,
+            /* [in] */ IStream *pstream,
+            /* [in] */ DWORD grfMode);
+        
+        END_INTERFACE
+    } IInitializeWithStreamVtbl;
+
+    interface IInitializeWithStream
+    {
+        CONST_VTBL struct IInitializeWithStreamVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInitializeWithStream_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInitializeWithStream_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInitializeWithStream_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInitializeWithStream_Initialize(This,pstream,grfMode)	\
+    ( (This)->lpVtbl -> Initialize(This,pstream,grfMode) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_RemoteInitialize_Proxy( 
+    IInitializeWithStream * This,
+    /* [in] */ __RPC__in_opt IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+
+void __RPC_STUB IInitializeWithStream_RemoteInitialize_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IInitializeWithStream_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStore_INTERFACE_DEFINED__
+#define __IPropertyStore_INTERFACE_DEFINED__
+
+/* interface IPropertyStore */
+/* [unique][object][helpstring][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStore;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99")
+    IPropertyStore : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out DWORD *cProps) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetValue( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Commit( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStore * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStore * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyStore * This,
+            /* [out] */ __RPC__out DWORD *cProps);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyStore * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *Commit )( 
+            IPropertyStore * This);
+        
+        END_INTERFACE
+    } IPropertyStoreVtbl;
+
+    interface IPropertyStore
+    {
+        CONST_VTBL struct IPropertyStoreVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStore_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStore_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStore_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStore_GetCount(This,cProps)	\
+    ( (This)->lpVtbl -> GetCount(This,cProps) ) 
+
+#define IPropertyStore_GetAt(This,iProp,pkey)	\
+    ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) 
+
+#define IPropertyStore_GetValue(This,key,pv)	\
+    ( (This)->lpVtbl -> GetValue(This,key,pv) ) 
+
+#define IPropertyStore_SetValue(This,key,propvar)	\
+    ( (This)->lpVtbl -> SetValue(This,key,propvar) ) 
+
+#define IPropertyStore_Commit(This)	\
+    ( (This)->lpVtbl -> Commit(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStore_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0003 */
+/* [local] */ 
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertyStore *LPPROPERTYSTORE;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_s_ifspec;
+
+#ifndef __INamedPropertyStore_INTERFACE_DEFINED__
+#define __INamedPropertyStore_INTERFACE_DEFINED__
+
+/* interface INamedPropertyStore */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_INamedPropertyStore;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("71604b0f-97b0-4764-8577-2f13e98a1422")
+    INamedPropertyStore : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetNamedValue( 
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetNamedValue( 
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNameCount( 
+            /* [out] */ __RPC__out DWORD *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNameAt( 
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__deref_out_opt BSTR *pbstrName) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedPropertyStoreVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedPropertyStore * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedPropertyStore * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedPropertyStore * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNamedValue )( 
+            INamedPropertyStore * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetNamedValue )( 
+            INamedPropertyStore * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNameCount )( 
+            INamedPropertyStore * This,
+            /* [out] */ __RPC__out DWORD *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNameAt )( 
+            INamedPropertyStore * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__deref_out_opt BSTR *pbstrName);
+        
+        END_INTERFACE
+    } INamedPropertyStoreVtbl;
+
+    interface INamedPropertyStore
+    {
+        CONST_VTBL struct INamedPropertyStoreVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedPropertyStore_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedPropertyStore_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedPropertyStore_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedPropertyStore_GetNamedValue(This,pszName,ppropvar)	\
+    ( (This)->lpVtbl -> GetNamedValue(This,pszName,ppropvar) ) 
+
+#define INamedPropertyStore_SetNamedValue(This,pszName,propvar)	\
+    ( (This)->lpVtbl -> SetNamedValue(This,pszName,propvar) ) 
+
+#define INamedPropertyStore_GetNameCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetNameCount(This,pdwCount) ) 
+
+#define INamedPropertyStore_GetNameAt(This,iProp,pbstrName)	\
+    ( (This)->lpVtbl -> GetNameAt(This,iProp,pbstrName) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedPropertyStore_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0004 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagGETPROPERTYSTOREFLAGS
+    {	GPS_DEFAULT	= 0,
+	GPS_HANDLERPROPERTIESONLY	= 0x1,
+	GPS_READWRITE	= 0x2,
+	GPS_TEMPORARY	= 0x4,
+	GPS_FASTPROPERTIESONLY	= 0x8,
+	GPS_OPENSLOWITEM	= 0x10,
+	GPS_DELAYCREATION	= 0x20,
+	GPS_BESTEFFORT	= 0x40,
+	GPS_MASK_VALID	= 0x7f
+    } ;
+typedef int GETPROPERTYSTOREFLAGS;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_s_ifspec;
+
+#ifndef __IObjectWithPropertyKey_INTERFACE_DEFINED__
+#define __IObjectWithPropertyKey_INTERFACE_DEFINED__
+
+/* interface IObjectWithPropertyKey */
+/* [uuid][object] */ 
+
+
+EXTERN_C const IID IID_IObjectWithPropertyKey;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("fc0ca0a7-c316-4fd2-9031-3e628e6d4f23")
+    IObjectWithPropertyKey : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetPropertyKey( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( 
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IObjectWithPropertyKeyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IObjectWithPropertyKey * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IObjectWithPropertyKey * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IObjectWithPropertyKey * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( 
+            IObjectWithPropertyKey * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IObjectWithPropertyKey * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        END_INTERFACE
+    } IObjectWithPropertyKeyVtbl;
+
+    interface IObjectWithPropertyKey
+    {
+        CONST_VTBL struct IObjectWithPropertyKeyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IObjectWithPropertyKey_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IObjectWithPropertyKey_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IObjectWithPropertyKey_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IObjectWithPropertyKey_SetPropertyKey(This,key)	\
+    ( (This)->lpVtbl -> SetPropertyKey(This,key) ) 
+
+#define IObjectWithPropertyKey_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IObjectWithPropertyKey_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0005 */
+/* [local] */ 
+
+typedef /* [v1_enum] */ 
+enum tagPKA_FLAGS
+    {	PKA_SET	= 0,
+	PKA_APPEND	= ( PKA_SET + 1 ) ,
+	PKA_DELETE	= ( PKA_APPEND + 1 ) 
+    } 	PKA_FLAGS;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_s_ifspec;
+
+#ifndef __IPropertyChange_INTERFACE_DEFINED__
+#define __IPropertyChange_INTERFACE_DEFINED__
+
+/* interface IPropertyChange */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyChange;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("f917bc8a-1bba-4478-a245-1bde03eb9431")
+    IPropertyChange : public IObjectWithPropertyKey
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE ApplyToPropVariant( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvarIn,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarOut) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyChangeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyChange * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyChange * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyChange * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *ApplyToPropVariant )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvarIn,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarOut);
+        
+        END_INTERFACE
+    } IPropertyChangeVtbl;
+
+    interface IPropertyChange
+    {
+        CONST_VTBL struct IPropertyChangeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyChange_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyChange_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyChange_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyChange_SetPropertyKey(This,key)	\
+    ( (This)->lpVtbl -> SetPropertyKey(This,key) ) 
+
+#define IPropertyChange_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+
+#define IPropertyChange_ApplyToPropVariant(This,propvarIn,ppropvarOut)	\
+    ( (This)->lpVtbl -> ApplyToPropVariant(This,propvarIn,ppropvarOut) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyChange_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyChangeArray_INTERFACE_DEFINED__
+#define __IPropertyChangeArray_INTERFACE_DEFINED__
+
+/* interface IPropertyChangeArray */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyChangeArray;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("380f5cad-1b5e-42f2-805d-637fd392d31e")
+    IPropertyChangeArray : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pcOperations) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE InsertAt( 
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Append( 
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE AppendOrReplace( 
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RemoveAt( 
+            /* [in] */ UINT iIndex) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsKeyInArray( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyChangeArrayVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyChangeArray * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyChangeArray * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyChangeArray * This,
+            /* [out] */ __RPC__out UINT *pcOperations);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *InsertAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *Append )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *AppendOrReplace )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *RemoveAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsKeyInArray )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        END_INTERFACE
+    } IPropertyChangeArrayVtbl;
+
+    interface IPropertyChangeArray
+    {
+        CONST_VTBL struct IPropertyChangeArrayVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyChangeArray_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyChangeArray_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyChangeArray_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyChangeArray_GetCount(This,pcOperations)	\
+    ( (This)->lpVtbl -> GetCount(This,pcOperations) ) 
+
+#define IPropertyChangeArray_GetAt(This,iIndex,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,iIndex,riid,ppv) ) 
+
+#define IPropertyChangeArray_InsertAt(This,iIndex,ppropChange)	\
+    ( (This)->lpVtbl -> InsertAt(This,iIndex,ppropChange) ) 
+
+#define IPropertyChangeArray_Append(This,ppropChange)	\
+    ( (This)->lpVtbl -> Append(This,ppropChange) ) 
+
+#define IPropertyChangeArray_AppendOrReplace(This,ppropChange)	\
+    ( (This)->lpVtbl -> AppendOrReplace(This,ppropChange) ) 
+
+#define IPropertyChangeArray_RemoveAt(This,iIndex)	\
+    ( (This)->lpVtbl -> RemoveAt(This,iIndex) ) 
+
+#define IPropertyChangeArray_IsKeyInArray(This,key)	\
+    ( (This)->lpVtbl -> IsKeyInArray(This,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyChangeArray_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCapabilities_INTERFACE_DEFINED__
+#define __IPropertyStoreCapabilities_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreCapabilities */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStoreCapabilities;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("c8e2d566-186e-4d49-bf41-6909ead56acc")
+    IPropertyStoreCapabilities : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE IsPropertyWritable( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreCapabilitiesVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreCapabilities * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreCapabilities * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreCapabilities * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsPropertyWritable )( 
+            IPropertyStoreCapabilities * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        END_INTERFACE
+    } IPropertyStoreCapabilitiesVtbl;
+
+    interface IPropertyStoreCapabilities
+    {
+        CONST_VTBL struct IPropertyStoreCapabilitiesVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreCapabilities_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreCapabilities_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreCapabilities_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreCapabilities_IsPropertyWritable(This,key)	\
+    ( (This)->lpVtbl -> IsPropertyWritable(This,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreCapabilities_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCache_INTERFACE_DEFINED__
+#define __IPropertyStoreCache_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreCache */
+/* [unique][object][uuid] */ 
+
+typedef /* [v1_enum] */ 
+enum _PSC_STATE
+    {	PSC_NORMAL	= 0,
+	PSC_NOTINSOURCE	= 1,
+	PSC_DIRTY	= 2,
+	PSC_READONLY	= 3
+    } 	PSC_STATE;
+
+
+EXTERN_C const IID IID_IPropertyStoreCache;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3017056d-9a91-4e90-937d-746c72abbf4f")
+    IPropertyStoreCache : public IPropertyStore
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PSC_STATE *pstate) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueAndState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar,
+            /* [out] */ __RPC__out PSC_STATE *pstate) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ PSC_STATE state) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetValueAndState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar,
+            /* [in] */ PSC_STATE state) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreCacheVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreCache * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreCache * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyStoreCache * This,
+            /* [out] */ __RPC__out DWORD *cProps);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyStoreCache * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *Commit )( 
+            IPropertyStoreCache * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PSC_STATE *pstate);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueAndState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar,
+            /* [out] */ __RPC__out PSC_STATE *pstate);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ PSC_STATE state);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValueAndState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar,
+            /* [in] */ PSC_STATE state);
+        
+        END_INTERFACE
+    } IPropertyStoreCacheVtbl;
+
+    interface IPropertyStoreCache
+    {
+        CONST_VTBL struct IPropertyStoreCacheVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreCache_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreCache_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreCache_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreCache_GetCount(This,cProps)	\
+    ( (This)->lpVtbl -> GetCount(This,cProps) ) 
+
+#define IPropertyStoreCache_GetAt(This,iProp,pkey)	\
+    ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) 
+
+#define IPropertyStoreCache_GetValue(This,key,pv)	\
+    ( (This)->lpVtbl -> GetValue(This,key,pv) ) 
+
+#define IPropertyStoreCache_SetValue(This,key,propvar)	\
+    ( (This)->lpVtbl -> SetValue(This,key,propvar) ) 
+
+#define IPropertyStoreCache_Commit(This)	\
+    ( (This)->lpVtbl -> Commit(This) ) 
+
+
+#define IPropertyStoreCache_GetState(This,key,pstate)	\
+    ( (This)->lpVtbl -> GetState(This,key,pstate) ) 
+
+#define IPropertyStoreCache_GetValueAndState(This,key,ppropvar,pstate)	\
+    ( (This)->lpVtbl -> GetValueAndState(This,key,ppropvar,pstate) ) 
+
+#define IPropertyStoreCache_SetState(This,key,state)	\
+    ( (This)->lpVtbl -> SetState(This,key,state) ) 
+
+#define IPropertyStoreCache_SetValueAndState(This,key,ppropvar,state)	\
+    ( (This)->lpVtbl -> SetValueAndState(This,key,ppropvar,state) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreCache_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyEnumType_INTERFACE_DEFINED__
+#define __IPropertyEnumType_INTERFACE_DEFINED__
+
+/* interface IPropertyEnumType */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPENUMTYPE
+    {	PET_DISCRETEVALUE	= 0,
+	PET_RANGEDVALUE	= 1,
+	PET_DEFAULTVALUE	= 2,
+	PET_ENDRANGE	= 3
+    } ;
+typedef enum tagPROPENUMTYPE PROPENUMTYPE;
+
+
+EXTERN_C const IID IID_IPropertyEnumType;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("11e1fbf9-2d56-4a6b-8db3-7cd193a471f2")
+    IPropertyEnumType : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetEnumType( 
+            /* [out] */ __RPC__out PROPENUMTYPE *penumtype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRangeMinValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarMin) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRangeSetValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarSet) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayText( 
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyEnumTypeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyEnumType * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyEnumType * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyEnumType * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumType )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPENUMTYPE *penumtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRangeMinValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarMin);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRangeSetValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarSet);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayText )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay);
+        
+        END_INTERFACE
+    } IPropertyEnumTypeVtbl;
+
+    interface IPropertyEnumType
+    {
+        CONST_VTBL struct IPropertyEnumTypeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyEnumType_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyEnumType_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyEnumType_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyEnumType_GetEnumType(This,penumtype)	\
+    ( (This)->lpVtbl -> GetEnumType(This,penumtype) ) 
+
+#define IPropertyEnumType_GetValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> GetValue(This,ppropvar) ) 
+
+#define IPropertyEnumType_GetRangeMinValue(This,ppropvarMin)	\
+    ( (This)->lpVtbl -> GetRangeMinValue(This,ppropvarMin) ) 
+
+#define IPropertyEnumType_GetRangeSetValue(This,ppropvarSet)	\
+    ( (This)->lpVtbl -> GetRangeSetValue(This,ppropvarSet) ) 
+
+#define IPropertyEnumType_GetDisplayText(This,ppszDisplay)	\
+    ( (This)->lpVtbl -> GetDisplayText(This,ppszDisplay) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyEnumType_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyEnumTypeList_INTERFACE_DEFINED__
+#define __IPropertyEnumTypeList_INTERFACE_DEFINED__
+
+/* interface IPropertyEnumTypeList */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyEnumTypeList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("a99400f4-3d84-4557-94ba-1242fb2cc9a6")
+    IPropertyEnumTypeList : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pctypes) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT itype,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetConditionAt( 
+            /* [in] */ UINT nIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FindMatchingIndex( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvarCmp,
+            /* [out] */ __RPC__out UINT *pnIndex) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyEnumTypeListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyEnumTypeList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyEnumTypeList * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyEnumTypeList * This,
+            /* [out] */ __RPC__out UINT *pctypes);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ UINT itype,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionAt )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ UINT nIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *FindMatchingIndex )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvarCmp,
+            /* [out] */ __RPC__out UINT *pnIndex);
+        
+        END_INTERFACE
+    } IPropertyEnumTypeListVtbl;
+
+    interface IPropertyEnumTypeList
+    {
+        CONST_VTBL struct IPropertyEnumTypeListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyEnumTypeList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyEnumTypeList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyEnumTypeList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyEnumTypeList_GetCount(This,pctypes)	\
+    ( (This)->lpVtbl -> GetCount(This,pctypes) ) 
+
+#define IPropertyEnumTypeList_GetAt(This,itype,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,itype,riid,ppv) ) 
+
+#define IPropertyEnumTypeList_GetConditionAt(This,nIndex,riid,ppv)	\
+    ( (This)->lpVtbl -> GetConditionAt(This,nIndex,riid,ppv) ) 
+
+#define IPropertyEnumTypeList_FindMatchingIndex(This,propvarCmp,pnIndex)	\
+    ( (This)->lpVtbl -> FindMatchingIndex(This,propvarCmp,pnIndex) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyEnumTypeList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescription_INTERFACE_DEFINED__
+#define __IPropertyDescription_INTERFACE_DEFINED__
+
+/* interface IPropertyDescription */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_TYPE_FLAGS
+    {	PDTF_DEFAULT	= 0,
+	PDTF_MULTIPLEVALUES	= 0x1,
+	PDTF_ISINNATE	= 0x2,
+	PDTF_ISGROUP	= 0x4,
+	PDTF_CANGROUPBY	= 0x8,
+	PDTF_CANSTACKBY	= 0x10,
+	PDTF_ISTREEPROPERTY	= 0x20,
+	PDTF_INCLUDEINFULLTEXTQUERY	= 0x40,
+	PDTF_ISVIEWABLE	= 0x80,
+	PDTF_ISQUERYABLE	= 0x100,
+	PDTF_ISSYSTEMPROPERTY	= 0x80000000,
+	PDTF_MASK_ALL	= 0x800001ff
+    } ;
+typedef int PROPDESC_TYPE_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_VIEW_FLAGS
+    {	PDVF_DEFAULT	= 0,
+	PDVF_CENTERALIGN	= 0x1,
+	PDVF_RIGHTALIGN	= 0x2,
+	PDVF_BEGINNEWGROUP	= 0x4,
+	PDVF_FILLAREA	= 0x8,
+	PDVF_SORTDESCENDING	= 0x10,
+	PDVF_SHOWONLYIFPRESENT	= 0x20,
+	PDVF_SHOWBYDEFAULT	= 0x40,
+	PDVF_SHOWINPRIMARYLIST	= 0x80,
+	PDVF_SHOWINSECONDARYLIST	= 0x100,
+	PDVF_HIDELABEL	= 0x200,
+	PDVF_HIDDEN	= 0x800,
+	PDVF_CANWRAP	= 0x1000,
+	PDVF_MASK_ALL	= 0x1bff
+    } ;
+typedef int PROPDESC_VIEW_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_DISPLAYTYPE
+    {	PDDT_STRING	= 0,
+	PDDT_NUMBER	= 1,
+	PDDT_BOOLEAN	= 2,
+	PDDT_DATETIME	= 3,
+	PDDT_ENUMERATED	= 4
+    } ;
+typedef enum tagPROPDESC_DISPLAYTYPE PROPDESC_DISPLAYTYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_GROUPING_RANGE
+    {	PDGR_DISCRETE	= 0,
+	PDGR_ALPHANUMERIC	= 1,
+	PDGR_SIZE	= 2,
+	PDGR_DYNAMIC	= 3,
+	PDGR_DATE	= 4,
+	PDGR_PERCENT	= 5,
+	PDGR_ENUMERATED	= 6
+    } ;
+typedef enum tagPROPDESC_GROUPING_RANGE PROPDESC_GROUPING_RANGE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_FORMAT_FLAGS
+    {	PDFF_DEFAULT	= 0,
+	PDFF_PREFIXNAME	= 0x1,
+	PDFF_FILENAME	= 0x2,
+	PDFF_ALWAYSKB	= 0x4,
+	PDFF_RESERVED_RIGHTTOLEFT	= 0x8,
+	PDFF_SHORTTIME	= 0x10,
+	PDFF_LONGTIME	= 0x20,
+	PDFF_HIDETIME	= 0x40,
+	PDFF_SHORTDATE	= 0x80,
+	PDFF_LONGDATE	= 0x100,
+	PDFF_HIDEDATE	= 0x200,
+	PDFF_RELATIVEDATE	= 0x400,
+	PDFF_USEEDITINVITATION	= 0x800,
+	PDFF_READONLY	= 0x1000,
+	PDFF_NOAUTOREADINGORDER	= 0x2000
+    } ;
+typedef int PROPDESC_FORMAT_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_SORTDESCRIPTION
+    {	PDSD_GENERAL	= 0,
+	PDSD_A_Z	= 1,
+	PDSD_LOWEST_HIGHEST	= 2,
+	PDSD_SMALLEST_BIGGEST	= 3,
+	PDSD_OLDEST_NEWEST	= 4
+    } ;
+typedef enum tagPROPDESC_SORTDESCRIPTION PROPDESC_SORTDESCRIPTION;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE
+    {	PDRDT_GENERAL	= 0,
+	PDRDT_DATE	= 1,
+	PDRDT_SIZE	= 2,
+	PDRDT_COUNT	= 3,
+	PDRDT_REVISION	= 4,
+	PDRDT_LENGTH	= 5,
+	PDRDT_DURATION	= 6,
+	PDRDT_SPEED	= 7,
+	PDRDT_RATE	= 8,
+	PDRDT_RATING	= 9,
+	PDRDT_PRIORITY	= 10
+    } ;
+typedef enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE PROPDESC_RELATIVEDESCRIPTION_TYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_AGGREGATION_TYPE
+    {	PDAT_DEFAULT	= 0,
+	PDAT_FIRST	= 1,
+	PDAT_SUM	= 2,
+	PDAT_AVERAGE	= 3,
+	PDAT_DATERANGE	= 4,
+	PDAT_UNION	= 5,
+	PDAT_MAX	= 6,
+	PDAT_MIN	= 7
+    } ;
+typedef enum tagPROPDESC_AGGREGATION_TYPE PROPDESC_AGGREGATION_TYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_CONDITION_TYPE
+    {	PDCOT_NONE	= 0,
+	PDCOT_STRING	= 1,
+	PDCOT_SIZE	= 2,
+	PDCOT_DATETIME	= 3,
+	PDCOT_BOOLEAN	= 4,
+	PDCOT_NUMBER	= 5
+    } ;
+typedef enum tagPROPDESC_CONDITION_TYPE PROPDESC_CONDITION_TYPE;
+
+
+EXTERN_C const IID IID_IPropertyDescription;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6f79d558-3e96-4549-a1d1-7d75d2288814")
+    IPropertyDescription : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( 
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCanonicalName( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyType( 
+            /* [out] */ __RPC__out VARTYPE *pvartype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayName( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEditInvitation( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetTypeFlags( 
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetViewFlags( 
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnWidth( 
+            /* [out] */ __RPC__out UINT *pcxChars) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayType( 
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetColumnState( 
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetGroupingRange( 
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelativeDescriptionType( 
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelativeDescription( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSortDescription( 
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSortDescriptionLabel( 
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAggregationType( 
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetConditionType( 
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEnumTypeList( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE CoerceToCanonicalValue( 
+            /* [out][in] */ PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsValueCanonical( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescription * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescription * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescription * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescription * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescription * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        END_INTERFACE
+    } IPropertyDescriptionVtbl;
+
+    interface IPropertyDescription
+    {
+        CONST_VTBL struct IPropertyDescriptionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescription_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescription_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescription_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescription_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescription_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescription_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescription_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescription_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescription_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescription_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescription_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescription_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescription_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescription_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescription_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescription_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescription_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescription_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescription_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescription_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescription_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescription_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescription_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescription_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_RemoteCoerceToCanonicalValue_Proxy( 
+    IPropertyDescription * This,
+    /* [in] */ __RPC__in REFPROPVARIANT propvar,
+    /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+
+
+void __RPC_STUB IPropertyDescription_RemoteCoerceToCanonicalValue_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IPropertyDescription_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__
+#define __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionAliasInfo */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyDescriptionAliasInfo;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("f67104fc-2af9-46fd-b32d-243c1404f3d1")
+    IPropertyDescriptionAliasInfo : public IPropertyDescription
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetSortByAlias( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAdditionalSortByAliases( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionAliasInfoVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionAliasInfo * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionAliasInfo * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortByAlias )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAdditionalSortByAliases )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyDescriptionAliasInfoVtbl;
+
+    interface IPropertyDescriptionAliasInfo
+    {
+        CONST_VTBL struct IPropertyDescriptionAliasInfoVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionAliasInfo_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionAliasInfo_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionAliasInfo_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionAliasInfo_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescriptionAliasInfo_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescriptionAliasInfo_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescriptionAliasInfo_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescriptionAliasInfo_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescriptionAliasInfo_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescriptionAliasInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescriptionAliasInfo_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescriptionAliasInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescriptionAliasInfo_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescriptionAliasInfo_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescriptionAliasInfo_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescriptionAliasInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescriptionAliasInfo_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+
+#define IPropertyDescriptionAliasInfo_GetSortByAlias(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetSortByAlias(This,riid,ppv) ) 
+
+#define IPropertyDescriptionAliasInfo_GetAdditionalSortByAliases(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAdditionalSortByAliases(This,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__
+#define __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionSearchInfo */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_SEARCHINFO_FLAGS
+    {	PDSIF_DEFAULT	= 0,
+	PDSIF_ININVERTEDINDEX	= 0x1,
+	PDSIF_ISCOLUMN	= 0x2,
+	PDSIF_ISCOLUMNSPARSE	= 0x4
+    } ;
+typedef int PROPDESC_SEARCHINFO_FLAGS;
+
+typedef /* [v1_enum] */ 
+enum tagPROPDESC_COLUMNINDEX_TYPE
+    {	PDCIT_NONE	= 0,
+	PDCIT_ONDISK	= 1,
+	PDCIT_INMEMORY	= 2
+    } 	PROPDESC_COLUMNINDEX_TYPE;
+
+
+EXTERN_C const IID IID_IPropertyDescriptionSearchInfo;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("078f91bd-29a2-440f-924e-46a291524520")
+    IPropertyDescriptionSearchInfo : public IPropertyDescription
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetSearchInfoFlags( 
+            /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetColumnIndexType( 
+            /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetProjectionString( 
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMaxSize( 
+            /* [out] */ __RPC__out UINT *pcbMaxSize) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionSearchInfoVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionSearchInfo * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionSearchInfo * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSearchInfoFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnIndexType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetProjectionString )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMaxSize )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out UINT *pcbMaxSize);
+        
+        END_INTERFACE
+    } IPropertyDescriptionSearchInfoVtbl;
+
+    interface IPropertyDescriptionSearchInfo
+    {
+        CONST_VTBL struct IPropertyDescriptionSearchInfoVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionSearchInfo_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionSearchInfo_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionSearchInfo_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionSearchInfo_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescriptionSearchInfo_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescriptionSearchInfo_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescriptionSearchInfo_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescriptionSearchInfo_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescriptionSearchInfo_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescriptionSearchInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescriptionSearchInfo_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescriptionSearchInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescriptionSearchInfo_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescriptionSearchInfo_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescriptionSearchInfo_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescriptionSearchInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescriptionSearchInfo_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+
+#define IPropertyDescriptionSearchInfo_GetSearchInfoFlags(This,ppdsiFlags)	\
+    ( (This)->lpVtbl -> GetSearchInfoFlags(This,ppdsiFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetColumnIndexType(This,ppdciType)	\
+    ( (This)->lpVtbl -> GetColumnIndexType(This,ppdciType) ) 
+
+#define IPropertyDescriptionSearchInfo_GetProjectionString(This,ppszProjection)	\
+    ( (This)->lpVtbl -> GetProjectionString(This,ppszProjection) ) 
+
+#define IPropertyDescriptionSearchInfo_GetMaxSize(This,pcbMaxSize)	\
+    ( (This)->lpVtbl -> GetMaxSize(This,pcbMaxSize) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0014 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_ENUMFILTER
+    {	PDEF_ALL	= 0,
+	PDEF_SYSTEM	= 1,
+	PDEF_NONSYSTEM	= 2,
+	PDEF_VIEWABLE	= 3,
+	PDEF_QUERYABLE	= 4,
+	PDEF_INFULLTEXTQUERY	= 5,
+	PDEF_COLUMN	= 6
+    } ;
+typedef enum tagPROPDESC_ENUMFILTER PROPDESC_ENUMFILTER;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_s_ifspec;
+
+#ifndef __IPropertySystem_INTERFACE_DEFINED__
+#define __IPropertySystem_INTERFACE_DEFINED__
+
+/* interface IPropertySystem */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertySystem;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("ca724e8a-c3e6-442b-88a4-6fb0db8035a3")
+    IPropertySystem : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescription( 
+            /* [in] */ __RPC__in REFPROPERTYKEY propkey,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionByName( 
+            /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionListFromString( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPropList,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE EnumeratePropertyDescriptions( 
+            /* [in] */ PROPDESC_ENUMFILTER filterOn,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText,
+            /* [in] */ DWORD cchText) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplayAlloc( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RegisterPropertySchema( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE UnregisterPropertySchema( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RefreshPropertySchema( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertySystemVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertySystem * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertySystem * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescription )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY propkey,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionByName )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionListFromString )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPropList,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *EnumeratePropertyDescriptions )( 
+            IPropertySystem * This,
+            /* [in] */ PROPDESC_ENUMFILTER filterOn,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText,
+            /* [in] */ DWORD cchText);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplayAlloc )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *RegisterPropertySchema )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *UnregisterPropertySchema )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *RefreshPropertySchema )( 
+            IPropertySystem * This);
+        
+        END_INTERFACE
+    } IPropertySystemVtbl;
+
+    interface IPropertySystem
+    {
+        CONST_VTBL struct IPropertySystemVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertySystem_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertySystem_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertySystem_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertySystem_GetPropertyDescription(This,propkey,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescription(This,propkey,riid,ppv) ) 
+
+#define IPropertySystem_GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv) ) 
+
+#define IPropertySystem_GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv) ) 
+
+#define IPropertySystem_EnumeratePropertyDescriptions(This,filterOn,riid,ppv)	\
+    ( (This)->lpVtbl -> EnumeratePropertyDescriptions(This,filterOn,riid,ppv) ) 
+
+#define IPropertySystem_FormatForDisplay(This,key,propvar,pdff,pszText,cchText)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,key,propvar,pdff,pszText,cchText) ) 
+
+#define IPropertySystem_FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay) ) 
+
+#define IPropertySystem_RegisterPropertySchema(This,pszPath)	\
+    ( (This)->lpVtbl -> RegisterPropertySchema(This,pszPath) ) 
+
+#define IPropertySystem_UnregisterPropertySchema(This,pszPath)	\
+    ( (This)->lpVtbl -> UnregisterPropertySchema(This,pszPath) ) 
+
+#define IPropertySystem_RefreshPropertySchema(This)	\
+    ( (This)->lpVtbl -> RefreshPropertySchema(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySystem_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionList_INTERFACE_DEFINED__
+#define __IPropertyDescriptionList_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionList */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyDescriptionList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1f9fc1d0-c39b-4b26-817f-011967d3440e")
+    IPropertyDescriptionList : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pcElem) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT iElem,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionList * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionList * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyDescriptionList * This,
+            /* [out] */ __RPC__out UINT *pcElem);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyDescriptionList * This,
+            /* [in] */ UINT iElem,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyDescriptionListVtbl;
+
+    interface IPropertyDescriptionList
+    {
+        CONST_VTBL struct IPropertyDescriptionListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionList_GetCount(This,pcElem)	\
+    ( (This)->lpVtbl -> GetCount(This,pcElem) ) 
+
+#define IPropertyDescriptionList_GetAt(This,iElem,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,iElem,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreFactory_INTERFACE_DEFINED__
+#define __IPropertyStoreFactory_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreFactory */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStoreFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("bc110b6d-57e8-4148-a9c6-91015ab2f3a5")
+    IPropertyStoreFactory : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStore( 
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStoreForKeys( 
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( 
+            IPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( 
+            IPropertyStoreFactory * This,
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyStoreFactoryVtbl;
+
+    interface IPropertyStoreFactory
+    {
+        CONST_VTBL struct IPropertyStoreFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) 
+
+#define IPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreFactory_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__
+#define __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__
+
+/* interface IDelayedPropertyStoreFactory */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IDelayedPropertyStoreFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("40d4577f-e237-4bdb-bd69-58f089431b6a")
+    IDelayedPropertyStoreFactory : public IPropertyStoreFactory
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetDelayedPropertyStore( 
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ DWORD dwStoreId,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDelayedPropertyStoreFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDelayedPropertyStoreFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDelayedPropertyStoreFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDelayedPropertyStore )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ DWORD dwStoreId,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IDelayedPropertyStoreFactoryVtbl;
+
+    interface IDelayedPropertyStoreFactory
+    {
+        CONST_VTBL struct IDelayedPropertyStoreFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDelayedPropertyStoreFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDelayedPropertyStoreFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDelayedPropertyStoreFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDelayedPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) 
+
+#define IDelayedPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) 
+
+
+#define IDelayedPropertyStoreFactory_GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv)	\
+    ( (This)->lpVtbl -> GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0018 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagPERSIST_SPROPSTORE_FLAGS
+    {	FPSPS_READONLY	= 0x1
+    } ;
+typedef int PERSIST_SPROPSTORE_FLAGS;
+
+typedef struct tagSERIALIZEDPROPSTORAGE SERIALIZEDPROPSTORAGE;
+
+typedef SERIALIZEDPROPSTORAGE __unaligned *PUSERIALIZEDPROPSTORAGE;
+
+typedef const SERIALIZEDPROPSTORAGE __unaligned *PCUSERIALIZEDPROPSTORAGE;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_s_ifspec;
+
+#ifndef __IPersistSerializedPropStorage_INTERFACE_DEFINED__
+#define __IPersistSerializedPropStorage_INTERFACE_DEFINED__
+
+/* interface IPersistSerializedPropStorage */
+/* [object][local][unique][uuid] */ 
+
+
+EXTERN_C const IID IID_IPersistSerializedPropStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("e318ad57-0aa0-450f-aca5-6fab7103d917")
+    IPersistSerializedPropStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetFlags( 
+            /* [in] */ PERSIST_SPROPSTORE_FLAGS flags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetPropertyStorage( 
+            /* [in] */ 
+            __in_bcount(cb)  PCUSERIALIZEDPROPSTORAGE psps,
+            /* [in] */ 
+            __in  DWORD cb) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStorage( 
+            /* [out] */ 
+            __deref_out_bcount(*pcb)  SERIALIZEDPROPSTORAGE **ppsps,
+            /* [out] */ 
+            __out  DWORD *pcb) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPersistSerializedPropStorageVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPersistSerializedPropStorage * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPersistSerializedPropStorage * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetFlags )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ PERSIST_SPROPSTORE_FLAGS flags);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyStorage )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ 
+            __in_bcount(cb)  PCUSERIALIZEDPROPSTORAGE psps,
+            /* [in] */ 
+            __in  DWORD cb);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStorage )( 
+            IPersistSerializedPropStorage * This,
+            /* [out] */ 
+            __deref_out_bcount(*pcb)  SERIALIZEDPROPSTORAGE **ppsps,
+            /* [out] */ 
+            __out  DWORD *pcb);
+        
+        END_INTERFACE
+    } IPersistSerializedPropStorageVtbl;
+
+    interface IPersistSerializedPropStorage
+    {
+        CONST_VTBL struct IPersistSerializedPropStorageVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPersistSerializedPropStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPersistSerializedPropStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPersistSerializedPropStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPersistSerializedPropStorage_SetFlags(This,flags)	\
+    ( (This)->lpVtbl -> SetFlags(This,flags) ) 
+
+#define IPersistSerializedPropStorage_SetPropertyStorage(This,psps,cb)	\
+    ( (This)->lpVtbl -> SetPropertyStorage(This,psps,cb) ) 
+
+#define IPersistSerializedPropStorage_GetPropertyStorage(This,ppsps,pcb)	\
+    ( (This)->lpVtbl -> GetPropertyStorage(This,ppsps,pcb) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPersistSerializedPropStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertySystemChangeNotify_INTERFACE_DEFINED__
+#define __IPropertySystemChangeNotify_INTERFACE_DEFINED__
+
+/* interface IPropertySystemChangeNotify */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertySystemChangeNotify;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("fa955fd9-38be-4879-a6ce-824cf52d609f")
+    IPropertySystemChangeNotify : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SchemaRefreshed( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertySystemChangeNotifyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertySystemChangeNotify * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertySystemChangeNotify * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertySystemChangeNotify * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SchemaRefreshed )( 
+            IPropertySystemChangeNotify * This);
+        
+        END_INTERFACE
+    } IPropertySystemChangeNotifyVtbl;
+
+    interface IPropertySystemChangeNotify
+    {
+        CONST_VTBL struct IPropertySystemChangeNotifyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertySystemChangeNotify_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertySystemChangeNotify_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertySystemChangeNotify_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertySystemChangeNotify_SchemaRefreshed(This)	\
+    ( (This)->lpVtbl -> SchemaRefreshed(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySystemChangeNotify_INTERFACE_DEFINED__ */
+
+
+#ifndef __ICreateObject_INTERFACE_DEFINED__
+#define __ICreateObject_INTERFACE_DEFINED__
+
+/* interface ICreateObject */
+/* [object][unique][uuid] */ 
+
+
+EXTERN_C const IID IID_ICreateObject;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("75121952-e0d0-43e5-9380-1d80483acf72")
+    ICreateObject : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE CreateObject( 
+            /* [in] */ __RPC__in REFCLSID clsid,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ICreateObjectVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ICreateObject * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ICreateObject * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ICreateObject * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *CreateObject )( 
+            ICreateObject * This,
+            /* [in] */ __RPC__in REFCLSID clsid,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } ICreateObjectVtbl;
+
+    interface ICreateObject
+    {
+        CONST_VTBL struct ICreateObjectVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ICreateObject_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ICreateObject_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ICreateObject_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ICreateObject_CreateObject(This,clsid,pUnkOuter,riid,ppv)	\
+    ( (This)->lpVtbl -> CreateObject(This,clsid,pUnkOuter,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ICreateObject_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0021 */
+/* [local] */ 
+
+// Format a property value for display purposes
+PSSTDAPI PSFormatForDisplay(
+    __in REFPROPERTYKEY propkey,
+    __in REFPROPVARIANT propvar,
+    __in PROPDESC_FORMAT_FLAGS pdfFlags,
+    __out_ecount(cchText) LPWSTR pwszText,
+    __in DWORD cchText);
+
+PSSTDAPI PSFormatForDisplayAlloc(
+    __in REFPROPERTYKEY key,
+    __in REFPROPVARIANT propvar,
+    __in PROPDESC_FORMAT_FLAGS pdff,
+    __deref_out PWSTR *ppszDisplay);
+
+PSSTDAPI PSFormatPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __in PROPDESC_FORMAT_FLAGS pdff,
+    __deref_out LPWSTR *ppszDisplay);
+
+
+#define PKEY_PIDSTR_MAX     10   // will take care of any long integer value
+#define GUIDSTRING_MAX      (1 + 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1)  // "{12345678-1234-1234-1234-123456789012}"
+#define PKEYSTR_MAX         (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)
+
+// Convert a PROPERTYKEY to and from a PWSTR
+PSSTDAPI PSStringFromPropertyKey(
+    __in REFPROPERTYKEY pkey,
+    __out_ecount(cch) LPWSTR psz,
+    __in UINT cch);
+
+PSSTDAPI PSPropertyKeyFromString(
+    __in LPCWSTR pszString,
+    __out PROPERTYKEY *pkey);
+
+
+// Creates an in-memory property store
+// Returns an IPropertyStore, IPersistSerializedPropStorage, and related interfaces interface
+PSSTDAPI PSCreateMemoryPropertyStore(
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a read-only, delay-bind multiplexing property store
+// Returns an IPropertyStore interface or related interfaces
+PSSTDAPI PSCreateDelayedMultiplexPropertyStore(
+    __in GETPROPERTYSTOREFLAGS flags,
+    __in IDelayedPropertyStoreFactory *pdpsf,
+    __in_ecount(cStores) const DWORD *rgStoreIds,
+    __in DWORD cStores,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a read-only property store from one or more sources (which each must support either IPropertyStore or IPropertySetStorage)
+// Returns an IPropertyStore interface or related interfaces
+PSSTDAPI PSCreateMultiplexPropertyStore(
+    __in_ecount(cStores) IUnknown **prgpunkStores,
+    __in DWORD cStores,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a container for IPropertyChanges
+// Returns an IPropertyChangeArray interface
+PSSTDAPI PSCreatePropertyChangeArray(
+    __in_ecount_opt(cChanges) const PROPERTYKEY *rgpropkey,
+    __in_ecount_opt(cChanges) const PKA_FLAGS *rgflags,
+    __in_ecount_opt(cChanges) const PROPVARIANT *rgpropvar,
+    __in UINT cChanges,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a simple property change
+// Returns an IPropertyChange interface
+PSSTDAPI PSCreateSimplePropertyChange(
+    __in PKA_FLAGS flags,
+    __in REFPROPERTYKEY key,
+    __in REFPROPVARIANT propvar,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get a property description
+// Returns an IPropertyDescription interface
+PSSTDAPI PSGetPropertyDescription(
+    __in REFPROPERTYKEY propkey,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+PSSTDAPI PSGetPropertyDescriptionByName(
+    __in LPCWSTR pszCanonicalName,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Lookup a per-machine registered file property handler
+PSSTDAPI PSLookupPropertyHandlerCLSID(
+    __in PCWSTR pszFilePath,
+    __out CLSID *pclsid);
+// Get a property handler, on Vista or downlevel to XP
+// punkItem is a shell item created with an SHCreateItemXXX API
+// Returns an IPropertyStore
+PSSTDAPI PSGetItemPropertyHandler(
+    __in IUnknown *punkItem,
+    __in BOOL fReadWrite,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get a property handler, on Vista or downlevel to XP
+// punkItem is a shell item created with an SHCreateItemXXX API
+// punkCreateObject supports ICreateObject
+// Returns an IPropertyStore
+PSSTDAPI PSGetItemPropertyHandlerWithCreateObject(
+    __in IUnknown *punkItem,
+    __in BOOL fReadWrite,
+    __in IUnknown *punkCreateObject,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get or set a property value from a store
+PSSTDAPI PSGetPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __out PROPVARIANT *ppropvar);
+
+PSSTDAPI PSSetPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __in REFPROPVARIANT propvar);
+
+
+// Interact with the set of property descriptions
+PSSTDAPI PSRegisterPropertySchema(
+    __in PCWSTR pszPath);
+
+PSSTDAPI PSUnregisterPropertySchema(
+    __in PCWSTR pszPath);
+
+PSSTDAPI PSRefreshPropertySchema();
+
+// Returns either: IPropertyDescriptionList or IEnumUnknown interfaces
+PSSTDAPI PSEnumeratePropertyDescriptions(
+    __in PROPDESC_ENUMFILTER filterOn,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Convert between a PROPERTYKEY and its canonical name
+PSSTDAPI PSGetPropertyKeyFromName(
+    __in PCWSTR pszName,
+    __out PROPERTYKEY *ppropkey);
+
+PSSTDAPI PSGetNameFromPropertyKey(
+    __in REFPROPERTYKEY propkey,
+    __deref_out PWSTR *ppszCanonicalName);
+
+
+// Coerce and canonicalize a property value
+PSSTDAPI PSCoerceToCanonicalValue(
+    __in REFPROPERTYKEY key,
+    __inout PROPVARIANT *ppropvar);
+
+
+// Convert a 'prop:' string into a list of property descriptions
+// Returns an IPropertyDescriptionList interface
+PSSTDAPI PSGetPropertyDescriptionListFromString(
+    __in LPCWSTR pszPropList,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Wrap an IPropertySetStorage interface in an IPropertyStore interface
+// Returns an IPropertyStore or related interface
+PSSTDAPI PSCreatePropertyStoreFromPropertySetStorage(
+    __in IPropertySetStorage *ppss,
+    DWORD grfMode,
+    REFIID riid,
+    __deref_out void **ppv);
+
+
+// punkSource must support IPropertyStore or IPropertySetStorage
+// On success, the returned ppv is guaranteed to support IPropertyStore.
+// If punkSource already supports IPropertyStore, no wrapper is created.
+PSSTDAPI PSCreatePropertyStoreFromObject(
+    __in IUnknown *punk,
+    __in DWORD grfMode,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// punkSource must support IPropertyStore
+// riid may be IPropertyStore, IPropertySetStorage, IPropertyStoreCapabilities, or IObjectProvider
+PSSTDAPI PSCreateAdapterFromPropertyStore(
+    __in IPropertyStore *pps,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Talk to the property system using an interface
+// Returns an IPropertySystem interface
+PSSTDAPI PSGetPropertySystem(
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Obtain a value from serialized property storage
+PSSTDAPI PSGetPropertyFromPropertyStorage(
+    __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, 
+    __in DWORD cb, 
+    __in REFPROPERTYKEY rpkey, 
+    __out PROPVARIANT *ppropvar);
+
+
+// Obtain a named value from serialized property storage
+PSSTDAPI PSGetNamedPropertyFromPropertyStorage(
+    __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, 
+    __in DWORD cb, 
+    __in LPCWSTR pszName, 
+    __out PROPVARIANT *ppropvar);
+
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_s_ifspec;
+
+
+#ifndef __PropSysObjects_LIBRARY_DEFINED__
+#define __PropSysObjects_LIBRARY_DEFINED__
+
+/* library PropSysObjects */
+/* [version][lcid][uuid] */ 
+
+
+EXTERN_C const IID LIBID_PropSysObjects;
+
+EXTERN_C const CLSID CLSID_InMemoryPropertyStore;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("9a02e012-6303-4e1e-b9a1-630f802592c5")
+InMemoryPropertyStore;
+#endif
+
+EXTERN_C const CLSID CLSID_PropertySystem;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("b8967f85-58ae-4f46-9fb2-5d7904798f4b")
+PropertySystem;
+#endif
+#endif /* __PropSysObjects_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * ); 
+
+unsigned long             __RPC_USER  BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree64(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * ); 
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Proxy( 
+    IInitializeWithStream * This,
+    /* [in] */ IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Stub( 
+    IInitializeWithStream * This,
+    /* [in] */ __RPC__in_opt IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Proxy( 
+    IPropertyDescription * This,
+    /* [out][in] */ PROPVARIANT *ppropvar);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Stub( 
+    IPropertyDescription * This,
+    /* [in] */ __RPC__in REFPROPVARIANT propvar,
+    /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+
+
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h b/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h
new file mode 100644
index 000000000..70adbc6fd
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h
@@ -0,0 +1,113 @@
+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define RPC_range(min,max)
+
+#define __RPC__in           
+#define __RPC__in_string
+#define __RPC__in_opt_string
+#define __RPC__deref_opt_in_opt
+#define __RPC__opt_in_opt_string
+#define __RPC__in_ecount(size) 
+#define __RPC__in_ecount_full(size)
+#define __RPC__in_ecount_full_string(size)
+#define __RPC__in_ecount_part(size, length)
+#define __RPC__in_ecount_full_opt(size)
+#define __RPC__in_ecount_full_opt_string(size)
+#define __RPC__inout_ecount_full_opt_string(size)
+#define __RPC__in_ecount_part_opt(size, length)
+
+#define __RPC__deref_in 
+#define __RPC__deref_in_string
+#define __RPC__deref_opt_in
+#define __RPC__deref_in_opt
+#define __RPC__deref_in_ecount(size) 
+#define __RPC__deref_in_ecount_part(size, length) 
+#define __RPC__deref_in_ecount_full(size) 
+#define __RPC__deref_in_ecount_full_opt(size)
+#define __RPC__deref_in_ecount_full_string(size)
+#define __RPC__deref_in_ecount_full_opt_string(size)
+#define __RPC__deref_in_ecount_opt(size) 
+#define __RPC__deref_in_ecount_opt_string(size)
+#define __RPC__deref_in_ecount_part_opt(size, length) 
+
+// [out]
+#define __RPC__out     
+#define __RPC__out_ecount(size) 
+#define __RPC__out_ecount_part(size, length) 
+#define __RPC__out_ecount_full(size)
+#define __RPC__out_ecount_full_string(size)
+
+// [in,out] 
+#define __RPC__inout                                   
+#define __RPC__inout_string
+#define __RPC__opt_inout
+#define __RPC__inout_ecount(size)                     
+#define __RPC__inout_ecount_part(size, length)    
+#define __RPC__inout_ecount_full(size)          
+#define __RPC__inout_ecount_full_string(size)          
+
+// [in,unique] 
+#define __RPC__in_opt       
+#define __RPC__in_ecount_opt(size)   
+
+
+// [in,out,unique] 
+#define __RPC__inout_opt    
+#define __RPC__inout_ecount_opt(size)  
+#define __RPC__inout_ecount_part_opt(size, length) 
+#define __RPC__inout_ecount_full_opt(size)     
+#define __RPC__inout_ecount_full_string(size)
+
+// [out] **
+#define __RPC__deref_out   
+#define __RPC__deref_out_string
+#define __RPC__deref_out_opt 
+#define __RPC__deref_out_opt_string
+#define __RPC__deref_out_ecount(size) 
+#define __RPC__deref_out_ecount_part(size, length) 
+#define __RPC__deref_out_ecount_full(size)  
+#define __RPC__deref_out_ecount_full_string(size)
+
+
+// [in,out] **, second pointer decoration. 
+#define __RPC__deref_inout    
+#define __RPC__deref_inout_string
+#define __RPC__deref_inout_opt 
+#define __RPC__deref_inout_opt_string
+#define __RPC__deref_inout_ecount_full(size)
+#define __RPC__deref_inout_ecount_full_string(size)
+#define __RPC__deref_inout_ecount_opt(size) 
+#define __RPC__deref_inout_ecount_part_opt(size, length) 
+#define __RPC__deref_inout_ecount_full_opt(size) 
+#define __RPC__deref_inout_ecount_full_opt_string(size) 
+
+// #define __RPC_out_opt    out_opt is not allowed in rpc
+
+// [in,out,unique] 
+#define __RPC__deref_opt_inout  
+#define __RPC__deref_opt_inout_string
+#define __RPC__deref_opt_inout_ecount(size)     
+#define __RPC__deref_opt_inout_ecount_part(size, length) 
+#define __RPC__deref_opt_inout_ecount_full(size) 
+#define __RPC__deref_opt_inout_ecount_full_string(size)
+
+#define __RPC__deref_out_ecount_opt(size) 
+#define __RPC__deref_out_ecount_part_opt(size, length) 
+#define __RPC__deref_out_ecount_full_opt(size) 
+#define __RPC__deref_out_ecount_full_opt_string(size)
+
+#define __RPC__deref_opt_inout_opt      
+#define __RPC__deref_opt_inout_opt_string
+#define __RPC__deref_opt_inout_ecount_opt(size)   
+#define __RPC__deref_opt_inout_ecount_part_opt(size, length) 
+#define __RPC__deref_opt_inout_ecount_full_opt(size) 
+#define __RPC__deref_opt_inout_ecount_full_opt_string(size) 
+
+#define __RPC_full_pointer  
+#define __RPC_unique_pointer
+#define __RPC_ref_pointer
+#define __RPC_string                               
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/sal.h b/portaudio/src/hostapi/wasapi/mingw-include/sal.h
new file mode 100644
index 000000000..d7b99fc99
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/sal.h
@@ -0,0 +1,252 @@
+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+/*#define __null*/ // << Conflicts with GCC internal type __null
+#define __notnull
+#define __maybenull
+#define __readonly
+#define __notreadonly
+#define __maybereadonly
+#define __valid
+#define __notvalid
+#define __maybevalid
+#define __readableTo(extent)
+#define __elem_readableTo(size)
+#define __byte_readableTo(size)
+#define __writableTo(size)
+#define __elem_writableTo(size)
+#define __byte_writableTo(size)
+#define __deref
+#define __pre
+#define __post
+#define __precond(expr)
+#define __postcond(expr)
+#define __exceptthat
+#define __execeptthat
+#define __inner_success(expr)
+#define __inner_checkReturn
+#define __inner_typefix(ctype)
+#define __inner_override
+#define __inner_callback
+#define __inner_blocksOn(resource)
+#define __inner_fallthrough_dec
+#define __inner_fallthrough
+#define __refparam
+#define __inner_control_entrypoint(category)
+#define __inner_data_entrypoint(category)
+
+#define __ecount(size)
+#define __bcount(size)
+#define __in
+#define __in_ecount(size)
+#define __in_bcount(size)
+#define __in_z
+#define __in_ecount_z(size)
+#define __in_bcount_z(size)
+#define __in_nz
+#define __in_ecount_nz(size)
+#define __in_bcount_nz(size)
+#define __out
+#define __out_ecount(size)
+#define __out_bcount(size)
+#define __out_ecount_part(size,length)
+#define __out_bcount_part(size,length)
+#define __out_ecount_full(size)
+#define __out_bcount_full(size)
+#define __out_z
+#define __out_z_opt
+#define __out_ecount_z(size)
+#define __out_bcount_z(size)
+#define __out_ecount_part_z(size,length)
+#define __out_bcount_part_z(size,length)
+#define __out_ecount_full_z(size)
+#define __out_bcount_full_z(size)
+#define __out_nz
+#define __out_nz_opt
+#define __out_ecount_nz(size)
+#define __out_bcount_nz(size)
+#define __inout
+#define __inout_ecount(size)
+#define __inout_bcount(size)
+#define __inout_ecount_part(size,length)
+#define __inout_bcount_part(size,length)
+#define __inout_ecount_full(size)
+#define __inout_bcount_full(size)
+#define __inout_z
+#define __inout_ecount_z(size)
+#define __inout_bcount_z(size)
+#define __inout_nz
+#define __inout_ecount_nz(size)
+#define __inout_bcount_nz(size)
+#define __ecount_opt(size)
+#define __bcount_opt(size)
+#define __in_opt
+#define __in_ecount_opt(size)
+#define __in_bcount_opt(size)
+#define __in_z_opt
+#define __in_ecount_z_opt(size)
+#define __in_bcount_z_opt(size)
+#define __in_nz_opt
+#define __in_ecount_nz_opt(size)
+#define __in_bcount_nz_opt(size)
+#define __out_opt
+#define __out_ecount_opt(size)
+#define __out_bcount_opt(size)
+#define __out_ecount_part_opt(size,length)
+#define __out_bcount_part_opt(size,length)
+#define __out_ecount_full_opt(size)
+#define __out_bcount_full_opt(size)
+#define __out_ecount_z_opt(size)
+#define __out_bcount_z_opt(size)
+#define __out_ecount_part_z_opt(size,length)
+#define __out_bcount_part_z_opt(size,length)
+#define __out_ecount_full_z_opt(size)
+#define __out_bcount_full_z_opt(size)
+#define __out_ecount_nz_opt(size)
+#define __out_bcount_nz_opt(size)
+#define __inout_opt
+#define __inout_ecount_opt(size)
+#define __inout_bcount_opt(size)
+#define __inout_ecount_part_opt(size,length)
+#define __inout_bcount_part_opt(size,length)
+#define __inout_ecount_full_opt(size)
+#define __inout_bcount_full_opt(size)
+#define __inout_z_opt
+#define __inout_ecount_z_opt(size)
+#define __inout_ecount_z_opt(size)
+#define __inout_bcount_z_opt(size)
+#define __inout_nz_opt
+#define __inout_ecount_nz_opt(size)
+#define __inout_bcount_nz_opt(size)
+#define __deref_ecount(size)
+#define __deref_bcount(size)
+#define __deref_out
+#define __deref_out_ecount(size)
+#define __deref_out_bcount(size)
+#define __deref_out_ecount_part(size,length)
+#define __deref_out_bcount_part(size,length)
+#define __deref_out_ecount_full(size)
+#define __deref_out_bcount_full(size)
+#define __deref_out_z
+#define __deref_out_ecount_z(size)
+#define __deref_out_bcount_z(size)
+#define __deref_out_nz
+#define __deref_out_ecount_nz(size)
+#define __deref_out_bcount_nz(size)
+#define __deref_inout
+#define __deref_inout_z
+#define __deref_inout_ecount(size)
+#define __deref_inout_bcount(size)
+#define __deref_inout_ecount_part(size,length)
+#define __deref_inout_bcount_part(size,length)
+#define __deref_inout_ecount_full(size)
+#define __deref_inout_bcount_full(size)
+#define __deref_inout_z
+#define __deref_inout_ecount_z(size)
+#define __deref_inout_bcount_z(size)
+#define __deref_inout_nz
+#define __deref_inout_ecount_nz(size)
+#define __deref_inout_bcount_nz(size)
+#define __deref_ecount_opt(size)
+#define __deref_bcount_opt(size)
+#define __deref_out_opt
+#define __deref_out_ecount_opt(size)
+#define __deref_out_bcount_opt(size)
+#define __deref_out_ecount_part_opt(size,length)
+#define __deref_out_bcount_part_opt(size,length)
+#define __deref_out_ecount_full_opt(size)
+#define __deref_out_bcount_full_opt(size)
+#define __deref_out_z_opt
+#define __deref_out_ecount_z_opt(size)
+#define __deref_out_bcount_z_opt(size)
+#define __deref_out_nz_opt
+#define __deref_out_ecount_nz_opt(size)
+#define __deref_out_bcount_nz_opt(size)
+#define __deref_inout_opt
+#define __deref_inout_ecount_opt(size)
+#define __deref_inout_bcount_opt(size)
+#define __deref_inout_ecount_part_opt(size,length)
+#define __deref_inout_bcount_part_opt(size,length)
+#define __deref_inout_ecount_full_opt(size)
+#define __deref_inout_bcount_full_opt(size)
+#define __deref_inout_z_opt
+#define __deref_inout_ecount_z_opt(size)
+#define __deref_inout_bcount_z_opt(size)
+#define __deref_inout_nz_opt
+#define __deref_inout_ecount_nz_opt(size)
+#define __deref_inout_bcount_nz_opt(size)
+#define __deref_opt_ecount(size)
+#define __deref_opt_bcount(size)
+#define __deref_opt_out
+#define __deref_opt_out_z
+#define __deref_opt_out_ecount(size)
+#define __deref_opt_out_bcount(size)
+#define __deref_opt_out_ecount_part(size,length)
+#define __deref_opt_out_bcount_part(size,length)
+#define __deref_opt_out_ecount_full(size)
+#define __deref_opt_out_bcount_full(size)
+#define __deref_opt_inout
+#define __deref_opt_inout_ecount(size)
+#define __deref_opt_inout_bcount(size)
+#define __deref_opt_inout_ecount_part(size,length)
+#define __deref_opt_inout_bcount_part(size,length)
+#define __deref_opt_inout_ecount_full(size)
+#define __deref_opt_inout_bcount_full(size)
+#define __deref_opt_inout_z
+#define __deref_opt_inout_ecount_z(size)
+#define __deref_opt_inout_bcount_z(size)
+#define __deref_opt_inout_nz
+#define __deref_opt_inout_ecount_nz(size)
+#define __deref_opt_inout_bcount_nz(size)
+#define __deref_opt_ecount_opt(size)
+#define __deref_opt_bcount_opt(size)
+#define __deref_opt_out_opt
+#define __deref_opt_out_ecount_opt(size)
+#define __deref_opt_out_bcount_opt(size)
+#define __deref_opt_out_ecount_part_opt(size,length)
+#define __deref_opt_out_bcount_part_opt(size,length)
+#define __deref_opt_out_ecount_full_opt(size)
+#define __deref_opt_out_bcount_full_opt(size)
+#define __deref_opt_out_z_opt
+#define __deref_opt_out_ecount_z_opt(size)
+#define __deref_opt_out_bcount_z_opt(size)
+#define __deref_opt_out_nz_opt
+#define __deref_opt_out_ecount_nz_opt(size)
+#define __deref_opt_out_bcount_nz_opt(size)
+#define __deref_opt_inout_opt
+#define __deref_opt_inout_ecount_opt(size)
+#define __deref_opt_inout_bcount_opt(size)
+#define __deref_opt_inout_ecount_part_opt(size,length)
+#define __deref_opt_inout_bcount_part_opt(size,length)
+#define __deref_opt_inout_ecount_full_opt(size)
+#define __deref_opt_inout_bcount_full_opt(size)
+#define __deref_opt_inout_z_opt
+#define __deref_opt_inout_ecount_z_opt(size)
+#define __deref_opt_inout_bcount_z_opt(size)
+#define __deref_opt_inout_nz_opt
+#define __deref_opt_inout_ecount_nz_opt(size)
+#define __deref_opt_inout_bcount_nz_opt(size)
+
+#define __success(expr)
+#define __nullterminated
+#define __nullnullterminated
+#define __reserved
+#define __checkReturn
+#define __typefix(ctype)
+#define __override
+#define __callback
+#define __format_string
+#define __blocksOn(resource)
+#define __control_entrypoint(category)
+#define __data_entrypoint(category)
+
+#ifndef __fallthrough
+    #define __fallthrough __inner_fallthrough
+#endif
+
+#ifndef __analysis_assume
+    #define __analysis_assume(expr)
+#endif
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h b/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h
new file mode 100644
index 000000000..0e4d20764
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h
@@ -0,0 +1,225 @@
+/*
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+    sdkddkver.h
+
+Abstract:
+
+    Master include file for versioning windows SDK/DDK.
+
+*/
+
+#ifndef _INC_SDKDDKVER
+#define _INC_SDKDDKVER
+
+#pragma once
+
+//
+// _WIN32_WINNT version constants
+//
+#define _WIN32_WINNT_NT4                    0x0400
+#define _WIN32_WINNT_WIN2K                  0x0500
+#define _WIN32_WINNT_WINXP                  0x0501
+#define _WIN32_WINNT_WS03                   0x0502
+#define _WIN32_WINNT_LONGHORN               0x0600
+
+//
+// _WIN32_IE_ version constants
+//
+#define _WIN32_IE_IE20                      0x0200
+#define _WIN32_IE_IE30                      0x0300
+#define _WIN32_IE_IE302                     0x0302
+#define _WIN32_IE_IE40                      0x0400
+#define _WIN32_IE_IE401                     0x0401
+#define _WIN32_IE_IE50                      0x0500
+#define _WIN32_IE_IE501                     0x0501
+#define _WIN32_IE_IE55                      0x0550
+#define _WIN32_IE_IE60                      0x0600
+#define _WIN32_IE_IE60SP1                   0x0601
+#define _WIN32_IE_IE60SP2                   0x0603
+#define _WIN32_IE_IE70                      0x0700
+
+//
+// IE <-> OS version mapping
+//
+// NT4 supports IE versions 2.0 -> 6.0 SP1
+#define _WIN32_IE_NT4                       _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP1                    _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP2                    _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP3                    _WIN32_IE_IE302
+#define _WIN32_IE_NT4SP4                    _WIN32_IE_IE401
+#define _WIN32_IE_NT4SP5                    _WIN32_IE_IE401
+#define _WIN32_IE_NT4SP6                    _WIN32_IE_IE50
+// Win98 supports IE versions 4.01 -> 6.0 SP1
+#define _WIN32_IE_WIN98                     _WIN32_IE_IE401
+// Win98SE supports IE versions 5.0 -> 6.0 SP1
+#define _WIN32_IE_WIN98SE                   _WIN32_IE_IE50
+// WinME supports IE versions 5.5 -> 6.0 SP1
+#define _WIN32_IE_WINME                     _WIN32_IE_IE55
+// Win2k supports IE versions 5.01 -> 6.0 SP1
+#define _WIN32_IE_WIN2K                     _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP1                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP2                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP3                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP4                  _WIN32_IE_IE501
+#define _WIN32_IE_XP                        _WIN32_IE_IE60
+#define _WIN32_IE_XPSP1                     _WIN32_IE_IE60SP1
+#define _WIN32_IE_XPSP2                     _WIN32_IE_IE60SP2
+#define _WIN32_IE_WS03                      0x0602
+#define _WIN32_IE_WS03SP1                   _WIN32_IE_IE60SP2
+#define _WIN32_IE_LONGHORN                  _WIN32_IE_IE70
+
+
+//
+// NTDDI version constants
+//
+#define NTDDI_WIN2K                         0x05000000
+#define NTDDI_WIN2KSP1                      0x05000100
+#define NTDDI_WIN2KSP2                      0x05000200
+#define NTDDI_WIN2KSP3                      0x05000300
+#define NTDDI_WIN2KSP4                      0x05000400
+
+#define NTDDI_WINXP                         0x05010000
+#define NTDDI_WINXPSP1                      0x05010100
+#define NTDDI_WINXPSP2                      0x05010200
+
+#define NTDDI_WS03                          0x05020000
+#define NTDDI_WS03SP1                       0x05020100
+
+#define NTDDI_LONGHORN                      0x06000000
+
+//
+// masks for version macros
+//
+#define OSVERSION_MASK      0xFFFF0000
+#define SPVERSION_MASK      0x0000FF00
+#define SUBVERSION_MASK     0x000000FF
+
+
+//
+// macros to extract various version fields from the NTDDI version
+//
+#define OSVER(Version)  ((Version) & OSVERSION_MASK)
+#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
+#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )
+
+
+#if defined(DECLSPEC_DEPRECATED_DDK)
+
+// deprecate in 2k or later
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define DECLSPEC_DEPRECATED_DDK_WIN2K DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WIN2K
+#endif
+
+// deprecate in XP or later
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#define DECLSPEC_DEPRECATED_DDK_WINXP DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WINXP
+#endif
+
+// deprecate in WS03 or later
+#if (NTDDI_VERSION >= NTDDI_WS03)
+#define DECLSPEC_DEPRECATED_DDK_WIN2003 DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WIN2003
+#endif
+
+// deprecate in WS03 or later
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+#define DECLSPEC_DEPRECATED_DDK_LONGHORN DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_LONGHORN
+#endif
+
+#endif // defined(DECLSPEC_DEPRECATED_DDK)
+
+
+//
+// if versions aren't already defined, default to most current
+//
+
+#define NTDDI_VERSION_FROM_WIN32_WINNT2(ver)    ver##0000
+#define NTDDI_VERSION_FROM_WIN32_WINNT(ver)     NTDDI_VERSION_FROM_WIN32_WINNT2(ver)
+
+#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
+#define  _WIN32_WINNT   0x0600
+#endif
+
+#ifndef NTDDI_VERSION
+#ifdef _WIN32_WINNT
+// set NTDDI_VERSION based on _WIN32_WINNT
+#define NTDDI_VERSION   NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
+#else
+#define NTDDI_VERSION   0x06000000
+#endif
+#endif
+
+#ifndef WINVER
+#ifdef _WIN32_WINNT
+// set WINVER based on _WIN32_WINNT
+#define WINVER          _WIN32_WINNT
+#else
+#define WINVER          0x0600
+#endif
+#endif
+
+#ifndef _WIN32_IE
+#ifdef _WIN32_WINNT
+// set _WIN32_IE based on _WIN32_WINNT
+#if (_WIN32_WINNT <= _WIN32_WINNT_NT4)
+#define _WIN32_IE       _WIN32_IE_IE50
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K)
+#define _WIN32_IE       _WIN32_IE_IE501
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP)
+#define _WIN32_IE       _WIN32_IE_IE60
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WS03)
+#define _WIN32_IE       0x0602
+#else
+#define _WIN32_IE       0x0700
+#endif
+#else
+#define _WIN32_IE       0x0700
+#endif
+#endif
+
+//
+// Sanity check for compatible versions
+//
+#if defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
+
+#if (defined(WINVER) && (WINVER < 0x0400) && (_WIN32_WINNT > 0x0400))
+#error WINVER setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WIN2K) && (_WIN32_WINNT != _WIN32_WINNT_WIN2K))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WINXP) && (_WIN32_WINNT != _WIN32_WINNT_WINXP))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WS03) && (_WIN32_WINNT != _WIN32_WINNT_WS03))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_LONGHORN) && (_WIN32_WINNT != _WIN32_WINNT_LONGHORN))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1))
+#error _WIN32_WINNT settings conflicts with _WIN32_IE setting
+#endif
+
+#endif  // defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(_WINRESRC_)
+
+
+#endif  // !_INC_SDKDDKVER
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h b/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h
new file mode 100644
index 000000000..5106b3f7b
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h
@@ -0,0 +1,468 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for shtypes.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+
+#ifndef __shtypes_h__
+#define __shtypes_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+/* header files for imported files */
+#include "wtypes.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_shtypes_0000_0000 */
+/* [local] */ 
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//--------------------------------------------------------------------------
+//===========================================================================
+//
+// Object identifiers in the explorer's name space (ItemID and IDList)
+//
+//  All the items that the user can browse with the explorer (such as files,
+// directories, servers, work-groups, etc.) has an identifier which is unique
+// among items within the parent folder. Those identifiers are called item
+// IDs (SHITEMID). Since all its parent folders have their own item IDs,
+// any items can be uniquely identified by a list of item IDs, which is called
+// an ID list (ITEMIDLIST).
+//
+//  ID lists are almost always allocated by the task allocator (see some
+// description below as well as OLE 2.0 SDK) and may be passed across
+// some of shell interfaces (such as IShellFolder). Each item ID in an ID list
+// is only meaningful to its parent folder (which has generated it), and all
+// the clients must treat it as an opaque binary data except the first two
+// bytes, which indicates the size of the item ID.
+//
+//  When a shell extension -- which implements the IShellFolder interace --
+// generates an item ID, it may put any information in it, not only the data
+// with that it needs to identifies the item, but also some additional
+// information, which would help implementing some other functions efficiently.
+// For example, the shell's IShellFolder implementation of file system items
+// stores the primary (long) name of a file or a directory as the item
+// identifier, but it also stores its alternative (short) name, size and date
+// etc.
+//
+//  When an ID list is passed to one of shell APIs (such as SHGetPathFromIDList),
+// it is always an absolute path -- relative from the root of the name space,
+// which is the desktop folder. When an ID list is passed to one of IShellFolder
+// member function, it is always a relative path from the folder (unless it
+// is explicitly specified).
+//
+//===========================================================================
+//
+// SHITEMID -- Item ID  (mkid)
+//     USHORT      cb;             // Size of the ID (including cb itself)
+//     BYTE        abID[];         // The item ID (variable length)
+//
+#include <pshpack1.h>
+typedef struct _SHITEMID
+    {
+    USHORT cb;
+    BYTE abID[ 1 ];
+    } 	SHITEMID;
+
+#include <poppack.h>
+#if defined(_M_IX86)
+#define __unaligned
+#endif // __unaligned
+typedef SHITEMID __unaligned *LPSHITEMID;
+
+typedef const SHITEMID __unaligned *LPCSHITEMID;
+
+//
+// ITEMIDLIST -- List if item IDs (combined with 0-terminator)
+//
+#include <pshpack1.h>
+typedef struct _ITEMIDLIST
+    {
+    SHITEMID mkid;
+    } 	ITEMIDLIST;
+
+#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+typedef struct _ITEMIDLIST_RELATIVE : ITEMIDLIST {} ITEMIDLIST_RELATIVE;
+typedef struct _ITEMID_CHILD : ITEMIDLIST_RELATIVE {} ITEMID_CHILD;
+typedef struct _ITEMIDLIST_ABSOLUTE : ITEMIDLIST_RELATIVE {} ITEMIDLIST_ABSOLUTE;
+#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus))
+typedef ITEMIDLIST ITEMIDLIST_RELATIVE;
+
+typedef ITEMIDLIST ITEMID_CHILD;
+
+typedef ITEMIDLIST ITEMIDLIST_ABSOLUTE;
+
+#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+#include <poppack.h>
+typedef /* [unique] */  __RPC_unique_pointer BYTE_BLOB *wirePIDL;
+
+typedef /* [wire_marshal] */ ITEMIDLIST __unaligned *LPITEMIDLIST;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST __unaligned *LPCITEMIDLIST;
+
+#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+typedef /* [wire_marshal] */ ITEMIDLIST_ABSOLUTE *PIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE __unaligned *PCUIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE *PIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE *PCIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE __unaligned *PUIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE __unaligned *PCUIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ ITEMID_CHILD *PITEMID_CHILD;
+
+typedef /* [wire_marshal] */ const ITEMID_CHILD *PCITEMID_CHILD;
+
+typedef /* [wire_marshal] */ ITEMID_CHILD __unaligned *PUITEMID_CHILD;
+
+typedef /* [wire_marshal] */ const ITEMID_CHILD __unaligned *PCUITEMID_CHILD;
+
+typedef const PCUITEMID_CHILD *PCUITEMID_CHILD_ARRAY;
+
+typedef const PCUIDLIST_RELATIVE *PCUIDLIST_RELATIVE_ARRAY;
+
+typedef const PCIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE_ARRAY;
+
+typedef const PCUIDLIST_ABSOLUTE *PCUIDLIST_ABSOLUTE_ARRAY;
+
+#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus))
+#define PIDLIST_ABSOLUTE         LPITEMIDLIST
+#define PCIDLIST_ABSOLUTE        LPCITEMIDLIST
+#define PCUIDLIST_ABSOLUTE       LPCITEMIDLIST
+#define PIDLIST_RELATIVE         LPITEMIDLIST
+#define PCIDLIST_RELATIVE        LPCITEMIDLIST
+#define PUIDLIST_RELATIVE        LPITEMIDLIST
+#define PCUIDLIST_RELATIVE       LPCITEMIDLIST
+#define PITEMID_CHILD            LPITEMIDLIST
+#define PCITEMID_CHILD           LPCITEMIDLIST
+#define PUITEMID_CHILD           LPITEMIDLIST
+#define PCUITEMID_CHILD          LPCITEMIDLIST
+#define PCUITEMID_CHILD_ARRAY    LPCITEMIDLIST *
+#define PCUIDLIST_RELATIVE_ARRAY LPCITEMIDLIST *
+#define PCIDLIST_ABSOLUTE_ARRAY  LPCITEMIDLIST *
+#define PCUIDLIST_ABSOLUTE_ARRAY LPCITEMIDLIST *
+#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+#ifdef MIDL_PASS
+typedef struct _WIN32_FIND_DATAA
+    {
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    DWORD dwReserved0;
+    DWORD dwReserved1;
+    CHAR cFileName[ 260 ];
+    CHAR cAlternateFileName[ 14 ];
+    } 	WIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAA *PWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAA *LPWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAW
+    {
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    DWORD dwReserved0;
+    DWORD dwReserved1;
+    WCHAR cFileName[ 260 ];
+    WCHAR cAlternateFileName[ 14 ];
+    } 	WIN32_FIND_DATAW;
+
+typedef struct _WIN32_FIND_DATAW *PWIN32_FIND_DATAW;
+
+typedef struct _WIN32_FIND_DATAW *LPWIN32_FIND_DATAW;
+
+#endif // MIDL_PASS
+//-------------------------------------------------------------------------
+//
+// struct STRRET
+//
+// structure for returning strings from IShellFolder member functions
+//
+//-------------------------------------------------------------------------
+//
+//  uType indicate which union member to use 
+//    STRRET_WSTR    Use STRRET.pOleStr     must be freed by caller of GetDisplayNameOf
+//    STRRET_OFFSET  Use STRRET.uOffset     Offset into SHITEMID for ANSI string 
+//    STRRET_CSTR    Use STRRET.cStr        ANSI Buffer
+//
+typedef /* [v1_enum] */ 
+enum tagSTRRET_TYPE
+    {	STRRET_WSTR	= 0,
+	STRRET_OFFSET	= 0x1,
+	STRRET_CSTR	= 0x2
+    } 	STRRET_TYPE;
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(push)
+#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/union */
+#pragma once
+#endif
+#include <pshpack8.h>
+typedef struct _STRRET
+    {
+    UINT uType;
+    union 
+        {
+        LPWSTR pOleStr;
+        UINT uOffset;
+        char cStr[ 260 ];
+        } 	DUMMYUNIONNAME;
+    } 	STRRET;
+
+#include <poppack.h>
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(pop)
+#endif
+typedef STRRET *LPSTRRET;
+
+//-------------------------------------------------------------------------
+//
+// struct SHELLDETAILS
+//
+// structure for returning strings from IShellDetails
+//
+//-------------------------------------------------------------------------
+//
+//  fmt;            // LVCFMT_* value (header only)
+//  cxChar;         // Number of 'average' characters (header only)
+//  str;            // String information
+//
+#include <pshpack1.h>
+typedef struct _SHELLDETAILS
+    {
+    int fmt;
+    int cxChar;
+    STRRET str;
+    } 	SHELLDETAILS;
+
+typedef struct _SHELLDETAILS *LPSHELLDETAILS;
+
+#include <poppack.h>
+
+#if (_WIN32_IE >= _WIN32_IE_IE60SP2)
+typedef /* [v1_enum] */ 
+enum tagPERCEIVED
+    {	PERCEIVED_TYPE_FIRST	= -3,
+	PERCEIVED_TYPE_CUSTOM	= -3,
+	PERCEIVED_TYPE_UNSPECIFIED	= -2,
+	PERCEIVED_TYPE_FOLDER	= -1,
+	PERCEIVED_TYPE_UNKNOWN	= 0,
+	PERCEIVED_TYPE_TEXT	= 1,
+	PERCEIVED_TYPE_IMAGE	= 2,
+	PERCEIVED_TYPE_AUDIO	= 3,
+	PERCEIVED_TYPE_VIDEO	= 4,
+	PERCEIVED_TYPE_COMPRESSED	= 5,
+	PERCEIVED_TYPE_DOCUMENT	= 6,
+	PERCEIVED_TYPE_SYSTEM	= 7,
+	PERCEIVED_TYPE_APPLICATION	= 8,
+	PERCEIVED_TYPE_GAMEMEDIA	= 9,
+	PERCEIVED_TYPE_CONTACTS	= 10,
+	PERCEIVED_TYPE_LAST	= 10
+    } 	PERCEIVED;
+
+#define PERCEIVEDFLAG_UNDEFINED     0x0000
+#define PERCEIVEDFLAG_SOFTCODED     0x0001
+#define PERCEIVEDFLAG_HARDCODED     0x0002
+#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004
+#define PERCEIVEDFLAG_GDIPLUS       0x0010
+#define PERCEIVEDFLAG_WMSDK         0x0020
+#define PERCEIVEDFLAG_ZIPFOLDER     0x0040
+typedef DWORD PERCEIVEDFLAG;
+
+#endif  // _WIN32_IE_IE60SP2
+
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+typedef struct _COMDLG_FILTERSPEC
+    {
+    LPCWSTR pszName;
+    LPCWSTR pszSpec;
+    } 	COMDLG_FILTERSPEC;
+
+typedef struct tagMACHINE_ID
+    {
+    char szName[ 16 ];
+    } 	MACHINE_ID;
+
+typedef struct tagDOMAIN_RELATIVE_OBJECTID
+    {
+    GUID guidVolume;
+    GUID guidObject;
+    } 	DOMAIN_RELATIVE_OBJECTID;
+
+typedef GUID KNOWNFOLDERID;
+
+#if 0
+typedef KNOWNFOLDERID *REFKNOWNFOLDERID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFKNOWNFOLDERID const KNOWNFOLDERID &
+#else // !__cplusplus
+#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST
+#endif // __cplusplus
+#endif  // NTDDI_LONGHORN
+typedef GUID FOLDERTYPEID;
+
+#if 0
+typedef FOLDERTYPEID *REFFOLDERTYPEID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFFOLDERTYPEID const FOLDERTYPEID &
+#else // !__cplusplus
+#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST
+#endif // __cplusplus
+typedef GUID TASKOWNERID;
+
+#if 0
+typedef TASKOWNERID *REFTASKOWNERID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFTASKOWNERID const TASKOWNERID &
+#else // !__cplusplus
+#define REFTASKOWNERID const TASKOWNERID * __MIDL_CONST
+#endif // __cplusplus
+#ifndef LF_FACESIZE
+typedef struct tagLOGFONTA
+    {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    CHAR lfFaceName[ 32 ];
+    } 	LOGFONTA;
+
+typedef struct tagLOGFONTW
+    {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    WCHAR lfFaceName[ 32 ];
+    } 	LOGFONTW;
+
+typedef LOGFONTA LOGFONT;
+
+#endif // LF_FACESIZE
+typedef /* [v1_enum] */ 
+enum tagSHCOLSTATE
+    {	SHCOLSTATE_TYPE_STR	= 0x1,
+	SHCOLSTATE_TYPE_INT	= 0x2,
+	SHCOLSTATE_TYPE_DATE	= 0x3,
+	SHCOLSTATE_TYPEMASK	= 0xf,
+	SHCOLSTATE_ONBYDEFAULT	= 0x10,
+	SHCOLSTATE_SLOW	= 0x20,
+	SHCOLSTATE_EXTENDED	= 0x40,
+	SHCOLSTATE_SECONDARYUI	= 0x80,
+	SHCOLSTATE_HIDDEN	= 0x100,
+	SHCOLSTATE_PREFER_VARCMP	= 0x200,
+	SHCOLSTATE_PREFER_FMTCMP	= 0x400,
+	SHCOLSTATE_NOSORTBYFOLDERNESS	= 0x800,
+	SHCOLSTATE_VIEWONLY	= 0x10000,
+	SHCOLSTATE_BATCHREAD	= 0x20000,
+	SHCOLSTATE_NO_GROUPBY	= 0x40000,
+	SHCOLSTATE_FIXED_WIDTH	= 0x1000,
+	SHCOLSTATE_NODPISCALE	= 0x2000,
+	SHCOLSTATE_FIXED_RATIO	= 0x4000,
+	SHCOLSTATE_DISPLAYMASK	= 0xf000
+    } 	SHCOLSTATE;
+
+typedef DWORD SHCOLSTATEF;
+
+typedef PROPERTYKEY SHCOLUMNID;
+
+typedef const SHCOLUMNID *LPCSHCOLUMNID;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h b/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h
new file mode 100644
index 000000000..a42ec89e7
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h
@@ -0,0 +1,2478 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for structuredquery.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __structuredquery_h__
+#define __structuredquery_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IQueryParser_FWD_DEFINED__
+#define __IQueryParser_FWD_DEFINED__
+typedef interface IQueryParser IQueryParser;
+#endif 	/* __IQueryParser_FWD_DEFINED__ */
+
+
+#ifndef __IConditionFactory_FWD_DEFINED__
+#define __IConditionFactory_FWD_DEFINED__
+typedef interface IConditionFactory IConditionFactory;
+#endif 	/* __IConditionFactory_FWD_DEFINED__ */
+
+
+#ifndef __IQuerySolution_FWD_DEFINED__
+#define __IQuerySolution_FWD_DEFINED__
+typedef interface IQuerySolution IQuerySolution;
+#endif 	/* __IQuerySolution_FWD_DEFINED__ */
+
+
+#ifndef __ICondition_FWD_DEFINED__
+#define __ICondition_FWD_DEFINED__
+typedef interface ICondition ICondition;
+#endif 	/* __ICondition_FWD_DEFINED__ */
+
+
+#ifndef __IConditionGenerator_FWD_DEFINED__
+#define __IConditionGenerator_FWD_DEFINED__
+typedef interface IConditionGenerator IConditionGenerator;
+#endif 	/* __IConditionGenerator_FWD_DEFINED__ */
+
+
+#ifndef __IRichChunk_FWD_DEFINED__
+#define __IRichChunk_FWD_DEFINED__
+typedef interface IRichChunk IRichChunk;
+#endif 	/* __IRichChunk_FWD_DEFINED__ */
+
+
+#ifndef __IInterval_FWD_DEFINED__
+#define __IInterval_FWD_DEFINED__
+typedef interface IInterval IInterval;
+#endif 	/* __IInterval_FWD_DEFINED__ */
+
+
+#ifndef __IMetaData_FWD_DEFINED__
+#define __IMetaData_FWD_DEFINED__
+typedef interface IMetaData IMetaData;
+#endif 	/* __IMetaData_FWD_DEFINED__ */
+
+
+#ifndef __IEntity_FWD_DEFINED__
+#define __IEntity_FWD_DEFINED__
+typedef interface IEntity IEntity;
+#endif 	/* __IEntity_FWD_DEFINED__ */
+
+
+#ifndef __IRelationship_FWD_DEFINED__
+#define __IRelationship_FWD_DEFINED__
+typedef interface IRelationship IRelationship;
+#endif 	/* __IRelationship_FWD_DEFINED__ */
+
+
+#ifndef __INamedEntity_FWD_DEFINED__
+#define __INamedEntity_FWD_DEFINED__
+typedef interface INamedEntity INamedEntity;
+#endif 	/* __INamedEntity_FWD_DEFINED__ */
+
+
+#ifndef __ISchemaProvider_FWD_DEFINED__
+#define __ISchemaProvider_FWD_DEFINED__
+typedef interface ISchemaProvider ISchemaProvider;
+#endif 	/* __ISchemaProvider_FWD_DEFINED__ */
+
+
+#ifndef __ITokenCollection_FWD_DEFINED__
+#define __ITokenCollection_FWD_DEFINED__
+typedef interface ITokenCollection ITokenCollection;
+#endif 	/* __ITokenCollection_FWD_DEFINED__ */
+
+
+#ifndef __INamedEntityCollector_FWD_DEFINED__
+#define __INamedEntityCollector_FWD_DEFINED__
+typedef interface INamedEntityCollector INamedEntityCollector;
+#endif 	/* __INamedEntityCollector_FWD_DEFINED__ */
+
+
+#ifndef __ISchemaLocalizerSupport_FWD_DEFINED__
+#define __ISchemaLocalizerSupport_FWD_DEFINED__
+typedef interface ISchemaLocalizerSupport ISchemaLocalizerSupport;
+#endif 	/* __ISchemaLocalizerSupport_FWD_DEFINED__ */
+
+
+#ifndef __IQueryParserManager_FWD_DEFINED__
+#define __IQueryParserManager_FWD_DEFINED__
+typedef interface IQueryParserManager IQueryParserManager;
+#endif 	/* __IQueryParserManager_FWD_DEFINED__ */
+
+
+#ifndef __QueryParser_FWD_DEFINED__
+#define __QueryParser_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class QueryParser QueryParser;
+#else
+typedef struct QueryParser QueryParser;
+#endif /* __cplusplus */
+
+#endif 	/* __QueryParser_FWD_DEFINED__ */
+
+
+#ifndef __NegationCondition_FWD_DEFINED__
+#define __NegationCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class NegationCondition NegationCondition;
+#else
+typedef struct NegationCondition NegationCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __NegationCondition_FWD_DEFINED__ */
+
+
+#ifndef __CompoundCondition_FWD_DEFINED__
+#define __CompoundCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class CompoundCondition CompoundCondition;
+#else
+typedef struct CompoundCondition CompoundCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __CompoundCondition_FWD_DEFINED__ */
+
+
+#ifndef __LeafCondition_FWD_DEFINED__
+#define __LeafCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class LeafCondition LeafCondition;
+#else
+typedef struct LeafCondition LeafCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __LeafCondition_FWD_DEFINED__ */
+
+
+#ifndef __ConditionFactory_FWD_DEFINED__
+#define __ConditionFactory_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class ConditionFactory ConditionFactory;
+#else
+typedef struct ConditionFactory ConditionFactory;
+#endif /* __cplusplus */
+
+#endif 	/* __ConditionFactory_FWD_DEFINED__ */
+
+
+#ifndef __Interval_FWD_DEFINED__
+#define __Interval_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Interval Interval;
+#else
+typedef struct Interval Interval;
+#endif /* __cplusplus */
+
+#endif 	/* __Interval_FWD_DEFINED__ */
+
+
+#ifndef __QueryParserManager_FWD_DEFINED__
+#define __QueryParserManager_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class QueryParserManager QueryParserManager;
+#else
+typedef struct QueryParserManager QueryParserManager;
+#endif /* __cplusplus */
+
+#endif 	/* __QueryParserManager_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "propidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_structuredquery_0000_0000 */
+/* [local] */ 
+
+
+
+
+
+
+
+
+
+
+
+typedef /* [v1_enum] */ 
+enum tagCONDITION_TYPE
+    {	CT_AND_CONDITION	= 0,
+	CT_OR_CONDITION	= ( CT_AND_CONDITION + 1 ) ,
+	CT_NOT_CONDITION	= ( CT_OR_CONDITION + 1 ) ,
+	CT_LEAF_CONDITION	= ( CT_NOT_CONDITION + 1 ) 
+    } 	CONDITION_TYPE;
+
+typedef /* [v1_enum] */ 
+enum tagCONDITION_OPERATION
+    {	COP_IMPLICIT	= 0,
+	COP_EQUAL	= ( COP_IMPLICIT + 1 ) ,
+	COP_NOTEQUAL	= ( COP_EQUAL + 1 ) ,
+	COP_LESSTHAN	= ( COP_NOTEQUAL + 1 ) ,
+	COP_GREATERTHAN	= ( COP_LESSTHAN + 1 ) ,
+	COP_LESSTHANOREQUAL	= ( COP_GREATERTHAN + 1 ) ,
+	COP_GREATERTHANOREQUAL	= ( COP_LESSTHANOREQUAL + 1 ) ,
+	COP_VALUE_STARTSWITH	= ( COP_GREATERTHANOREQUAL + 1 ) ,
+	COP_VALUE_ENDSWITH	= ( COP_VALUE_STARTSWITH + 1 ) ,
+	COP_VALUE_CONTAINS	= ( COP_VALUE_ENDSWITH + 1 ) ,
+	COP_VALUE_NOTCONTAINS	= ( COP_VALUE_CONTAINS + 1 ) ,
+	COP_DOSWILDCARDS	= ( COP_VALUE_NOTCONTAINS + 1 ) ,
+	COP_WORD_EQUAL	= ( COP_DOSWILDCARDS + 1 ) ,
+	COP_WORD_STARTSWITH	= ( COP_WORD_EQUAL + 1 ) ,
+	COP_APPLICATION_SPECIFIC	= ( COP_WORD_STARTSWITH + 1 ) 
+    } 	CONDITION_OPERATION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_SINGLE_OPTION
+    {	SQSO_SCHEMA	= 0,
+	SQSO_LOCALE_WORD_BREAKING	= ( SQSO_SCHEMA + 1 ) ,
+	SQSO_WORD_BREAKER	= ( SQSO_LOCALE_WORD_BREAKING + 1 ) ,
+	SQSO_NATURAL_SYNTAX	= ( SQSO_WORD_BREAKER + 1 ) ,
+	SQSO_AUTOMATIC_WILDCARD	= ( SQSO_NATURAL_SYNTAX + 1 ) ,
+	SQSO_TRACE_LEVEL	= ( SQSO_AUTOMATIC_WILDCARD + 1 ) ,
+	SQSO_LANGUAGE_KEYWORDS	= ( SQSO_TRACE_LEVEL + 1 ) 
+    } 	STRUCTURED_QUERY_SINGLE_OPTION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_MULTIOPTION
+    {	SQMO_VIRTUAL_PROPERTY	= 0,
+	SQMO_DEFAULT_PROPERTY	= ( SQMO_VIRTUAL_PROPERTY + 1 ) ,
+	SQMO_GENERATOR_FOR_TYPE	= ( SQMO_DEFAULT_PROPERTY + 1 ) 
+    } 	STRUCTURED_QUERY_MULTIOPTION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_PARSE_ERROR
+    {	SQPE_NONE	= 0,
+	SQPE_EXTRA_OPENING_PARENTHESIS	= ( SQPE_NONE + 1 ) ,
+	SQPE_EXTRA_CLOSING_PARENTHESIS	= ( SQPE_EXTRA_OPENING_PARENTHESIS + 1 ) ,
+	SQPE_IGNORED_MODIFIER	= ( SQPE_EXTRA_CLOSING_PARENTHESIS + 1 ) ,
+	SQPE_IGNORED_CONNECTOR	= ( SQPE_IGNORED_MODIFIER + 1 ) ,
+	SQPE_IGNORED_KEYWORD	= ( SQPE_IGNORED_CONNECTOR + 1 ) ,
+	SQPE_UNHANDLED	= ( SQPE_IGNORED_KEYWORD + 1 ) 
+    } 	STRUCTURED_QUERY_PARSE_ERROR;
+
+/* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_RESOLVE_OPTION
+    {	SQRO_DONT_RESOLVE_DATETIME	= 0x1,
+	SQRO_ALWAYS_ONE_INTERVAL	= 0x2,
+	SQRO_DONT_SIMPLIFY_CONDITION_TREES	= 0x4,
+	SQRO_DONT_MAP_RELATIONS	= 0x8,
+	SQRO_DONT_RESOLVE_RANGES	= 0x10,
+	SQRO_DONT_REMOVE_UNRESTRICTED_KEYWORDS	= 0x20,
+	SQRO_DONT_SPLIT_WORDS	= 0x40,
+	SQRO_IGNORE_PHRASE_ORDER	= 0x80
+    } ;
+typedef int STRUCTURED_QUERY_RESOLVE_OPTION;
+
+typedef /* [v1_enum] */ 
+enum tagINTERVAL_LIMIT_KIND
+    {	ILK_EXPLICIT_INCLUDED	= 0,
+	ILK_EXPLICIT_EXCLUDED	= ( ILK_EXPLICIT_INCLUDED + 1 ) ,
+	ILK_NEGATIVE_INFINITY	= ( ILK_EXPLICIT_EXCLUDED + 1 ) ,
+	ILK_POSITIVE_INFINITY	= ( ILK_NEGATIVE_INFINITY + 1 ) 
+    } 	INTERVAL_LIMIT_KIND;
+
+typedef /* [v1_enum] */ 
+enum tagQUERY_PARSER_MANAGER_OPTION
+    {	QPMO_SCHEMA_BINARY_NAME	= 0,
+	QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_SCHEMA_BINARY_NAME + 1 ) ,
+	QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_LOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_APPEND_LCID_TO_LOCALIZED_PATH	= ( QPMO_LOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_LOCALIZER_SUPPORT	= ( QPMO_APPEND_LCID_TO_LOCALIZED_PATH + 1 ) 
+    } 	QUERY_PARSER_MANAGER_OPTION;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IQueryParser_INTERFACE_DEFINED__
+#define __IQueryParser_INTERFACE_DEFINED__
+
+/* interface IQueryParser */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IQueryParser;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2EBDEE67-3505-43f8-9946-EA44ABC8E5B0")
+    IQueryParser : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Parse( 
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetOption( 
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetOption( 
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetMultiOption( 
+            /* [in] */ STRUCTURED_QUERY_MULTIOPTION option,
+            /* [in] */ __RPC__in LPCWSTR pszOptionKey,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSchemaProvider( 
+            /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RestateToString( 
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ParsePropertyValue( 
+            /* [in] */ __RPC__in LPCWSTR pszPropertyName,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RestatePropertyValueToString( 
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQueryParserVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQueryParser * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQueryParser * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Parse )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMultiOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_MULTIOPTION option,
+            /* [in] */ __RPC__in LPCWSTR pszOptionKey,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSchemaProvider )( 
+            IQueryParser * This,
+            /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider);
+        
+        HRESULT ( STDMETHODCALLTYPE *RestateToString )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString);
+        
+        HRESULT ( STDMETHODCALLTYPE *ParsePropertyValue )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in LPCWSTR pszPropertyName,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution);
+        
+        HRESULT ( STDMETHODCALLTYPE *RestatePropertyValueToString )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString);
+        
+        END_INTERFACE
+    } IQueryParserVtbl;
+
+    interface IQueryParser
+    {
+        CONST_VTBL struct IQueryParserVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQueryParser_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQueryParser_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQueryParser_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQueryParser_Parse(This,pszInputString,pCustomProperties,ppSolution)	\
+    ( (This)->lpVtbl -> Parse(This,pszInputString,pCustomProperties,ppSolution) ) 
+
+#define IQueryParser_SetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) 
+
+#define IQueryParser_GetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> GetOption(This,option,pOptionValue) ) 
+
+#define IQueryParser_SetMultiOption(This,option,pszOptionKey,pOptionValue)	\
+    ( (This)->lpVtbl -> SetMultiOption(This,option,pszOptionKey,pOptionValue) ) 
+
+#define IQueryParser_GetSchemaProvider(This,ppSchemaProvider)	\
+    ( (This)->lpVtbl -> GetSchemaProvider(This,ppSchemaProvider) ) 
+
+#define IQueryParser_RestateToString(This,pCondition,fUseEnglish,ppszQueryString)	\
+    ( (This)->lpVtbl -> RestateToString(This,pCondition,fUseEnglish,ppszQueryString) ) 
+
+#define IQueryParser_ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution)	\
+    ( (This)->lpVtbl -> ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution) ) 
+
+#define IQueryParser_RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString)	\
+    ( (This)->lpVtbl -> RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQueryParser_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConditionFactory_INTERFACE_DEFINED__
+#define __IConditionFactory_INTERFACE_DEFINED__
+
+/* interface IConditionFactory */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IConditionFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A5EFE073-B16F-474f-9F3E-9F8B497A3E08")
+    IConditionFactory : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE MakeNot( 
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MakeAndOr( 
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MakeLeaf( 
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Resolve( 
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConditionFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConditionFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConditionFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeNot )( 
+            IConditionFactory * This,
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( 
+            IConditionFactory * This,
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( 
+            IConditionFactory * This,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( 
+            IConditionFactory * This,
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree);
+        
+        END_INTERFACE
+    } IConditionFactoryVtbl;
+
+    interface IConditionFactory
+    {
+        CONST_VTBL struct IConditionFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConditionFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConditionFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConditionFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConditionFactory_MakeNot(This,pSubCondition,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) 
+
+#define IConditionFactory_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) 
+
+#define IConditionFactory_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) 
+
+#define IConditionFactory_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree)	\
+    ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConditionFactory_INTERFACE_DEFINED__ */
+
+
+#ifndef __IQuerySolution_INTERFACE_DEFINED__
+#define __IQuerySolution_INTERFACE_DEFINED__
+
+/* interface IQuerySolution */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IQuerySolution;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("D6EBC66B-8921-4193-AFDD-A1789FB7FF57")
+    IQuerySolution : public IConditionFactory
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetQuery( 
+            /* [out] */ 
+            __out_opt  ICondition **ppQueryNode,
+            /* [out] */ 
+            __out_opt  IEntity **ppMainType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetErrors( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetLexicalData( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszInputString,
+            /* [out] */ 
+            __out_opt  ITokenCollection **ppTokens,
+            /* [out] */ 
+            __out_opt  LCID *pLocale,
+            /* [out] */ 
+            __out_opt  IUnknown **ppWordBreaker) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQuerySolutionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQuerySolution * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQuerySolution * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeNot )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( 
+            IQuerySolution * This,
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( 
+            IQuerySolution * This,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( 
+            IQuerySolution * This,
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetQuery )( 
+            IQuerySolution * This,
+            /* [out] */ 
+            __out_opt  ICondition **ppQueryNode,
+            /* [out] */ 
+            __out_opt  IEntity **ppMainType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetErrors )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetLexicalData )( 
+            IQuerySolution * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszInputString,
+            /* [out] */ 
+            __out_opt  ITokenCollection **ppTokens,
+            /* [out] */ 
+            __out_opt  LCID *pLocale,
+            /* [out] */ 
+            __out_opt  IUnknown **ppWordBreaker);
+        
+        END_INTERFACE
+    } IQuerySolutionVtbl;
+
+    interface IQuerySolution
+    {
+        CONST_VTBL struct IQuerySolutionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQuerySolution_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQuerySolution_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQuerySolution_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQuerySolution_MakeNot(This,pSubCondition,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) 
+
+#define IQuerySolution_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) 
+
+#define IQuerySolution_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) 
+
+#define IQuerySolution_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree)	\
+    ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) 
+
+
+#define IQuerySolution_GetQuery(This,ppQueryNode,ppMainType)	\
+    ( (This)->lpVtbl -> GetQuery(This,ppQueryNode,ppMainType) ) 
+
+#define IQuerySolution_GetErrors(This,riid,ppParseErrors)	\
+    ( (This)->lpVtbl -> GetErrors(This,riid,ppParseErrors) ) 
+
+#define IQuerySolution_GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker)	\
+    ( (This)->lpVtbl -> GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQuerySolution_INTERFACE_DEFINED__ */
+
+
+#ifndef __ICondition_INTERFACE_DEFINED__
+#define __ICondition_INTERFACE_DEFINED__
+
+/* interface ICondition */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_ICondition;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0FC988D4-C935-4b97-A973-46282EA175C8")
+    ICondition : public IPersistStream
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetConditionType( 
+            /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSubConditions( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetComparisonInfo( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszPropertyName,
+            /* [out] */ 
+            __out_opt  CONDITION_OPERATION *pOperation,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueType( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueNormalization( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetInputTerms( 
+            /* [out] */ 
+            __out_opt  IRichChunk **ppPropertyTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppOperationTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppValueTerm) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Clone( 
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ICondition * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ICondition * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ICondition * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetClassID )( 
+            ICondition * This,
+            /* [out] */ __RPC__out CLSID *pClassID);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsDirty )( 
+            ICondition * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Load )( 
+            ICondition * This,
+            /* [unique][in] */ __RPC__in_opt IStream *pStm);
+        
+        HRESULT ( STDMETHODCALLTYPE *Save )( 
+            ICondition * This,
+            /* [unique][in] */ __RPC__in_opt IStream *pStm,
+            /* [in] */ BOOL fClearDirty);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSizeMax )( 
+            ICondition * This,
+            /* [out] */ __RPC__out ULARGE_INTEGER *pcbSize);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSubConditions )( 
+            ICondition * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetComparisonInfo )( 
+            ICondition * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszPropertyName,
+            /* [out] */ 
+            __out_opt  CONDITION_OPERATION *pOperation,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueType )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueNormalization )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetInputTerms )( 
+            ICondition * This,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppPropertyTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppOperationTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppValueTerm);
+        
+        HRESULT ( STDMETHODCALLTYPE *Clone )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc);
+        
+        END_INTERFACE
+    } IConditionVtbl;
+
+    interface ICondition
+    {
+        CONST_VTBL struct IConditionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ICondition_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ICondition_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ICondition_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ICondition_GetClassID(This,pClassID)	\
+    ( (This)->lpVtbl -> GetClassID(This,pClassID) ) 
+
+
+#define ICondition_IsDirty(This)	\
+    ( (This)->lpVtbl -> IsDirty(This) ) 
+
+#define ICondition_Load(This,pStm)	\
+    ( (This)->lpVtbl -> Load(This,pStm) ) 
+
+#define ICondition_Save(This,pStm,fClearDirty)	\
+    ( (This)->lpVtbl -> Save(This,pStm,fClearDirty) ) 
+
+#define ICondition_GetSizeMax(This,pcbSize)	\
+    ( (This)->lpVtbl -> GetSizeMax(This,pcbSize) ) 
+
+
+#define ICondition_GetConditionType(This,pNodeType)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pNodeType) ) 
+
+#define ICondition_GetSubConditions(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetSubConditions(This,riid,ppv) ) 
+
+#define ICondition_GetComparisonInfo(This,ppszPropertyName,pOperation,pValue)	\
+    ( (This)->lpVtbl -> GetComparisonInfo(This,ppszPropertyName,pOperation,pValue) ) 
+
+#define ICondition_GetValueType(This,ppszValueTypeName)	\
+    ( (This)->lpVtbl -> GetValueType(This,ppszValueTypeName) ) 
+
+#define ICondition_GetValueNormalization(This,ppszNormalization)	\
+    ( (This)->lpVtbl -> GetValueNormalization(This,ppszNormalization) ) 
+
+#define ICondition_GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm)	\
+    ( (This)->lpVtbl -> GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm) ) 
+
+#define ICondition_Clone(This,ppc)	\
+    ( (This)->lpVtbl -> Clone(This,ppc) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ICondition_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConditionGenerator_INTERFACE_DEFINED__
+#define __IConditionGenerator_INTERFACE_DEFINED__
+
+/* interface IConditionGenerator */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IConditionGenerator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("92D2CC58-4386-45a3-B98C-7E0CE64A4117")
+    IConditionGenerator : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RecognizeNamedEntities( 
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GenerateForLeaf( 
+            /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL automaticWildcard,
+            /* [out] */ __RPC__out BOOL *pNoStringQuery,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [unique][in] */ LPCWSTR pszValueType,
+            /* [in] */ const PROPVARIANT *ppropvar,
+            /* [in] */ BOOL fUseEnglish,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionGeneratorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConditionGenerator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConditionGenerator * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider);
+        
+        HRESULT ( STDMETHODCALLTYPE *RecognizeNamedEntities )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *GenerateForLeaf )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL automaticWildcard,
+            /* [out] */ __RPC__out BOOL *pNoStringQuery,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IConditionGenerator * This,
+            /* [unique][in] */ LPCWSTR pszValueType,
+            /* [in] */ const PROPVARIANT *ppropvar,
+            /* [in] */ BOOL fUseEnglish,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IConditionGeneratorVtbl;
+
+    interface IConditionGenerator
+    {
+        CONST_VTBL struct IConditionGeneratorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConditionGenerator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConditionGenerator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConditionGenerator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConditionGenerator_Initialize(This,pSchemaProvider)	\
+    ( (This)->lpVtbl -> Initialize(This,pSchemaProvider) ) 
+
+#define IConditionGenerator_RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities)	\
+    ( (This)->lpVtbl -> RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities) ) 
+
+#define IConditionGenerator_GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression)	\
+    ( (This)->lpVtbl -> GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression) ) 
+
+#define IConditionGenerator_DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConditionGenerator_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRichChunk_INTERFACE_DEFINED__
+#define __IRichChunk_INTERFACE_DEFINED__
+
+/* interface IRichChunk */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IRichChunk;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4FDEF69C-DBC9-454e-9910-B34F3C64B510")
+    IRichChunk : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( 
+            /* [out] */ 
+            __out_opt  ULONG *pFirstPos,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IRichChunkVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IRichChunk * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IRichChunk * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IRichChunk * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( 
+            IRichChunk * This,
+            /* [out] */ 
+            __out_opt  ULONG *pFirstPos,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue);
+        
+        END_INTERFACE
+    } IRichChunkVtbl;
+
+    interface IRichChunk
+    {
+        CONST_VTBL struct IRichChunkVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IRichChunk_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IRichChunk_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IRichChunk_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IRichChunk_GetData(This,pFirstPos,pLength,ppsz,pValue)	\
+    ( (This)->lpVtbl -> GetData(This,pFirstPos,pLength,ppsz,pValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IRichChunk_INTERFACE_DEFINED__ */
+
+
+#ifndef __IInterval_INTERFACE_DEFINED__
+#define __IInterval_INTERFACE_DEFINED__
+
+/* interface IInterval */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IInterval;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6BF0A714-3C18-430b-8B5D-83B1C234D3DB")
+    IInterval : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetLimits( 
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarLower,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IIntervalVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInterval * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInterval * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInterval * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetLimits )( 
+            IInterval * This,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarLower,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper);
+        
+        END_INTERFACE
+    } IIntervalVtbl;
+
+    interface IInterval
+    {
+        CONST_VTBL struct IIntervalVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInterval_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInterval_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInterval_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInterval_GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper)	\
+    ( (This)->lpVtbl -> GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IInterval_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMetaData_INTERFACE_DEFINED__
+#define __IMetaData_INTERFACE_DEFINED__
+
+/* interface IMetaData */
+/* [unique][uuid][object][helpstring] */ 
+
+
+EXTERN_C const IID IID_IMetaData;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("780102B0-C43B-4876-BC7B-5E9BA5C88794")
+    IMetaData : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszKey,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMetaDataVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMetaData * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMetaData * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMetaData * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( 
+            IMetaData * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszKey,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszValue);
+        
+        END_INTERFACE
+    } IMetaDataVtbl;
+
+    interface IMetaData
+    {
+        CONST_VTBL struct IMetaDataVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMetaData_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMetaData_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMetaData_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMetaData_GetData(This,ppszKey,ppszValue)	\
+    ( (This)->lpVtbl -> GetData(This,ppszKey,ppszValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMetaData_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_structuredquery_0000_0008 */
+/* [local] */ 
+
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_s_ifspec;
+
+#ifndef __IEntity_INTERFACE_DEFINED__
+#define __IEntity_INTERFACE_DEFINED__
+
+/* interface IEntity */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_IEntity;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("24264891-E80B-4fd3-B7CE-4FF2FAE8931F")
+    IEntity : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Base( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Relationships( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelationship( 
+            /* [in] */ __RPC__in LPCWSTR pszRelationName,
+            /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE NamedEntities( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNamedEntity( 
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IEntityVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IEntity * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IEntity * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( 
+            IEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *Base )( 
+            IEntity * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *Relationships )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelationship )( 
+            IEntity * This,
+            /* [in] */ __RPC__in LPCWSTR pszRelationName,
+            /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        HRESULT ( STDMETHODCALLTYPE *NamedEntities )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNamedEntity )( 
+            IEntity * This,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IEntityVtbl;
+
+    interface IEntity
+    {
+        CONST_VTBL struct IEntityVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IEntity_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IEntity_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IEntity_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IEntity_Name(This,ppszName)	\
+    ( (This)->lpVtbl -> Name(This,ppszName) ) 
+
+#define IEntity_Base(This,pBaseEntity)	\
+    ( (This)->lpVtbl -> Base(This,pBaseEntity) ) 
+
+#define IEntity_Relationships(This,riid,pRelationships)	\
+    ( (This)->lpVtbl -> Relationships(This,riid,pRelationships) ) 
+
+#define IEntity_GetRelationship(This,pszRelationName,pRelationship)	\
+    ( (This)->lpVtbl -> GetRelationship(This,pszRelationName,pRelationship) ) 
+
+#define IEntity_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define IEntity_NamedEntities(This,riid,pNamedEntities)	\
+    ( (This)->lpVtbl -> NamedEntities(This,riid,pNamedEntities) ) 
+
+#define IEntity_GetNamedEntity(This,pszValue,ppNamedEntity)	\
+    ( (This)->lpVtbl -> GetNamedEntity(This,pszValue,ppNamedEntity) ) 
+
+#define IEntity_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IEntity_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRelationship_INTERFACE_DEFINED__
+#define __IRelationship_INTERFACE_DEFINED__
+
+/* interface IRelationship */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_IRelationship;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2769280B-5108-498c-9C7F-A51239B63147")
+    IRelationship : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsReal( 
+            /* [retval][out] */ __RPC__out BOOL *pIsReal) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Destination( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IRelationshipVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IRelationship * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IRelationship * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IRelationship * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( 
+            IRelationship * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsReal )( 
+            IRelationship * This,
+            /* [retval][out] */ __RPC__out BOOL *pIsReal);
+        
+        HRESULT ( STDMETHODCALLTYPE *Destination )( 
+            IRelationship * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            IRelationship * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IRelationship * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IRelationshipVtbl;
+
+    interface IRelationship
+    {
+        CONST_VTBL struct IRelationshipVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IRelationship_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IRelationship_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IRelationship_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IRelationship_Name(This,ppszName)	\
+    ( (This)->lpVtbl -> Name(This,ppszName) ) 
+
+#define IRelationship_IsReal(This,pIsReal)	\
+    ( (This)->lpVtbl -> IsReal(This,pIsReal) ) 
+
+#define IRelationship_Destination(This,pDestinationEntity)	\
+    ( (This)->lpVtbl -> Destination(This,pDestinationEntity) ) 
+
+#define IRelationship_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define IRelationship_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IRelationship_INTERFACE_DEFINED__ */
+
+
+#ifndef __INamedEntity_INTERFACE_DEFINED__
+#define __INamedEntity_INTERFACE_DEFINED__
+
+/* interface INamedEntity */
+/* [unique][uuid][object][helpstring] */ 
+
+
+EXTERN_C const IID IID_INamedEntity;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("ABDBD0B1-7D54-49fb-AB5C-BFF4130004CD")
+    INamedEntity : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedEntityVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedEntity * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedEntity * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            INamedEntity * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            INamedEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } INamedEntityVtbl;
+
+    interface INamedEntity
+    {
+        CONST_VTBL struct INamedEntityVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedEntity_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedEntity_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedEntity_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedEntity_GetValue(This,ppszValue)	\
+    ( (This)->lpVtbl -> GetValue(This,ppszValue) ) 
+
+#define INamedEntity_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedEntity_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISchemaProvider_INTERFACE_DEFINED__
+#define __ISchemaProvider_INTERFACE_DEFINED__
+
+/* interface ISchemaProvider */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_ISchemaProvider;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("8CF89BCB-394C-49b2-AE28-A59DD4ED7F68")
+    ISchemaProvider : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Entities( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RootEntity( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEntity( 
+            /* [in] */ __RPC__in LPCWSTR pszEntityName,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Localize( 
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SaveBinary( 
+            /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE LookupAuthoredNamedEntity( 
+            /* [in] */ __RPC__in_opt IEntity *pEntity,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [in] */ ULONG cTokensBegin,
+            /* [out] */ __RPC__out ULONG *pcTokensLength,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISchemaProviderVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISchemaProvider * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISchemaProvider * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Entities )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *RootEntity )( 
+            ISchemaProvider * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEntity )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in LPCWSTR pszEntityName,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        HRESULT ( STDMETHODCALLTYPE *Localize )( 
+            ISchemaProvider * This,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport);
+        
+        HRESULT ( STDMETHODCALLTYPE *SaveBinary )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *LookupAuthoredNamedEntity )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in_opt IEntity *pEntity,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [in] */ ULONG cTokensBegin,
+            /* [out] */ __RPC__out ULONG *pcTokensLength,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue);
+        
+        END_INTERFACE
+    } ISchemaProviderVtbl;
+
+    interface ISchemaProvider
+    {
+        CONST_VTBL struct ISchemaProviderVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISchemaProvider_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISchemaProvider_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISchemaProvider_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISchemaProvider_Entities(This,riid,pEntities)	\
+    ( (This)->lpVtbl -> Entities(This,riid,pEntities) ) 
+
+#define ISchemaProvider_RootEntity(This,pRootEntity)	\
+    ( (This)->lpVtbl -> RootEntity(This,pRootEntity) ) 
+
+#define ISchemaProvider_GetEntity(This,pszEntityName,pEntity)	\
+    ( (This)->lpVtbl -> GetEntity(This,pszEntityName,pEntity) ) 
+
+#define ISchemaProvider_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define ISchemaProvider_Localize(This,lcid,pSchemaLocalizerSupport)	\
+    ( (This)->lpVtbl -> Localize(This,lcid,pSchemaLocalizerSupport) ) 
+
+#define ISchemaProvider_SaveBinary(This,pszSchemaBinaryPath)	\
+    ( (This)->lpVtbl -> SaveBinary(This,pszSchemaBinaryPath) ) 
+
+#define ISchemaProvider_LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue)	\
+    ( (This)->lpVtbl -> LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISchemaProvider_INTERFACE_DEFINED__ */
+
+
+#ifndef __ITokenCollection_INTERFACE_DEFINED__
+#define __ITokenCollection_INTERFACE_DEFINED__
+
+/* interface ITokenCollection */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_ITokenCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("22D8B4F2-F577-4adb-A335-C2AE88416FAB")
+    ITokenCollection : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE NumberOfTokens( 
+            __RPC__in ULONG *pCount) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetToken( 
+            /* [in] */ ULONG i,
+            /* [out] */ 
+            __out_opt  ULONG *pBegin,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ITokenCollectionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ITokenCollection * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ITokenCollection * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ITokenCollection * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *NumberOfTokens )( 
+            ITokenCollection * This,
+            __RPC__in ULONG *pCount);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetToken )( 
+            ITokenCollection * This,
+            /* [in] */ ULONG i,
+            /* [out] */ 
+            __out_opt  ULONG *pBegin,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz);
+        
+        END_INTERFACE
+    } ITokenCollectionVtbl;
+
+    interface ITokenCollection
+    {
+        CONST_VTBL struct ITokenCollectionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ITokenCollection_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ITokenCollection_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ITokenCollection_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ITokenCollection_NumberOfTokens(This,pCount)	\
+    ( (This)->lpVtbl -> NumberOfTokens(This,pCount) ) 
+
+#define ITokenCollection_GetToken(This,i,pBegin,pLength,ppsz)	\
+    ( (This)->lpVtbl -> GetToken(This,i,pBegin,pLength,ppsz) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ITokenCollection_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_structuredquery_0000_0013 */
+/* [local] */ 
+
+typedef /* [public][public][v1_enum] */ 
+enum __MIDL___MIDL_itf_structuredquery_0000_0013_0001
+    {	NEC_LOW	= 0,
+	NEC_MEDIUM	= ( NEC_LOW + 1 ) ,
+	NEC_HIGH	= ( NEC_MEDIUM + 1 ) 
+    } 	NAMED_ENTITY_CERTAINTY;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_s_ifspec;
+
+#ifndef __INamedEntityCollector_INTERFACE_DEFINED__
+#define __INamedEntityCollector_INTERFACE_DEFINED__
+
+/* interface INamedEntityCollector */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_INamedEntityCollector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("AF2440F6-8AFC-47d0-9A7F-396A0ACFB43D")
+    INamedEntityCollector : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Add( 
+            /* [in] */ ULONG beginSpan,
+            /* [in] */ ULONG endSpan,
+            /* [in] */ ULONG beginActual,
+            /* [in] */ ULONG endActual,
+            /* [in] */ __RPC__in_opt IEntity *pType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [in] */ NAMED_ENTITY_CERTAINTY certainty) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedEntityCollectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedEntityCollector * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedEntityCollector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedEntityCollector * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Add )( 
+            INamedEntityCollector * This,
+            /* [in] */ ULONG beginSpan,
+            /* [in] */ ULONG endSpan,
+            /* [in] */ ULONG beginActual,
+            /* [in] */ ULONG endActual,
+            /* [in] */ __RPC__in_opt IEntity *pType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [in] */ NAMED_ENTITY_CERTAINTY certainty);
+        
+        END_INTERFACE
+    } INamedEntityCollectorVtbl;
+
+    interface INamedEntityCollector
+    {
+        CONST_VTBL struct INamedEntityCollectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedEntityCollector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedEntityCollector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedEntityCollector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedEntityCollector_Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty)	\
+    ( (This)->lpVtbl -> Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedEntityCollector_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISchemaLocalizerSupport_INTERFACE_DEFINED__
+#define __ISchemaLocalizerSupport_INTERFACE_DEFINED__
+
+/* interface ISchemaLocalizerSupport */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_ISchemaLocalizerSupport;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("CA3FDCA2-BFBE-4eed-90D7-0CAEF0A1BDA1")
+    ISchemaLocalizerSupport : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Localize( 
+            /* [in] */ __RPC__in LPCWSTR pszGlobalString,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISchemaLocalizerSupportVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISchemaLocalizerSupport * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISchemaLocalizerSupport * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISchemaLocalizerSupport * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Localize )( 
+            ISchemaLocalizerSupport * This,
+            /* [in] */ __RPC__in LPCWSTR pszGlobalString,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString);
+        
+        END_INTERFACE
+    } ISchemaLocalizerSupportVtbl;
+
+    interface ISchemaLocalizerSupport
+    {
+        CONST_VTBL struct ISchemaLocalizerSupportVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISchemaLocalizerSupport_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISchemaLocalizerSupport_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISchemaLocalizerSupport_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISchemaLocalizerSupport_Localize(This,pszGlobalString,ppszLocalString)	\
+    ( (This)->lpVtbl -> Localize(This,pszGlobalString,ppszLocalString) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISchemaLocalizerSupport_INTERFACE_DEFINED__ */
+
+
+#ifndef __IQueryParserManager_INTERFACE_DEFINED__
+#define __IQueryParserManager_INTERFACE_DEFINED__
+
+/* interface IQueryParserManager */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IQueryParserManager;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A879E3C4-AF77-44fb-8F37-EBD1487CF920")
+    IQueryParserManager : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE CreateLoadedParser( 
+            /* [in] */ __RPC__in LPCWSTR pszCatalog,
+            /* [in] */ LANGID langidForKeywords,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE InitializeOptions( 
+            /* [in] */ BOOL fUnderstandNQS,
+            /* [in] */ BOOL fAutoWildCard,
+            /* [in] */ __RPC__in_opt IQueryParser *pQueryParser) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetOption( 
+            /* [in] */ QUERY_PARSER_MANAGER_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQueryParserManagerVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQueryParserManager * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQueryParserManager * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQueryParserManager * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *CreateLoadedParser )( 
+            IQueryParserManager * This,
+            /* [in] */ __RPC__in LPCWSTR pszCatalog,
+            /* [in] */ LANGID langidForKeywords,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser);
+        
+        HRESULT ( STDMETHODCALLTYPE *InitializeOptions )( 
+            IQueryParserManager * This,
+            /* [in] */ BOOL fUnderstandNQS,
+            /* [in] */ BOOL fAutoWildCard,
+            /* [in] */ __RPC__in_opt IQueryParser *pQueryParser);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetOption )( 
+            IQueryParserManager * This,
+            /* [in] */ QUERY_PARSER_MANAGER_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        END_INTERFACE
+    } IQueryParserManagerVtbl;
+
+    interface IQueryParserManager
+    {
+        CONST_VTBL struct IQueryParserManagerVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQueryParserManager_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQueryParserManager_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQueryParserManager_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQueryParserManager_CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser)	\
+    ( (This)->lpVtbl -> CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser) ) 
+
+#define IQueryParserManager_InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser)	\
+    ( (This)->lpVtbl -> InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser) ) 
+
+#define IQueryParserManager_SetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQueryParserManager_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __StructuredQuery1_LIBRARY_DEFINED__
+#define __StructuredQuery1_LIBRARY_DEFINED__
+
+/* library StructuredQuery1 */
+/* [version][uuid] */ 
+
+
+EXTERN_C const IID LIBID_StructuredQuery1;
+
+EXTERN_C const CLSID CLSID_QueryParser;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("B72F8FD8-0FAB-4dd9-BDBF-245A6CE1485B")
+QueryParser;
+#endif
+
+EXTERN_C const CLSID CLSID_NegationCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("8DE9C74C-605A-4acd-BEE3-2B222AA2D23D")
+NegationCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_CompoundCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("116F8D13-101E-4fa5-84D4-FF8279381935")
+CompoundCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_LeafCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("52F15C89-5A17-48e1-BBCD-46A3F89C7CC2")
+LeafCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_ConditionFactory;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("E03E85B0-7BE3-4000-BA98-6C13DE9FA486")
+ConditionFactory;
+#endif
+
+EXTERN_C const CLSID CLSID_Interval;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("D957171F-4BF9-4de2-BCD5-C70A7CA55836")
+Interval;
+#endif
+
+EXTERN_C const CLSID CLSID_QueryParserManager;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("5088B39A-29B4-4d9d-8245-4EE289222F66")
+QueryParserManager;
+#endif
+#endif /* __StructuredQuery1_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * ); 
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/portaudio/src/hostapi/wasapi/pa_win_wasapi.c b/portaudio/src/hostapi/wasapi/pa_win_wasapi.c
new file mode 100644
index 000000000..aa03748a5
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/pa_win_wasapi.c
@@ -0,0 +1,4457 @@
+/*
+ * Portable Audio I/O Library WASAPI implementation
+ * Copyright (c) 2006-2010 David Viens, Dmitry Kostjuchenko
+ *
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however,
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
+
+/** @file
+ @ingroup hostapi_src
+ @brief WASAPI implementation of support for a host API.
+ @note pa_wasapi currently requires minimum VC 2005, and the latest Vista SDK
+*/
+
+#define WIN32_LEAN_AND_MEAN // exclude rare headers
+#include <windows.h>
+#include <stdio.h>
+#include <process.h>
+#include <mmsystem.h>
+#include <mmreg.h>  // must be before other Wasapi headers
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+	#include <Avrt.h>
+	#define COBJMACROS
+	#include <Audioclient.h>
+	#include <endpointvolume.h>
+	#define INITGUID // Avoid additional linkage of static libs, excessive code will be optimized out by the compiler
+	#include <mmdeviceapi.h>
+	#include <functiondiscoverykeys.h>
+    #include <devicetopology.h>	// Used to get IKsJackDescription interface
+	#undef INITGUID
+#endif
+#ifndef __MWERKS__
+#include <malloc.h>
+#include <memory.h>
+#endif /* __MWERKS__ */
+
+#include "pa_util.h"
+#include "pa_allocation.h"
+#include "pa_hostapi.h"
+#include "pa_stream.h"
+#include "pa_cpuload.h"
+#include "pa_process.h"
+#include "pa_debugprint.h"
+#include "pa_win_wasapi.h"
+
+#ifndef NTDDI_VERSION
+ 
+    #undef WINVER
+    #undef _WIN32_WINNT
+    #define WINVER       0x0600 // VISTA
+	#define _WIN32_WINNT WINVER
+
+	#ifndef _AVRT_ //<< fix MinGW dummy compile by defining missing type: AVRT_PRIORITY
+        typedef enum _AVRT_PRIORITY
+        {
+            AVRT_PRIORITY_LOW = -1,
+            AVRT_PRIORITY_NORMAL,
+            AVRT_PRIORITY_HIGH,
+            AVRT_PRIORITY_CRITICAL
+        } AVRT_PRIORITY, *PAVRT_PRIORITY;
+	#endif
+
+	#include <basetyps.h> // << for IID/CLSID
+    #include <rpcsal.h>
+    #include <sal.h>
+
+	#ifndef __LPCGUID_DEFINED__
+		#define __LPCGUID_DEFINED__
+		typedef const GUID *LPCGUID;
+	#endif
+
+    #ifndef PROPERTYKEY_DEFINED
+        #define PROPERTYKEY_DEFINED
+        typedef struct _tagpropertykey
+        {
+            GUID fmtid;
+            DWORD pid;
+        } 	PROPERTYKEY;
+    #endif
+
+    #ifdef __midl_proxy
+        #define __MIDL_CONST
+    #else
+        #define __MIDL_CONST const
+    #endif
+
+    #ifdef WIN64
+        #include <wtypes.h>
+        typedef LONG NTSTATUS;
+        #define FASTCALL
+        #include <oleidl.h>
+        #include <objidl.h>
+     #else
+        typedef struct _BYTE_BLOB
+        {
+            unsigned long clSize;
+            unsigned char abData[ 1 ];
+        } 	BYTE_BLOB;
+        typedef /* [unique] */  __RPC_unique_pointer BYTE_BLOB *UP_BYTE_BLOB;
+        typedef LONGLONG REFERENCE_TIME;
+        #define NONAMELESSUNION
+    #endif
+    
+    #ifndef WAVE_FORMAT_IEEE_FLOAT
+        #define WAVE_FORMAT_IEEE_FLOAT 0x0003 // 32-bit floating-point
+    #endif    
+    
+    #ifndef __MINGW_EXTENSION
+        #if defined(__GNUC__) || defined(__GNUG__)
+            #define __MINGW_EXTENSION __extension__
+        #else
+            #define __MINGW_EXTENSION
+        #endif
+    #endif 
+
+    #include <sdkddkver.h>
+    #include <propkeydef.h>
+    #define COBJMACROS
+    #define INITGUID // Avoid additional linkage of static libs, excessive code will be optimized out by the compiler
+    #include <audioclient.h>
+    #include <mmdeviceapi.h>
+    #include <endpointvolume.h>
+    #include <functiondiscoverykeys.h>
+	#include <devicetopology.h>	// Used to get IKsJackDescription interface
+    #undef INITGUID
+
+#endif // NTDDI_VERSION
+
+#ifndef GUID_SECT
+    #define GUID_SECT
+#endif
+
+#define __DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+#define __DEFINE_IID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const IID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+#define __DEFINE_CLSID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const CLSID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+#define PA_DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    __DEFINE_CLSID(pa_CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8)
+#define PA_DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    __DEFINE_IID(pa_IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8)
+
+// "1CB9AD4C-DBFA-4c32-B178-C2F568A703B2"
+PA_DEFINE_IID(IAudioClient,         1cb9ad4c, dbfa, 4c32, b1, 78, c2, f5, 68, a7, 03, b2);
+// "1BE09788-6894-4089-8586-9A2A6C265AC5"
+PA_DEFINE_IID(IMMEndpoint,          1be09788, 6894, 4089, 85, 86, 9a, 2a, 6c, 26, 5a, c5);
+// "A95664D2-9614-4F35-A746-DE8DB63617E6"
+PA_DEFINE_IID(IMMDeviceEnumerator,  a95664d2, 9614, 4f35, a7, 46, de, 8d, b6, 36, 17, e6);
+// "BCDE0395-E52F-467C-8E3D-C4579291692E"
+PA_DEFINE_CLSID(IMMDeviceEnumerator,bcde0395, e52f, 467c, 8e, 3d, c4, 57, 92, 91, 69, 2e);
+// "F294ACFC-3146-4483-A7BF-ADDCA7C260E2"
+PA_DEFINE_IID(IAudioRenderClient,   f294acfc, 3146, 4483, a7, bf, ad, dc, a7, c2, 60, e2);
+// "C8ADBD64-E71E-48a0-A4DE-185C395CD317"
+PA_DEFINE_IID(IAudioCaptureClient,  c8adbd64, e71e, 48a0, a4, de, 18, 5c, 39, 5c, d3, 17);
+// *2A07407E-6497-4A18-9787-32F79BD0D98F*  Or this??
+PA_DEFINE_IID(IDeviceTopology,      2A07407E, 6497, 4A18, 97, 87, 32, f7, 9b, d0, d9, 8f);
+// *AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9*
+PA_DEFINE_IID(IPart,                AE2DE0E4, 5BCA, 4F2D, aa, 46, 5d, 13, f8, fd, b3, a9);
+// *4509F757-2D46-4637-8E62-CE7DB944F57B*
+PA_DEFINE_IID(IKsJackDescription,   4509F757, 2D46, 4637, 8e, 62, ce, 7d, b9, 44, f5, 7b);
+// Media formats:
+__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_PCM,        0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
+__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_ADPCM,      0x00000002, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
+__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
+
+/* use CreateThread for CYGWIN/Windows Mobile, _beginthreadex for all others */
+#if !defined(__CYGWIN__) && !defined(_WIN32_WCE)
+	#define CREATE_THREAD(PROC) (HANDLE)_beginthreadex( NULL, 0, (PROC), stream, 0, &stream->dwThreadId )
+	#define PA_THREAD_FUNC static unsigned WINAPI
+	#define PA_THREAD_ID unsigned
+#else
+	#define CREATE_THREAD(PROC) CreateThread( NULL, 0, (PROC), stream, 0, &stream->dwThreadId )
+	#define PA_THREAD_FUNC static DWORD WINAPI
+	#define PA_THREAD_ID DWORD
+#endif
+
+// Thread function forward decl.
+PA_THREAD_FUNC ProcThreadEvent(void *param);
+PA_THREAD_FUNC ProcThreadPoll(void *param);
+
+// Availabe from Windows 7
+#ifndef AUDCLNT_E_BUFFER_ERROR
+	#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x018)
+#endif
+#ifndef AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED
+	#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x019)
+#endif
+#ifndef AUDCLNT_E_INVALID_DEVICE_PERIOD
+	#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x020)
+#endif
+
+#define MAX_STR_LEN 512
+
+enum { S_INPUT = 0, S_OUTPUT = 1, S_COUNT = 2, S_FULLDUPLEX = 0 };
+
+#define STATIC_ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
+
+#define PRINT(x) PA_DEBUG(x);
+
+#define PA_SKELETON_SET_LAST_HOST_ERROR( errorCode, errorText ) \
+    PaUtil_SetLastHostErrorInfo( paWASAPI, errorCode, errorText )
+
+#define PA_WASAPI__IS_FULLDUPLEX(STREAM) ((STREAM)->in.client && (STREAM)->out.client)
+
+#ifndef IF_FAILED_JUMP
+#define IF_FAILED_JUMP(hr, label) if(FAILED(hr)) goto label;
+#endif
+
+#define SAFE_CLOSE(h) if ((h) != NULL) { CloseHandle((h)); (h) = NULL; }
+#define SAFE_RELEASE(punk) if ((punk) != NULL) { (punk)->lpVtbl->Release((punk)); (punk) = NULL; }
+
+// Mixer function
+typedef void (*MixMonoToStereoF) (void *__to, void *__from, UINT32 count);
+
+// AVRT is the new "multimedia schedulling stuff"
+typedef BOOL   (WINAPI *FAvRtCreateThreadOrderingGroup)  (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER);
+typedef BOOL   (WINAPI *FAvRtDeleteThreadOrderingGroup)  (HANDLE);
+typedef BOOL   (WINAPI *FAvRtWaitOnThreadOrderingGroup)  (HANDLE);
+typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics)   (LPCTSTR,LPDWORD);
+typedef BOOL   (WINAPI *FAvRevertMmThreadCharacteristics)(HANDLE);
+typedef BOOL   (WINAPI *FAvSetMmThreadPriority)          (HANDLE,AVRT_PRIORITY);
+
+static HMODULE hDInputDLL = 0;
+FAvRtCreateThreadOrderingGroup   pAvRtCreateThreadOrderingGroup = NULL;
+FAvRtDeleteThreadOrderingGroup   pAvRtDeleteThreadOrderingGroup = NULL;
+FAvRtWaitOnThreadOrderingGroup   pAvRtWaitOnThreadOrderingGroup = NULL;
+FAvSetMmThreadCharacteristics    pAvSetMmThreadCharacteristics = NULL;
+FAvRevertMmThreadCharacteristics pAvRevertMmThreadCharacteristics = NULL;
+FAvSetMmThreadPriority           pAvSetMmThreadPriority = NULL;
+
+#define _GetProc(fun, type, name)  {                                                        \
+                                        fun = (type) GetProcAddress(hDInputDLL,name);       \
+                                        if (fun == NULL) {                                  \
+                                            PRINT(("GetProcAddr failed for %s" ,name));     \
+                                            return FALSE;                                   \
+                                        }                                                   \
+                                    }                                                       \
+
+// ------------------------------------------------------------------------------------------
+/* prototypes for functions declared in this file */
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+// dummy entry point for other compilers and sdks
+// currently built using RC1 SDK (5600)
+//#if _MSC_VER < 1400
+//PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+//{
+    //return paNoError;
+//}
+//#else
+
+// ------------------------------------------------------------------------------------------
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                                  const PaStreamParameters *inputParameters,
+                                  const PaStreamParameters *outputParameters,
+                                  double sampleRate );
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                           PaStream** s,
+                           const PaStreamParameters *inputParameters,
+                           const PaStreamParameters *outputParameters,
+                           double sampleRate,
+                           unsigned long framesPerBuffer,
+                           PaStreamFlags streamFlags,
+                           PaStreamCallback *streamCallback,
+                           void *userData );
+static PaError CloseStream( PaStream* stream );
+static PaError StartStream( PaStream *stream );
+static PaError StopStream( PaStream *stream );
+static PaError AbortStream( PaStream *stream );
+static PaError IsStreamStopped( PaStream *s );
+static PaError IsStreamActive( PaStream *stream );
+static PaTime GetStreamTime( PaStream *stream );
+static double GetStreamCpuLoad( PaStream* stream );
+static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
+static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
+static signed long GetStreamReadAvailable( PaStream* stream );
+static signed long GetStreamWriteAvailable( PaStream* stream );
+
+// ------------------------------------------------------------------------------------------
+/*
+ These are fields that can be gathered from IDevice and IAudioDevice PRIOR to Initialize, and
+ done in first pass i assume that neither of these will cause the Driver to "load", but again,
+ who knows how they implement their stuff
+ */
+typedef struct PaWasapiDeviceInfo
+{
+    // Device
+    IMMDevice *device;
+
+	// from GetId
+    WCHAR szDeviceID[MAX_STR_LEN];
+
+	// from GetState
+    DWORD state;
+
+    // Fields filled from IMMEndpoint'sGetDataFlow
+    EDataFlow flow;
+
+    // Fields filled from IAudioDevice (_prior_ to Initialize)
+    // from GetDevicePeriod(
+    REFERENCE_TIME DefaultDevicePeriod;
+    REFERENCE_TIME MinimumDevicePeriod;
+
+    // from GetMixFormat
+    // WAVEFORMATEX *MixFormat;//needs to be CoTaskMemFree'd after use!
+
+	// Default format (setup through Control Panel by user)
+	WAVEFORMATEXTENSIBLE DefaultFormat;
+
+	// Formfactor
+	EndpointFormFactor formFactor;
+}
+PaWasapiDeviceInfo;
+
+// ------------------------------------------------------------------------------------------
+/* PaWasapiHostApiRepresentation - host api datastructure specific to this implementation */
+typedef struct
+{
+    PaUtilHostApiRepresentation inheritedHostApiRep;
+    PaUtilStreamInterface callbackStreamInterface;
+    PaUtilStreamInterface blockingStreamInterface;
+
+    PaUtilAllocationGroup *allocations;
+
+    /* implementation specific data goes here */
+
+    //in case we later need the synch
+    IMMDeviceEnumerator *enumerator;
+
+    //this is the REAL number of devices, whether they are usefull to PA or not!
+    UINT32 deviceCount;
+
+    WCHAR defaultRenderer [MAX_STR_LEN];
+    WCHAR defaultCapturer [MAX_STR_LEN];
+
+    PaWasapiDeviceInfo *devInfo;
+
+	// Is true when WOW64 Vista/7 Workaround is needed
+	BOOL useWOW64Workaround;
+}
+PaWasapiHostApiRepresentation;
+
+// ------------------------------------------------------------------------------------------
+/* PaWasapiStream - a stream data structure specifically for this implementation */
+typedef struct PaWasapiSubStream
+{
+    IAudioClient        *client;
+    WAVEFORMATEXTENSIBLE wavex;
+    UINT32               bufferSize;
+    REFERENCE_TIME       device_latency;
+    REFERENCE_TIME       period;
+	double				 latency_seconds;
+    UINT32				 framesPerHostCallback;
+	AUDCLNT_SHAREMODE    shareMode;
+	UINT32               streamFlags; // AUDCLNT_STREAMFLAGS_EVENTCALLBACK, ...
+	UINT32               flags;
+
+	// Buffers
+	UINT32               buffers;			//!< number of buffers used (from host side)
+	UINT32               framesPerBuffer;	//!< number of frames per 1 buffer
+	BOOL                 userBufferAndHostMatch;
+
+	// Used by blocking interface:
+	UINT32               prevTime;  // time ms between calls of WriteStream
+	UINT32               prevSleep; // time ms to sleep from frames written in previous call
+
+	// Used for Mono >> Stereo workaround, if driver does not support it
+	// (in Exclusive mode WASAPI usually refuses to operate with Mono (1-ch)
+	void                *monoBuffer;	 //!< pointer to buffer
+	UINT32               monoBufferSize; //!< buffer size in bytes
+	MixMonoToStereoF     monoMixer;		 //!< pointer to mixer function
+}
+PaWasapiSubStream;
+
+// ------------------------------------------------------------------------------------------
+/* PaWasapiHostProcessor - redirects processing data */
+typedef struct PaWasapiHostProcessor
+{
+    PaWasapiHostProcessorCallback processor;
+    void *userData;
+}
+PaWasapiHostProcessor;
+
+// ------------------------------------------------------------------------------------------
+typedef struct PaWasapiStream
+{
+	/* IMPLEMENT ME: rename this */
+    PaUtilStreamRepresentation streamRepresentation;
+    PaUtilCpuLoadMeasurer cpuLoadMeasurer;
+    PaUtilBufferProcessor bufferProcessor;
+
+    // input
+	PaWasapiSubStream in;
+    IAudioCaptureClient *cclient;
+    IAudioEndpointVolume *inVol;
+
+	// output
+	PaWasapiSubStream out;
+    IAudioRenderClient  *rclient;
+	IAudioEndpointVolume *outVol;
+
+	// event handles for event-driven processing mode
+	HANDLE event[S_COUNT];
+
+	// buffer mode
+	PaUtilHostBufferSizeMode bufferMode;
+
+	// must be volatile to avoid race condition on user query while
+	// thread is being started
+    volatile BOOL running;
+
+    PA_THREAD_ID dwThreadId;
+    HANDLE hThread;
+	HANDLE hCloseRequest;
+	HANDLE hThreadStart;        //!< signalled by thread on start
+	HANDLE hThreadExit;         //!< signalled by thread on exit
+	HANDLE hBlockingOpStreamRD;
+	HANDLE hBlockingOpStreamWR;
+
+    // Host callback Output overrider
+	PaWasapiHostProcessor hostProcessOverrideOutput;
+
+    // Host callback Input overrider
+	PaWasapiHostProcessor hostProcessOverrideInput;
+
+	// Defines blocking/callback interface used
+	BOOL bBlocking;
+
+	// Av Task (MM thread management)
+	HANDLE hAvTask;
+
+	// Thread priority level
+	PaWasapiThreadPriority nThreadPriority;
+}
+PaWasapiStream;
+
+// Local stream methods
+static void _OnStreamStop(PaWasapiStream *stream);
+static void _FinishStream(PaWasapiStream *stream);
+
+// Local statics
+static volatile BOOL  g_WasapiCOMInit    = FALSE;
+static volatile DWORD g_WasapiInitThread = 0;
+
+// ------------------------------------------------------------------------------------------
+#define LogHostError(HRES) __LogHostError(HRES, __FUNCTION__, __FILE__, __LINE__)
+static HRESULT __LogHostError(HRESULT res, const char *func, const char *file, int line)
+{
+    const char *text = NULL;
+    switch (res)
+	{
+	case S_OK: return res;
+	case E_POINTER                              :text ="E_POINTER"; break;
+	case E_INVALIDARG                           :text ="E_INVALIDARG"; break;
+
+	case AUDCLNT_E_NOT_INITIALIZED              :text ="AUDCLNT_E_NOT_INITIALIZED"; break;
+	case AUDCLNT_E_ALREADY_INITIALIZED          :text ="AUDCLNT_E_ALREADY_INITIALIZED"; break;
+	case AUDCLNT_E_WRONG_ENDPOINT_TYPE          :text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE"; break;
+	case AUDCLNT_E_DEVICE_INVALIDATED           :text ="AUDCLNT_E_DEVICE_INVALIDATED"; break;
+	case AUDCLNT_E_NOT_STOPPED                  :text ="AUDCLNT_E_NOT_STOPPED"; break;
+	case AUDCLNT_E_BUFFER_TOO_LARGE             :text ="AUDCLNT_E_BUFFER_TOO_LARGE"; break;
+	case AUDCLNT_E_OUT_OF_ORDER                 :text ="AUDCLNT_E_OUT_OF_ORDER"; break;
+	case AUDCLNT_E_UNSUPPORTED_FORMAT           :text ="AUDCLNT_E_UNSUPPORTED_FORMAT"; break;
+	case AUDCLNT_E_INVALID_SIZE                 :text ="AUDCLNT_E_INVALID_SIZE"; break;
+	case AUDCLNT_E_DEVICE_IN_USE                :text ="AUDCLNT_E_DEVICE_IN_USE"; break;
+	case AUDCLNT_E_BUFFER_OPERATION_PENDING     :text ="AUDCLNT_E_BUFFER_OPERATION_PENDING"; break;
+	case AUDCLNT_E_THREAD_NOT_REGISTERED        :text ="AUDCLNT_E_THREAD_NOT_REGISTERED"; break;
+	case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED   :text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED"; break;
+	case AUDCLNT_E_ENDPOINT_CREATE_FAILED       :text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED"; break;
+	case AUDCLNT_E_SERVICE_NOT_RUNNING          :text ="AUDCLNT_E_SERVICE_NOT_RUNNING"; break;
+	case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     :text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED"; break;
+	case AUDCLNT_E_EXCLUSIVE_MODE_ONLY          :text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY"; break;
+	case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL"; break;
+	case AUDCLNT_E_EVENTHANDLE_NOT_SET          :text ="AUDCLNT_E_EVENTHANDLE_NOT_SET"; break;
+	case AUDCLNT_E_INCORRECT_BUFFER_SIZE        :text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE"; break;
+	case AUDCLNT_E_BUFFER_SIZE_ERROR            :text ="AUDCLNT_E_BUFFER_SIZE_ERROR"; break;
+	case AUDCLNT_E_CPUUSAGE_EXCEEDED            :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break;
+	case AUDCLNT_E_BUFFER_ERROR					:text ="AUDCLNT_E_BUFFER_ERROR"; break;
+	case AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED		:text ="AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED"; break;
+	case AUDCLNT_E_INVALID_DEVICE_PERIOD		:text ="AUDCLNT_E_INVALID_DEVICE_PERIOD"; break;
+
+	case AUDCLNT_S_BUFFER_EMPTY                 :text ="AUDCLNT_S_BUFFER_EMPTY"; break;
+	case AUDCLNT_S_THREAD_ALREADY_REGISTERED    :text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED"; break;
+	case AUDCLNT_S_POSITION_STALLED				:text ="AUDCLNT_S_POSITION_STALLED"; break;
+
+	// other windows common errors:
+	case CO_E_NOTINITIALIZED                    :text ="CO_E_NOTINITIALIZED: you must call CoInitialize() before Pa_OpenStream()"; break;
+
+	default:
+		text = "UNKNOWN ERROR";
+    }
+	PRINT(("WASAPI ERROR HRESULT: 0x%X : %s\n [FUNCTION: %s FILE: %s {LINE: %d}]\n", res, text, func, file, line));
+	PA_SKELETON_SET_LAST_HOST_ERROR(res, text);
+	return res;
+}
+
+// ------------------------------------------------------------------------------------------
+#define LogPaError(PAERR) __LogPaError(PAERR, __FUNCTION__, __FILE__, __LINE__)
+static PaError __LogPaError(PaError err, const char *func, const char *file, int line)
+{
+	if (err == paNoError)
+		return err;
+	PRINT(("WASAPI ERROR PAERROR: %i : %s\n [FUNCTION: %s FILE: %s {LINE: %d}]\n", err, Pa_GetErrorText(err), func, file, line));
+	return err;
+}
+
+// ------------------------------------------------------------------------------------------
+/*static double nano100ToMillis(REFERENCE_TIME ref)
+{
+    //  1 nano = 0.000000001 seconds
+    //100 nano = 0.0000001   seconds
+    //100 nano = 0.0001   milliseconds
+    return ((double)ref)*0.0001;
+}*/
+
+// ------------------------------------------------------------------------------------------
+static double nano100ToSeconds(REFERENCE_TIME ref)
+{
+    //  1 nano = 0.000000001 seconds
+    //100 nano = 0.0000001   seconds
+    //100 nano = 0.0001   milliseconds
+    return ((double)ref)*0.0000001;
+}
+
+// ------------------------------------------------------------------------------------------
+/*static REFERENCE_TIME MillisTonano100(double ref)
+{
+    //  1 nano = 0.000000001 seconds
+    //100 nano = 0.0000001   seconds
+    //100 nano = 0.0001   milliseconds
+    return (REFERENCE_TIME)(ref/0.0001);
+}*/
+
+// ------------------------------------------------------------------------------------------
+static REFERENCE_TIME SecondsTonano100(double ref)
+{
+    //  1 nano = 0.000000001 seconds
+    //100 nano = 0.0000001   seconds
+    //100 nano = 0.0001   milliseconds
+    return (REFERENCE_TIME)(ref/0.0000001);
+}
+
+// ------------------------------------------------------------------------------------------
+// Makes Hns period from frames and sample rate
+static REFERENCE_TIME MakeHnsPeriod(UINT32 nFrames, DWORD nSamplesPerSec)
+{
+	return (REFERENCE_TIME)((10000.0 * 1000 / nSamplesPerSec * nFrames) + 0.5);
+}
+
+// ------------------------------------------------------------------------------------------
+// Converts PaSampleFormat to bits per sample value
+static WORD PaSampleFormatToBitsPerSample(PaSampleFormat format_id)
+{
+	switch (format_id & ~paNonInterleaved)
+	{
+		case paFloat32:
+		case paInt32: return 32;
+		case paInt24: return 24;
+		case paInt16: return 16;
+		case paInt8:
+		case paUInt8: return 8;
+	}
+	return 0;
+}
+
+// ------------------------------------------------------------------------------------------
+// Converts PaSampleFormat to bits per sample value
+/*static WORD PaSampleFormatToBytesPerSample(PaSampleFormat format_id)
+{
+	return PaSampleFormatToBitsPerSample(format_id) >> 3; // 'bits/8'
+}*/
+
+// ------------------------------------------------------------------------------------------
+// Converts Hns period into number of frames
+static UINT32 MakeFramesFromHns(REFERENCE_TIME hnsPeriod, UINT32 nSamplesPerSec)
+{
+    UINT32 nFrames = (UINT32)(	// frames =
+        1.0 * hnsPeriod *		// hns *
+        nSamplesPerSec /		// (frames / s) /
+        1000 /					// (ms / s) /
+        10000					// (hns / s) /
+        + 0.5					// rounding
+    );
+	return nFrames;
+}
+
+// Aligning function type
+typedef UINT32 (*ALIGN_FUNC) (UINT32 v, UINT32 align);
+
+// ------------------------------------------------------------------------------------------
+// Aligns 'v' backwards
+static UINT32 ALIGN_BWD(UINT32 v, UINT32 align)
+{
+	return ((v - (align ? v % align : 0)));
+}
+
+// ------------------------------------------------------------------------------------------
+// Aligns 'v' forward
+/*static UINT32 ALIGN_FWD(UINT32 v, UINT32 align)
+{
+	UINT32 remainder = (align ? (v % align) : 0);
+	if (remainder == 0)
+		return v;
+	return v + (align - remainder);
+}*/
+
+// ------------------------------------------------------------------------------------------
+// Aligns WASAPI buffer to 128 byte packet boundary. HD Audio will fail to play if buffer
+// is misaligned. This problem was solved in Windows 7 were AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED
+// is thrown although we must align for Vista anyway.
+static UINT32 AlignFramesPerBuffer(UINT32 nFrames, UINT32 nSamplesPerSec, UINT32 nBlockAlign,
+								   ALIGN_FUNC pAlignFunc)
+{
+#define HDA_PACKET_SIZE (128)
+
+	long frame_bytes = nFrames * nBlockAlign;
+	long packets;
+
+	// align to packet size
+	frame_bytes  = pAlignFunc(frame_bytes, HDA_PACKET_SIZE); // use ALIGN_FWD if bigger but safer period is more desired
+	nFrames      = frame_bytes / nBlockAlign;
+	packets      = frame_bytes / HDA_PACKET_SIZE;
+
+	frame_bytes = packets * HDA_PACKET_SIZE;
+	nFrames     = frame_bytes / nBlockAlign;
+
+	return nFrames;
+
+#undef HDA_PACKET_SIZE
+}
+
+// ------------------------------------------------------------------------------------------
+static UINT32 GetFramesSleepTime(UINT32 nFrames, UINT32 nSamplesPerSec)
+{
+	REFERENCE_TIME nDuration;
+	if (nSamplesPerSec == 0)
+		return 0;
+#define REFTIMES_PER_SEC  10000000
+#define REFTIMES_PER_MILLISEC  10000
+	// Calculate the actual duration of the allocated buffer.
+	nDuration = (REFERENCE_TIME)((double)REFTIMES_PER_SEC * nFrames / nSamplesPerSec);
+	return (UINT32)(nDuration/REFTIMES_PER_MILLISEC/2);
+}
+
+// ------------------------------------------------------------------------------------------
+static BOOL SetupAVRT()
+{
+    hDInputDLL = LoadLibraryA("avrt.dll");
+    if (hDInputDLL == NULL)
+        return FALSE;
+
+    _GetProc(pAvRtCreateThreadOrderingGroup,  FAvRtCreateThreadOrderingGroup,  "AvRtCreateThreadOrderingGroup");
+    _GetProc(pAvRtDeleteThreadOrderingGroup,  FAvRtDeleteThreadOrderingGroup,  "AvRtDeleteThreadOrderingGroup");
+    _GetProc(pAvRtWaitOnThreadOrderingGroup,  FAvRtWaitOnThreadOrderingGroup,  "AvRtWaitOnThreadOrderingGroup");
+    _GetProc(pAvSetMmThreadCharacteristics,   FAvSetMmThreadCharacteristics,   "AvSetMmThreadCharacteristicsA");
+	_GetProc(pAvRevertMmThreadCharacteristics,FAvRevertMmThreadCharacteristics,"AvRevertMmThreadCharacteristics");
+    _GetProc(pAvSetMmThreadPriority,          FAvSetMmThreadPriority,          "AvSetMmThreadPriority");
+
+	return pAvRtCreateThreadOrderingGroup &&
+		pAvRtDeleteThreadOrderingGroup &&
+		pAvRtWaitOnThreadOrderingGroup &&
+		pAvSetMmThreadCharacteristics &&
+		pAvRevertMmThreadCharacteristics &&
+		pAvSetMmThreadPriority;
+}
+
+// ------------------------------------------------------------------------------------------
+static void CloseAVRT()
+{
+	if (hDInputDLL != NULL)
+		FreeLibrary(hDInputDLL);
+	hDInputDLL = NULL;
+}
+
+// ------------------------------------------------------------------------------------------
+static BOOL IsWow64()
+{
+	// http://msdn.microsoft.com/en-us/library/ms684139(VS.85).aspx
+
+	typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
+	LPFN_ISWOW64PROCESS fnIsWow64Process;
+
+    BOOL bIsWow64 = FALSE;
+
+    // IsWow64Process is not available on all supported versions of Windows.
+    // Use GetModuleHandle to get a handle to the DLL that contains the function
+    // and GetProcAddress to get a pointer to the function if available.
+
+    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
+        GetModuleHandle(TEXT("kernel32")), TEXT("IsWow64Process"));
+
+    if (fnIsWow64Process == NULL)
+		return FALSE;
+
+    if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
+		return FALSE;
+
+    return bIsWow64;
+}
+
+// ------------------------------------------------------------------------------------------
+typedef enum EWindowsVersion
+{
+	WINDOWS_UNKNOWN			 = 0,
+	WINDOWS_VISTA_SERVER2008 = (1 << 0),
+	WINDOWS_7_SERVER2008R2	 = (1 << 1),
+	WINDOWS_FUTURE           = (1 << 2)
+}
+EWindowsVersion;
+// Defines Windows 7/Windows Server 2008 R2 and up (future versions)
+#define WINDOWS_7_SERVER2008R2_AND_UP (WINDOWS_7_SERVER2008R2|WINDOWS_FUTURE)
+// The function is limited to Vista/7 mostly as we need just to find out Vista/WOW64 combination
+// in order to use WASAPI WOW64 workarounds.
+static UINT32 GetWindowsVersion()
+{
+	static UINT32 version = WINDOWS_UNKNOWN;
+
+	if (version == WINDOWS_UNKNOWN)
+	{
+		DWORD dwVersion = 0;
+		DWORD dwMajorVersion = 0;
+		DWORD dwMinorVersion = 0;
+		DWORD dwBuild = 0;
+
+		typedef DWORD (WINAPI *LPFN_GETVERSION)(VOID);
+		LPFN_GETVERSION fnGetVersion;
+
+		fnGetVersion = (LPFN_GETVERSION) GetProcAddress(GetModuleHandle(TEXT("kernel32")), TEXT("GetVersion"));
+		if (fnGetVersion == NULL)
+			return WINDOWS_UNKNOWN;
+
+		dwVersion = fnGetVersion();
+
+		// Get the Windows version
+		dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+		dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+
+		// Get the build number
+		if (dwVersion < 0x80000000)
+			dwBuild = (DWORD)(HIWORD(dwVersion));
+
+		switch (dwMajorVersion)
+		{
+		case 0:
+		case 1:
+		case 2:
+		case 3:
+		case 4:
+		case 5:
+			break; // skip lower
+		case 6:
+			switch (dwMinorVersion)
+			{
+			case 0:
+				version |= WINDOWS_VISTA_SERVER2008;
+				break;
+			case 1:
+				version |= WINDOWS_7_SERVER2008R2;
+				break;
+			default:
+				version |= WINDOWS_FUTURE;
+			}
+			break;
+		default:
+			version |= WINDOWS_FUTURE;
+		}
+	}
+
+	return version;
+}
+
+// ------------------------------------------------------------------------------------------
+static BOOL UseWOW64Workaround()
+{
+	// note: WOW64 bug is common to Windows Vista x64, thus we fall back to safe Poll-driven
+	//       method. Windows 7 x64 seems has WOW64 bug fixed.
+
+	return (IsWow64() && (GetWindowsVersion() & WINDOWS_VISTA_SERVER2008));
+}
+
+// ------------------------------------------------------------------------------------------
+typedef enum EMixerDir { MIX_DIR__1TO2, MIX_DIR__2TO1 } EMixerDir;
+
+// ------------------------------------------------------------------------------------------
+#define _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(TYPE)\
+	TYPE * __restrict to   = __to;\
+	TYPE * __restrict from = __from;\
+	TYPE * __restrict end  = from + count;\
+	while (from != end)\
+	{\
+		*to ++ = *from;\
+		*to ++ = *from;\
+		++ from;\
+	}
+
+// ------------------------------------------------------------------------------------------
+#define _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(TYPE)\
+	TYPE * __restrict to   = (TYPE *)__to;\
+	TYPE * __restrict from = (TYPE *)__from;\
+	TYPE * __restrict end  = to + count;\
+	while (to != end)\
+	{\
+		*to ++ = (TYPE)((float)(from[0] + from[1]) * 0.5f);\
+		from += 2;\
+	}
+
+// ------------------------------------------------------------------------------------------
+static void _MixMonoToStereo_1TO2_8(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(BYTE); }
+static void _MixMonoToStereo_1TO2_16(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(short); }
+static void _MixMonoToStereo_1TO2_24(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(int); /* !!! int24 data is contained in 32-bit containers*/ }
+static void _MixMonoToStereo_1TO2_32(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(int); }
+static void _MixMonoToStereo_1TO2_32f(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(float); }
+
+// ------------------------------------------------------------------------------------------
+static void _MixMonoToStereo_2TO1_8(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(BYTE); }
+static void _MixMonoToStereo_2TO1_16(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(short); }
+static void _MixMonoToStereo_2TO1_24(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(int); /* !!! int24 data is contained in 32-bit containers*/ }
+static void _MixMonoToStereo_2TO1_32(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(int); }
+static void _MixMonoToStereo_2TO1_32f(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1(float); }
+
+// ------------------------------------------------------------------------------------------
+static MixMonoToStereoF _GetMonoToStereoMixer(PaSampleFormat format, EMixerDir dir)
+{
+	switch (dir)
+	{
+	case MIX_DIR__1TO2:
+		switch (format & ~paNonInterleaved)
+		{
+		case paUInt8:	return _MixMonoToStereo_1TO2_8;
+		case paInt16:	return _MixMonoToStereo_1TO2_16;
+		case paInt24:	return _MixMonoToStereo_1TO2_24;
+		case paInt32:	return _MixMonoToStereo_1TO2_32;
+		case paFloat32: return _MixMonoToStereo_1TO2_32f;
+		}
+		break;
+
+	case MIX_DIR__2TO1:
+		switch (format & ~paNonInterleaved)
+		{
+		case paUInt8:	return _MixMonoToStereo_2TO1_8;
+		case paInt16:	return _MixMonoToStereo_2TO1_16;
+		case paInt24:	return _MixMonoToStereo_2TO1_24;
+		case paInt32:	return _MixMonoToStereo_2TO1_32;
+		case paFloat32: return _MixMonoToStereo_2TO1_32f;
+		}
+		break;
+	}
+
+	return NULL;
+}
+
+// ------------------------------------------------------------------------------------------
+PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+{
+    PaError result = paNoError;
+    PaWasapiHostApiRepresentation *paWasapi;
+    PaDeviceInfo *deviceInfoArray;
+    HRESULT hr = S_OK;
+    IMMDeviceCollection* pEndPoints = NULL;
+	UINT i;
+
+    if (!SetupAVRT())
+	{
+        PRINT(("WASAPI: No AVRT! (not VISTA?)"));
+        return paNoError;
+    }
+
+    /*
+        If COM is already initialized CoInitialize will either return
+        FALSE, or RPC_E_CHANGED_MODE if it was initialised in a different
+        threading mode. In either case we shouldn't consider it an error
+        but we need to be careful to not call CoUninitialize() if
+        RPC_E_CHANGED_MODE was returned.
+    */
+    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+    if (FAILED(hr) && (hr != RPC_E_CHANGED_MODE))
+	{
+		PRINT(("WASAPI: failed CoInitialize"));
+        return paUnanticipatedHostError;
+	}
+    if (hr != RPC_E_CHANGED_MODE)
+        g_WasapiCOMInit = TRUE;
+
+	// Memorize calling thread id and report warning on Uninitialize if calling thread is different
+	// as CoInitialize must match CoUninitialize in the same thread.
+	g_WasapiInitThread = GetCurrentThreadId();
+
+    paWasapi = (PaWasapiHostApiRepresentation *)PaUtil_AllocateMemory( sizeof(PaWasapiHostApiRepresentation) );
+    if (paWasapi == NULL)
+	{
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    paWasapi->allocations = PaUtil_CreateAllocationGroup();
+    if (paWasapi->allocations == NULL)
+	{
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    *hostApi                             = &paWasapi->inheritedHostApiRep;
+    (*hostApi)->info.structVersion		 = 1;
+    (*hostApi)->info.type				 = paWASAPI;
+    (*hostApi)->info.name				 = "Windows WASAPI";
+    (*hostApi)->info.deviceCount		 = 0;
+    (*hostApi)->info.defaultInputDevice	 = paNoDevice;
+    (*hostApi)->info.defaultOutputDevice = paNoDevice;
+
+    paWasapi->enumerator = NULL;
+    hr = CoCreateInstance(&pa_CLSID_IMMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER,
+             &pa_IID_IMMDeviceEnumerator, (void **)&paWasapi->enumerator);
+    IF_FAILED_JUMP(hr, error);
+
+    // getting default device ids in the eMultimedia "role"
+    {
+        {
+            IMMDevice *defaultRenderer = NULL;
+            hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(paWasapi->enumerator, eRender, eMultimedia, &defaultRenderer);
+            if (hr != S_OK)
+			{
+				if (hr != E_NOTFOUND)
+					IF_FAILED_JUMP(hr, error);
+			}
+			else
+			{
+				WCHAR *pszDeviceId = NULL;
+				hr = IMMDevice_GetId(defaultRenderer, &pszDeviceId);
+				IF_FAILED_JUMP(hr, error);
+				wcsncpy(paWasapi->defaultRenderer, pszDeviceId, MAX_STR_LEN-1);
+				CoTaskMemFree(pszDeviceId);
+				IMMDevice_Release(defaultRenderer);
+			}
+        }
+
+        {
+            IMMDevice *defaultCapturer = NULL;
+            hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(paWasapi->enumerator, eCapture, eMultimedia, &defaultCapturer);
+            if (hr != S_OK)
+			{
+				if (hr != E_NOTFOUND)
+					IF_FAILED_JUMP(hr, error);
+			}
+			else
+			{
+				WCHAR *pszDeviceId = NULL;
+				hr = IMMDevice_GetId(defaultCapturer, &pszDeviceId);
+				IF_FAILED_JUMP(hr, error);
+				wcsncpy(paWasapi->defaultCapturer, pszDeviceId, MAX_STR_LEN-1);
+				CoTaskMemFree(pszDeviceId);
+				IMMDevice_Release(defaultCapturer);
+			}
+        }
+    }
+
+    hr = IMMDeviceEnumerator_EnumAudioEndpoints(paWasapi->enumerator, eAll, DEVICE_STATE_ACTIVE, &pEndPoints);
+    IF_FAILED_JUMP(hr, error);
+
+    hr = IMMDeviceCollection_GetCount(pEndPoints, &paWasapi->deviceCount);
+    IF_FAILED_JUMP(hr, error);
+
+    paWasapi->devInfo = (PaWasapiDeviceInfo *)malloc(sizeof(PaWasapiDeviceInfo) * paWasapi->deviceCount);
+	for (i = 0; i < paWasapi->deviceCount; ++i)
+		memset(&paWasapi->devInfo[i], 0, sizeof(PaWasapiDeviceInfo));
+
+    if (paWasapi->deviceCount > 0)
+    {
+        (*hostApi)->deviceInfos = (PaDeviceInfo **)PaUtil_GroupAllocateMemory(
+                paWasapi->allocations, sizeof(PaDeviceInfo *) * paWasapi->deviceCount);
+        if ((*hostApi)->deviceInfos == NULL)
+		{
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        /* allocate all device info structs in a contiguous block */
+        deviceInfoArray = (PaDeviceInfo *)PaUtil_GroupAllocateMemory(
+                paWasapi->allocations, sizeof(PaDeviceInfo) * paWasapi->deviceCount);
+        if (deviceInfoArray == NULL)
+		{
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        for (i = 0; i < paWasapi->deviceCount; ++i)
+		{
+			DWORD state				  = 0;
+            PaDeviceInfo *deviceInfo  = &deviceInfoArray[i];
+            deviceInfo->structVersion = 2;
+            deviceInfo->hostApi       = hostApiIndex;
+
+			PA_DEBUG(("WASAPI: device idx: %02d\n", i));
+			PA_DEBUG(("WASAPI: ---------------\n"));
+
+            hr = IMMDeviceCollection_Item(pEndPoints, i, &paWasapi->devInfo[i].device);
+            IF_FAILED_JUMP(hr, error);
+
+            // getting ID
+            {
+                WCHAR *pszDeviceId = NULL;
+                hr = IMMDevice_GetId(paWasapi->devInfo[i].device, &pszDeviceId);
+                IF_FAILED_JUMP(hr, error);
+                wcsncpy(paWasapi->devInfo[i].szDeviceID, pszDeviceId, MAX_STR_LEN-1);
+                CoTaskMemFree(pszDeviceId);
+
+                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer) == 0)
+				{// we found the default input!
+                    (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount;
+                }
+                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer) == 0)
+				{// we found the default output!
+                    (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount;
+                }
+            }
+
+            hr = IMMDevice_GetState(paWasapi->devInfo[i].device, &paWasapi->devInfo[i].state);
+            IF_FAILED_JUMP(hr, error);
+
+            if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE)
+			{
+                PRINT(("WASAPI device: %d is not currently available (state:%d)\n",i,state));
+            }
+
+            {
+                IPropertyStore *pProperty;
+                hr = IMMDevice_OpenPropertyStore(paWasapi->devInfo[i].device, STGM_READ, &pProperty);
+                IF_FAILED_JUMP(hr, error);
+
+                // "Friendly" Name
+                {
+					char *deviceName;
+                    PROPVARIANT value;
+                    PropVariantInit(&value);
+                    hr = IPropertyStore_GetValue(pProperty, &PKEY_Device_FriendlyName, &value);
+                    IF_FAILED_JUMP(hr, error);
+                    deviceInfo->name = NULL;
+                    deviceName = (char *)PaUtil_GroupAllocateMemory(paWasapi->allocations, MAX_STR_LEN + 1);
+                    if (deviceName == NULL)
+					{
+                        result = paInsufficientMemory;
+                        goto error;
+                    }
+					if (value.pwszVal)
+						wcstombs(deviceName, value.pwszVal, MAX_STR_LEN-1);
+					else
+						_snprintf(deviceName, MAX_STR_LEN-1, "baddev%d", i);
+                    deviceInfo->name = deviceName;
+                    PropVariantClear(&value);
+					PA_DEBUG(("WASAPI:%d| name[%s]\n", i, deviceInfo->name));
+                }
+
+                // Default format
+                {
+                    PROPVARIANT value;
+                    PropVariantInit(&value);
+                    hr = IPropertyStore_GetValue(pProperty, &PKEY_AudioEngine_DeviceFormat, &value);
+                    IF_FAILED_JUMP(hr, error);
+					memcpy(&paWasapi->devInfo[i].DefaultFormat, value.blob.pBlobData, min(sizeof(paWasapi->devInfo[i].DefaultFormat), value.blob.cbSize));
+                    // cleanup
+                    PropVariantClear(&value);
+                }
+
+                // Formfactor
+                {
+                    PROPVARIANT value;
+                    PropVariantInit(&value);
+                    hr = IPropertyStore_GetValue(pProperty, &PKEY_AudioEndpoint_FormFactor, &value);
+                    IF_FAILED_JUMP(hr, error);
+					// set
+					#if defined(DUMMYUNIONNAME) && defined(NONAMELESSUNION)
+						// avoid breaking strict-aliasing rules in such line: (EndpointFormFactor)(*((UINT *)(((WORD *)&value.wReserved3)+1)));
+						UINT v;
+						memcpy(&v, (((WORD *)&value.wReserved3)+1), sizeof(v));
+						paWasapi->devInfo[i].formFactor = (EndpointFormFactor)v;
+					#else
+						paWasapi->devInfo[i].formFactor = (EndpointFormFactor)value.uintVal;
+					#endif
+					PA_DEBUG(("WASAPI:%d| form-factor[%d]\n", i, paWasapi->devInfo[i].formFactor));
+                    // cleanup
+                    PropVariantClear(&value);
+                }
+
+				SAFE_RELEASE(pProperty);
+            }
+
+
+            // Endpoint data
+            {
+                IMMEndpoint *endpoint = NULL;
+                hr = IMMDevice_QueryInterface(paWasapi->devInfo[i].device, &pa_IID_IMMEndpoint, (void **)&endpoint);
+                if (SUCCEEDED(hr))
+				{
+                    hr = IMMEndpoint_GetDataFlow(endpoint, &paWasapi->devInfo[i].flow);
+                    SAFE_RELEASE(endpoint);
+                }
+            }
+
+            // Getting a temporary IAudioClient for more fields
+            // we make sure NOT to call Initialize yet!
+            {
+                IAudioClient *tmpClient = NULL;
+
+                hr = IMMDevice_Activate(paWasapi->devInfo[i].device, &pa_IID_IAudioClient,
+					CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient);
+                IF_FAILED_JUMP(hr, error);
+
+                hr = IAudioClient_GetDevicePeriod(tmpClient,
+                    &paWasapi->devInfo[i].DefaultDevicePeriod,
+                    &paWasapi->devInfo[i].MinimumDevicePeriod);
+                IF_FAILED_JUMP(hr, error);
+
+                //hr = tmpClient->GetMixFormat(&paWasapi->devInfo[i].MixFormat);
+
+				// Release client
+				SAFE_RELEASE(tmpClient);
+
+				if (hr != S_OK)
+				{
+					//davidv: this happened with my hardware, previously for that same device in DirectSound:
+					//Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f}
+					//so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat
+					LogHostError(hr);
+					goto error;
+				}
+            }
+
+            // we can now fill in portaudio device data
+            deviceInfo->maxInputChannels  = 0;
+            deviceInfo->maxOutputChannels = 0;
+			deviceInfo->defaultSampleRate = paWasapi->devInfo[i].DefaultFormat.Format.nSamplesPerSec;
+            switch (paWasapi->devInfo[i].flow)
+			{
+			case eRender: {
+                deviceInfo->maxOutputChannels		 = paWasapi->devInfo[i].DefaultFormat.Format.nChannels;
+                deviceInfo->defaultHighOutputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
+                deviceInfo->defaultLowOutputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
+				PA_DEBUG(("WASAPI:%d| def.SR[%d] max.CH[%d] latency{hi[%f] lo[%f]}\n", i, (UINT32)deviceInfo->defaultSampleRate,
+					deviceInfo->maxOutputChannels, (float)deviceInfo->defaultHighOutputLatency, (float)deviceInfo->defaultLowOutputLatency));
+				break;}
+			case eCapture: {
+                deviceInfo->maxInputChannels		= paWasapi->devInfo[i].DefaultFormat.Format.nChannels;
+                deviceInfo->defaultHighInputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
+                deviceInfo->defaultLowInputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
+				PA_DEBUG(("WASAPI:%d| def.SR[%d] max.CH[%d] latency{hi[%f] lo[%f]}\n", i, (UINT32)deviceInfo->defaultSampleRate,
+					deviceInfo->maxInputChannels, (float)deviceInfo->defaultHighInputLatency, (float)deviceInfo->defaultLowInputLatency));
+				break; }
+            default:
+                PRINT(("WASAPI:%d| bad Data Flow!\n", i));
+                //continue; // do not skip from list, allow to initialize
+            break;
+            }
+
+            (*hostApi)->deviceInfos[i] = deviceInfo;
+            ++(*hostApi)->info.deviceCount;
+        }
+    }
+
+    (*hostApi)->Terminate = Terminate;
+    (*hostApi)->OpenStream = OpenStream;
+    (*hostApi)->IsFormatSupported = IsFormatSupported;
+
+    PaUtil_InitializeStreamInterface( &paWasapi->callbackStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, GetStreamCpuLoad,
+                                      PaUtil_DummyRead, PaUtil_DummyWrite,
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
+
+    PaUtil_InitializeStreamInterface( &paWasapi->blockingStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, PaUtil_DummyGetCpuLoad,
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
+
+
+	// findout if platform workaround is required
+	paWasapi->useWOW64Workaround = UseWOW64Workaround();
+
+    SAFE_RELEASE(pEndPoints);
+
+	PRINT(("WASAPI: initialized ok\n"));
+
+    return paNoError;
+
+error:
+
+	PRINT(("WASAPI: failed %s error[%d|%s]\n", __FUNCTION__, result, Pa_GetErrorText(result)));
+
+    SAFE_RELEASE(pEndPoints);
+
+	Terminate((PaUtilHostApiRepresentation *)paWasapi);
+
+    return result;
+}
+
+// ------------------------------------------------------------------------------------------
+static void Terminate( PaUtilHostApiRepresentation *hostApi )
+{
+	UINT i;
+    PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi;
+	if (paWasapi == NULL)
+		return;
+
+	// Release IMMDeviceEnumerator
+    SAFE_RELEASE(paWasapi->enumerator);
+
+    for (i = 0; i < paWasapi->deviceCount; ++i)
+	{
+        PaWasapiDeviceInfo *info = &paWasapi->devInfo[i];
+        SAFE_RELEASE(info->device);
+
+		//if (info->MixFormat)
+        //    CoTaskMemFree(info->MixFormat);
+    }
+    free(paWasapi->devInfo);
+
+    if (paWasapi->allocations)
+	{
+        PaUtil_FreeAllAllocations(paWasapi->allocations);
+        PaUtil_DestroyAllocationGroup(paWasapi->allocations);
+    }
+
+    PaUtil_FreeMemory(paWasapi);
+
+	// Close AVRT
+	CloseAVRT();
+
+	// Uninit COM (checking calling thread we won't unitialize user's COM if one is calling
+	//             Pa_Unitialize by mistake from not initializing thread)
+    if (g_WasapiCOMInit)
+	{
+		DWORD calling_thread_id = GetCurrentThreadId();
+		if (g_WasapiInitThread != calling_thread_id)
+		{
+			PRINT(("WASAPI: failed CoUninitializes calling thread[%d] does not match initializing thread[%d]\n",
+				calling_thread_id, g_WasapiInitThread));
+		}
+		else
+		{
+			CoUninitialize();
+		}
+	}
+}
+
+// ------------------------------------------------------------------------------------------
+static PaWasapiHostApiRepresentation *_GetHostApi(PaError *_error)
+{
+	PaError error;
+
+	PaUtilHostApiRepresentation *pApi;
+	if ((error = PaUtil_GetHostApiRepresentation(&pApi, paWASAPI)) != paNoError)
+	{
+		if (_error != NULL)
+			(*_error) = error;
+
+		return NULL;
+	}
+	return (PaWasapiHostApiRepresentation *)pApi;
+}
+
+// ------------------------------------------------------------------------------------------
+int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int nFormatSize, PaDeviceIndex nDevice )
+{
+	PaError ret;
+	PaWasapiHostApiRepresentation *paWasapi;
+	UINT32 size;
+	PaDeviceIndex index;
+
+	if (pFormat == NULL)
+		return paBadBufferPtr;
+	if (nFormatSize <= 0)
+		return paBufferTooSmall;
+
+	// Get API
+	paWasapi = _GetHostApi(&ret);
+	if (paWasapi == NULL)
+		return ret;
+
+	// Get device index
+	ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep);
+    if (ret != paNoError)
+        return ret;
+
+	// Validate index
+	if ((UINT32)index >= paWasapi->deviceCount)
+		return paInvalidDevice;
+
+	size = min(nFormatSize, (UINT32)sizeof(paWasapi->devInfo[ index ].DefaultFormat));
+	memcpy(pFormat, &paWasapi->devInfo[ index ].DefaultFormat, size);
+
+	return size;
+}
+
+// ------------------------------------------------------------------------------------------
+int PaWasapi_GetDeviceRole( PaDeviceIndex nDevice )
+{
+	PaError ret;
+	PaDeviceIndex index;
+
+	// Get API
+	PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
+	if (paWasapi == NULL)
+		return paNotInitialized;
+
+	// Get device index
+	ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep);
+    if (ret != paNoError)
+        return ret;
+
+	// Validate index
+	if ((UINT32)index >= paWasapi->deviceCount)
+		return paInvalidDevice;
+
+	return paWasapi->devInfo[ index ].formFactor;
+}
+
+// ------------------------------------------------------------------------------------------
+PaError PaWasapi_GetFramesPerHostBuffer( PaStream *pStream, unsigned int *nInput, unsigned int *nOutput )
+{
+    PaWasapiStream *stream = (PaWasapiStream *)pStream;
+	if (stream == NULL)
+		return paBadStreamPtr;
+
+	if (nInput != NULL)
+		(*nInput) = stream->in.framesPerHostCallback;
+
+	if (nOutput != NULL)
+		(*nOutput) = stream->out.framesPerHostCallback;
+
+	return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+static void LogWAVEFORMATEXTENSIBLE(const WAVEFORMATEXTENSIBLE *in)
+{
+    const WAVEFORMATEX *old = (WAVEFORMATEX *)in;
+	switch (old->wFormatTag)
+	{
+	case WAVE_FORMAT_EXTENSIBLE: {
+
+		PRINT(("wFormatTag=WAVE_FORMAT_EXTENSIBLE\n"));
+
+		if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))
+		{
+			PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n"));
+		}
+		else
+		if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_PCM))
+		{
+			PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_PCM\n"));
+		}
+		else
+		{
+			PRINT(("SubFormat=CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n",
+										in->SubFormat.Data1,
+										in->SubFormat.Data2,
+										in->SubFormat.Data3,
+										(int)in->SubFormat.Data4[0],
+										(int)in->SubFormat.Data4[1],
+										(int)in->SubFormat.Data4[2],
+										(int)in->SubFormat.Data4[3],
+										(int)in->SubFormat.Data4[4],
+										(int)in->SubFormat.Data4[5],
+										(int)in->SubFormat.Data4[6],
+										(int)in->SubFormat.Data4[7]));
+		}
+		PRINT(("Samples.wValidBitsPerSample=%d\n",  in->Samples.wValidBitsPerSample));
+		PRINT(("dwChannelMask  =0x%X\n",in->dwChannelMask));
+
+		break; }
+
+	case WAVE_FORMAT_PCM:        PRINT(("wFormatTag=WAVE_FORMAT_PCM\n")); break;
+	case WAVE_FORMAT_IEEE_FLOAT: PRINT(("wFormatTag=WAVE_FORMAT_IEEE_FLOAT\n")); break;
+	default : PRINT(("wFormatTag=UNKNOWN(%d)\n",old->wFormatTag)); break;
+	}
+
+	PRINT(("nChannels      =%d\n",old->nChannels));
+	PRINT(("nSamplesPerSec =%d\n",old->nSamplesPerSec));
+	PRINT(("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec));
+	PRINT(("nBlockAlign    =%d\n",old->nBlockAlign));
+	PRINT(("wBitsPerSample =%d\n",old->wBitsPerSample));
+	PRINT(("cbSize         =%d\n",old->cbSize));
+}
+
+// ------------------------------------------------------------------------------------------
+static PaSampleFormat WaveToPaFormat(const WAVEFORMATEXTENSIBLE *in)
+{
+    const WAVEFORMATEX *old = (WAVEFORMATEX *)in;
+
+    switch (old->wFormatTag)
+	{
+    case WAVE_FORMAT_EXTENSIBLE: {
+        if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))
+		{
+            if (in->Samples.wValidBitsPerSample == 32)
+                return paFloat32;
+        }
+        else
+		if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_PCM))
+		{
+            switch (old->wBitsPerSample)
+			{
+                case 32: return paInt32;
+                case 24: return paInt24;
+                case  8: return paUInt8;
+                case 16: return paInt16;
+            }
+        }
+		break; }
+
+    case WAVE_FORMAT_IEEE_FLOAT:
+		return paFloat32;
+
+    case WAVE_FORMAT_PCM: {
+        switch (old->wBitsPerSample)
+		{
+            case 32: return paInt32;
+            case 24: return paInt24;
+            case  8: return paUInt8;
+            case 16: return paInt16;
+        }
+		break; }
+    }
+
+    return paCustomFormat;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError MakeWaveFormatFromParams(WAVEFORMATEXTENSIBLE *wavex, const PaStreamParameters *params,
+									double sampleRate)
+{
+	WORD bitsPerSample;
+	WAVEFORMATEX *old;
+	DWORD channelMask = 0;
+	PaWasapiStreamInfo *streamInfo = (PaWasapiStreamInfo *)params->hostApiSpecificStreamInfo;
+
+	// Get user assigned channel mask
+	if ((streamInfo != NULL) && (streamInfo->flags & paWinWasapiUseChannelMask))
+		channelMask = streamInfo->channelMask;
+
+	// Convert PaSampleFormat to bits per sample
+	if ((bitsPerSample = PaSampleFormatToBitsPerSample(params->sampleFormat)) == 0)
+		return paSampleFormatNotSupported;
+
+    memset(wavex, 0, sizeof(*wavex));
+
+    old					 = (WAVEFORMATEX *)wavex;
+    old->nChannels       = (WORD)params->channelCount;
+    old->nSamplesPerSec  = (DWORD)sampleRate;
+	if ((old->wBitsPerSample = bitsPerSample) > 16)
+	{
+		old->wBitsPerSample = 32; // 20 or 24 bits must go in 32 bit containers (ints)
+	}
+    old->nBlockAlign     = (old->nChannels * (old->wBitsPerSample/8));
+    old->nAvgBytesPerSec = (old->nSamplesPerSec * old->nBlockAlign);
+
+    //WAVEFORMATEX
+    /*if ((params->channelCount <= 2) && ((bitsPerSample == 16) || (bitsPerSample == 8)))
+	{
+        old->cbSize		= 0;
+        old->wFormatTag	= WAVE_FORMAT_PCM;
+    }
+    //WAVEFORMATEXTENSIBLE
+    else*/
+	{
+        old->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
+        old->cbSize		= sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX);
+
+        if ((params->sampleFormat & ~paNonInterleaved) == paFloat32)
+            wavex->SubFormat = pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
+        else
+            wavex->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM;
+
+        wavex->Samples.wValidBitsPerSample = bitsPerSample; //no extra padding!
+
+		// Set channel mask
+		if (channelMask != 0)
+		{
+			wavex->dwChannelMask = channelMask;
+		}
+		else
+		{
+			switch (params->channelCount)
+			{
+			case 1:  wavex->dwChannelMask = KSAUDIO_SPEAKER_MONO; break;
+			case 2:  wavex->dwChannelMask = KSAUDIO_SPEAKER_STEREO; break;
+			case 4:  wavex->dwChannelMask = KSAUDIO_SPEAKER_QUAD; break;
+			case 6:  wavex->dwChannelMask = KSAUDIO_SPEAKER_5POINT1; break;
+			case 8:  wavex->dwChannelMask = KSAUDIO_SPEAKER_7POINT1; break;
+			default: wavex->dwChannelMask = 0; break;
+			}
+		}
+	}
+    return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+/*static void wasapiFillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
+{
+    PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat ));
+    PA_DEBUG(( "sampleRate = %f\n" , sampleRate ));
+    PA_DEBUG(( "chanelCount = %d\n", channelCount ));
+
+    pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
+    pwfext->Format.nChannels = (WORD)channelCount;
+    pwfext->Format.nSamplesPerSec = (DWORD)sampleRate;
+    if(channelCount == 1)
+        pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT;
+    else
+        pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO;
+    if(sampleFormat == paFloat32)
+    {
+        pwfext->Format.nBlockAlign = (WORD)(channelCount * 4);
+        pwfext->Format.wBitsPerSample = 32;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 32;
+        pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
+    }
+    else if(sampleFormat == paInt32)
+    {
+        pwfext->Format.nBlockAlign = (WORD)(channelCount * 4);
+        pwfext->Format.wBitsPerSample = 32;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 32;
+        pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    else if(sampleFormat == paInt24)
+    {
+        pwfext->Format.nBlockAlign = (WORD)(channelCount * 4);
+        pwfext->Format.wBitsPerSample = 32; // 24-bit in 32-bit int container
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 24;
+        pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    else if(sampleFormat == paInt16)
+    {
+        pwfext->Format.nBlockAlign = (WORD)(channelCount * 2);
+        pwfext->Format.wBitsPerSample = 16;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 16;
+        pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign;
+}*/
+
+// ------------------------------------------------------------------------------------------
+static PaError GetClosestFormat(IAudioClient *myClient, double sampleRate,
+	const PaStreamParameters *_params, AUDCLNT_SHAREMODE shareMode, WAVEFORMATEXTENSIBLE *outWavex,
+	BOOL output)
+{
+	PaError answer                   = paInvalidSampleRate;
+	WAVEFORMATEX *sharedClosestMatch = NULL;
+	HRESULT hr                       = !S_OK;
+	PaStreamParameters params       = (*_params);
+
+	/* It was not noticed that 24-bit Input producing no output while device accepts this format.
+	   To fix this issue let's ask for 32-bits and let PA converters convert host 32-bit data
+	   to 24-bit for user-space. The bug concerns Vista, if Windows 7 supports 24-bits for Input
+	   please report to PortAudio developers to exclude Windows 7.
+	*/
+	if ((params.sampleFormat == paInt24) && (output == FALSE))
+		params.sampleFormat = paFloat32;
+
+    MakeWaveFormatFromParams(outWavex, &params, sampleRate);
+
+	hr = IAudioClient_IsFormatSupported(myClient, shareMode, &outWavex->Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL));
+	if (hr == S_OK)
+		answer = paFormatIsSupported;
+    else
+	if (sharedClosestMatch)
+	{
+		WORD bitsPerSample;
+        WAVEFORMATEXTENSIBLE *ext = (WAVEFORMATEXTENSIBLE*)sharedClosestMatch;
+
+		GUID subf_guid = GUID_NULL;
+		if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE)
+		{
+			memcpy(outWavex, sharedClosestMatch, sizeof(WAVEFORMATEXTENSIBLE));
+			subf_guid = ext->SubFormat;
+		}
+		else
+			memcpy(outWavex, sharedClosestMatch, sizeof(WAVEFORMATEX));
+
+        CoTaskMemFree(sharedClosestMatch);
+
+		// Make supported by default
+		answer = paFormatIsSupported;
+
+		// Validate SampleRate
+		if ((DWORD)sampleRate != outWavex->Format.nSamplesPerSec)
+			return paInvalidSampleRate;
+
+		// Validate Channel count
+		if ((WORD)params.channelCount != outWavex->Format.nChannels)
+		{
+			// If mono, then driver does not support 1 channel, we use internal workaround
+			// of tiny software mixing functionality, e.g. we provide to user buffer 1 channel
+			// but then mix into 2 for device buffer
+			if ((params.channelCount == 1) && (outWavex->Format.nChannels == 2))
+				return paFormatIsSupported;
+			else
+				return paInvalidChannelCount;
+		}
+
+		// Validate Sample format
+		if ((bitsPerSample = PaSampleFormatToBitsPerSample(params.sampleFormat)) == 0)
+			return paSampleFormatNotSupported;
+
+		// Validate Sample format: bit size (WASAPI does not limit 'bit size')
+		//if (bitsPerSample != outWavex->Format.wBitsPerSample)
+		//	return paSampleFormatNotSupported;
+
+		// Validate Sample format: paFloat32 (WASAPI does not limit 'bit type')
+		//if ((params->sampleFormat == paFloat32) && (subf_guid != KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))
+		//	return paSampleFormatNotSupported;
+
+		// Validate Sample format: paInt32 (WASAPI does not limit 'bit type')
+		//if ((params->sampleFormat == paInt32) && (subf_guid != KSDATAFORMAT_SUBTYPE_PCM))
+		//	return paSampleFormatNotSupported;
+	}
+	else
+	{
+		static const int BestToWorst[] = { paFloat32, paInt24, paInt16 };
+		int i;
+
+		// Try combination stereo and we will use built-in mono-stereo mixer then
+		if (params.channelCount == 1)
+		{
+			WAVEFORMATEXTENSIBLE stereo = { 0 };
+
+			PaStreamParameters stereo_params = params;
+			stereo_params.channelCount = 2;
+
+			MakeWaveFormatFromParams(&stereo, &stereo_params, sampleRate);
+
+			hr = IAudioClient_IsFormatSupported(myClient, shareMode, &stereo.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL));
+			if (hr == S_OK)
+			{
+				memcpy(outWavex, &stereo, sizeof(WAVEFORMATEXTENSIBLE));
+				CoTaskMemFree(sharedClosestMatch);
+				return (answer = paFormatIsSupported);
+			}
+
+			// Try selecting suitable sample type
+			for (i = 0; i < STATIC_ARRAY_SIZE(BestToWorst); ++i)
+			{
+				WAVEFORMATEXTENSIBLE sample = { 0 };
+
+				PaStreamParameters sample_params = stereo_params;
+				sample_params.sampleFormat = BestToWorst[i];
+
+				MakeWaveFormatFromParams(&sample, &sample_params, sampleRate);
+
+				hr = IAudioClient_IsFormatSupported(myClient, shareMode, &sample.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL));
+				if (hr == S_OK)
+				{
+					memcpy(outWavex, &sample, sizeof(WAVEFORMATEXTENSIBLE));
+					CoTaskMemFree(sharedClosestMatch);
+					return (answer = paFormatIsSupported);
+				}
+			}
+		}
+
+		// Try selecting suitable sample type
+		for (i = 0; i < STATIC_ARRAY_SIZE(BestToWorst); ++i)
+		{
+			WAVEFORMATEXTENSIBLE spfmt = { 0 };
+
+			PaStreamParameters spfmt_params = params;
+			spfmt_params.sampleFormat = BestToWorst[i];
+
+			MakeWaveFormatFromParams(&spfmt, &spfmt_params, sampleRate);
+
+			hr = IAudioClient_IsFormatSupported(myClient, shareMode, &spfmt.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL));
+			if (hr == S_OK)
+			{
+				memcpy(outWavex, &spfmt, sizeof(WAVEFORMATEXTENSIBLE));
+				CoTaskMemFree(sharedClosestMatch);
+				answer = paFormatIsSupported;
+				break;
+			}
+		}
+
+		// Nothing helped
+		LogHostError(hr);
+	}
+
+	return answer;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError IsStreamParamsValid(struct PaUtilHostApiRepresentation *hostApi,
+                                   const  PaStreamParameters *inputParameters,
+                                   const  PaStreamParameters *outputParameters,
+                                   double sampleRate)
+{
+	if (hostApi == NULL)
+		return paHostApiNotFound;
+	if ((UINT32)sampleRate == 0)
+		return paInvalidSampleRate;
+
+	if (inputParameters != NULL)
+    {
+        /* all standard sample formats are supported by the buffer adapter,
+            this implementation doesn't support any custom sample formats */
+		if (inputParameters->sampleFormat & paCustomFormat)
+            return paSampleFormatNotSupported;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
+            return paInvalidDevice;
+
+        /* check that input device can support inputChannelCount */
+        if (inputParameters->channelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels)
+            return paInvalidChannelCount;
+
+        /* validate inputStreamInfo */
+        if (inputParameters->hostApiSpecificStreamInfo)
+		{
+			PaWasapiStreamInfo *inputStreamInfo = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo;
+	        if ((inputStreamInfo->size != sizeof(PaWasapiStreamInfo)) ||
+	            (inputStreamInfo->version != 1) ||
+                (inputStreamInfo->hostApiType != paWASAPI))
+	        {
+	            return paIncompatibleHostApiSpecificStreamInfo;
+	        }
+		}
+
+        return paNoError;
+    }
+
+    if (outputParameters != NULL)
+    {
+        /* all standard sample formats are supported by the buffer adapter,
+            this implementation doesn't support any custom sample formats */
+        if (outputParameters->sampleFormat & paCustomFormat)
+            return paSampleFormatNotSupported;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
+            return paInvalidDevice;
+
+        /* check that output device can support outputChannelCount */
+        if (outputParameters->channelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels)
+            return paInvalidChannelCount;
+
+        /* validate outputStreamInfo */
+        if(outputParameters->hostApiSpecificStreamInfo)
+        {
+			PaWasapiStreamInfo *outputStreamInfo = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo;
+	        if ((outputStreamInfo->size != sizeof(PaWasapiStreamInfo)) ||
+	            (outputStreamInfo->version != 1) ||
+                (outputStreamInfo->hostApiType != paWASAPI))
+	        {
+	            return paIncompatibleHostApiSpecificStreamInfo;
+	        }
+        }
+
+		return paNoError;
+    }
+
+	return (inputParameters || outputParameters ? paNoError : paInternalError);
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                                  const  PaStreamParameters *inputParameters,
+                                  const  PaStreamParameters *outputParameters,
+                                  double sampleRate )
+{
+	IAudioClient *tmpClient = NULL;
+	PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi;
+	PaWasapiStreamInfo *inputStreamInfo = NULL, *outputStreamInfo = NULL;
+
+	// Validate PaStreamParameters
+	PaError error;
+	if ((error = IsStreamParamsValid(hostApi, inputParameters, outputParameters, sampleRate)) != paNoError)
+		return error;
+
+    if (inputParameters != NULL)
+    {
+		WAVEFORMATEXTENSIBLE wavex;
+		HRESULT hr;
+		PaError answer;
+		AUDCLNT_SHAREMODE shareMode = AUDCLNT_SHAREMODE_SHARED;
+		inputStreamInfo = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo;
+
+		if (inputStreamInfo && (inputStreamInfo->flags & paWinWasapiExclusive))
+			shareMode  = AUDCLNT_SHAREMODE_EXCLUSIVE;
+
+		hr = IMMDevice_Activate(paWasapi->devInfo[inputParameters->device].device,
+			&pa_IID_IAudioClient, CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient);
+		if (hr != S_OK)
+		{
+			LogHostError(hr);
+			return paInvalidDevice;
+		}
+
+		answer = GetClosestFormat(tmpClient, sampleRate, inputParameters, shareMode, &wavex, FALSE);
+		SAFE_RELEASE(tmpClient);
+
+		if (answer != paFormatIsSupported)
+			return answer;
+    }
+
+    if (outputParameters != NULL)
+    {
+		HRESULT hr;
+		WAVEFORMATEXTENSIBLE wavex;
+		PaError answer;
+		AUDCLNT_SHAREMODE shareMode = AUDCLNT_SHAREMODE_SHARED;
+        outputStreamInfo = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo;
+
+		if (outputStreamInfo && (outputStreamInfo->flags & paWinWasapiExclusive))
+			shareMode  = AUDCLNT_SHAREMODE_EXCLUSIVE;
+
+		hr = IMMDevice_Activate(paWasapi->devInfo[outputParameters->device].device,
+			&pa_IID_IAudioClient, CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient);
+		if (hr != S_OK)
+		{
+			LogHostError(hr);
+			return paInvalidDevice;
+		}
+
+		answer = GetClosestFormat(tmpClient, sampleRate, outputParameters, shareMode, &wavex, TRUE);
+		SAFE_RELEASE(tmpClient);
+
+		if (answer != paFormatIsSupported)
+			return answer;
+    }
+
+    return paFormatIsSupported;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaUint32 PaUtil_GetFramesPerHostBuffer(PaUint32 userFramesPerBuffer, PaTime suggestedLatency, double sampleRate, PaUint32 TimerJitterMs)
+{
+	PaUint32 frames = userFramesPerBuffer + max( userFramesPerBuffer, (PaUint32)(suggestedLatency * sampleRate) );
+    frames += (PaUint32)((sampleRate * 0.001) * TimerJitterMs);
+	return frames;
+}
+
+// ------------------------------------------------------------------------------------------
+static void _RecalculateBuffersCount(PaWasapiSubStream *sub, UINT32 userFramesPerBuffer, UINT32 framesPerLatency, BOOL fullDuplex)
+{
+	// Count buffers (must be at least 1)
+	sub->buffers = (userFramesPerBuffer ? framesPerLatency / userFramesPerBuffer : 0);
+	if (sub->buffers == 0)
+		sub->buffers = 1;
+
+	// Determine amount of buffers used:
+	// - Full-duplex mode will lead to period difference, thus only 1.
+	// - Input mode, only 1, as WASAPI allows extraction of only 1 packet.
+	// - For Shared mode we use double buffering.
+	if ((sub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) || fullDuplex)
+	{
+		// Exclusive mode does not allow >1 buffers be used for Event interface, e.g. GetBuffer
+		// call must acquire max buffer size and it all must be processed.
+		if (sub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK)
+			sub->userBufferAndHostMatch = 1;
+
+		// Use paUtilBoundedHostBufferSize because exclusive mode will starve and produce
+		// bad quality of audio
+		sub->buffers = 1;
+	}
+}
+
+// ------------------------------------------------------------------------------------------
+static void _CalculateAlignedPeriod(PaWasapiSubStream *pSub, UINT32 *nFramesPerLatency,
+									ALIGN_FUNC pAlignFunc)
+{
+	// Align frames to HD Audio packet size of 128 bytes for Exclusive mode only.
+	// Not aligning on Windows Vista will cause Event timeout, although Windows 7 will
+	// return AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED error to realign buffer. Aligning is necessary
+	// for Exclusive mode only! when audio data is feeded directly to hardware.
+	if (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+	{
+		(*nFramesPerLatency) = AlignFramesPerBuffer((*nFramesPerLatency),
+			pSub->wavex.Format.nSamplesPerSec, pSub->wavex.Format.nBlockAlign, pAlignFunc);
+	}
+
+	// Calculate period
+	pSub->period = MakeHnsPeriod((*nFramesPerLatency), pSub->wavex.Format.nSamplesPerSec);
+}
+
+// ------------------------------------------------------------------------------------------
+static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSub,
+	PaWasapiDeviceInfo *pInfo, const PaStreamParameters *params, UINT32 framesPerLatency,
+	double sampleRate, BOOL blocking, BOOL output, BOOL fullDuplex, PaError *pa_error)
+{
+	PaError error;
+    HRESULT hr;
+	const UINT32 userFramesPerBuffer = framesPerLatency;
+    IAudioClient *audioClient	     = NULL;
+
+	// Validate parameters
+    if (!pSub || !pInfo || !params)
+        return E_POINTER;
+	if ((UINT32)sampleRate == 0)
+        return E_INVALIDARG;
+
+    // Get the audio client
+    hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&audioClient);
+	if (hr != S_OK)
+	{
+		LogHostError(hr);
+		goto done;
+	}
+
+	// Get closest format
+	if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported)
+	{
+		if (pa_error)
+			(*pa_error) = error;
+
+		LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);
+		goto done; // fail, format not supported
+	}
+
+	// Check for Mono <<>> Stereo workaround
+	if ((params->channelCount == 1) && (pSub->wavex.Format.nChannels == 2))
+	{
+		if (blocking)
+		{
+			LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);
+			goto done; // fail, blocking mode not supported
+		}
+
+		// select mixer
+		pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1));
+		if (pSub->monoMixer == NULL)
+		{
+			LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);
+			goto done; // fail, no mixer for format
+		}
+	}
+
+#if 0
+	// Add suggestd latency
+	framesPerLatency += MakeFramesFromHns(SecondsTonano100(params->suggestedLatency), pSub->wavex.Format.nSamplesPerSec);
+#else
+	// Calculate host buffer size
+	if ((pSub->shareMode != AUDCLNT_SHAREMODE_EXCLUSIVE) &&
+		(!pSub->streamFlags || ((pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) == 0)))
+	{
+		framesPerLatency = PaUtil_GetFramesPerHostBuffer(userFramesPerBuffer,
+			params->suggestedLatency, pSub->wavex.Format.nSamplesPerSec, 0/*,
+			(pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? 0 : 1)*/);
+	}
+	else
+	{
+		REFERENCE_TIME overall;
+
+		// Work 1:1 with user buffer (only polling allows to use >1)
+		framesPerLatency += MakeFramesFromHns(SecondsTonano100(params->suggestedLatency), pSub->wavex.Format.nSamplesPerSec);
+
+		// Use Polling if overall latency is > 5ms as it allows to use 100% CPU in a callback,
+		// or user specified latency parameter
+		overall = MakeHnsPeriod(framesPerLatency, pSub->wavex.Format.nSamplesPerSec);
+		if ((overall >= (106667*2)/*21.33ms*/) || ((INT32)(params->suggestedLatency*100000.0) != 0/*0.01 msec granularity*/))
+		{
+			framesPerLatency = PaUtil_GetFramesPerHostBuffer(userFramesPerBuffer,
+				params->suggestedLatency, pSub->wavex.Format.nSamplesPerSec, 0/*,
+				(streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? 0 : 1)*/);
+
+			// Use Polling interface
+			pSub->streamFlags &= ~AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
+			PRINT(("WASAPI: CreateAudioClient: forcing POLL mode\n"));
+		}
+	}
+#endif
+
+	// For full-duplex output resize buffer to be the same as for input
+	if (output && fullDuplex)
+		framesPerLatency = pStream->in.framesPerHostCallback;
+
+	// Avoid 0 frames
+	if (framesPerLatency == 0)
+		framesPerLatency = MakeFramesFromHns(pInfo->DefaultDevicePeriod, pSub->wavex.Format.nSamplesPerSec);
+
+	// Calculate aligned period
+	_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+
+	/*! Enforce min/max period for device in Shared mode to avoid bad audio quality.
+        Avoid doing so for Exclusive mode as alignment will suffer.
+	*/
+	if (pSub->shareMode == AUDCLNT_SHAREMODE_SHARED)
+	{
+		if (pSub->period < pInfo->DefaultDevicePeriod)
+		{
+			pSub->period = pInfo->DefaultDevicePeriod;
+			// Recalculate aligned period
+			framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec);
+			_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+		}
+	}
+	else
+	{
+		if (pSub->period < pInfo->MinimumDevicePeriod)
+		{
+			pSub->period = pInfo->MinimumDevicePeriod;
+			// Recalculate aligned period
+			framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec);
+			_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+		}
+	}
+
+	/*! Windows 7 does not allow to set latency lower than minimal device period and will
+	    return error: AUDCLNT_E_INVALID_DEVICE_PERIOD. Under Vista we enforce the same behavior
+	    manually for unified behavior on all platforms.
+	*/
+	{
+		/*!	AUDCLNT_E_BUFFER_SIZE_ERROR: Applies to Windows 7 and later.
+			Indicates that the buffer duration value requested by an exclusive-mode client is
+			out of range. The requested duration value for pull mode must not be greater than
+			500 milliseconds; for push mode the duration value must not be greater than 2 seconds.
+		*/
+		if (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+		{
+			static const REFERENCE_TIME MAX_BUFFER_EVENT_DURATION = 500  * 10000;
+			static const REFERENCE_TIME MAX_BUFFER_POLL_DURATION  = 2000 * 10000;
+
+			if (pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK)	// pull mode, max 500ms
+			{
+				if (pSub->period > MAX_BUFFER_EVENT_DURATION)
+				{
+					pSub->period = MAX_BUFFER_EVENT_DURATION;
+					// Recalculate aligned period
+					framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec);
+					_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+				}
+			}
+			else														// push mode, max 2000ms
+			{
+				if (pSub->period > MAX_BUFFER_POLL_DURATION)
+				{
+					pSub->period = MAX_BUFFER_POLL_DURATION;
+					// Recalculate aligned period
+					framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec);
+					_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+				}
+			}
+		}
+	}
+
+	// Open the stream and associate it with an audio session
+    hr = IAudioClient_Initialize(audioClient,
+        pSub->shareMode,
+        pSub->streamFlags,
+		pSub->period,
+		(pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0),
+		&pSub->wavex.Format,
+        NULL);
+
+	/*! WASAPI is tricky on large device buffer, sometimes 2000ms can be allocated sometimes
+	    less. There is no known guaranteed level thus we make subsequent tries by decreasing
+		buffer by 100ms per try.
+	*/
+	while ((hr == E_OUTOFMEMORY) && (pSub->period > (100 * 10000)))
+	{
+		PRINT(("WASAPI: CreateAudioClient: decreasing buffer size to %d milliseconds\n", (pSub->period / 10000)));
+
+		// Decrease by 100ms and try again
+		pSub->period -= (100 * 10000);
+
+		// Recalculate aligned period
+		framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec);
+		_CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD);
+
+        // Release the previous allocations
+        SAFE_RELEASE(audioClient);
+
+        // Create a new audio client
+        hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);
+    	if (hr != S_OK)
+		{
+			LogHostError(hr);
+			goto done;
+		}
+
+		// Open the stream and associate it with an audio session
+		hr = IAudioClient_Initialize(audioClient,
+			pSub->shareMode,
+			pSub->streamFlags,
+			pSub->period,
+			(pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0),
+			&pSub->wavex.Format,
+			NULL);
+	}
+
+	/*! WASAPI buffer size failure. Fallback to using default size.
+	*/
+	if (hr == AUDCLNT_E_BUFFER_SIZE_ERROR)
+	{
+		// Use default
+		pSub->period = pInfo->DefaultDevicePeriod;
+
+		PRINT(("WASAPI: CreateAudioClient: correcting buffer size to device default\n"));
+
+        // Release the previous allocations
+        SAFE_RELEASE(audioClient);
+
+        // Create a new audio client
+        hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);
+    	if (hr != S_OK)
+		{
+			LogHostError(hr);
+			goto done;
+		}
+
+		// Open the stream and associate it with an audio session
+		hr = IAudioClient_Initialize(audioClient,
+			pSub->shareMode,
+			pSub->streamFlags,
+			pSub->period,
+			(pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0),
+			&pSub->wavex.Format,
+			NULL);
+	}
+
+    /*! If the requested buffer size is not aligned. Can be triggered by Windows 7 and up.
+	    Should not be be triggered ever as we do align buffers always with _CalculateAlignedPeriod.
+	*/
+    if (hr == AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED)
+    {
+		UINT32 frames = 0;
+
+        // Get the next aligned frame
+        hr = IAudioClient_GetBufferSize(audioClient, &frames);
+		if (hr != S_OK)
+		{
+			LogHostError(hr);
+			goto done;
+		}
+
+		PRINT(("WASAPI: CreateAudioClient: aligning buffer size to % frames\n", frames));
+
+        // Release the previous allocations
+        SAFE_RELEASE(audioClient);
+
+        // Create a new audio client
+        hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);
+    	if (hr != S_OK)
+		{
+			LogHostError(hr);
+			goto done;
+		}
+
+		// Get closest format
+		if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported)
+		{
+			if (pa_error)
+				(*pa_error) = error;
+
+			LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); // fail, format not supported
+			goto done;
+		}
+
+		// Check for Mono >> Stereo workaround
+		if ((params->channelCount == 1) && (pSub->wavex.Format.nChannels == 2))
+		{
+			if (blocking)
+			{
+				LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);
+				goto done; // fail, blocking mode not supported
+			}
+
+			// Select mixer
+			pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1));
+			if (pSub->monoMixer == NULL)
+			{
+				LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);
+				goto done; // fail, no mixer for format
+			}
+		}
+
+		// Calculate period
+		pSub->period = MakeHnsPeriod(frames, pSub->wavex.Format.nSamplesPerSec);
+
+        // Open the stream and associate it with an audio session
+        hr = IAudioClient_Initialize(audioClient,
+            pSub->shareMode,
+            pSub->streamFlags,
+			pSub->period,
+			(pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0),
+            &pSub->wavex.Format,
+            NULL);
+    	if (hr != S_OK)
+		{
+			LogHostError(hr);
+			goto done;
+		}
+    }
+    else
+	if (hr != S_OK)
+    {
+		LogHostError(hr);
+		goto done;
+    }
+
+    // Set client
+	pSub->client = audioClient;
+    IAudioClient_AddRef(pSub->client);
+
+	// Recalculate buffers count
+	_RecalculateBuffersCount(pSub,
+		userFramesPerBuffer,
+		MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec),
+		fullDuplex);
+
+done:
+
+    // Clean up
+    SAFE_RELEASE(audioClient);
+    return hr;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                           PaStream** s,
+                           const PaStreamParameters *inputParameters,
+                           const PaStreamParameters *outputParameters,
+                           double sampleRate,
+                           unsigned long framesPerBuffer,
+                           PaStreamFlags streamFlags,
+                           PaStreamCallback *streamCallback,
+                           void *userData )
+{
+    PaError result = paNoError;
+	HRESULT hr;
+    PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi;
+    PaWasapiStream *stream = NULL;
+    int inputChannelCount, outputChannelCount;
+    PaSampleFormat inputSampleFormat, outputSampleFormat;
+    PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat;
+	PaWasapiStreamInfo *inputStreamInfo = NULL, *outputStreamInfo = NULL;
+	PaWasapiDeviceInfo *info = NULL;
+	UINT32 maxBufferSize;
+	PaTime buffer_latency;
+	ULONG framesPerHostCallback;
+	PaUtilHostBufferSizeMode bufferMode;
+	const BOOL fullDuplex = ((inputParameters != NULL) && (outputParameters != NULL));
+
+	// validate PaStreamParameters
+	if ((result = IsStreamParamsValid(hostApi, inputParameters, outputParameters, sampleRate)) != paNoError)
+		return LogPaError(result);
+
+    // Validate platform specific flags
+    if ((streamFlags & paPlatformSpecificFlags) != 0)
+	{
+		LogPaError(result = paInvalidFlag); /* unexpected platform specific flag */
+		goto error;
+	}
+
+	// Allocate memory for PaWasapiStream
+    if ((stream = (PaWasapiStream *)PaUtil_AllocateMemory(sizeof(PaWasapiStream))) == NULL)
+	{
+        LogPaError(result = paInsufficientMemory);
+        goto error;
+    }
+
+	// Default thread priority is Audio: for exclusive mode we will use Pro Audio.
+	stream->nThreadPriority = eThreadPriorityAudio;
+
+	// Set default number of frames: paFramesPerBufferUnspecified
+	if (framesPerBuffer == paFramesPerBufferUnspecified)
+	{
+		UINT32 framesPerBufferIn  = 0, framesPerBufferOut = 0;
+		if (inputParameters != NULL)
+		{
+			info = &paWasapi->devInfo[inputParameters->device];
+			framesPerBufferIn = MakeFramesFromHns(info->DefaultDevicePeriod, (UINT32)sampleRate);
+		}
+		if (outputParameters != NULL)
+		{
+			info = &paWasapi->devInfo[outputParameters->device];
+			framesPerBufferOut = MakeFramesFromHns(info->DefaultDevicePeriod, (UINT32)sampleRate);
+		}
+		// choosing maximum default size
+		framesPerBuffer = max(framesPerBufferIn, framesPerBufferOut);
+	}
+	if (framesPerBuffer == 0)
+		framesPerBuffer = ((UINT32)sampleRate / 100) * 2;
+
+	// Try create device: Input
+	if (inputParameters != NULL)
+    {
+        inputChannelCount = inputParameters->channelCount;
+        inputSampleFormat = inputParameters->sampleFormat;
+		inputStreamInfo   = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo;
+        info              = &paWasapi->devInfo[inputParameters->device];
+		stream->in.flags  = (inputStreamInfo ? inputStreamInfo->flags : 0);
+
+		// Select Exclusive/Shared mode
+		stream->in.shareMode = AUDCLNT_SHAREMODE_SHARED;
+        if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiExclusive))
+		{
+			// Boost thread priority
+			stream->nThreadPriority = eThreadPriorityProAudio;
+			// Make Exclusive
+			stream->in.shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE;
+		}
+
+		// If user provided explicit thread priority level, use it
+        if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiThreadPriority))
+		{
+			if ((inputStreamInfo->threadPriority > eThreadPriorityNone) &&
+				(inputStreamInfo->threadPriority <= eThreadPriorityWindowManager))
+				stream->nThreadPriority = inputStreamInfo->threadPriority;
+		}
+
+		// Choose processing mode
+		stream->in.streamFlags = (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? AUDCLNT_STREAMFLAGS_EVENTCALLBACK : 0);
+		if (paWasapi->useWOW64Workaround)
+			stream->in.streamFlags = 0; // polling interface
+		else
+		if (streamCallback == NULL)
+			stream->in.streamFlags = 0; // polling interface
+		else
+		if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiPolling))
+			stream->in.streamFlags = 0; // polling interface
+		else
+		if (fullDuplex)
+			stream->in.streamFlags = 0; // polling interface is implemented for full-duplex mode also
+
+		// Create Audio client
+		hr = CreateAudioClient(stream, &stream->in, info, inputParameters, framesPerBuffer/*framesPerLatency*/,
+			sampleRate, (streamCallback == NULL), FALSE, fullDuplex, &result);
+        if (hr != S_OK)
+		{
+			LogPaError(result = paInvalidDevice);
+			goto error;
+        }
+		LogWAVEFORMATEXTENSIBLE(&stream->in.wavex);
+
+		// Get closest format
+        hostInputSampleFormat = PaUtil_SelectClosestAvailableFormat( WaveToPaFormat(&stream->in.wavex), inputSampleFormat );
+
+		// Create volume mgr
+		stream->inVol = NULL;
+        /*hr = info->device->Activate(
+            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->inVol);
+        if (hr != S_OK)
+            return paInvalidDevice;*/
+
+        // Set user-side custom host processor
+        if ((inputStreamInfo != NULL) &&
+            (inputStreamInfo->flags & paWinWasapiRedirectHostProcessor))
+        {
+            stream->hostProcessOverrideInput.processor = inputStreamInfo->hostProcessorInput;
+            stream->hostProcessOverrideInput.userData = userData;
+        }
+
+        // Get max possible buffer size to check if it is not less than that we request
+        hr = IAudioClient_GetBufferSize(stream->in.client, &maxBufferSize);
+        if (hr != S_OK)
+		{
+			LogHostError(hr);
+ 			LogPaError(result = paInvalidDevice);
+			goto error;
+		}
+
+        // Correct buffer to max size if it maxed out result of GetBufferSize
+		stream->in.bufferSize = maxBufferSize;
+
+		// Get interface latency (actually uneeded as we calculate latency from the size
+		// of maxBufferSize).
+        hr = IAudioClient_GetStreamLatency(stream->in.client, &stream->in.device_latency);
+        if (hr != S_OK)
+		{
+			LogHostError(hr);
+ 			LogPaError(result = paInvalidDevice);
+			goto error;
+		}
+		//stream->in.latency_seconds = nano100ToSeconds(stream->in.device_latency);
+
+        // Number of frames that are required at each period
+		stream->in.framesPerHostCallback = maxBufferSize;
+
+		// Calculate frames per single buffer, if buffers > 1 then always framesPerBuffer
+		stream->in.framesPerBuffer =
+			(stream->in.userBufferAndHostMatch ? stream->in.framesPerHostCallback : framesPerBuffer);
+
+		// Calculate buffer latency
+		buffer_latency = (PaTime)maxBufferSize / stream->in.wavex.Format.nSamplesPerSec;
+
+		// Append buffer latency to interface latency in shared mode (see GetStreamLatency notes)
+		stream->in.latency_seconds += buffer_latency;
+
+		PRINT(("WASAPI::OpenStream(input): framesPerUser[ %d ] framesPerHost[ %d ] latency[ %.02fms ] exclusive[ %s ] wow64_fix[ %s ] mode[ %s ]\n", (UINT32)framesPerBuffer, (UINT32)stream->in.framesPerHostCallback, (float)(stream->in.latency_seconds*1000.0f), (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? "YES" : "NO"), (paWasapi->useWOW64Workaround ? "YES" : "NO"), (stream->in.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? "EVENT" : "POLL")));
+	}
+    else
+    {
+        inputChannelCount = 0;
+        inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */
+    }
+
+	// Try create device: Output
+    if (outputParameters != NULL)
+    {
+        outputChannelCount = outputParameters->channelCount;
+        outputSampleFormat = outputParameters->sampleFormat;
+		outputStreamInfo   = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo;
+		info               = &paWasapi->devInfo[outputParameters->device];
+		stream->out.flags  = (outputStreamInfo ? outputStreamInfo->flags : 0);
+
+		// Select Exclusive/Shared mode
+		stream->out.shareMode = AUDCLNT_SHAREMODE_SHARED;
+        if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiExclusive))
+		{
+			// Boost thread priority
+			stream->nThreadPriority = eThreadPriorityProAudio;
+			// Make Exclusive
+			stream->out.shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE;
+		}
+
+		// If user provided explicit thread priority level, use it
+        if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiThreadPriority))
+		{
+			if ((outputStreamInfo->threadPriority > eThreadPriorityNone) &&
+				(outputStreamInfo->threadPriority <= eThreadPriorityWindowManager))
+				stream->nThreadPriority = outputStreamInfo->threadPriority;
+		}
+
+		// Choose processing mode
+		stream->out.streamFlags = (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? AUDCLNT_STREAMFLAGS_EVENTCALLBACK : 0);
+		if (paWasapi->useWOW64Workaround)
+			stream->out.streamFlags = 0; // polling interface
+		else
+		if (streamCallback == NULL)
+			stream->out.streamFlags = 0; // polling interface
+		else
+		if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiPolling))
+			stream->out.streamFlags = 0; // polling interface
+		else
+		if (fullDuplex)
+			stream->out.streamFlags = 0; // polling interface is implemented for full-duplex mode also
+
+		// Create Audio client
+		hr = CreateAudioClient(stream, &stream->out, info, outputParameters, framesPerBuffer/*framesPerLatency*/,
+			sampleRate, (streamCallback == NULL), TRUE, fullDuplex, &result);
+        if (hr != S_OK)
+		{
+			LogPaError(result = paInvalidDevice);
+			goto error;
+        }
+		LogWAVEFORMATEXTENSIBLE(&stream->out.wavex);
+
+        // Get closest format
+        hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( WaveToPaFormat(&stream->out.wavex), outputSampleFormat );
+
+		// Activate volume
+		stream->outVol = NULL;
+        /*hr = info->device->Activate(
+            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->outVol);
+        if (hr != S_OK)
+            return paInvalidDevice;*/
+
+       // Set user-side custom host processor
+        if ((outputStreamInfo != NULL) &&
+            (outputStreamInfo->flags & paWinWasapiRedirectHostProcessor))
+        {
+            stream->hostProcessOverrideOutput.processor = outputStreamInfo->hostProcessorOutput;
+            stream->hostProcessOverrideOutput.userData = userData;
+        }
+
+        // Get max possible buffer size to check if it is not less than that we request
+        hr = IAudioClient_GetBufferSize(stream->out.client, &maxBufferSize);
+        if (hr != S_OK)
+		{
+			LogHostError(hr);
+ 			LogPaError(result = paInvalidDevice);
+			goto error;
+		}
+
+        // Correct buffer to max size if it maxed out result of GetBufferSize
+		stream->out.bufferSize = maxBufferSize;
+
+		// Get interface latency (actually uneeded as we calculate latency from the size
+		// of maxBufferSize).
+        hr = IAudioClient_GetStreamLatency(stream->out.client, &stream->out.device_latency);
+        if (hr != S_OK)
+		{
+			LogHostError(hr);
+ 			LogPaError(result = paInvalidDevice);
+			goto error;
+		}
+		//stream->out.latency_seconds = nano100ToSeconds(stream->out.device_latency);
+
+        // Number of frames that are required at each period
+		stream->out.framesPerHostCallback = maxBufferSize;
+
+		// Calculate frames per single buffer, if buffers > 1 then always framesPerBuffer
+		stream->out.framesPerBuffer =
+			(stream->out.userBufferAndHostMatch ? stream->out.framesPerHostCallback : framesPerBuffer);
+
+		// Calculate buffer latency
+		buffer_latency = (PaTime)maxBufferSize / stream->out.wavex.Format.nSamplesPerSec;
+
+		// Append buffer latency to interface latency in shared mode (see GetStreamLatency notes)
+		stream->out.latency_seconds += buffer_latency;
+
+		PRINT(("WASAPI::OpenStream(output): framesPerUser[ %d ] framesPerHost[ %d ] latency[ %.02fms ] exclusive[ %s ] wow64_fix[ %s ] mode[ %s ]\n", (UINT32)framesPerBuffer, (UINT32)stream->out.framesPerHostCallback, (float)(stream->out.latency_seconds*1000.0f), (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? "YES" : "NO"), (paWasapi->useWOW64Workaround ? "YES" : "NO"), (stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? "EVENT" : "POLL")));
+	}
+    else
+    {
+        outputChannelCount = 0;
+        outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */
+    }
+
+	// log full-duplex
+	if (fullDuplex)
+		PRINT(("WASAPI::OpenStream: full-duplex mode\n"));
+
+	// paWinWasapiPolling must be on/or not on both streams
+	if ((inputParameters != NULL) && (outputParameters != NULL))
+	{
+		if ((inputStreamInfo != NULL) && (outputStreamInfo != NULL))
+		{
+			if (((inputStreamInfo->flags & paWinWasapiPolling) &&
+				!(outputStreamInfo->flags & paWinWasapiPolling))
+				||
+				(!(inputStreamInfo->flags & paWinWasapiPolling) &&
+				 (outputStreamInfo->flags & paWinWasapiPolling)))
+			{
+				LogPaError(result = paInvalidFlag);
+				goto error;
+			}
+		}
+	}
+
+	// Initialize stream representation
+    if (streamCallback)
+    {
+		stream->bBlocking = FALSE;
+        PaUtil_InitializeStreamRepresentation(&stream->streamRepresentation,
+                                              &paWasapi->callbackStreamInterface,
+											  streamCallback, userData);
+    }
+    else
+    {
+		stream->bBlocking = TRUE;
+        PaUtil_InitializeStreamRepresentation(&stream->streamRepresentation,
+                                              &paWasapi->blockingStreamInterface,
+											  streamCallback, userData);
+    }
+
+	// Initialize CPU measurer
+    PaUtil_InitializeCpuLoadMeasurer(&stream->cpuLoadMeasurer, sampleRate);
+
+	if (outputParameters && inputParameters)
+	{
+		// serious problem #1 - No, Not a problem, especially concerning Exclusive mode.
+		// Input device in exclusive mode somehow is getting large buffer always, thus we
+		// adjust Output latency to reflect it, thus period will differ but playback will be
+		// normal.
+		/*if (stream->in.period != stream->out.period)
+		{
+			PRINT(("WASAPI: OpenStream: period discrepancy\n"));
+			LogPaError(result = paBadIODeviceCombination);
+			goto error;
+		}*/
+
+		// serious problem #2 - No, Not a problem, as framesPerHostCallback take into account
+		// sample size while it is not a problem for PA full-duplex, we must care of
+		// preriod only!
+		/*if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback)
+		{
+			PRINT(("WASAPI: OpenStream: framesPerHostCallback discrepancy\n"));
+			goto error;
+		}*/
+	}
+
+	// Calculate frames per host for processor
+	framesPerHostCallback = (outputParameters ? stream->out.framesPerBuffer : stream->in.framesPerBuffer);
+
+	// Choose correct mode of buffer processing:
+	// Exclusive/Shared non paWinWasapiPolling mode: paUtilFixedHostBufferSize - always fixed
+	// Exclusive/Shared paWinWasapiPolling mode: paUtilBoundedHostBufferSize - may vary for Exclusive or Full-duplex
+	bufferMode = paUtilFixedHostBufferSize;
+	if (inputParameters) // !!! WASAPI IAudioCaptureClient::GetBuffer extracts not number of frames but 1 packet, thus we always must adapt
+		bufferMode = paUtilBoundedHostBufferSize;
+	else
+	if (outputParameters)
+	{
+		if ((stream->out.buffers == 1) &&
+			(!stream->out.streamFlags || ((stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) == 0)))
+			bufferMode = paUtilBoundedHostBufferSize;
+	}
+	stream->bufferMode = bufferMode;
+
+    // Initialize buffer processor
+    result =  PaUtil_InitializeBufferProcessor(
+		&stream->bufferProcessor,
+        inputChannelCount,
+		inputSampleFormat,
+		hostInputSampleFormat,
+        outputChannelCount,
+		outputSampleFormat,
+		hostOutputSampleFormat,
+        sampleRate,
+		streamFlags,
+		framesPerBuffer,
+        framesPerHostCallback,
+		bufferMode,
+        streamCallback,
+		userData);
+    if (result != paNoError)
+	{
+		LogPaError(result);
+        goto error;
+	}
+
+	// Set Input latency
+    stream->streamRepresentation.streamInfo.inputLatency =
+            ((double)PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor) / sampleRate)
+			+ ((inputParameters)?stream->in.latency_seconds : 0);
+
+	// Set Output latency
+    stream->streamRepresentation.streamInfo.outputLatency =
+            ((double)PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor) / sampleRate)
+			+ ((outputParameters)?stream->out.latency_seconds : 0);
+
+	// Set SR
+    stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
+
+    (*s) = (PaStream *)stream;
+    return result;
+
+error:
+
+    if (stream != NULL)
+		CloseStream(stream);
+
+    return result;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError CloseStream( PaStream* s )
+{
+    PaError result = paNoError;
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+	// abort active stream
+	if (IsStreamActive(s))
+	{
+		if ((result = AbortStream(s)) != paNoError)
+			return result;
+	}
+
+    SAFE_RELEASE(stream->cclient);
+    SAFE_RELEASE(stream->rclient);
+    SAFE_RELEASE(stream->out.client);
+    SAFE_RELEASE(stream->in.client);
+	SAFE_RELEASE(stream->inVol);
+	SAFE_RELEASE(stream->outVol);
+
+	CloseHandle(stream->event[S_INPUT]);
+	CloseHandle(stream->event[S_OUTPUT]);
+
+    SAFE_CLOSE(stream->hThread);
+	SAFE_CLOSE(stream->hThreadStart);
+	SAFE_CLOSE(stream->hThreadExit);
+	SAFE_CLOSE(stream->hCloseRequest);
+	SAFE_CLOSE(stream->hBlockingOpStreamRD);
+	SAFE_CLOSE(stream->hBlockingOpStreamWR);
+
+	free(stream->in.monoBuffer);
+	free(stream->out.monoBuffer);
+
+    PaUtil_TerminateBufferProcessor(&stream->bufferProcessor);
+    PaUtil_TerminateStreamRepresentation(&stream->streamRepresentation);
+    PaUtil_FreeMemory(stream);
+
+    return result;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError StartStream( PaStream *s )
+{
+	HRESULT hr;
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+	// check if stream is active already
+	if (IsStreamActive(s))
+		return paStreamIsNotStopped;
+
+    PaUtil_ResetBufferProcessor(&stream->bufferProcessor);
+
+	// Create close event
+	stream->hCloseRequest = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+	// Create thread
+	if (!stream->bBlocking)
+	{
+		// Create thread events
+		stream->hThreadStart = CreateEvent(NULL, TRUE, FALSE, NULL);
+		stream->hThreadExit  = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+		if ((stream->in.client && (stream->in.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK)) ||
+			(stream->out.client && (stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK)))
+		{
+			if ((stream->hThread = CREATE_THREAD(ProcThreadEvent)) == NULL)
+			   return paUnanticipatedHostError;
+		}
+		else
+		{
+			if ((stream->hThread = CREATE_THREAD(ProcThreadPoll)) == NULL)
+			   return paUnanticipatedHostError;
+		}
+
+		// Wait for thread to start
+		if (WaitForSingleObject(stream->hThreadStart, 60*1000) == WAIT_TIMEOUT)
+			return paUnanticipatedHostError;
+	}
+	else
+	{
+		// Create blocking operation events (non-signaled event means - blocking operation is pending)
+		if (stream->out.client)
+			stream->hBlockingOpStreamWR = CreateEvent(NULL, TRUE, TRUE, NULL);
+		if (stream->in.client)
+			stream->hBlockingOpStreamRD = CreateEvent(NULL, TRUE, TRUE, NULL);
+
+		// Initialize event & start INPUT stream
+		if (stream->in.client)
+		{
+			if ((hr = IAudioClient_GetService(stream->in.client, &pa_IID_IAudioCaptureClient, (void **)&stream->cclient)) != S_OK)
+			{
+				LogHostError(hr);
+				return paUnanticipatedHostError;
+			}
+
+			if ((hr = IAudioClient_Start(stream->in.client)) != S_OK)
+			{
+				LogHostError(hr);
+				return paUnanticipatedHostError;
+			}
+		}
+
+
+		// Initialize event & start OUTPUT stream
+		if (stream->out.client)
+		{
+			if ((hr = IAudioClient_GetService(stream->out.client, &pa_IID_IAudioRenderClient, (void **)&stream->rclient)) != S_OK)
+			{
+				LogHostError(hr);
+				return paUnanticipatedHostError;
+			}
+
+			// Start
+			if ((hr = IAudioClient_Start(stream->out.client)) != S_OK)
+			{
+				LogHostError(hr);
+				return paUnanticipatedHostError;
+			}
+		}
+
+		// Signal: stream running
+		stream->running = TRUE;
+
+		// Set current time
+		stream->out.prevTime  = timeGetTime();
+		stream->out.prevSleep = 0;
+	}
+
+    return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+static void _FinishStream(PaWasapiStream *stream)
+{
+	// Issue command to thread to stop processing and wait for thread exit
+	if (!stream->bBlocking)
+	{
+		SignalObjectAndWait(stream->hCloseRequest, stream->hThreadExit, INFINITE, FALSE);
+	}
+	else
+	// Blocking mode does not own thread
+	{
+		// Signal close event and wait for each of 2 blocking operations to complete
+		if (stream->out.client)
+			SignalObjectAndWait(stream->hCloseRequest, stream->hBlockingOpStreamWR, INFINITE, TRUE);
+		if (stream->out.client)
+			SignalObjectAndWait(stream->hCloseRequest, stream->hBlockingOpStreamRD, INFINITE, TRUE);
+
+		// Process stop
+		_OnStreamStop(stream);
+	}
+
+	// Close thread handles to allow restart
+	SAFE_CLOSE(stream->hThread);
+	SAFE_CLOSE(stream->hThreadStart);
+	SAFE_CLOSE(stream->hThreadExit);
+	SAFE_CLOSE(stream->hCloseRequest);
+	SAFE_CLOSE(stream->hBlockingOpStreamRD);
+	SAFE_CLOSE(stream->hBlockingOpStreamWR);
+
+    stream->running = FALSE;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError StopStream( PaStream *s )
+{
+	// Finish stream
+	_FinishStream((PaWasapiStream *)s);
+    return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError AbortStream( PaStream *s )
+{
+	// Finish stream
+	_FinishStream((PaWasapiStream *)s);
+    return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError IsStreamStopped( PaStream *s )
+{
+	return !((PaWasapiStream *)s)->running;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError IsStreamActive( PaStream *s )
+{
+    return ((PaWasapiStream *)s)->running;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaTime GetStreamTime( PaStream *s )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+    /* suppress unused variable warnings */
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+
+	//this is lame ds and mme does the same thing, quite useless method imho
+	//why dont we fetch the time in the pa callbacks?
+	//at least its doing to be clocked to something
+    return PaUtil_GetTime();
+}
+
+// ------------------------------------------------------------------------------------------
+static double GetStreamCpuLoad( PaStream* s )
+{
+	return PaUtil_GetCpuLoad(&((PaWasapiStream *)s)->cpuLoadMeasurer);
+}
+
+// ------------------------------------------------------------------------------------------
+/* NOT TESTED */
+static PaError ReadStream( PaStream* s, void *_buffer, unsigned long _frames )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+	HRESULT hr = S_OK;
+	UINT32 frames;
+	BYTE *user_buffer = (BYTE *)_buffer;
+	BYTE *wasapi_buffer = NULL;
+	DWORD flags = 0;
+	UINT32 i;
+
+	// validate
+	if (!stream->running)
+		return paStreamIsStopped;
+	if (stream->cclient == NULL)
+		return paBadStreamPtr;
+
+	// Notify blocking op has begun
+	ResetEvent(stream->hBlockingOpStreamRD);
+
+    // make a local copy of the user buffer pointer(s), this is necessary
+	// because PaUtil_CopyOutput() advances these pointers every time it is called
+    if (!stream->bufferProcessor.userInputIsInterleaved)
+    {
+		user_buffer = (BYTE *)alloca(sizeof(BYTE *) * stream->bufferProcessor.inputChannelCount);
+        if (user_buffer == NULL)
+            return paInsufficientMemory;
+
+        for (i = 0; i < stream->bufferProcessor.inputChannelCount; ++i)
+            ((BYTE **)user_buffer)[i] = ((BYTE **)_buffer)[i];
+    }
+
+	while (_frames != 0)
+	{
+		UINT32 processed, processed_size;
+
+		// Get the available data in the shared buffer.
+		if ((hr = IAudioCaptureClient_GetBuffer(stream->cclient, &wasapi_buffer, &frames, &flags, NULL, NULL)) != S_OK)
+		{
+			if (hr == AUDCLNT_S_BUFFER_EMPTY)
+			{
+				// Check if blocking call must be interrupted
+				if (WaitForSingleObject(stream->hCloseRequest, 1) != WAIT_TIMEOUT)
+					break;
+			}
+
+			return LogHostError(hr);
+			goto stream_rd_end;
+		}
+
+		// Detect silence
+		// if (flags & AUDCLNT_BUFFERFLAGS_SILENT)
+		//	data = NULL;
+
+		// Check if frames <= _frames
+		if (frames > _frames)
+			frames = _frames;
+
+		// Register available frames to processor
+        PaUtil_SetInputFrameCount(&stream->bufferProcessor, frames);
+
+		// Register host buffer pointer to processor
+        PaUtil_SetInterleavedInputChannels(&stream->bufferProcessor, 0, wasapi_buffer,	stream->bufferProcessor.inputChannelCount);
+
+		// Copy user data to host buffer (with conversion if applicable)
+		processed = PaUtil_CopyInput(&stream->bufferProcessor, (void **)&user_buffer, frames);
+
+		// Advance user buffer to consumed portion
+		processed_size = processed * stream->in.wavex.Format.nBlockAlign;
+		if (stream->bufferProcessor.userInputIsInterleaved)
+		{
+			user_buffer += processed_size;
+		}
+		else
+		{
+			for (i = 0; i < stream->bufferProcessor.inputChannelCount; ++i)
+				((BYTE **)user_buffer)[i] = ((BYTE **)user_buffer)[i] + processed_size;
+		}
+
+		// Release host buffer
+		if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->cclient, processed)) != S_OK)
+		{
+			LogHostError(hr);
+			goto stream_rd_end;
+		}
+
+		_frames -= processed;
+	}
+
+stream_rd_end:
+
+	// Notify blocking op has ended
+	SetEvent(stream->hBlockingOpStreamRD);
+
+	return (hr != S_OK ? paUnanticipatedHostError : paNoError);
+}
+
+// ------------------------------------------------------------------------------------------
+static PaError WriteStream( PaStream* s, const void *_buffer, unsigned long _frames )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+	UINT32 frames;
+	const BYTE *user_buffer = (const BYTE *)_buffer;
+	BYTE *wasapi_buffer;
+	HRESULT hr = S_OK;
+	UINT32 next_rev_sleep, blocks, block_sleep_ms;
+	UINT32 i;
+
+	// validate
+	if (!stream->running)
+		return paStreamIsStopped;
+	if (stream->rclient == NULL)
+		return paBadStreamPtr;
+
+	// Notify blocking op has begun
+	ResetEvent(stream->hBlockingOpStreamWR);
+
+	// Calculate sleep time for next call
+	{
+		UINT32 remainder = 0;
+		UINT32 sleep_ms = 0;
+		DWORD elapsed_ms;
+		blocks = _frames / stream->out.framesPerHostCallback;
+		block_sleep_ms = GetFramesSleepTime(stream->out.framesPerHostCallback, stream->out.wavex.Format.nSamplesPerSec);
+		if (blocks == 0)
+		{
+			blocks = 1;
+			sleep_ms = GetFramesSleepTime(_frames, stream->out.wavex.Format.nSamplesPerSec); // partial
+		}
+		else
+		{
+			remainder = _frames - blocks * stream->out.framesPerHostCallback;
+			sleep_ms = block_sleep_ms; // full
+		}
+
+		// Sleep for remainder
+		elapsed_ms = timeGetTime() - stream->out.prevTime;
+		if (sleep_ms >= elapsed_ms)
+			sleep_ms -= elapsed_ms;
+
+		next_rev_sleep = sleep_ms;
+	}
+
+	// Sleep diff from last call
+	if (stream->out.prevSleep)
+		Sleep(stream->out.prevSleep);
+	stream->out.prevSleep = next_rev_sleep;
+
+    // make a local copy of the user buffer pointer(s), this is necessary
+	// because PaUtil_CopyOutput() advances these pointers every time it is called
+    if (!stream->bufferProcessor.userOutputIsInterleaved)
+    {
+        user_buffer = (const BYTE *)alloca(sizeof(const BYTE *) * stream->bufferProcessor.outputChannelCount);
+        if (user_buffer == NULL)
+            return paInsufficientMemory;
+
+        for (i = 0; i < stream->bufferProcessor.outputChannelCount; ++i)
+            ((const BYTE **)user_buffer)[i] = ((const BYTE **)_buffer)[i];
+    }
+
+	// Feed engine
+	for (i = 0; i < blocks; ++i)
+	{
+		UINT32 available, processed;
+
+		// Get block frames
+		frames = stream->out.framesPerHostCallback;
+		if (frames > _frames)
+			frames = _frames;
+
+		if (i)
+			Sleep(block_sleep_ms);
+
+		while (frames != 0)
+		{
+			UINT32 padding = 0;
+			UINT32 processed_size;
+
+			// Check if blocking call must be interrupted
+			if (WaitForSingleObject(stream->hCloseRequest, 0) != WAIT_TIMEOUT)
+				break;
+
+			// Get Read position
+			hr = IAudioClient_GetCurrentPadding(stream->out.client, &padding);
+			if (hr != S_OK)
+			{
+				LogHostError(hr);
+				goto stream_wr_end;
+			}
+
+			// Calculate frames available
+			if (frames >= padding)
+				available = frames - padding;
+			else
+				available = frames;
+
+			// Get pointer to host buffer
+			if ((hr = IAudioRenderClient_GetBuffer(stream->rclient, available, &wasapi_buffer)) != S_OK)
+			{
+				// Buffer size is too big, waiting
+				if (hr == AUDCLNT_E_BUFFER_TOO_LARGE)
+					continue;
+				LogHostError(hr);
+				goto stream_wr_end;
+			}
+
+			// Register available frames to processor
+            PaUtil_SetOutputFrameCount(&stream->bufferProcessor, available);
+
+			// Register host buffer pointer to processor
+            PaUtil_SetInterleavedOutputChannels(&stream->bufferProcessor, 0, wasapi_buffer,	stream->bufferProcessor.outputChannelCount);
+
+			// Copy user data to host buffer (with conversion if applicable)
+			processed = PaUtil_CopyOutput(&stream->bufferProcessor, (const void **)&user_buffer, available);
+
+			// Advance user buffer to consumed portion
+			processed_size = processed * stream->out.wavex.Format.nBlockAlign;
+			if (stream->bufferProcessor.userOutputIsInterleaved)
+			{
+				user_buffer += processed_size;
+			}
+			else
+			{
+				for (i = 0; i < stream->bufferProcessor.outputChannelCount; ++i)
+					((const BYTE **)user_buffer)[i] = ((const BYTE **)user_buffer)[i] + processed_size;
+			}
+
+			// Release host buffer
+			if ((hr = IAudioRenderClient_ReleaseBuffer(stream->rclient, processed, 0)) != S_OK)
+			{
+				LogHostError(hr);
+				goto stream_wr_end;
+			}
+
+			// Deduct frames
+			frames -= processed;
+		}
+
+		_frames -= frames;
+	}
+
+stream_wr_end:
+
+	// Set prev time
+	stream->out.prevTime = timeGetTime();
+
+	// Notify blocking op has ended
+	SetEvent(stream->hBlockingOpStreamWR);
+
+	return (hr != S_OK ? paUnanticipatedHostError : paNoError);
+}
+
+// ------------------------------------------------------------------------------------------
+/* NOT TESTED */
+static signed long GetStreamReadAvailable( PaStream* s )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+	HRESULT hr;
+	UINT32 pending = 0;
+
+	// validate
+	if (!stream->running)
+		return paStreamIsStopped;
+	if (stream->cclient == NULL)
+		return paBadStreamPtr;
+
+	hr = IAudioClient_GetCurrentPadding(stream->in.client, &pending);
+	if (hr != S_OK)
+	{
+		LogHostError(hr);
+		return paUnanticipatedHostError;
+	}
+
+    return (long)pending;
+}
+
+// ------------------------------------------------------------------------------------------
+static signed long GetStreamWriteAvailable( PaStream* s )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)s;
+
+	UINT32 frames = stream->out.framesPerHostCallback;
+	HRESULT hr;
+	UINT32 padding = 0;
+
+	// validate
+	if (!stream->running)
+		return paStreamIsStopped;
+	if (stream->rclient == NULL)
+		return paBadStreamPtr;
+
+	hr = IAudioClient_GetCurrentPadding(stream->out.client, &padding);
+	if (hr != S_OK)
+	{
+		LogHostError(hr);
+		return paUnanticipatedHostError;
+	}
+
+	// Calculate
+	frames -= padding;
+
+    return frames;
+}
+
+// ------------------------------------------------------------------------------------------
+static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
+                                     void *outputBuffer, long outputFrames,
+                                     void *userData )
+{
+    PaWasapiStream *stream = (PaWasapiStream*)userData;
+    PaStreamCallbackTimeInfo timeInfo = {0,0,0};
+	PaStreamCallbackFlags flags = 0;
+    int callbackResult;
+    unsigned long framesProcessed;
+	HRESULT hr;
+	UINT32 pending;
+
+    PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
+
+    /*
+		Pa_GetStreamTime:
+            - generate timing information
+            - handle buffer slips
+    */
+	timeInfo.currentTime = PaUtil_GetTime();
+	// Query input latency
+	if (stream->in.client != NULL)
+	{
+		PaTime pending_time;
+		if ((hr = IAudioClient_GetCurrentPadding(stream->in.client, &pending)) == S_OK)
+			pending_time = (PaTime)pending / (PaTime)stream->in.wavex.Format.nSamplesPerSec;
+		else
+			pending_time = (PaTime)stream->in.latency_seconds;
+
+		timeInfo.inputBufferAdcTime = timeInfo.currentTime + pending_time;
+	}
+	// Query output current latency
+	if (stream->out.client != NULL)
+	{
+		PaTime pending_time;
+		if ((hr = IAudioClient_GetCurrentPadding(stream->out.client, &pending)) == S_OK)
+			pending_time = (PaTime)pending / (PaTime)stream->out.wavex.Format.nSamplesPerSec;
+		else
+			pending_time = (PaTime)stream->out.latency_seconds;
+
+		timeInfo.outputBufferDacTime = timeInfo.currentTime + pending_time;
+	}
+
+    /*
+        If you need to byte swap or shift inputBuffer to convert it into a
+        portaudio format, do it here.
+    */
+
+    PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, flags );
+
+    /*
+        depending on whether the host buffers are interleaved, non-interleaved
+        or a mixture, you will want to call PaUtil_SetInterleaved*Channels(),
+        PaUtil_SetNonInterleaved*Channel() or PaUtil_Set*Channel() here.
+    */
+
+    if (stream->bufferProcessor.inputChannelCount > 0)
+    {
+        PaUtil_SetInputFrameCount( &stream->bufferProcessor, inputFrames );
+        PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor,
+            0, /* first channel of inputBuffer is channel 0 */
+            inputBuffer,
+            0 ); /* 0 - use inputChannelCount passed to init buffer processor */
+    }
+
+    if (stream->bufferProcessor.outputChannelCount > 0)
+    {
+        PaUtil_SetOutputFrameCount( &stream->bufferProcessor, outputFrames);
+        PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor,
+            0, /* first channel of outputBuffer is channel 0 */
+            outputBuffer,
+            0 ); /* 0 - use outputChannelCount passed to init buffer processor */
+    }
+
+    /* you must pass a valid value of callback result to PaUtil_EndBufferProcessing()
+        in general you would pass paContinue for normal operation, and
+        paComplete to drain the buffer processor's internal output buffer.
+        You can check whether the buffer processor's output buffer is empty
+        using PaUtil_IsBufferProcessorOuputEmpty( bufferProcessor )
+    */
+    callbackResult = paContinue;
+    framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult );
+
+    /*
+        If you need to byte swap or shift outputBuffer to convert it to
+        host format, do it here.
+    */
+
+	PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed );
+
+    if (callbackResult == paContinue)
+    {
+        /* nothing special to do */
+    }
+    else
+	if (callbackResult == paAbort)
+    {
+		// stop stream
+        SetEvent(stream->hCloseRequest);
+    }
+    else
+    {
+		// stop stream
+        SetEvent(stream->hCloseRequest);
+    }
+}
+
+// ------------------------------------------------------------------------------------------
+HANDLE MMCSS_activate(const char *name)
+{
+    DWORD task_idx = 0;
+    HANDLE hTask = pAvSetMmThreadCharacteristics(name, &task_idx);
+    if (hTask == NULL)
+	{
+        PRINT(("WASAPI: AvSetMmThreadCharacteristics failed!\n"));
+    }
+
+    /*BOOL priority_ok = pAvSetMmThreadPriority(hTask, AVRT_PRIORITY_NORMAL);
+    if (priority_ok == FALSE)
+	{
+        PRINT(("WASAPI: AvSetMmThreadPriority failed!\n"));
+    }*/
+
+	// debug
+    {
+        int    cur_priority		  = GetThreadPriority(GetCurrentThread());
+        DWORD  cur_priority_class = GetPriorityClass(GetCurrentProcess());
+		PRINT(("WASAPI: thread[ priority-0x%X class-0x%X ]\n", cur_priority, cur_priority_class));
+    }
+
+	return hTask;
+}
+
+// ------------------------------------------------------------------------------------------
+void MMCSS_deactivate(HANDLE hTask)
+{
+	if (!hTask)
+		return;
+
+	if (pAvRevertMmThreadCharacteristics(hTask) == FALSE)
+	{
+        PRINT(("WASAPI: AvRevertMmThreadCharacteristics failed!\n"));
+    }
+}
+
+// ------------------------------------------------------------------------------------------
+PaError PaWasapi_ThreadPriorityBoost(void **hTask, PaWasapiThreadPriority nPriorityClass)
+{
+	static const char *mmcs_name[] =
+	{
+		NULL,
+		"Audio",
+		"Capture",
+		"Distribution",
+		"Games",
+		"Playback",
+		"Pro Audio",
+		"Window Manager"
+	};
+	HANDLE task;
+
+	if (hTask == NULL)
+		return paUnanticipatedHostError;
+
+	if ((UINT32)nPriorityClass >= STATIC_ARRAY_SIZE(mmcs_name))
+		return paUnanticipatedHostError;
+
+	task = MMCSS_activate(mmcs_name[nPriorityClass]);
+	if (task == NULL)
+		return paUnanticipatedHostError;
+
+	(*hTask) = task;
+	return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+PaError PaWasapi_ThreadPriorityRevert(void *hTask)
+{
+	if (hTask == NULL)
+		return paUnanticipatedHostError;
+
+	MMCSS_deactivate((HANDLE)hTask);
+
+	return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+// Described at:
+// http://msdn.microsoft.com/en-us/library/dd371387(v=VS.85).aspx
+
+PaError PaWasapi_GetJackCount(PaDeviceIndex nDevice, int *jcount)
+{
+	PaError ret;
+	HRESULT hr = S_OK;
+	PaDeviceIndex index;
+    IDeviceTopology *pDeviceTopology = NULL;
+    IConnector *pConnFrom = NULL;
+    IConnector *pConnTo = NULL;
+    IPart *pPart = NULL;
+    IKsJackDescription *pJackDesc = NULL;
+	UINT jackCount = 0;
+
+	PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
+	if (paWasapi == NULL)
+		return paNotInitialized;
+
+	// Get device index.
+	ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep);
+    if (ret != paNoError)
+        return ret;
+
+	// Validate index.
+	if ((UINT32)index >= paWasapi->deviceCount)
+		return paInvalidDevice;
+
+	// Get the endpoint device's IDeviceTopology interface.
+	hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology,
+		CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
+	IF_FAILED_JUMP(hr, error);
+
+    // The device topology for an endpoint device always contains just one connector (connector number 0).
+	hr = IDeviceTopology_GetConnector(pDeviceTopology, 0, &pConnFrom);
+	IF_FAILED_JUMP(hr, error);
+
+    // Step across the connection to the jack on the adapter.
+	hr = IConnector_GetConnectedTo(pConnFrom, &pConnTo);
+    if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
+    {
+        // The adapter device is not currently active.
+        hr = E_NOINTERFACE;
+    }
+	IF_FAILED_JUMP(hr, error);
+
+	// Get the connector's IPart interface.
+	hr = IConnector_QueryInterface(pConnTo, &pa_IID_IPart, (void**)&pPart);
+	IF_FAILED_JUMP(hr, error);
+
+	// Activate the connector's IKsJackDescription interface.
+	hr = IPart_Activate(pPart, CLSCTX_INPROC_SERVER, &pa_IID_IKsJackDescription, (void**)&pJackDesc);
+	IF_FAILED_JUMP(hr, error);
+
+	// Return jack count for this device.
+	hr = IKsJackDescription_GetJackCount(pJackDesc, &jackCount);
+	IF_FAILED_JUMP(hr, error);
+
+	// Set.
+	(*jcount) = jackCount;
+
+	// Ok.
+	ret = paNoError;
+
+error:
+
+	SAFE_RELEASE(pDeviceTopology);
+	SAFE_RELEASE(pConnFrom);
+	SAFE_RELEASE(pConnTo);
+	SAFE_RELEASE(pPart);
+	SAFE_RELEASE(pJackDesc);
+
+	LogHostError(hr);
+	return paNoError;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaWasapiJackConnectionType ConvertJackConnectionTypeWASAPIToPA(int connType)
+{
+	switch (connType)
+	{
+		case eConnTypeUnknown:			return eJackConnTypeUnknown;
+#ifdef _KS_
+		case eConnType3Point5mm:		return eJackConnType3Point5mm;
+#else
+		case eConnTypeEighth:		    return eJackConnType3Point5mm;
+#endif
+		case eConnTypeQuarter:			return eJackConnTypeQuarter;
+		case eConnTypeAtapiInternal:	return eJackConnTypeAtapiInternal;
+		case eConnTypeRCA:				return eJackConnTypeRCA;
+		case eConnTypeOptical:			return eJackConnTypeOptical;
+		case eConnTypeOtherDigital:		return eJackConnTypeOtherDigital;
+		case eConnTypeOtherAnalog:		return eJackConnTypeOtherAnalog;
+		case eConnTypeMultichannelAnalogDIN: return eJackConnTypeMultichannelAnalogDIN;
+		case eConnTypeXlrProfessional:	return eJackConnTypeXlrProfessional;
+		case eConnTypeRJ11Modem:		return eJackConnTypeRJ11Modem;
+		case eConnTypeCombination:		return eJackConnTypeCombination;
+	}
+	return eJackConnTypeUnknown;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaWasapiJackGeoLocation ConvertJackGeoLocationWASAPIToPA(int geoLoc)
+{
+	switch (geoLoc)
+	{
+	case eGeoLocRear:				return eJackGeoLocRear;
+	case eGeoLocFront:				return eJackGeoLocFront;
+	case eGeoLocLeft:				return eJackGeoLocLeft;
+	case eGeoLocRight:				return eJackGeoLocRight;
+	case eGeoLocTop:				return eJackGeoLocTop;
+	case eGeoLocBottom:				return eJackGeoLocBottom;
+#ifdef _KS_
+	case eGeoLocRearPanel:			return eJackGeoLocRearPanel;
+#else
+	case eGeoLocRearOPanel:         return eJackGeoLocRearPanel;
+#endif
+	case eGeoLocRiser:				return eJackGeoLocRiser;
+	case eGeoLocInsideMobileLid:	return eJackGeoLocInsideMobileLid;
+	case eGeoLocDrivebay:			return eJackGeoLocDrivebay;
+	case eGeoLocHDMI:				return eJackGeoLocHDMI;
+	case eGeoLocOutsideMobileLid:	return eJackGeoLocOutsideMobileLid;
+	case eGeoLocATAPI:				return eJackGeoLocATAPI;
+	}
+	return eJackGeoLocUnk;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaWasapiJackGenLocation ConvertJackGenLocationWASAPIToPA(int genLoc)
+{
+	switch (genLoc)
+	{
+	case eGenLocPrimaryBox:	return eJackGenLocPrimaryBox;
+	case eGenLocInternal:	return eJackGenLocInternal;
+#ifdef _KS_
+	case eGenLocSeparate:	return eJackGenLocSeparate;
+#else
+	case eGenLocSeperate:	return eJackGenLocSeparate;
+#endif
+	case eGenLocOther:		return eJackGenLocOther;
+	}
+	return eJackGenLocPrimaryBox;
+}
+
+// ------------------------------------------------------------------------------------------
+static PaWasapiJackPortConnection ConvertJackPortConnectionWASAPIToPA(int portConn)
+{
+	switch (portConn)
+	{
+	case ePortConnJack:					return eJackPortConnJack;
+	case ePortConnIntegratedDevice:		return eJackPortConnIntegratedDevice;
+	case ePortConnBothIntegratedAndJack:return eJackPortConnBothIntegratedAndJack;
+	case ePortConnUnknown:				return eJackPortConnUnknown;
+	}
+	return eJackPortConnJack;
+}
+
+// ------------------------------------------------------------------------------------------
+// Described at:
+// http://msdn.microsoft.com/en-us/library/dd371387(v=VS.85).aspx
+
+PaError PaWasapi_GetJackDescription(PaDeviceIndex nDevice, int jindex, PaWasapiJackDescription *pJackDescription)
+{
+	PaError ret;
+	HRESULT hr = S_OK;
+	PaDeviceIndex index;
+    IDeviceTopology *pDeviceTopology = NULL;
+    IConnector *pConnFrom = NULL;
+    IConnector *pConnTo = NULL;
+    IPart *pPart = NULL;
+    IKsJackDescription *pJackDesc = NULL;
+	KSJACK_DESCRIPTION jack = { 0 };
+
+	PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
+	if (paWasapi == NULL)
+		return paNotInitialized;
+
+	// Get device index.
+	ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep);
+    if (ret != paNoError)
+        return ret;
+
+	// Validate index.
+	if ((UINT32)index >= paWasapi->deviceCount)
+		return paInvalidDevice;
+
+	// Get the endpoint device's IDeviceTopology interface.
+	hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology,
+		CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
+	IF_FAILED_JUMP(hr, error);
+
+    // The device topology for an endpoint device always contains just one connector (connector number 0).
+	hr = IDeviceTopology_GetConnector(pDeviceTopology, 0, &pConnFrom);
+	IF_FAILED_JUMP(hr, error);
+
+    // Step across the connection to the jack on the adapter.
+	hr = IConnector_GetConnectedTo(pConnFrom, &pConnTo);
+    if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
+    {
+        // The adapter device is not currently active.
+        hr = E_NOINTERFACE;
+    }
+	IF_FAILED_JUMP(hr, error);
+
+	// Get the connector's IPart interface.
+	hr = IConnector_QueryInterface(pConnTo, &pa_IID_IPart, (void**)&pPart);
+	IF_FAILED_JUMP(hr, error);
+
+	// Activate the connector's IKsJackDescription interface.
+	hr = IPart_Activate(pPart, CLSCTX_INPROC_SERVER, &pa_IID_IKsJackDescription, (void**)&pJackDesc);
+	IF_FAILED_JUMP(hr, error);
+
+	// Test to return jack description struct for index 0.
+	hr = IKsJackDescription_GetJackDescription(pJackDesc, jindex, &jack);
+	IF_FAILED_JUMP(hr, error);
+
+	// Convert WASAPI values to PA format.
+	pJackDescription->channelMapping = jack.ChannelMapping;
+	pJackDescription->color          = jack.Color;
+	pJackDescription->connectionType = ConvertJackConnectionTypeWASAPIToPA(jack.ConnectionType);
+	pJackDescription->genLocation    = ConvertJackGenLocationWASAPIToPA(jack.GenLocation);
+	pJackDescription->geoLocation    = ConvertJackGeoLocationWASAPIToPA(jack.GeoLocation);
+	pJackDescription->isConnected    = jack.IsConnected;
+	pJackDescription->portConnection = ConvertJackPortConnectionWASAPIToPA(jack.PortConnection);
+
+	// Ok.
+	ret = paNoError;
+
+error:
+
+	SAFE_RELEASE(pDeviceTopology);
+	SAFE_RELEASE(pConnFrom);
+	SAFE_RELEASE(pConnTo);
+	SAFE_RELEASE(pPart);
+	SAFE_RELEASE(pJackDesc);
+
+	LogHostError(hr);
+	return ret;
+}
+
+// ------------------------------------------------------------------------------------------
+static HRESULT ProcessOutputBuffer(PaWasapiStream *stream, PaWasapiHostProcessor *processor, UINT32 frames)
+{
+	HRESULT hr;
+	BYTE *data = NULL;
+
+	// Get buffer
+	if ((hr = IAudioRenderClient_GetBuffer(stream->rclient, frames, &data)) != S_OK)
+	{
+		if (stream->out.shareMode == AUDCLNT_SHAREMODE_SHARED)
+		{
+			// Using GetCurrentPadding to overcome AUDCLNT_E_BUFFER_TOO_LARGE in
+			// shared mode results in no sound in Event-driven mode (MSDN does not
+			// document this, or is it WASAPI bug?), thus we better
+			// try to acquire buffer next time when GetBuffer allows to do so.
+#if 0
+			// Get Read position
+			UINT32 padding = 0;
+			hr = stream->out.client->GetCurrentPadding(&padding);
+			if (hr != S_OK)
+				return LogHostError(hr);
+
+			// Get frames to write
+			frames -= padding;
+			if (frames == 0)
+				return S_OK;
+
+			if ((hr = stream->rclient->GetBuffer(frames, &data)) != S_OK)
+				return LogHostError(hr);
+#else
+			if (hr == AUDCLNT_E_BUFFER_TOO_LARGE)
+				return S_OK; // be silent in shared mode, try again next time
+#endif
+		}
+		else
+			return LogHostError(hr);
+	}
+
+	// Process data
+	if (stream->out.monoMixer != NULL)
+	{
+#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+
+		// expand buffer (one way only for better performancedue to no calls to realloc)
+		UINT32 mono_frames_size = frames * __DIV_8(stream->out.wavex.Format.wBitsPerSample);
+		if (mono_frames_size > stream->out.monoBufferSize)
+			stream->out.monoBuffer = realloc(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size));
+
+		// process
+		processor[S_OUTPUT].processor(NULL, 0, (BYTE *)stream->out.monoBuffer, frames, processor[S_OUTPUT].userData);
+
+		// mix 1 to 2 channels
+		stream->out.monoMixer(data, stream->out.monoBuffer, frames);
+
+#undef __DIV_8
+	}
+	else
+	{
+		processor[S_OUTPUT].processor(NULL, 0, data, frames, processor[S_OUTPUT].userData);
+	}
+
+	// Release buffer
+	if ((hr = IAudioRenderClient_ReleaseBuffer(stream->rclient, frames, 0)) != S_OK)
+		LogHostError(hr);
+
+	return hr;
+}
+
+// ------------------------------------------------------------------------------------------
+static HRESULT ProcessInputBuffer(PaWasapiStream *stream, PaWasapiHostProcessor *processor)
+{
+	HRESULT hr = S_OK;
+	UINT32 frames;
+	BYTE *data = NULL;
+	DWORD flags = 0;
+
+	for (;;)
+	{
+		// Check if blocking call must be interrupted
+		if (WaitForSingleObject(stream->hCloseRequest, 1) != WAIT_TIMEOUT)
+			break;
+
+		// Get the available data in the shared buffer.
+		if ((hr = IAudioCaptureClient_GetBuffer(stream->cclient, &data, &frames, &flags, NULL, NULL)) != S_OK)
+		{
+			if (hr == AUDCLNT_S_BUFFER_EMPTY)
+				break; // capture buffer exhausted
+
+			return LogHostError(hr);
+			break;
+		}
+
+		// Detect silence
+		// if (flags & AUDCLNT_BUFFERFLAGS_SILENT)
+		//	data = NULL;
+
+		// Process data
+		if (stream->in.monoMixer != NULL)
+		{
+#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+
+			// expand buffer (one way only for better performancedue to no calls to realloc)
+			UINT32 mono_frames_size = frames * __DIV_8(stream->in.wavex.Format.wBitsPerSample);
+			if (mono_frames_size > stream->in.monoBufferSize)
+				stream->in.monoBuffer = realloc(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size));
+
+			// mix 1 to 2 channels
+			stream->in.monoMixer(stream->in.monoBuffer, data, frames);
+
+			// process
+			processor[S_INPUT].processor((BYTE *)stream->in.monoBuffer, frames, NULL, 0, processor[S_INPUT].userData);
+
+#undef __DIV_8
+		}
+		else
+		{
+			processor[S_INPUT].processor(data, frames, NULL, 0, processor[S_INPUT].userData);
+		}
+
+		// Release buffer
+		if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->cclient, frames)) != S_OK)
+			return LogHostError(hr);
+	}
+
+	return hr;
+}
+
+// ------------------------------------------------------------------------------------------
+void _OnStreamStop(PaWasapiStream *stream)
+{
+	// Stop INPUT client
+	if (stream->in.client != NULL)
+		IAudioClient_Stop(stream->in.client);
+
+	// Stop OUTPUT client
+	if (stream->out.client != NULL)
+		IAudioClient_Stop(stream->out.client);
+
+	// Restore thread priority
+	if (stream->hAvTask != NULL)
+	{
+		PaWasapi_ThreadPriorityRevert(stream->hAvTask);
+		stream->hAvTask = NULL;
+	}
+
+    // Notify
+    if (stream->streamRepresentation.streamFinishedCallback != NULL)
+        stream->streamRepresentation.streamFinishedCallback(stream->streamRepresentation.userData);
+}
+
+// ------------------------------------------------------------------------------------------
+PA_THREAD_FUNC ProcThreadEvent(void *param)
+{
+    PaWasapiHostProcessor processor[S_COUNT];
+	HRESULT hr;
+	DWORD dwResult;
+    PaWasapiStream *stream = (PaWasapiStream *)param;
+	PaWasapiHostProcessor defaultProcessor;
+	BOOL set_event[S_COUNT] = { FALSE, FALSE };
+
+	// Waiting on all events in case of Full-Duplex/Exclusive mode.
+	BOOL bWaitAllEvents = FALSE;
+	if ((stream->in.client != NULL) && (stream->out.client != NULL))
+	{
+		bWaitAllEvents = (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) &&
+			(stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE);
+	}
+
+    // Setup data processors
+    defaultProcessor.processor = WaspiHostProcessingLoop;
+    defaultProcessor.userData  = stream;
+    processor[S_INPUT] = (stream->hostProcessOverrideInput.processor != NULL ? stream->hostProcessOverrideInput : defaultProcessor);
+    processor[S_OUTPUT] = (stream->hostProcessOverrideOutput.processor != NULL ? stream->hostProcessOverrideOutput : defaultProcessor);
+
+	// Boost thread priority
+	PaWasapi_ThreadPriorityBoost((void **)&stream->hAvTask, stream->nThreadPriority);
+
+	// Create events
+	if (stream->event[S_OUTPUT] == NULL)
+	{
+		stream->event[S_OUTPUT] = CreateEvent(NULL, FALSE, FALSE, NULL);
+		set_event[S_OUTPUT] = TRUE;
+	}
+	if (stream->event[S_INPUT] == NULL)
+	{
+		stream->event[S_INPUT]  = CreateEvent(NULL, FALSE, FALSE, NULL);
+		set_event[S_INPUT] = TRUE;
+	}
+	if ((stream->event[S_OUTPUT] == NULL) || (stream->event[S_INPUT] == NULL))
+	{
+		PRINT(("WASAPI Thread: failed creating Input/Output event handle\n"));
+		goto thread_error;
+	}
+
+	// Initialize event & start INPUT stream
+	if (stream->in.client)
+	{
+		// Create & set handle
+		if (set_event[S_INPUT])
+		{
+			if ((hr = IAudioClient_SetEventHandle(stream->in.client, stream->event[S_INPUT])) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		// Create Capture client
+		if (stream->cclient == NULL)
+		{
+			if ((hr = IAudioClient_GetService(stream->in.client, &pa_IID_IAudioCaptureClient, (void **)&stream->cclient)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		// Start
+		if ((hr = IAudioClient_Start(stream->in.client)) != S_OK)
+		{
+			LogHostError(hr);
+			goto thread_error;
+		}
+	}
+
+	// Initialize event & start OUTPUT stream
+	if (stream->out.client)
+	{
+		// Create & set handle
+		if (set_event[S_OUTPUT])
+		{
+			if ((hr = IAudioClient_SetEventHandle(stream->out.client, stream->event[S_OUTPUT])) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		// Create Render client
+		if (stream->rclient == NULL)
+		{
+			if ((hr = IAudioClient_GetService(stream->out.client, &pa_IID_IAudioRenderClient, (void **)&stream->rclient)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		// Preload buffer before start
+		if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK)
+		{
+			LogHostError(hr);
+			goto thread_error;
+		}
+
+		// Start
+		if ((hr = IAudioClient_Start(stream->out.client)) != S_OK)
+		{
+			LogHostError(hr);
+			goto thread_error;
+		}
+
+	}
+
+	// Signal: stream running
+	stream->running = TRUE;
+
+	// Notify: thread started
+	SetEvent(stream->hThreadStart);
+
+	// Processing Loop
+	for (;;)
+    {
+	    // 2 sec timeout
+        dwResult = WaitForMultipleObjects(S_COUNT, stream->event, bWaitAllEvents, 10000);
+
+		// Check for close event (after wait for buffers to avoid any calls to user
+		// callback when hCloseRequest was set)
+		if (WaitForSingleObject(stream->hCloseRequest, 0) != WAIT_TIMEOUT)
+			break;
+
+		// Process S_INPUT/S_OUTPUT
+		switch (dwResult)
+		{
+		case WAIT_TIMEOUT: {
+			PRINT(("WASAPI Thread: WAIT_TIMEOUT - probably bad audio driver or Vista x64 bug: use paWinWasapiPolling instead\n"));
+			goto thread_end;
+			break; }
+
+		// Input stream
+		case WAIT_OBJECT_0 + S_INPUT: {
+            if (stream->cclient == NULL)
+                break;
+			if ((hr = ProcessInputBuffer(stream, processor)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+			break; }
+
+		// Output stream
+		case WAIT_OBJECT_0 + S_OUTPUT: {
+            if (stream->rclient == NULL)
+                break;
+			if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+			break; }
+		}
+	}
+
+thread_end:
+
+	// Process stop
+	_OnStreamStop(stream);
+
+	// Notify: thread exited
+	SetEvent(stream->hThreadExit);
+
+	// Notify: not running
+	stream->running = FALSE;
+
+	return 0;
+
+thread_error:
+
+	// Prevent deadlocking in Pa_StreamStart
+	SetEvent(stream->hThreadStart);
+
+	// Exit
+	goto thread_end;
+}
+
+// ------------------------------------------------------------------------------------------
+static HRESULT PollGetOutputFramesAvailable(PaWasapiStream *stream, UINT32 *available)
+{
+	HRESULT hr;
+	UINT32 frames  = stream->out.framesPerHostCallback,
+		   padding = 0;
+
+	(*available) = 0;
+
+	// get read position
+	if ((hr = IAudioClient_GetCurrentPadding(stream->out.client, &padding)) != S_OK)
+		return LogHostError(hr);
+
+	// get available
+	frames -= padding;
+
+	// set
+	(*available) = frames;
+	return hr;
+}
+
+// ------------------------------------------------------------------------------------------
+PA_THREAD_FUNC ProcThreadPoll(void *param)
+{
+    PaWasapiHostProcessor processor[S_COUNT];
+	HRESULT hr;
+    PaWasapiStream *stream = (PaWasapiStream *)param;
+	PaWasapiHostProcessor defaultProcessor;
+	INT32 i;
+
+	// Calculate the actual duration of the allocated buffer.
+	DWORD sleep_ms     = 0;
+	DWORD sleep_ms_in  = GetFramesSleepTime(stream->in.framesPerBuffer, stream->in.wavex.Format.nSamplesPerSec);
+	DWORD sleep_ms_out = GetFramesSleepTime(stream->out.framesPerBuffer, stream->out.wavex.Format.nSamplesPerSec);
+
+	// Adjust polling time
+	if (stream->bufferMode != paUtilFixedHostBufferSize)
+	{
+		sleep_ms_in  = GetFramesSleepTime(stream->bufferProcessor.framesPerUserBuffer, stream->in.wavex.Format.nSamplesPerSec);
+		sleep_ms_out = GetFramesSleepTime(stream->bufferProcessor.framesPerUserBuffer, stream->out.wavex.Format.nSamplesPerSec);
+	}
+
+	// Choose smallest
+	if ((sleep_ms_in != 0) && (sleep_ms_out != 0))
+		sleep_ms = min(sleep_ms_in, sleep_ms_out);
+	else
+	{
+		sleep_ms = (sleep_ms_in ? sleep_ms_in : sleep_ms_out);
+	}
+	// Make sure not 0
+	if (sleep_ms == 0)
+		sleep_ms = 1;
+
+    // Setup data processors
+    defaultProcessor.processor = WaspiHostProcessingLoop;
+    defaultProcessor.userData  = stream;
+    processor[S_INPUT] = (stream->hostProcessOverrideInput.processor != NULL ? stream->hostProcessOverrideInput : defaultProcessor);
+    processor[S_OUTPUT] = (stream->hostProcessOverrideOutput.processor != NULL ? stream->hostProcessOverrideOutput : defaultProcessor);
+
+	// Boost thread priority
+	PaWasapi_ThreadPriorityBoost((void **)&stream->hAvTask, stream->nThreadPriority);
+
+	// Initialize event & start INPUT stream
+	if (stream->in.client)
+	{
+		if (stream->cclient == NULL)
+		{
+			if ((hr = IAudioClient_GetService(stream->in.client, &pa_IID_IAudioCaptureClient, (void **)&stream->cclient)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		if ((hr = IAudioClient_Start(stream->in.client)) != S_OK)
+		{
+			LogHostError(hr);
+			goto thread_error;
+		}
+	}
+
+
+	// Initialize event & start OUTPUT stream
+	if (stream->out.client)
+	{
+		if (stream->rclient == NULL)
+		{
+			if ((hr = IAudioClient_GetService(stream->out.client, &pa_IID_IAudioRenderClient, (void **)&stream->rclient)) != S_OK)
+			{
+				LogHostError(hr);
+				goto thread_error;
+			}
+		}
+
+		// Preload buffer (obligatory, othervise ->Start() will fail), avoid processing
+		// when in full-duplex mode as it requires input processing as well
+		if (!PA_WASAPI__IS_FULLDUPLEX(stream))
+		{
+			UINT32 frames = 0;
+			if ((hr = PollGetOutputFramesAvailable(stream, &frames)) == S_OK)
+            {
+				if (stream->bufferMode == paUtilFixedHostBufferSize)
+				{
+					if (frames >= stream->out.framesPerBuffer)
+						frames = stream->out.framesPerBuffer;
+				}
+
+                if (frames != 0)
+                {
+                    if ((hr = ProcessOutputBuffer(stream, processor, frames)) != S_OK)
+                    {
+                        LogHostError(hr); // not fatal, just log
+                    }
+                }
+            }
+            else
+			{
+				LogHostError(hr); // not fatal, just log
+			}
+		}
+
+		// Start
+		if ((hr = IAudioClient_Start(stream->out.client)) != S_OK)
+		{
+			LogHostError(hr);
+			goto thread_error;
+		}
+	}
+
+	// Signal: stream running
+	stream->running = TRUE;
+
+	// Notify: thread started
+	SetEvent(stream->hThreadStart);
+
+	if (!PA_WASAPI__IS_FULLDUPLEX(stream))
+	{
+		// Processing Loop
+		while (WaitForSingleObject(stream->hCloseRequest, sleep_ms) == WAIT_TIMEOUT)
+		{
+			for (i = 0; i < S_COUNT; ++i)
+			{
+				// Process S_INPUT/S_OUTPUT
+				switch (i)
+				{
+				// Input stream
+				case S_INPUT: {
+					if (stream->cclient == NULL)
+						break;
+					if ((hr = ProcessInputBuffer(stream, processor)) != S_OK)
+					{
+						LogHostError(hr);
+						goto thread_error;
+					}
+					break; }
+
+				// Output stream
+				case S_OUTPUT: {
+
+					UINT32 frames;
+					if (stream->rclient == NULL)
+						break;
+
+					// get available frames
+					if ((hr = PollGetOutputFramesAvailable(stream, &frames)) != S_OK)
+					{
+						LogHostError(hr);
+						goto thread_error;
+					}
+
+					// output
+					if (stream->bufferMode == paUtilFixedHostBufferSize)
+					{
+						if (frames >= stream->out.framesPerBuffer)
+						{
+							if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK)
+							{
+								LogHostError(hr);
+								goto thread_error;
+							}
+						}
+					}
+					else
+					{
+						if (frames != 0)
+						{
+							if ((hr = ProcessOutputBuffer(stream, processor, frames)) != S_OK)
+							{
+								LogHostError(hr);
+								goto thread_error;
+							}
+						}
+					}
+
+					break; }
+				}
+			}
+		}
+	}
+	else
+	{
+#if 0
+		// Processing Loop
+		while (WaitForSingleObject(stream->hCloseRequest, 1) == WAIT_TIMEOUT)
+		{
+			UINT32 i_frames = 0, i_processed = 0;
+			BYTE *i_data = NULL, *o_data = NULL, *o_data_host = NULL;
+			DWORD i_flags = 0;
+			UINT32 o_frames = 0;
+
+			// get host input buffer
+			if ((hr = IAudioCaptureClient_GetBuffer(stream->cclient, &i_data, &i_frames, &i_flags, NULL, NULL)) != S_OK)
+			{
+				if (hr == AUDCLNT_S_BUFFER_EMPTY)
+					continue; // no data in capture buffer
+
+				LogHostError(hr);
+				break;
+			}
+
+			// get available frames
+			if ((hr = PollGetOutputFramesAvailable(stream, &o_frames)) != S_OK)
+			{
+				LogHostError(hr);
+				break;
+			}
+
+			// process equal ammount of frames
+			if (o_frames >= i_frames)
+			{
+				// process input ammount of frames
+				UINT32 o_processed = i_frames;
+
+				// get host output buffer
+				if ((hr = IAudioRenderClient_GetBuffer(stream->rclient, o_processed, &o_data)) == S_OK)
+				{
+					// processed amount of i_frames
+					i_processed = i_frames;
+					o_data_host = o_data;
+
+					// convert output mono
+					if (stream->out.monoMixer)
+					{
+						#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+						UINT32 mono_frames_size = o_processed * __DIV_8(stream->out.wavex.Format.wBitsPerSample);
+						#undef __DIV_8
+						// expand buffer (one way only for better performance due to no calls to realloc)
+						if (mono_frames_size > stream->out.monoBufferSize)
+						{
+							stream->out.monoBuffer = realloc(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size));
+							if (stream->out.monoBuffer == NULL)
+							{
+								LogPaError(paInsufficientMemory);
+								break;
+							}
+						}
+
+						// replace buffer pointer
+						o_data = (BYTE *)stream->out.monoBuffer;
+					}
+
+					// convert input mono
+					if (stream->in.monoMixer)
+					{
+						#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+						UINT32 mono_frames_size = i_processed * __DIV_8(stream->in.wavex.Format.wBitsPerSample);
+						#undef __DIV_8
+						// expand buffer (one way only for better performance due to no calls to realloc)
+						if (mono_frames_size > stream->in.monoBufferSize)
+						{
+							stream->in.monoBuffer = realloc(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size));
+							if (stream->in.monoBuffer == NULL)
+							{
+								LogPaError(paInsufficientMemory);
+								break;
+							}
+						}
+
+						// mix 2 to 1 input channels
+						stream->in.monoMixer(stream->in.monoBuffer, i_data, i_processed);
+
+						// replace buffer pointer
+						i_data = (BYTE *)stream->in.monoBuffer;
+					}
+
+					// process
+					processor[S_FULLDUPLEX].processor(i_data, i_processed, o_data, o_processed, processor[S_FULLDUPLEX].userData);
+
+					// mix 1 to 2 output channels
+					if (stream->out.monoBuffer)
+						stream->out.monoMixer(o_data_host, stream->out.monoBuffer, o_processed);
+
+					// release host output buffer
+					if ((hr = IAudioRenderClient_ReleaseBuffer(stream->rclient, o_processed, 0)) != S_OK)
+						LogHostError(hr);
+				}
+				else
+				{
+					if (stream->out.shareMode != AUDCLNT_SHAREMODE_SHARED)
+						LogHostError(hr); // be silent in shared mode, try again next time
+				}
+			}
+
+			// release host input buffer
+			if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->cclient, i_processed)) != S_OK)
+			{
+				LogHostError(hr);
+				break;
+			}
+		}
+#else
+		// Processing Loop
+		//sleep_ms = 1;
+		while (WaitForSingleObject(stream->hCloseRequest, sleep_ms) == WAIT_TIMEOUT)
+		{
+			UINT32 i_frames = 0, i_processed = 0;
+			BYTE *i_data = NULL, *o_data = NULL, *o_data_host = NULL;
+			DWORD i_flags = 0;
+			UINT32 o_frames = 0;
+			//BOOL repeat = FALSE;
+
+			// going below 1 msec resolution, switching between 1 ms and no waiting
+			//if (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+			//	sleep_ms = !sleep_ms;
+
+			// get available frames
+			if ((hr = PollGetOutputFramesAvailable(stream, &o_frames)) != S_OK)
+			{
+				LogHostError(hr);
+				break;
+			}
+
+			while (o_frames != 0)
+			{
+				// get host input buffer
+				if ((hr = IAudioCaptureClient_GetBuffer(stream->cclient, &i_data, &i_frames, &i_flags, NULL, NULL)) != S_OK)
+				{
+					if (hr == AUDCLNT_S_BUFFER_EMPTY)
+						break; // no data in capture buffer
+
+					LogHostError(hr);
+					break;
+				}
+
+				//PA_DEBUG(("full-duplex: o_frames[%d] i_frames[%d] repeat[%d]\n", o_frames, i_frames, repeat));
+				//repeat = TRUE;
+
+				// process equal ammount of frames
+				if (o_frames >= i_frames)
+				{
+					// process input ammount of frames
+					UINT32 o_processed = i_frames;
+
+					// get host output buffer
+					if ((hr = IAudioRenderClient_GetBuffer(stream->rclient, o_processed, &o_data)) == S_OK)
+					{
+						// processed amount of i_frames
+						i_processed = i_frames;
+						o_data_host = o_data;
+
+						// convert output mono
+						if (stream->out.monoMixer)
+						{
+							#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+							UINT32 mono_frames_size = o_processed * __DIV_8(stream->out.wavex.Format.wBitsPerSample);
+							#undef __DIV_8
+							// expand buffer (one way only for better performance due to no calls to realloc)
+							if (mono_frames_size > stream->out.monoBufferSize)
+							{
+								stream->out.monoBuffer = realloc(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size));
+								if (stream->out.monoBuffer == NULL)
+								{
+									LogPaError(paInsufficientMemory);
+									goto thread_error;
+								}
+							}
+
+							// replace buffer pointer
+							o_data = (BYTE *)stream->out.monoBuffer;
+						}
+
+						// convert input mono
+						if (stream->in.monoMixer)
+						{
+							#define __DIV_8(v)  ((v) >> 3) //!< (v / 8)
+							UINT32 mono_frames_size = i_processed * __DIV_8(stream->in.wavex.Format.wBitsPerSample);
+							#undef __DIV_8
+							// expand buffer (one way only for better performance due to no calls to realloc)
+							if (mono_frames_size > stream->in.monoBufferSize)
+							{
+								stream->in.monoBuffer = realloc(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size));
+								if (stream->in.monoBuffer == NULL)
+								{
+									LogPaError(paInsufficientMemory);
+									goto thread_error;
+								}
+							}
+
+							// mix 2 to 1 input channels
+							stream->in.monoMixer(stream->in.monoBuffer, i_data, i_processed);
+
+							// replace buffer pointer
+							i_data = (BYTE *)stream->in.monoBuffer;
+						}
+
+						// process
+						processor[S_FULLDUPLEX].processor(i_data, i_processed, o_data, o_processed, processor[S_FULLDUPLEX].userData);
+
+						// mix 1 to 2 output channels
+						if (stream->out.monoBuffer)
+							stream->out.monoMixer(o_data_host, stream->out.monoBuffer, o_processed);
+
+						// release host output buffer
+						if ((hr = IAudioRenderClient_ReleaseBuffer(stream->rclient, o_processed, 0)) != S_OK)
+							LogHostError(hr);
+
+						o_frames -= o_processed;
+					}
+					else
+					{
+						if (stream->out.shareMode != AUDCLNT_SHAREMODE_SHARED)
+							LogHostError(hr); // be silent in shared mode, try again next time
+					}
+				}
+				else
+				{
+					i_processed = 0;
+					goto fd_release_buffer_in;
+				}
+
+fd_release_buffer_in:
+
+				// release host input buffer
+				if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->cclient, i_processed)) != S_OK)
+				{
+					LogHostError(hr);
+					break;
+				}
+
+				// break processing, input hasn't been accumulated yet
+				if (i_processed == 0)
+					break;
+			}
+		}
+#endif
+	}
+
+thread_end:
+
+	// Process stop
+	_OnStreamStop(stream);
+
+	// Notify: thread exited
+	SetEvent(stream->hThreadExit);
+
+	// Notify: not running
+	stream->running = FALSE;
+
+	return 0;
+
+thread_error:
+
+	// Prevent deadlocking in Pa_StreamStart
+	SetEvent(stream->hThreadStart);
+
+	// Exit
+	goto thread_end;
+}
+
+//#endif //VC 2005
+
+
+
+
+#if 0
+			if(bFirst) {
+				float masteur;
+				hr = stream->outVol->GetMasterVolumeLevelScalar(&masteur);
+				if (hr != S_OK)
+					LogHostError(hr);
+				float chan1, chan2;
+				hr = stream->outVol->GetChannelVolumeLevelScalar(0, &chan1);
+				if (hr != S_OK)
+					LogHostError(hr);
+				hr = stream->outVol->GetChannelVolumeLevelScalar(1, &chan2);
+				if (hr != S_OK)
+					LogHostError(hr);
+
+				BOOL bMute;
+				hr = stream->outVol->GetMute(&bMute);
+				if (hr != S_OK)
+					LogHostError(hr);
+
+				stream->outVol->SetMasterVolumeLevelScalar(0.5, NULL);
+				stream->outVol->SetChannelVolumeLevelScalar(0, 0.5, NULL);
+				stream->outVol->SetChannelVolumeLevelScalar(1, 0.5, NULL);
+				stream->outVol->SetMute(FALSE, NULL);
+				bFirst = FALSE;
+			}
+#endif
diff --git a/portaudio/src/hostapi/wasapi/readme.txt b/portaudio/src/hostapi/wasapi/readme.txt
new file mode 100644
index 000000000..7d4082b6e
--- /dev/null
+++ b/portaudio/src/hostapi/wasapi/readme.txt
@@ -0,0 +1,25 @@
+**************
+* WASAPI API *
+**************
+
+----------------------------------------
+Microsoft Visual Studio 2005SP1/2008/10
+----------------------------------------
+No specific actions are needed to compile WASAPI API under Visual Studio.
+You are only required to install min. Windows Vista SDK (v6.0A) prior
+compilation.
+
+----------------------------------------
+MinGW (GCC 32-bit)/ MinGW64 (GCC 64-bit)
+----------------------------------------
+To compile under MinGW you are required to include 'mingw-include' directory
+which contains necessary files with WASAPI API. These files are modified
+in order to be compiled by MinGW compiler. These files are taken from 
+Windows Vista SDK (v6.0A). MinGW compilation is tested and proved to be
+fully working under 32-bit and 64-bit modes.
+MinGW   (32-bit) tested: gcc version 4.4.0 (GCC)
+MinGW64 (64-bit) tested: gcc version 4.4.4 20100226 (prerelease) (GCC)
+
+PortAudio
+/Dmitry Kostjuchenko/
+04.03.2010
\ No newline at end of file
diff --git a/portaudio/src/hostapi/wdmks/pa_win_wdmks.c b/portaudio/src/hostapi/wdmks/pa_win_wdmks.c
new file mode 100644
index 000000000..caddfd52d
--- /dev/null
+++ b/portaudio/src/hostapi/wdmks/pa_win_wdmks.c
@@ -0,0 +1,3304 @@
+/*
+ * $Id: pa_win_wdmks.c 1411 2009-05-14 14:37:37Z rossb $
+ * PortAudio Windows WDM-KS interface
+ *
+ * Author: Andrew Baldwin
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 1999-2004 Andrew Baldwin, Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup hostapi_src
+ @brief Portaudio WDM-KS host API.
+
+ @note This is the implementation of the Portaudio host API using the
+ Windows WDM/Kernel Streaming API in order to enable very low latency
+ playback and recording on all modern Windows platforms (e.g. 2K, XP)
+ Note: This API accesses the device drivers below the usual KMIXER
+ component which is normally used to enable multi-client mixing and
+ format conversion. That means that it will lock out all other users
+ of a device for the duration of active stream using those devices
+*/
+
+#include <stdio.h>
+
+/* Debugging/tracing support */
+
+#define PA_LOGE_
+#define PA_LOGL_
+
+#ifdef __GNUC__
+    #include <initguid.h>
+    #define _WIN32_WINNT 0x0501
+    #define WINVER 0x0501
+#endif
+
+#include <string.h> /* strlen() */
+#include <assert.h>
+
+#include "pa_util.h"
+#include "pa_allocation.h"
+#include "pa_hostapi.h"
+#include "pa_stream.h"
+#include "pa_cpuload.h"
+#include "pa_process.h"
+#include "portaudio.h"
+#include "pa_debugprint.h"
+
+#include <windows.h>
+#include <winioctl.h>
+#include <process.h>
+
+#ifdef __GNUC__
+    #undef PA_LOGE_
+    #define PA_LOGE_ PA_DEBUG(("%s {\n",__FUNCTION__))
+    #undef PA_LOGL_
+    #define PA_LOGL_ PA_DEBUG(("} %s\n",__FUNCTION__))
+    /* These defines are set in order to allow the WIndows DirectX
+     * headers to compile with a GCC compiler such as MinGW
+     * NOTE: The headers may generate a few warning in GCC, but
+     * they should compile */
+    #define _INC_MMSYSTEM
+    #define _INC_MMREG
+    #define _NTRTL_ /* Turn off default definition of DEFINE_GUIDEX */
+    #define DEFINE_GUID_THUNK(name,guid) DEFINE_GUID(name,guid)
+    #define DEFINE_GUIDEX(n) DEFINE_GUID_THUNK( n, STATIC_##n )
+    #if !defined( DEFINE_WAVEFORMATEX_GUID )
+        #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
+    #endif
+    #define  WAVE_FORMAT_ADPCM      0x0002
+    #define  WAVE_FORMAT_IEEE_FLOAT 0x0003
+    #define  WAVE_FORMAT_ALAW       0x0006
+    #define  WAVE_FORMAT_MULAW      0x0007
+    #define  WAVE_FORMAT_MPEG       0x0050
+    #define  WAVE_FORMAT_DRM        0x0009
+    #define DYNAMIC_GUID_THUNK(l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+    #define DYNAMIC_GUID(data) DYNAMIC_GUID_THUNK(data)
+#endif
+
+/* use CreateThread for CYGWIN, _beginthreadex for all others */
+#ifndef __CYGWIN__
+#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#else
+#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#endif
+
+/* use ExitThread for CYGWIN, _endthreadex for all others */
+#ifndef __CYGWIN__
+#define EXIT_THREAD _endthreadex(0)
+#else
+#define EXIT_THREAD ExitThread(0)
+#endif
+
+#ifdef _MSC_VER
+    #define NOMMIDS
+    #define DYNAMIC_GUID(data) {data}
+    #define _NTRTL_ /* Turn off default definition of DEFINE_GUIDEX */
+    #undef DEFINE_GUID
+    #define DEFINE_GUID(n,data) EXTERN_C const GUID n = {data}
+    #define DEFINE_GUID_THUNK(n,data) DEFINE_GUID(n,data)
+    #define DEFINE_GUIDEX(n) DEFINE_GUID_THUNK(n, STATIC_##n)
+#endif
+
+#include <mmreg.h>
+#include <ks.h>
+#include <ksmedia.h>
+#include <tchar.h>
+#include <assert.h>
+#include <stdio.h>
+
+/* These next definitions allow the use of the KSUSER DLL */
+typedef KSDDKAPI DWORD WINAPI KSCREATEPIN(HANDLE, PKSPIN_CONNECT, ACCESS_MASK, PHANDLE);
+extern HMODULE      DllKsUser;
+extern KSCREATEPIN* FunctionKsCreatePin;
+
+/* Forward definition to break circular type reference between pin and filter */
+struct __PaWinWdmFilter;
+typedef struct __PaWinWdmFilter PaWinWdmFilter;
+
+/* The Pin structure
+ * A pin is an input or output node, e.g. for audio flow */
+typedef struct __PaWinWdmPin
+{
+    HANDLE                      handle;
+    PaWinWdmFilter*             parentFilter;
+    unsigned long               pinId;
+    KSPIN_CONNECT*              pinConnect;
+    unsigned long               pinConnectSize;
+    KSDATAFORMAT_WAVEFORMATEX*  ksDataFormatWfx;
+    KSPIN_COMMUNICATION         communication;
+    KSDATARANGE*                dataRanges;
+    KSMULTIPLE_ITEM*            dataRangesItem;
+    KSPIN_DATAFLOW              dataFlow;
+    KSPIN_CINSTANCES            instances;
+    unsigned long               frameSize;
+    int                         maxChannels;
+    unsigned long               formats;
+    int                         bestSampleRate;
+}
+PaWinWdmPin;
+
+/* The Filter structure
+ * A filter has a number of pins and a "friendly name" */
+struct __PaWinWdmFilter
+{
+    HANDLE         handle;
+    int            pinCount;
+    PaWinWdmPin**  pins;
+    TCHAR          filterName[MAX_PATH];
+    TCHAR          friendlyName[MAX_PATH];
+    int            maxInputChannels;
+    int            maxOutputChannels;
+    unsigned long  formats;
+    int            usageCount;
+    int            bestSampleRate;
+};
+
+/* PaWinWdmHostApiRepresentation - host api datastructure specific to this implementation */
+typedef struct __PaWinWdmHostApiRepresentation
+{
+    PaUtilHostApiRepresentation  inheritedHostApiRep;
+    PaUtilStreamInterface        callbackStreamInterface;
+    PaUtilStreamInterface        blockingStreamInterface;
+
+    PaUtilAllocationGroup*       allocations;
+    PaWinWdmFilter**             filters;
+    int                          filterCount;
+}
+PaWinWdmHostApiRepresentation;
+
+typedef struct __PaWinWdmDeviceInfo
+{
+    PaDeviceInfo     inheritedDeviceInfo;
+    PaWinWdmFilter*  filter;
+}
+PaWinWdmDeviceInfo;
+
+typedef struct __DATAPACKET
+{
+    KSSTREAM_HEADER  Header;
+    OVERLAPPED       Signal;
+} DATAPACKET;
+
+/* PaWinWdmStream - a stream data structure specifically for this implementation */
+typedef struct __PaWinWdmStream
+{
+    PaUtilStreamRepresentation  streamRepresentation;
+    PaUtilCpuLoadMeasurer       cpuLoadMeasurer;
+    PaUtilBufferProcessor       bufferProcessor;
+
+    PaWinWdmPin*                recordingPin;
+    PaWinWdmPin*                playbackPin;
+    char*                       hostBuffer;
+    unsigned long               framesPerHostIBuffer;
+    unsigned long               framesPerHostOBuffer;
+    int                         bytesPerInputFrame;
+    int                         bytesPerOutputFrame;
+    int                         streamStarted;
+    int                         streamActive;
+    int                         streamStop;
+    int                         streamAbort;
+    int                         oldProcessPriority;
+    HANDLE                      streamThread;
+    HANDLE                      events[5];  /* 2 play + 2 record packets + abort events */
+    DATAPACKET                  packets[4]; /* 2 play + 2 record */
+    PaStreamFlags               streamFlags;
+    /* These values handle the case where the user wants to use fewer
+     * channels than the device has */
+    int                         userInputChannels;
+    int                         deviceInputChannels;
+    int                         userOutputChannels;
+    int                         deviceOutputChannels;
+    int                         inputSampleSize;
+    int                         outputSampleSize;
+}
+PaWinWdmStream;
+
+#include <setupapi.h>
+
+HMODULE      DllKsUser = NULL;
+KSCREATEPIN* FunctionKsCreatePin = NULL;
+
+/* prototypes for functions declared in this file */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/* Low level I/O functions */
+static PaError WdmSyncIoctl(HANDLE handle,
+    unsigned long ioctlNumber,
+    void* inBuffer,
+    unsigned long inBufferCount,
+    void* outBuffer,
+    unsigned long outBufferCount,
+    unsigned long* bytesReturned);
+static PaError WdmGetPropertySimple(HANDLE handle,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount,
+    void* instance,
+    unsigned long instanceCount);
+static PaError WdmSetPropertySimple(HANDLE handle,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount,
+    void* instance,
+    unsigned long instanceCount);
+static PaError WdmGetPinPropertySimple(HANDLE  handle,
+    unsigned long pinId,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount);
+static PaError WdmGetPinPropertyMulti(HANDLE  handle,
+    unsigned long pinId,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    KSMULTIPLE_ITEM** ksMultipleItem);
+
+/** Pin management functions */
+static PaWinWdmPin* PinNew(PaWinWdmFilter* parentFilter, unsigned long pinId, PaError* error);
+static void PinFree(PaWinWdmPin* pin);
+static void PinClose(PaWinWdmPin* pin);
+static PaError PinInstantiate(PaWinWdmPin* pin);
+/*static PaError PinGetState(PaWinWdmPin* pin, KSSTATE* state); NOT USED */
+static PaError PinSetState(PaWinWdmPin* pin, KSSTATE state);
+static PaError PinSetFormat(PaWinWdmPin* pin, const WAVEFORMATEX* format);
+static PaError PinIsFormatSupported(PaWinWdmPin* pin, const WAVEFORMATEX* format);
+
+/* Filter management functions */
+static PaWinWdmFilter* FilterNew(
+    TCHAR* filterName,
+    TCHAR* friendlyName,
+    PaError* error);
+static void FilterFree(PaWinWdmFilter* filter);
+static PaWinWdmPin* FilterCreateRenderPin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error);
+static PaWinWdmPin* FilterFindViableRenderPin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error);
+static PaError FilterCanCreateRenderPin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex);
+static PaWinWdmPin* FilterCreateCapturePin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error);
+static PaWinWdmPin* FilterFindViableCapturePin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error);
+static PaError FilterCanCreateCapturePin(
+    PaWinWdmFilter* filter,
+    const WAVEFORMATEX* pwfx);
+static PaError FilterUse(
+    PaWinWdmFilter* filter);
+static void FilterRelease(
+    PaWinWdmFilter* filter);
+
+/* Interface functions */
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
+static PaError IsFormatSupported(
+    struct PaUtilHostApiRepresentation *hostApi,
+    const PaStreamParameters *inputParameters,
+    const PaStreamParameters *outputParameters,
+    double sampleRate );
+static PaError OpenStream(
+    struct PaUtilHostApiRepresentation *hostApi,
+    PaStream** s,
+    const PaStreamParameters *inputParameters,
+    const PaStreamParameters *outputParameters,
+    double sampleRate,
+    unsigned long framesPerBuffer,
+    PaStreamFlags streamFlags,
+    PaStreamCallback *streamCallback,
+    void *userData );
+static PaError CloseStream( PaStream* stream );
+static PaError StartStream( PaStream *stream );
+static PaError StopStream( PaStream *stream );
+static PaError AbortStream( PaStream *stream );
+static PaError IsStreamStopped( PaStream *s );
+static PaError IsStreamActive( PaStream *stream );
+static PaTime GetStreamTime( PaStream *stream );
+static double GetStreamCpuLoad( PaStream* stream );
+static PaError ReadStream(
+    PaStream* stream,
+    void *buffer,
+    unsigned long frames );
+static PaError WriteStream(
+    PaStream* stream,
+    const void *buffer,
+    unsigned long frames );
+static signed long GetStreamReadAvailable( PaStream* stream );
+static signed long GetStreamWriteAvailable( PaStream* stream );
+
+/* Utility functions */
+static unsigned long GetWfexSize(const WAVEFORMATEX* wfex);
+static PaError BuildFilterList(PaWinWdmHostApiRepresentation* wdmHostApi);
+static BOOL PinWrite(HANDLE h, DATAPACKET* p);
+static BOOL PinRead(HANDLE h, DATAPACKET* p);
+static void DuplicateFirstChannelInt16(void* buffer, int channels, int samples);
+static void DuplicateFirstChannelInt24(void* buffer, int channels, int samples);
+static DWORD WINAPI ProcessingThread(LPVOID pParam);
+
+/* Function bodies */
+
+static unsigned long GetWfexSize(const WAVEFORMATEX* wfex)
+{
+    if( wfex->wFormatTag == WAVE_FORMAT_PCM )
+    {
+        return sizeof( WAVEFORMATEX );
+    }
+    else
+    {
+        return (sizeof( WAVEFORMATEX ) + wfex->cbSize);
+    }
+}
+
+/*
+Low level pin/filter access functions
+*/
+static PaError WdmSyncIoctl(
+    HANDLE handle,
+    unsigned long ioctlNumber,
+    void* inBuffer,
+    unsigned long inBufferCount,
+    void* outBuffer,
+    unsigned long outBufferCount,
+    unsigned long* bytesReturned)
+{
+    PaError result = paNoError;
+    OVERLAPPED overlapped;
+    int boolResult;
+    unsigned long dummyBytesReturned;
+    unsigned long error;
+
+    if( !bytesReturned )
+    {
+        /* User a dummy as the caller hasn't supplied one */
+        bytesReturned = &dummyBytesReturned;
+    }
+
+    FillMemory((void *)&overlapped,sizeof(overlapped),0);
+    overlapped.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
+    if( !overlapped.hEvent )
+    {
+          result = paInsufficientMemory;
+        goto error;
+    }
+    overlapped.hEvent = (HANDLE)((DWORD_PTR)overlapped.hEvent | 0x1);
+
+    boolResult = DeviceIoControl(handle, ioctlNumber, inBuffer, inBufferCount,
+        outBuffer, outBufferCount, bytesReturned, &overlapped);
+    if( !boolResult )
+    {
+        error = GetLastError();
+        if( error == ERROR_IO_PENDING )
+        {
+            error = WaitForSingleObject(overlapped.hEvent,INFINITE);
+            if( error != WAIT_OBJECT_0 )
+            {
+                result = paUnanticipatedHostError;
+                goto error;
+            }
+        }
+        else if((( error == ERROR_INSUFFICIENT_BUFFER ) ||
+                  ( error == ERROR_MORE_DATA )) &&
+                  ( ioctlNumber == IOCTL_KS_PROPERTY ) &&
+                  ( outBufferCount == 0 ))
+        {
+            boolResult = TRUE;
+        }
+        else
+        {
+            result = paUnanticipatedHostError;
+        }
+    }
+    if( !boolResult )
+        *bytesReturned = 0;
+
+error:
+    if( overlapped.hEvent )
+    {
+            CloseHandle( overlapped.hEvent );
+    }
+    return result;
+}
+
+static PaError WdmGetPropertySimple(HANDLE handle,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount,
+    void* instance,
+    unsigned long instanceCount)
+{
+    PaError result;
+    KSPROPERTY* ksProperty;
+    unsigned long propertyCount;
+
+    propertyCount = sizeof(KSPROPERTY) + instanceCount;
+    ksProperty = (KSPROPERTY*)PaUtil_AllocateMemory( propertyCount );
+    if( !ksProperty )
+    {
+        return paInsufficientMemory;
+    }
+
+    FillMemory((void*)ksProperty,sizeof(ksProperty),0);
+    ksProperty->Set = *guidPropertySet;
+    ksProperty->Id = property;
+    ksProperty->Flags = KSPROPERTY_TYPE_GET;
+
+    if( instance )
+    {
+        memcpy( (void*)(((char*)ksProperty)+sizeof(KSPROPERTY)), instance, instanceCount );
+    }
+
+    result = WdmSyncIoctl(
+                handle,
+                IOCTL_KS_PROPERTY,
+                ksProperty,
+                propertyCount,
+                value,
+                valueCount,
+                NULL);
+
+    PaUtil_FreeMemory( ksProperty );
+    return result;
+}
+
+static PaError WdmSetPropertySimple(
+    HANDLE handle,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount,
+    void* instance,
+    unsigned long instanceCount)
+{
+    PaError result;
+    KSPROPERTY* ksProperty;
+    unsigned long propertyCount  = 0;
+
+    propertyCount = sizeof(KSPROPERTY) + instanceCount;
+    ksProperty = (KSPROPERTY*)PaUtil_AllocateMemory( propertyCount );
+    if( !ksProperty )
+    {
+        return paInsufficientMemory;
+    }
+
+    ksProperty->Set = *guidPropertySet;
+    ksProperty->Id = property;
+    ksProperty->Flags = KSPROPERTY_TYPE_SET;
+
+    if( instance )
+    {
+        memcpy((void*)((char*)ksProperty + sizeof(KSPROPERTY)), instance, instanceCount);
+    }
+
+    result = WdmSyncIoctl(
+                handle,
+                IOCTL_KS_PROPERTY,
+                ksProperty,
+                propertyCount,
+                value,
+                valueCount,
+                NULL);
+
+    PaUtil_FreeMemory( ksProperty );
+    return result;
+}
+
+static PaError WdmGetPinPropertySimple(
+    HANDLE  handle,
+    unsigned long pinId,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    void* value,
+    unsigned long valueCount)
+{
+    PaError result;
+
+    KSP_PIN ksPProp;
+    ksPProp.Property.Set = *guidPropertySet;
+    ksPProp.Property.Id = property;
+    ksPProp.Property.Flags = KSPROPERTY_TYPE_GET;
+    ksPProp.PinId = pinId;
+    ksPProp.Reserved = 0;
+
+    result = WdmSyncIoctl(
+                handle,
+                IOCTL_KS_PROPERTY,
+                &ksPProp,
+                sizeof(KSP_PIN),
+                value,
+                valueCount,
+                NULL);
+
+    return result;
+}
+
+static PaError WdmGetPinPropertyMulti(
+    HANDLE handle,
+    unsigned long pinId,
+    const GUID* const guidPropertySet,
+    unsigned long property,
+    KSMULTIPLE_ITEM** ksMultipleItem)
+{
+    PaError result;
+    unsigned long multipleItemSize = 0;
+    KSP_PIN ksPProp;
+
+    ksPProp.Property.Set = *guidPropertySet;
+    ksPProp.Property.Id = property;
+    ksPProp.Property.Flags = KSPROPERTY_TYPE_GET;
+    ksPProp.PinId = pinId;
+    ksPProp.Reserved = 0;
+
+    result = WdmSyncIoctl(
+                handle,
+                IOCTL_KS_PROPERTY,
+                &ksPProp.Property,
+                sizeof(KSP_PIN),
+                NULL,
+                0,
+                &multipleItemSize);
+    if( result != paNoError )
+    {
+        return result;
+    }
+
+    *ksMultipleItem = (KSMULTIPLE_ITEM*)PaUtil_AllocateMemory( multipleItemSize );
+    if( !*ksMultipleItem )
+    {
+        return paInsufficientMemory;
+    }
+
+    result = WdmSyncIoctl(
+                handle,
+                IOCTL_KS_PROPERTY,
+                &ksPProp,
+                sizeof(KSP_PIN),
+                (void*)*ksMultipleItem,
+                multipleItemSize,
+                NULL);
+
+    if( result != paNoError )
+    {
+        PaUtil_FreeMemory( ksMultipleItem );
+    }
+
+    return result;
+}
+
+
+/*
+Create a new pin object belonging to a filter
+The pin object holds all the configuration information about the pin
+before it is opened, and then the handle of the pin after is opened
+*/
+static PaWinWdmPin* PinNew(PaWinWdmFilter* parentFilter, unsigned long pinId, PaError* error)
+{
+    PaWinWdmPin* pin;
+    PaError result;
+    unsigned long i;
+    KSMULTIPLE_ITEM* item = NULL;
+    KSIDENTIFIER* identifier;
+    KSDATARANGE* dataRange;
+
+    PA_LOGE_;
+    PA_DEBUG(("Creating pin %d:\n",pinId));
+
+    /* Allocate the new PIN object */
+    pin = (PaWinWdmPin*)PaUtil_AllocateMemory( sizeof(PaWinWdmPin) );
+    if( !pin )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    /* Zero the pin object */
+    /* memset( (void*)pin, 0, sizeof(PaWinWdmPin) ); */
+
+    pin->parentFilter = parentFilter;
+    pin->pinId = pinId;
+
+    /* Allocate a connect structure */
+    pin->pinConnectSize = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX);
+    pin->pinConnect = (KSPIN_CONNECT*)PaUtil_AllocateMemory( pin->pinConnectSize );
+    if( !pin->pinConnect )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    /* Configure the connect structure with default values */
+    pin->pinConnect->Interface.Set               = KSINTERFACESETID_Standard;
+    pin->pinConnect->Interface.Id                = KSINTERFACE_STANDARD_STREAMING;
+    pin->pinConnect->Interface.Flags             = 0;
+    pin->pinConnect->Medium.Set                  = KSMEDIUMSETID_Standard;
+    pin->pinConnect->Medium.Id                   = KSMEDIUM_TYPE_ANYINSTANCE;
+    pin->pinConnect->Medium.Flags                = 0;
+    pin->pinConnect->PinId                       = pinId;
+    pin->pinConnect->PinToHandle                 = NULL;
+    pin->pinConnect->Priority.PriorityClass      = KSPRIORITY_NORMAL;
+    pin->pinConnect->Priority.PrioritySubClass   = 1;
+    pin->ksDataFormatWfx = (KSDATAFORMAT_WAVEFORMATEX*)(pin->pinConnect + 1);
+    pin->ksDataFormatWfx->DataFormat.FormatSize  = sizeof(KSDATAFORMAT_WAVEFORMATEX);
+    pin->ksDataFormatWfx->DataFormat.Flags       = 0;
+    pin->ksDataFormatWfx->DataFormat.Reserved    = 0;
+    pin->ksDataFormatWfx->DataFormat.MajorFormat = KSDATAFORMAT_TYPE_AUDIO;
+    pin->ksDataFormatWfx->DataFormat.SubFormat   = KSDATAFORMAT_SUBTYPE_PCM;
+    pin->ksDataFormatWfx->DataFormat.Specifier   = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
+
+    pin->frameSize = 0; /* Unknown until we instantiate pin */
+
+    /* Get the COMMUNICATION property */
+    result = WdmGetPinPropertySimple(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_COMMUNICATION,
+        &pin->communication,
+        sizeof(KSPIN_COMMUNICATION));
+    if( result != paNoError )
+        goto error;
+
+    if( /*(pin->communication != KSPIN_COMMUNICATION_SOURCE) &&*/
+         (pin->communication != KSPIN_COMMUNICATION_SINK) &&
+         (pin->communication != KSPIN_COMMUNICATION_BOTH) )
+    {
+        PA_DEBUG(("Not source/sink\n"));
+        result = paInvalidDevice;
+        goto error;
+    }
+
+    /* Get dataflow information */
+    result = WdmGetPinPropertySimple(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_DATAFLOW,
+        &pin->dataFlow,
+        sizeof(KSPIN_DATAFLOW));
+
+    if( result != paNoError )
+        goto error;
+
+    /* Get the INTERFACE property list */
+    result = WdmGetPinPropertyMulti(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_INTERFACES,
+        &item);
+
+    if( result != paNoError )
+        goto error;
+
+    identifier = (KSIDENTIFIER*)(item+1);
+
+    /* Check that at least one interface is STANDARD_STREAMING */
+    result = paUnanticipatedHostError;
+    for( i = 0; i < item->Count; i++ )
+    {
+        if( !memcmp( (void*)&identifier[i].Set, (void*)&KSINTERFACESETID_Standard, sizeof( GUID ) ) &&
+            ( identifier[i].Id == KSINTERFACE_STANDARD_STREAMING ) )
+        {
+            result = paNoError;
+            break;
+        }
+    }
+
+    if( result != paNoError )
+    {
+        PA_DEBUG(("No standard streaming\n"));
+        goto error;
+    }
+
+    /* Don't need interfaces any more */
+    PaUtil_FreeMemory( item );
+    item = NULL;
+
+    /* Get the MEDIUM properties list */
+    result = WdmGetPinPropertyMulti(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_MEDIUMS,
+        &item);
+
+    if( result != paNoError )
+        goto error;
+
+    identifier = (KSIDENTIFIER*)(item+1); /* Not actually necessary... */
+
+    /* Check that at least one medium is STANDARD_DEVIO */
+    result = paUnanticipatedHostError;
+    for( i = 0; i < item->Count; i++ )
+    {
+        if( !memcmp( (void*)&identifier[i].Set, (void*)&KSMEDIUMSETID_Standard, sizeof( GUID ) ) &&
+           ( identifier[i].Id == KSMEDIUM_STANDARD_DEVIO ) )
+        {
+            result = paNoError;
+            break;
+        }
+    }
+
+    if( result != paNoError )
+    {
+        PA_DEBUG(("No standard devio\n"));
+        goto error;
+    }
+    /* Don't need mediums any more */
+    PaUtil_FreeMemory( item );
+    item = NULL;
+
+    /* Get DATARANGES */
+    result = WdmGetPinPropertyMulti(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_DATARANGES,
+        &pin->dataRangesItem);
+
+    if( result != paNoError )
+        goto error;
+
+    pin->dataRanges = (KSDATARANGE*)(pin->dataRangesItem +1);
+
+    /* Check that at least one datarange supports audio */
+    result = paUnanticipatedHostError;
+    dataRange = pin->dataRanges;
+    pin->maxChannels = 0;
+    pin->bestSampleRate = 0;
+    pin->formats = 0;
+    for( i = 0; i <pin->dataRangesItem->Count; i++)
+    {
+        PA_DEBUG(("DR major format %x\n",*(unsigned long*)(&(dataRange->MajorFormat))));
+        /* Check that subformat is WAVEFORMATEX, PCM or WILDCARD */
+        if( IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) ||
+            !memcmp((void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_PCM, sizeof ( GUID ) ) ||
+            ( !memcmp((void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof ( GUID ) ) &&
+            ( !memcmp((void*)&dataRange->MajorFormat, (void*)&KSDATAFORMAT_TYPE_AUDIO, sizeof ( GUID ) ) ) ) )
+        {
+            result = paNoError;
+            /* Record the maximum possible channels with this pin */
+            PA_DEBUG(("MaxChannel: %d\n",pin->maxChannels));
+            if( (int)((KSDATARANGE_AUDIO*)dataRange)->MaximumChannels > pin->maxChannels )
+            {
+                pin->maxChannels = ((KSDATARANGE_AUDIO*)dataRange)->MaximumChannels;
+                /*PA_DEBUG(("MaxChannel: %d\n",pin->maxChannels));*/
+            }
+            /* Record the formats (bit depths) that are supported */
+            if( ((KSDATARANGE_AUDIO*)dataRange)->MinimumBitsPerSample <= 16 )
+            {
+                pin->formats |= paInt16;
+                PA_DEBUG(("Format 16 bit supported\n"));
+            }
+            if( ((KSDATARANGE_AUDIO*)dataRange)->MaximumBitsPerSample >= 24 )
+            {
+                pin->formats |= paInt24;
+                PA_DEBUG(("Format 24 bit supported\n"));
+            }
+            if( ( pin->bestSampleRate != 48000) &&
+                (((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency >= 48000) &&
+                (((KSDATARANGE_AUDIO*)dataRange)->MinimumSampleFrequency <= 48000) )
+            {
+                pin->bestSampleRate = 48000;
+                PA_DEBUG(("48kHz supported\n"));
+            }
+            else if(( pin->bestSampleRate != 48000) && ( pin->bestSampleRate != 44100 ) &&
+                (((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency >= 44100) &&
+                (((KSDATARANGE_AUDIO*)dataRange)->MinimumSampleFrequency <= 44100) )
+            {
+                pin->bestSampleRate = 44100;
+                PA_DEBUG(("44.1kHz supported\n"));
+            }
+            else
+            {
+                pin->bestSampleRate = ((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency;
+            }
+        }
+        dataRange = (KSDATARANGE*)( ((char*)dataRange) + dataRange->FormatSize);
+    }
+
+    if( result != paNoError )
+        goto error;
+
+    /* Get instance information */
+    result = WdmGetPinPropertySimple(
+        parentFilter->handle,
+        pinId,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_CINSTANCES,
+        &pin->instances,
+        sizeof(KSPIN_CINSTANCES));
+
+    if( result != paNoError )
+        goto error;
+
+    /* Success */
+    *error = paNoError;
+    PA_DEBUG(("Pin created successfully\n"));
+    PA_LOGL_;
+    return pin;
+
+error:
+    /*
+    Error cleanup
+    */
+    PaUtil_FreeMemory( item );
+    if( pin )
+    {
+        PaUtil_FreeMemory( pin->pinConnect );
+        PaUtil_FreeMemory( pin->dataRangesItem );
+        PaUtil_FreeMemory( pin );
+    }
+    *error = result;
+    PA_LOGL_;
+    return NULL;
+}
+
+/*
+Safely free all resources associated with the pin
+*/
+static void PinFree(PaWinWdmPin* pin)
+{
+    PA_LOGE_;
+    if( pin )
+    {
+        PinClose(pin);
+        if( pin->pinConnect )
+        {
+            PaUtil_FreeMemory( pin->pinConnect );
+        }
+        if( pin->dataRangesItem )
+        {
+            PaUtil_FreeMemory( pin->dataRangesItem );
+        }
+        PaUtil_FreeMemory( pin );
+    }
+    PA_LOGL_;
+}
+
+/*
+If the pin handle is open, close it
+*/
+static void PinClose(PaWinWdmPin* pin)
+{
+    PA_LOGE_;
+    if( pin == NULL )
+    {
+        PA_DEBUG(("Closing NULL pin!"));
+        PA_LOGL_;
+        return;
+    }
+    if( pin->handle != NULL )
+    {
+        PinSetState( pin, KSSTATE_PAUSE );
+        PinSetState( pin, KSSTATE_STOP );
+        CloseHandle( pin->handle );
+        pin->handle = NULL;
+        FilterRelease(pin->parentFilter);
+    }
+    PA_LOGL_;
+}
+
+/*
+Set the state of this (instantiated) pin
+*/
+static PaError PinSetState(PaWinWdmPin* pin, KSSTATE state)
+{
+    PaError result;
+
+    PA_LOGE_;
+    if( pin == NULL )
+        return paInternalError;
+    if( pin->handle == NULL )
+        return paInternalError;
+
+    result = WdmSetPropertySimple(
+        pin->handle,
+        &KSPROPSETID_Connection,
+        KSPROPERTY_CONNECTION_STATE,
+        &state,
+        sizeof(state),
+        NULL,
+        0);
+    PA_LOGL_;
+    return result;
+}
+
+static PaError PinInstantiate(PaWinWdmPin* pin)
+{
+    PaError result;
+    unsigned long createResult;
+    KSALLOCATOR_FRAMING ksaf;
+    KSALLOCATOR_FRAMING_EX ksafex;
+
+    PA_LOGE_;
+
+    if( pin == NULL )
+        return paInternalError;
+    if(!pin->pinConnect)
+        return paInternalError;
+
+    FilterUse(pin->parentFilter);
+
+    createResult = FunctionKsCreatePin(
+        pin->parentFilter->handle,
+        pin->pinConnect,
+        GENERIC_WRITE | GENERIC_READ,
+        &pin->handle
+        );
+
+    PA_DEBUG(("Pin create result = %x\n",createResult));
+    if( createResult != ERROR_SUCCESS )
+    {
+        FilterRelease(pin->parentFilter);
+        pin->handle = NULL;
+        return paInvalidDevice;
+    }
+
+    result = WdmGetPropertySimple(
+        pin->handle,
+        &KSPROPSETID_Connection,
+        KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
+        &ksaf,
+        sizeof(ksaf),
+        NULL,
+        0);
+
+    if( result != paNoError )
+    {
+        result = WdmGetPropertySimple(
+            pin->handle,
+            &KSPROPSETID_Connection,
+            KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
+            &ksafex,
+            sizeof(ksafex),
+            NULL,
+            0);
+        if( result == paNoError )
+        {
+            pin->frameSize = ksafex.FramingItem[0].FramingRange.Range.MinFrameSize;
+        }
+    }
+    else
+    {
+        pin->frameSize = ksaf.FrameSize;
+    }
+
+    PA_LOGL_;
+
+    return paNoError;
+}
+
+/* NOT USED
+static PaError PinGetState(PaWinWdmPin* pin, KSSTATE* state)
+{
+    PaError result;
+
+    if( state == NULL )
+        return paInternalError;
+    if( pin == NULL )
+        return paInternalError;
+    if( pin->handle == NULL )
+        return paInternalError;
+
+    result = WdmGetPropertySimple(
+        pin->handle,
+        KSPROPSETID_Connection,
+        KSPROPERTY_CONNECTION_STATE,
+        state,
+        sizeof(KSSTATE),
+        NULL,
+        0);
+
+    return result;
+}
+*/
+static PaError PinSetFormat(PaWinWdmPin* pin, const WAVEFORMATEX* format)
+{
+    unsigned long size;
+    void* newConnect;
+
+    PA_LOGE_;
+
+    if( pin == NULL )
+        return paInternalError;
+    if( format == NULL )
+        return paInternalError;
+
+    size = GetWfexSize(format) + sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX) - sizeof(WAVEFORMATEX);
+
+    if( pin->pinConnectSize != size )
+    {
+        newConnect = PaUtil_AllocateMemory( size );
+        if( newConnect == NULL )
+            return paInsufficientMemory;
+        memcpy( newConnect, (void*)pin->pinConnect, min(pin->pinConnectSize,size) );
+        PaUtil_FreeMemory( pin->pinConnect );
+        pin->pinConnect = (KSPIN_CONNECT*)newConnect;
+        pin->pinConnectSize = size;
+        pin->ksDataFormatWfx = (KSDATAFORMAT_WAVEFORMATEX*)((KSPIN_CONNECT*)newConnect + 1);
+        pin->ksDataFormatWfx->DataFormat.FormatSize = size - sizeof(KSPIN_CONNECT);
+    }
+
+    memcpy( (void*)&(pin->ksDataFormatWfx->WaveFormatEx), format, GetWfexSize(format) );
+    pin->ksDataFormatWfx->DataFormat.SampleSize = (unsigned short)(format->nChannels * (format->wBitsPerSample / 8));
+
+    PA_LOGL_;
+
+    return paNoError;
+}
+
+static PaError PinIsFormatSupported(PaWinWdmPin* pin, const WAVEFORMATEX* format)
+{
+    KSDATARANGE_AUDIO* dataRange;
+    unsigned long count;
+    GUID guid = DYNAMIC_GUID( DEFINE_WAVEFORMATEX_GUID(format->wFormatTag) );
+    PaError result = paInvalidDevice;
+
+    PA_LOGE_;
+
+    if( format->wFormatTag == WAVE_FORMAT_EXTENSIBLE )
+    {
+        guid = ((WAVEFORMATEXTENSIBLE*)format)->SubFormat;
+    }
+    dataRange = (KSDATARANGE_AUDIO*)pin->dataRanges;
+    for(count = 0; count<pin->dataRangesItem->Count; count++)
+    {
+        if(( !memcmp(&(dataRange->DataRange.MajorFormat),&KSDATAFORMAT_TYPE_AUDIO,sizeof(GUID)) ) ||
+           ( !memcmp(&(dataRange->DataRange.MajorFormat),&KSDATAFORMAT_TYPE_WILDCARD,sizeof(GUID)) ))
+        {
+            /* This is an audio or wildcard datarange... */
+            if(( !memcmp(&(dataRange->DataRange.SubFormat),&KSDATAFORMAT_SUBTYPE_WILDCARD,sizeof(GUID)) ) ||
+                ( !memcmp(&(dataRange->DataRange.SubFormat),&guid,sizeof(GUID)) ))
+            {
+                if(( !memcmp(&(dataRange->DataRange.Specifier),&KSDATAFORMAT_SPECIFIER_WILDCARD,sizeof(GUID)) ) ||
+                  ( !memcmp(&(dataRange->DataRange.Specifier),&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX,sizeof(GUID) )))
+                {
+
+                    PA_DEBUG(("Pin:%x, DataRange:%d\n",(void*)pin,count));
+                    PA_DEBUG(("\tFormatSize:%d, SampleSize:%d\n",dataRange->DataRange.FormatSize,dataRange->DataRange.SampleSize));
+                    PA_DEBUG(("\tMaxChannels:%d\n",dataRange->MaximumChannels));
+                    PA_DEBUG(("\tBits:%d-%d\n",dataRange->MinimumBitsPerSample,dataRange->MaximumBitsPerSample));
+                    PA_DEBUG(("\tSampleRate:%d-%d\n",dataRange->MinimumSampleFrequency,dataRange->MaximumSampleFrequency));
+
+                    if( dataRange->MaximumChannels < format->nChannels )
+                    {
+                        result = paInvalidChannelCount;
+                        continue;
+                    }
+                    if( dataRange->MinimumBitsPerSample > format->wBitsPerSample )
+                    {
+                        result = paSampleFormatNotSupported;
+                        continue;
+                    }
+                    if( dataRange->MaximumBitsPerSample < format->wBitsPerSample )
+                    {
+                        result = paSampleFormatNotSupported;
+                        continue;
+                    }
+                    if( dataRange->MinimumSampleFrequency > format->nSamplesPerSec )
+                    {
+                        result = paInvalidSampleRate;
+                        continue;
+                    }
+                    if( dataRange->MaximumSampleFrequency < format->nSamplesPerSec )
+                    {
+                        result = paInvalidSampleRate;
+                        continue;
+                    }
+                    /* Success! */
+                    PA_LOGL_;
+                    return paNoError;
+                }
+            }
+        }
+        dataRange = (KSDATARANGE_AUDIO*)( ((char*)dataRange) + dataRange->DataRange.FormatSize);
+    }
+
+    PA_LOGL_;
+
+    return result;
+}
+
+/**
+ * Create a new filter object
+ */
+static PaWinWdmFilter* FilterNew(TCHAR* filterName, TCHAR* friendlyName, PaError* error)
+{
+    PaWinWdmFilter* filter;
+    PaError result;
+    int pinId;
+    int valid;
+
+
+    /* Allocate the new filter object */
+    filter = (PaWinWdmFilter*)PaUtil_AllocateMemory( sizeof(PaWinWdmFilter) );
+    if( !filter )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    /* Zero the filter object - done by AllocateMemory */
+    /* memset( (void*)filter, 0, sizeof(PaWinWdmFilter) ); */
+
+    /* Copy the filter name */
+    _tcsncpy(filter->filterName, filterName, MAX_PATH);
+
+    /* Copy the friendly name */
+    _tcsncpy(filter->friendlyName, friendlyName, MAX_PATH);
+
+    /* Open the filter handle */
+    result = FilterUse(filter);
+    if( result != paNoError )
+    {
+        goto error;
+    }
+
+    /* Get pin count */
+    result = WdmGetPinPropertySimple
+        (
+        filter->handle,
+        0,
+        &KSPROPSETID_Pin,
+        KSPROPERTY_PIN_CTYPES,
+        &filter->pinCount,
+        sizeof(filter->pinCount)
+        );
+
+    if( result != paNoError)
+    {
+        goto error;
+    }
+
+    /* Allocate pointer array to hold the pins */
+    filter->pins = (PaWinWdmPin**)PaUtil_AllocateMemory( sizeof(PaWinWdmPin*) * filter->pinCount );
+    if( !filter->pins )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    /* Create all the pins we can */
+    filter->maxInputChannels = 0;
+    filter->maxOutputChannels = 0;
+    filter->bestSampleRate = 0;
+
+    valid = 0;
+    for(pinId = 0; pinId < filter->pinCount; pinId++)
+    {
+        /* Create the pin with this Id */
+        PaWinWdmPin* newPin;
+        newPin = PinNew(filter, pinId, &result);
+        if( result == paInsufficientMemory )
+            goto error;
+        if( newPin != NULL )
+        {
+            filter->pins[pinId] = newPin;
+            valid = 1;
+
+            /* Get the max output channel count */
+            if(( newPin->dataFlow == KSPIN_DATAFLOW_IN ) &&
+                (( newPin->communication == KSPIN_COMMUNICATION_SINK) ||
+                 ( newPin->communication == KSPIN_COMMUNICATION_BOTH)))
+            {
+                if(newPin->maxChannels > filter->maxOutputChannels)
+                    filter->maxOutputChannels = newPin->maxChannels;
+                filter->formats |= newPin->formats;
+            }
+            /* Get the max input channel count */
+            if(( newPin->dataFlow == KSPIN_DATAFLOW_OUT ) &&
+                (( newPin->communication == KSPIN_COMMUNICATION_SINK) ||
+                 ( newPin->communication == KSPIN_COMMUNICATION_BOTH)))
+            {
+                if(newPin->maxChannels > filter->maxInputChannels)
+                    filter->maxInputChannels = newPin->maxChannels;
+                filter->formats |= newPin->formats;
+            }
+
+            if(newPin->bestSampleRate > filter->bestSampleRate)
+            {
+                filter->bestSampleRate = newPin->bestSampleRate;
+            }
+        }
+    }
+
+    if(( filter->maxInputChannels == 0) && ( filter->maxOutputChannels == 0))
+    {
+        /* No input or output... not valid */
+        valid = 0;
+    }
+
+    if( !valid )
+    {
+        /* No valid pin was found on this filter so we destroy it */
+        result = paDeviceUnavailable;
+        goto error;
+    }
+
+    /* Close the filter handle for now
+     * It will be opened later when needed */
+    FilterRelease(filter);
+
+    *error = paNoError;
+    return filter;
+
+error:
+    /*
+    Error cleanup
+    */
+    if( filter )
+    {
+        for( pinId = 0; pinId < filter->pinCount; pinId++ )
+            PinFree(filter->pins[pinId]);
+        PaUtil_FreeMemory( filter->pins );
+        if( filter->handle )
+            CloseHandle( filter->handle );
+        PaUtil_FreeMemory( filter );
+    }
+    *error = result;
+    return NULL;
+}
+
+/**
+ * Free a previously created filter
+ */
+static void FilterFree(PaWinWdmFilter* filter)
+{
+    int pinId;
+    PA_LOGL_;
+    if( filter )
+    {
+        for( pinId = 0; pinId < filter->pinCount; pinId++ )
+            PinFree(filter->pins[pinId]);
+        PaUtil_FreeMemory( filter->pins );
+        if( filter->handle )
+            CloseHandle( filter->handle );
+        PaUtil_FreeMemory( filter );
+    }
+    PA_LOGE_;
+}
+
+/**
+ * Reopen the filter handle if necessary so it can be used
+ **/
+static PaError FilterUse(PaWinWdmFilter* filter)
+{
+    assert( filter );
+
+    PA_LOGE_;
+    if( filter->handle == NULL )
+    {
+        /* Open the filter */
+        filter->handle = CreateFile(
+            filter->filterName,
+            GENERIC_READ | GENERIC_WRITE,
+            0,
+            NULL,
+            OPEN_EXISTING,
+            FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+            NULL);
+
+        if( filter->handle == NULL )
+        {
+            return paDeviceUnavailable;
+        }
+    }
+    filter->usageCount++;
+    PA_LOGL_;
+    return paNoError;
+}
+
+/**
+ * Release the filter handle if nobody is using it
+ **/
+static void FilterRelease(PaWinWdmFilter* filter)
+{
+    assert( filter );
+    assert( filter->usageCount > 0 );
+
+    PA_LOGE_;
+    filter->usageCount--;
+    if( filter->usageCount == 0 )
+    {
+        if( filter->handle != NULL )
+        {
+            CloseHandle( filter->handle );
+            filter->handle = NULL;
+        }
+    }
+    PA_LOGL_;
+}
+
+/**
+ * Create a render (playback) Pin using the supplied format
+ **/
+static PaWinWdmPin* FilterCreateRenderPin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error)
+{
+    PaError result;
+    PaWinWdmPin* pin;
+
+    assert( filter );
+
+    pin = FilterFindViableRenderPin(filter,wfex,&result);
+    if(!pin)
+    {
+        goto error;
+    }
+    result = PinSetFormat(pin,wfex);
+    if( result != paNoError )
+    {
+        goto error;
+    }
+    result = PinInstantiate(pin);
+    if( result != paNoError )
+    {
+        goto error;
+    }
+
+    *error = paNoError;
+    return pin;
+
+error:
+    *error = result;
+    return NULL;
+}
+
+/**
+ * Find a pin that supports the given format
+ **/
+static PaWinWdmPin* FilterFindViableRenderPin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error)
+{
+    int pinId;
+    PaWinWdmPin*  pin;
+    PaError result = paDeviceUnavailable;
+    *error = paNoError;
+
+    assert( filter );
+
+    for( pinId = 0; pinId<filter->pinCount; pinId++ )
+    {
+        pin = filter->pins[pinId];
+        if( pin != NULL )
+        {
+            if(( pin->dataFlow == KSPIN_DATAFLOW_IN ) &&
+                (( pin->communication == KSPIN_COMMUNICATION_SINK) ||
+                 ( pin->communication == KSPIN_COMMUNICATION_BOTH)))
+            {
+                result = PinIsFormatSupported( pin, wfex );
+                if( result == paNoError )
+                {
+                    return pin;
+                }
+            }
+        }
+    }
+
+    *error = result;
+    return NULL;
+}
+
+/**
+ * Check if there is a pin that should playback
+ * with the supplied format
+ **/
+static PaError FilterCanCreateRenderPin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex)
+{
+    PaWinWdmPin* pin;
+    PaError result;
+
+    assert ( filter );
+
+    pin = FilterFindViableRenderPin(filter,wfex,&result);
+    /* result will be paNoError if pin found
+     * or else an error code indicating what is wrong with the format
+     **/
+    return result;
+}
+
+/**
+ * Create a capture (record) Pin using the supplied format
+ **/
+static PaWinWdmPin* FilterCreateCapturePin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error)
+{
+    PaError result;
+    PaWinWdmPin* pin;
+
+    assert( filter );
+
+    pin = FilterFindViableCapturePin(filter,wfex,&result);
+    if(!pin)
+    {
+        goto error;
+    }
+
+    result = PinSetFormat(pin,wfex);
+    if( result != paNoError )
+    {
+        goto error;
+    }
+
+    result = PinInstantiate(pin);
+    if( result != paNoError )
+    {
+        goto error;
+    }
+
+    *error = paNoError;
+    return pin;
+
+error:
+    *error = result;
+    return NULL;
+}
+
+/**
+ * Find a capture pin that supports the given format
+ **/
+static PaWinWdmPin* FilterFindViableCapturePin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex,
+    PaError* error)
+{
+    int pinId;
+    PaWinWdmPin*  pin;
+    PaError result = paDeviceUnavailable;
+    *error = paNoError;
+
+    assert( filter );
+
+    for( pinId = 0; pinId<filter->pinCount; pinId++ )
+    {
+        pin = filter->pins[pinId];
+        if( pin != NULL )
+        {
+            if(( pin->dataFlow == KSPIN_DATAFLOW_OUT ) &&
+                (( pin->communication == KSPIN_COMMUNICATION_SINK) ||
+                 ( pin->communication == KSPIN_COMMUNICATION_BOTH)))
+            {
+                result = PinIsFormatSupported( pin, wfex );
+                if( result == paNoError )
+                {
+                    return pin;
+                }
+            }
+        }
+    }
+
+    *error = result;
+    return NULL;
+}
+
+/**
+ * Check if there is a pin that should playback
+ * with the supplied format
+ **/
+static PaError FilterCanCreateCapturePin(PaWinWdmFilter* filter,
+    const WAVEFORMATEX* wfex)
+{
+    PaWinWdmPin* pin;
+    PaError result;
+
+    assert ( filter );
+
+    pin = FilterFindViableCapturePin(filter,wfex,&result);
+    /* result will be paNoError if pin found
+     * or else an error code indicating what is wrong with the format
+     **/
+    return result;
+}
+
+/**
+ * Build the list of available filters
+ * Use the SetupDi API to enumerate all devices in the KSCATEGORY_AUDIO which 
+ * have a KSCATEGORY_RENDER or KSCATEGORY_CAPTURE alias. For each of these 
+ * devices initialise a PaWinWdmFilter structure by calling our NewFilter() 
+ * function. We enumerate devices twice, once to count how many there are, 
+ * and once to initialize the PaWinWdmFilter structures.
+ */
+static PaError BuildFilterList(PaWinWdmHostApiRepresentation* wdmHostApi)
+{
+    PaError result = paNoError;
+    HDEVINFO handle = NULL;
+    int device;
+    int invalidDevices;
+    int slot;
+    SP_DEVICE_INTERFACE_DATA interfaceData;
+    SP_DEVICE_INTERFACE_DATA aliasData;
+    SP_DEVINFO_DATA devInfoData;
+    int noError;
+    const int sizeInterface = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + (MAX_PATH * sizeof(WCHAR));
+    unsigned char interfaceDetailsArray[sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + (MAX_PATH * sizeof(WCHAR))];
+    SP_DEVICE_INTERFACE_DETAIL_DATA* devInterfaceDetails = (SP_DEVICE_INTERFACE_DETAIL_DATA*)interfaceDetailsArray;
+    TCHAR friendlyName[MAX_PATH];
+    HKEY hkey;
+    DWORD sizeFriendlyName;
+    DWORD type;
+    PaWinWdmFilter* newFilter;
+    GUID* category = (GUID*)&KSCATEGORY_AUDIO;
+    GUID* alias_render = (GUID*)&KSCATEGORY_RENDER;
+    GUID* alias_capture = (GUID*)&KSCATEGORY_CAPTURE;
+    DWORD hasAlias;
+
+    PA_LOGE_;
+
+    devInterfaceDetails->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
+
+    /* Open a handle to search for devices (filters) */
+    handle = SetupDiGetClassDevs(category,NULL,NULL,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
+    if( handle == NULL )
+    {
+        return paUnanticipatedHostError;
+    }
+    PA_DEBUG(("Setup called\n"));
+
+    /* First let's count the number of devices so we can allocate a list */
+    invalidDevices = 0;
+    for( device = 0;;device++ )
+    {
+        interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+        interfaceData.Reserved = 0;
+        aliasData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+        aliasData.Reserved = 0;
+        noError = SetupDiEnumDeviceInterfaces(handle,NULL,category,device,&interfaceData);
+        PA_DEBUG(("Enum called\n"));
+        if( !noError )
+            break; /* No more devices */
+
+        /* Check this one has the render or capture alias */
+        hasAlias = 0;
+        noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_render,&aliasData);
+        PA_DEBUG(("noError = %d\n",noError));
+        if(noError)
+        {
+            if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED)))
+            {
+                PA_DEBUG(("Device %d has render alias\n",device));
+                hasAlias |= 1; /* Has render alias */
+            }
+            else
+            {
+                PA_DEBUG(("Device %d has no render alias\n",device));
+            }
+        }
+        noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_capture,&aliasData);
+        if(noError)
+        {
+            if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED)))
+            {
+                PA_DEBUG(("Device %d has capture alias\n",device));
+                hasAlias |= 2; /* Has capture alias */
+            }
+            else
+            {
+                PA_DEBUG(("Device %d has no capture alias\n",device));
+            }
+        }
+        if(!hasAlias)
+            invalidDevices++; /* This was not a valid capture or render audio device */
+
+    }
+    /* Remember how many there are */
+    wdmHostApi->filterCount = device-invalidDevices;
+
+    PA_DEBUG(("Interfaces found: %d\n",device-invalidDevices));
+
+    /* Now allocate the list of pointers to devices */
+    wdmHostApi->filters  = (PaWinWdmFilter**)PaUtil_AllocateMemory( sizeof(PaWinWdmFilter*) * device );
+    if( !wdmHostApi->filters )
+    {
+        if(handle != NULL)
+            SetupDiDestroyDeviceInfoList(handle);
+        return paInsufficientMemory;
+    }
+
+    /* Now create filter objects for each interface found */
+    slot = 0;
+    for( device = 0;;device++ )
+    {
+        interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+        interfaceData.Reserved = 0;
+        aliasData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+        aliasData.Reserved = 0;
+        devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+        devInfoData.Reserved = 0;
+
+        noError = SetupDiEnumDeviceInterfaces(handle,NULL,category,device,&interfaceData);
+        if( !noError )
+            break; /* No more devices */
+
+        /* Check this one has the render or capture alias */
+        hasAlias = 0;
+        noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_render,&aliasData);
+        if(noError)
+        {
+            if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED)))
+            {
+                PA_DEBUG(("Device %d has render alias\n",device));
+                hasAlias |= 1; /* Has render alias */
+            }
+        }
+        noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_capture,&aliasData);
+        if(noError)
+        {
+            if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED)))
+            {
+                PA_DEBUG(("Device %d has capture alias\n",device));
+                hasAlias |= 2; /* Has capture alias */
+            }
+        }
+        if(!hasAlias)
+            continue; /* This was not a valid capture or render audio device */
+
+        noError = SetupDiGetDeviceInterfaceDetail(handle,&interfaceData,devInterfaceDetails,sizeInterface,NULL,&devInfoData);
+        if( noError )
+        {
+            /* Try to get the "friendly name" for this interface */
+            sizeFriendlyName = sizeof(friendlyName);
+            /* Fix contributed by Ben Allison
+             * Removed KEY_SET_VALUE from flags on following call
+             * as its causes failure when running without admin rights
+             * and it was not required */
+            hkey=SetupDiOpenDeviceInterfaceRegKey(handle,&interfaceData,0,KEY_QUERY_VALUE);
+            if(hkey!=INVALID_HANDLE_VALUE)
+            {
+                noError = RegQueryValueEx(hkey,TEXT("FriendlyName"),0,&type,(BYTE*)friendlyName,&sizeFriendlyName);
+                if( noError == ERROR_SUCCESS )
+                {
+                    PA_DEBUG(("Interface %d, Name: %s\n",device,friendlyName));
+                    RegCloseKey(hkey);
+                }
+                else
+                {
+                    friendlyName[0] = 0;
+                }
+            }
+            newFilter = FilterNew(devInterfaceDetails->DevicePath,friendlyName,&result);
+            if( result == paNoError )
+            {
+                PA_DEBUG(("Filter created\n"));
+                wdmHostApi->filters[slot] = newFilter;
+                slot++;
+            }
+            else
+            {
+                PA_DEBUG(("Filter NOT created\n"));
+                /* As there are now less filters than we initially thought
+                 * we must reduce the count by one */
+                wdmHostApi->filterCount--;
+            }
+        }
+    }
+
+    /* Clean up */
+    if(handle != NULL)
+        SetupDiDestroyDeviceInfoList(handle);
+
+    return paNoError;
+}
+
+PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+{
+    PaError result = paNoError;
+    int i, deviceCount;
+    PaWinWdmHostApiRepresentation *wdmHostApi;
+    PaWinWdmDeviceInfo *deviceInfoArray;
+    PaWinWdmFilter* pFilter;
+    PaWinWdmDeviceInfo *wdmDeviceInfo;
+    PaDeviceInfo *deviceInfo;
+
+    PA_LOGE_;
+
+    /*
+    Attempt to load the KSUSER.DLL without which we cannot create pins
+    We will unload this on termination
+    */
+    if(DllKsUser == NULL)
+    {
+        DllKsUser = LoadLibrary(TEXT("ksuser.dll"));
+        if(DllKsUser == NULL)
+            goto error;
+    }
+
+    FunctionKsCreatePin = (KSCREATEPIN*)GetProcAddress(DllKsUser, "KsCreatePin");
+    if(FunctionKsCreatePin == NULL)
+        goto error;
+
+    wdmHostApi = (PaWinWdmHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinWdmHostApiRepresentation) );
+    if( !wdmHostApi )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    wdmHostApi->allocations = PaUtil_CreateAllocationGroup();
+    if( !wdmHostApi->allocations )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+
+    result = BuildFilterList( wdmHostApi );
+    if( result != paNoError )
+    {
+        goto error;
+    }
+    deviceCount = wdmHostApi->filterCount;
+
+    *hostApi = &wdmHostApi->inheritedHostApiRep;
+    (*hostApi)->info.structVersion = 1;
+    (*hostApi)->info.type = paWDMKS;
+    (*hostApi)->info.name = "Windows WDM-KS";
+    (*hostApi)->info.defaultInputDevice = paNoDevice;
+    (*hostApi)->info.defaultOutputDevice = paNoDevice;
+
+    if( deviceCount > 0 )
+    {
+        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
+               wdmHostApi->allocations, sizeof(PaWinWdmDeviceInfo*) * deviceCount );
+        if( !(*hostApi)->deviceInfos )
+        {
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        /* allocate all device info structs in a contiguous block */
+        deviceInfoArray = (PaWinWdmDeviceInfo*)PaUtil_GroupAllocateMemory(
+                wdmHostApi->allocations, sizeof(PaWinWdmDeviceInfo) * deviceCount );
+        if( !deviceInfoArray )
+        {
+            result = paInsufficientMemory;
+            goto error;
+        }
+
+        for( i=0; i < deviceCount; ++i )
+        {
+            wdmDeviceInfo = &deviceInfoArray[i];
+            deviceInfo = &wdmDeviceInfo->inheritedDeviceInfo;
+            pFilter = wdmHostApi->filters[i];
+            if( pFilter == NULL )
+                continue;
+            wdmDeviceInfo->filter = pFilter;
+            deviceInfo->structVersion = 2;
+            deviceInfo->hostApi = hostApiIndex;
+            deviceInfo->name = (char*)pFilter->friendlyName;
+            PA_DEBUG(("Device found name: %s\n",(char*)pFilter->friendlyName));
+            deviceInfo->maxInputChannels = pFilter->maxInputChannels;
+            if(deviceInfo->maxInputChannels > 0)
+            {
+                /* Set the default input device to the first device we find with
+                 * more than zero input channels
+                 **/
+                if((*hostApi)->info.defaultInputDevice == paNoDevice)
+                {
+                    (*hostApi)->info.defaultInputDevice = i;
+                }
+            }
+
+            deviceInfo->maxOutputChannels = pFilter->maxOutputChannels;
+            if(deviceInfo->maxOutputChannels > 0)
+            {
+                /* Set the default output device to the first device we find with
+                 * more than zero output channels
+                 **/
+                if((*hostApi)->info.defaultOutputDevice == paNoDevice)
+                {
+                    (*hostApi)->info.defaultOutputDevice = i;
+                }
+            }
+
+            /* These low values are not very useful because
+             * a) The lowest latency we end up with can depend on many factors such
+             *    as the device buffer sizes/granularities, sample rate, channels and format
+             * b) We cannot know the device buffer sizes until we try to open/use it at
+             *    a particular setting
+             * So: we give 512x48000Hz frames as the default low input latency
+             **/
+            deviceInfo->defaultLowInputLatency = (512.0/48000.0);
+            deviceInfo->defaultLowOutputLatency = (512.0/48000.0);
+            deviceInfo->defaultHighInputLatency = (4096.0/48000.0);
+            deviceInfo->defaultHighOutputLatency = (4096.0/48000.0);
+            deviceInfo->defaultSampleRate = (double)(pFilter->bestSampleRate);
+
+            (*hostApi)->deviceInfos[i] = deviceInfo;
+        }
+    }
+
+    (*hostApi)->info.deviceCount = deviceCount;
+
+    (*hostApi)->Terminate = Terminate;
+    (*hostApi)->OpenStream = OpenStream;
+    (*hostApi)->IsFormatSupported = IsFormatSupported;
+
+    PaUtil_InitializeStreamInterface( &wdmHostApi->callbackStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, GetStreamCpuLoad,
+                                      PaUtil_DummyRead, PaUtil_DummyWrite,
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
+
+    PaUtil_InitializeStreamInterface( &wdmHostApi->blockingStreamInterface, CloseStream, StartStream,
+                                      StopStream, AbortStream, IsStreamStopped, IsStreamActive,
+                                      GetStreamTime, PaUtil_DummyGetCpuLoad,
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
+
+    PA_LOGL_;
+    return result;
+
+error:
+    if( DllKsUser != NULL )
+    {
+        FreeLibrary( DllKsUser );
+        DllKsUser = NULL;
+    }
+
+    if( wdmHostApi )
+    {
+        PaUtil_FreeMemory( wdmHostApi->filters );
+        if( wdmHostApi->allocations )
+        {
+            PaUtil_FreeAllAllocations( wdmHostApi->allocations );
+            PaUtil_DestroyAllocationGroup( wdmHostApi->allocations );
+        }
+        PaUtil_FreeMemory( wdmHostApi );
+    }
+    PA_LOGL_;
+    return result;
+}
+
+
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
+{
+    PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi;
+    int i;
+    PA_LOGE_;
+
+    if( wdmHostApi->filters )
+    {
+        for( i=0; i<wdmHostApi->filterCount; i++)
+        {
+            if( wdmHostApi->filters[i] != NULL )
+            {
+                FilterFree( wdmHostApi->filters[i] );
+                wdmHostApi->filters[i] = NULL;
+            }
+        }
+    }
+    PaUtil_FreeMemory( wdmHostApi->filters );
+    if( wdmHostApi->allocations )
+    {
+        PaUtil_FreeAllAllocations( wdmHostApi->allocations );
+        PaUtil_DestroyAllocationGroup( wdmHostApi->allocations );
+    }
+    PaUtil_FreeMemory( wdmHostApi );
+    PA_LOGL_;
+}
+
+static void FillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
+{
+    PA_LOGE_;
+    PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat ));
+    PA_DEBUG(( "sampleRate = %f\n" , sampleRate ));
+    PA_DEBUG(( "chanelCount = %d\n", channelCount ));
+
+    pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
+    pwfext->Format.nChannels = channelCount;
+    pwfext->Format.nSamplesPerSec = (int)sampleRate;
+    if(channelCount == 1)
+        pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT;
+    else
+        pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO;
+    if(sampleFormat == paFloat32)
+    {
+        pwfext->Format.nBlockAlign = channelCount * 4;
+        pwfext->Format.wBitsPerSample = 32;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 32;
+        pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
+    }
+    else if(sampleFormat == paInt32)
+    {
+        pwfext->Format.nBlockAlign = channelCount * 4;
+        pwfext->Format.wBitsPerSample = 32;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 32;
+        pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    else if(sampleFormat == paInt24)
+    {
+        pwfext->Format.nBlockAlign = channelCount * 3;
+        pwfext->Format.wBitsPerSample = 24;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 24;
+        pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    else if(sampleFormat == paInt16)
+    {
+        pwfext->Format.nBlockAlign = channelCount * 2;
+        pwfext->Format.wBitsPerSample = 16;
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Samples.wValidBitsPerSample = 16;
+        pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+    }
+    pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign;
+
+    PA_LOGL_;
+}
+
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                                  const PaStreamParameters *inputParameters,
+                                  const PaStreamParameters *outputParameters,
+                                  double sampleRate )
+{
+    int inputChannelCount, outputChannelCount;
+    PaSampleFormat inputSampleFormat, outputSampleFormat;
+    PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi;
+    PaWinWdmFilter* pFilter;
+    int result = paFormatIsSupported;
+    WAVEFORMATEXTENSIBLE wfx;
+
+    PA_LOGE_;
+
+    if( inputParameters )
+    {
+        inputChannelCount = inputParameters->channelCount;
+        inputSampleFormat = inputParameters->sampleFormat;
+
+        /* all standard sample formats are supported by the buffer adapter,
+            this implementation doesn't support any custom sample formats */
+        if( inputSampleFormat & paCustomFormat )
+            return paSampleFormatNotSupported;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that input device can support inputChannelCount */
+        if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
+            return paInvalidChannelCount;
+
+        /* validate inputStreamInfo */
+        if( inputParameters->hostApiSpecificStreamInfo )
+            return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
+
+        /* Check that the input format is supported */
+        FillWFEXT(&wfx,paInt16,sampleRate,inputChannelCount);
+
+        pFilter = wdmHostApi->filters[inputParameters->device];
+        result = FilterCanCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx);
+        if( result != paNoError )
+        {
+            /* Try a WAVE_FORMAT_PCM instead */
+            wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+            wfx.Format.cbSize = 0;
+            wfx.Samples.wValidBitsPerSample = 0;
+            wfx.dwChannelMask = 0;
+            wfx.SubFormat = GUID_NULL;
+            result = FilterCanCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx);
+            if( result != paNoError )
+                 return result;
+        }
+    }
+    else
+    {
+        inputChannelCount = 0;
+    }
+
+    if( outputParameters )
+    {
+        outputChannelCount = outputParameters->channelCount;
+        outputSampleFormat = outputParameters->sampleFormat;
+
+        /* all standard sample formats are supported by the buffer adapter,
+            this implementation doesn't support any custom sample formats */
+        if( outputSampleFormat & paCustomFormat )
+            return paSampleFormatNotSupported;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that output device can support outputChannelCount */
+        if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
+            return paInvalidChannelCount;
+
+        /* validate outputStreamInfo */
+        if( outputParameters->hostApiSpecificStreamInfo )
+            return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
+
+        /* Check that the output format is supported */
+        FillWFEXT(&wfx,paInt16,sampleRate,outputChannelCount);
+
+        pFilter = wdmHostApi->filters[outputParameters->device];
+        result = FilterCanCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx);
+        if( result != paNoError )
+        {
+            /* Try a WAVE_FORMAT_PCM instead */
+            wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+            wfx.Format.cbSize = 0;
+            wfx.Samples.wValidBitsPerSample = 0;
+            wfx.dwChannelMask = 0;
+            wfx.SubFormat = GUID_NULL;
+            result = FilterCanCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx);
+            if( result != paNoError )
+                 return result;
+        }
+
+    }
+    else
+    {
+        outputChannelCount = 0;
+    }
+
+    /*
+        IMPLEMENT ME:
+
+            - if a full duplex stream is requested, check that the combination
+                of input and output parameters is supported if necessary
+
+            - check that the device supports sampleRate
+
+        Because the buffer adapter handles conversion between all standard
+        sample formats, the following checks are only required if paCustomFormat
+        is implemented, or under some other unusual conditions.
+
+            - check that input device can support inputSampleFormat, or that
+                we have the capability to convert from inputSampleFormat to
+                a native format
+
+            - check that output device can support outputSampleFormat, or that
+                we have the capability to convert from outputSampleFormat to
+                a native format
+    */
+    if((inputChannelCount == 0)&&(outputChannelCount == 0))
+            result = paSampleFormatNotSupported; /* Not right error */
+
+    PA_LOGL_;
+    return result;
+}
+
+/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */
+
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                           PaStream** s,
+                           const PaStreamParameters *inputParameters,
+                           const PaStreamParameters *outputParameters,
+                           double sampleRate,
+                           unsigned long framesPerBuffer,
+                           PaStreamFlags streamFlags,
+                           PaStreamCallback *streamCallback,
+                           void *userData )
+{
+    PaError result = paNoError;
+    PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi;
+    PaWinWdmStream *stream = 0;
+    /* unsigned long framesPerHostBuffer; these may not be equivalent for all implementations */
+    PaSampleFormat inputSampleFormat, outputSampleFormat;
+    PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat;
+    int userInputChannels,userOutputChannels;
+    int size;
+    PaWinWdmFilter* pFilter;
+    WAVEFORMATEXTENSIBLE wfx;
+
+    PA_LOGE_;
+    PA_DEBUG(("OpenStream:sampleRate = %f\n",sampleRate));
+    PA_DEBUG(("OpenStream:framesPerBuffer = %lu\n",framesPerBuffer));
+
+    if( inputParameters )
+    {
+        userInputChannels = inputParameters->channelCount;
+        inputSampleFormat = inputParameters->sampleFormat;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that input device can support stream->userInputChannels */
+        if( userInputChannels > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
+            return paInvalidChannelCount;
+
+        /* validate inputStreamInfo */
+        if( inputParameters->hostApiSpecificStreamInfo )
+            return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
+
+    }
+    else
+    {
+        userInputChannels = 0;
+        inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */
+    }
+
+    if( outputParameters )
+    {
+        userOutputChannels = outputParameters->channelCount;
+        outputSampleFormat = outputParameters->sampleFormat;
+
+        /* unless alternate device specification is supported, reject the use of
+            paUseHostApiSpecificDeviceSpecification */
+
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+            return paInvalidDevice;
+
+        /* check that output device can support stream->userInputChannels */
+        if( userOutputChannels > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
+            return paInvalidChannelCount;
+
+        /* validate outputStreamInfo */
+        if( outputParameters->hostApiSpecificStreamInfo )
+            return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
+
+    }
+    else
+    {
+        userOutputChannels = 0;
+        outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */
+    }
+
+    /* validate platform specific flags */
+    if( (streamFlags & paPlatformSpecificFlags) != 0 )
+        return paInvalidFlag; /* unexpected platform specific flag */
+
+    stream = (PaWinWdmStream*)PaUtil_AllocateMemory( sizeof(PaWinWdmStream) );
+    if( !stream )
+    {
+        result = paInsufficientMemory;
+        goto error;
+    }
+    /* Zero the stream object */
+    /* memset((void*)stream,0,sizeof(PaWinWdmStream)); */
+
+    if( streamCallback )
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &wdmHostApi->callbackStreamInterface, streamCallback, userData );
+    }
+    else
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &wdmHostApi->blockingStreamInterface, streamCallback, userData );
+    }
+
+    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
+
+    /* Instantiate the input pin if necessary */
+    if(userInputChannels > 0)
+    {
+        result = paSampleFormatNotSupported;
+        pFilter = wdmHostApi->filters[inputParameters->device];
+        stream->userInputChannels = userInputChannels;
+
+        if(((inputSampleFormat & ~paNonInterleaved) & pFilter->formats) != 0)
+        {   /* inputSampleFormat is supported, so try to use it */
+            hostInputSampleFormat = inputSampleFormat;
+            FillWFEXT(&wfx, hostInputSampleFormat, sampleRate, stream->userInputChannels);
+            stream->bytesPerInputFrame = wfx.Format.nBlockAlign;
+            stream->recordingPin = FilterCreateCapturePin(pFilter, (const WAVEFORMATEX*)&wfx, &result);
+            stream->deviceInputChannels = stream->userInputChannels;
+        }
+        
+        if(result != paNoError)
+        {   /* Search through all PaSampleFormats to find one that works */
+            hostInputSampleFormat = paFloat32;
+
+            do {
+                FillWFEXT(&wfx, hostInputSampleFormat, sampleRate, stream->userInputChannels);
+                stream->bytesPerInputFrame = wfx.Format.nBlockAlign;
+                stream->recordingPin = FilterCreateCapturePin(pFilter, (const WAVEFORMATEX*)&wfx, &result);
+                stream->deviceInputChannels = stream->userInputChannels;
+                
+                if(stream->recordingPin == NULL) result = paSampleFormatNotSupported;
+                if(result != paNoError)    hostInputSampleFormat <<= 1;
+            }
+            while(result != paNoError && hostInputSampleFormat <= paUInt8);
+        }
+
+        if(result != paNoError)
+        {    /* None of the PaSampleFormats worked.  Set the hostInputSampleFormat to the best fit
+             * and try a PCM format.
+             **/
+            hostInputSampleFormat =
+                PaUtil_SelectClosestAvailableFormat( pFilter->formats, inputSampleFormat );
+
+            /* Try a WAVE_FORMAT_PCM instead */
+            wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+            wfx.Format.cbSize = 0;
+            wfx.Samples.wValidBitsPerSample = 0;
+            wfx.dwChannelMask = 0;
+            wfx.SubFormat = GUID_NULL;
+            stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result);
+            if(stream->recordingPin == NULL) result = paSampleFormatNotSupported;
+        }
+
+        if( result != paNoError )
+        {
+            /* Some or all KS devices can only handle the exact number of channels
+             * they specify. But PortAudio clients expect to be able to
+             * at least specify mono I/O on a multi-channel device
+             * If this is the case, then we will do the channel mapping internally
+             **/
+            if( stream->userInputChannels < pFilter->maxInputChannels )
+            {
+                FillWFEXT(&wfx,hostInputSampleFormat,sampleRate,pFilter->maxInputChannels);
+                stream->bytesPerInputFrame = wfx.Format.nBlockAlign;
+                stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result);
+                stream->deviceInputChannels = pFilter->maxInputChannels;
+
+                if( result != paNoError )
+                {
+                    /* Try a WAVE_FORMAT_PCM instead */
+                    wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+                    wfx.Format.cbSize = 0;
+                    wfx.Samples.wValidBitsPerSample = 0;
+                    wfx.dwChannelMask = 0;
+                    wfx.SubFormat = GUID_NULL;
+                    stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result);
+                }
+            }
+        }
+
+        if(stream->recordingPin == NULL)
+        {
+            goto error;
+        }
+
+        switch(hostInputSampleFormat)
+        {
+            case paInt16: stream->inputSampleSize = 2; break;
+            case paInt24: stream->inputSampleSize = 3; break;
+            case paInt32:
+            case paFloat32:    stream->inputSampleSize = 4; break;
+        }
+
+        stream->recordingPin->frameSize /= stream->bytesPerInputFrame;
+        PA_DEBUG(("Pin output frames: %d\n",stream->recordingPin->frameSize));
+    }
+    else
+    {
+        stream->recordingPin = NULL;
+        stream->bytesPerInputFrame = 0;
+    }
+
+    /* Instantiate the output pin if necessary */
+    if(userOutputChannels > 0)
+    {
+        result = paSampleFormatNotSupported;
+        pFilter = wdmHostApi->filters[outputParameters->device];
+        stream->userOutputChannels = userOutputChannels;
+
+        if(((outputSampleFormat & ~paNonInterleaved) & pFilter->formats) != 0)
+        {
+            hostOutputSampleFormat = outputSampleFormat;
+            FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,stream->userOutputChannels);
+            stream->bytesPerOutputFrame = wfx.Format.nBlockAlign;
+            stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result);
+            stream->deviceOutputChannels = stream->userOutputChannels;
+        }
+
+        if(result != paNoError)
+        {
+            hostOutputSampleFormat = paFloat32;
+
+            do {
+                FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,stream->userOutputChannels);
+                stream->bytesPerOutputFrame = wfx.Format.nBlockAlign;
+                stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result);
+                stream->deviceOutputChannels = stream->userOutputChannels;
+
+                if(stream->playbackPin == NULL) result = paSampleFormatNotSupported;
+                if(result != paNoError)    hostOutputSampleFormat <<= 1;
+            }
+            while(result != paNoError && hostOutputSampleFormat <= paUInt8);
+        }
+
+        if(result != paNoError)
+        {
+            hostOutputSampleFormat =
+                PaUtil_SelectClosestAvailableFormat( pFilter->formats, outputSampleFormat );
+       
+            /* Try a WAVE_FORMAT_PCM instead */
+            wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+            wfx.Format.cbSize = 0;
+            wfx.Samples.wValidBitsPerSample = 0;
+            wfx.dwChannelMask = 0;
+            wfx.SubFormat = GUID_NULL;
+            stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result);
+            if(stream->playbackPin == NULL) result = paSampleFormatNotSupported;
+        }
+            
+        if( result != paNoError )
+        {
+            /* Some or all KS devices can only handle the exact number of channels
+             * they specify. But PortAudio clients expect to be able to
+             * at least specify mono I/O on a multi-channel device
+             * If this is the case, then we will do the channel mapping internally
+             **/
+            if( stream->userOutputChannels < pFilter->maxOutputChannels )
+            {
+                FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,pFilter->maxOutputChannels);
+                stream->bytesPerOutputFrame = wfx.Format.nBlockAlign;
+                stream->playbackPin = FilterCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx,&result);
+                stream->deviceOutputChannels = pFilter->maxOutputChannels;
+                if( result != paNoError )
+                {
+                    /* Try a WAVE_FORMAT_PCM instead */
+                    wfx.Format.wFormatTag = WAVE_FORMAT_PCM;
+                    wfx.Format.cbSize = 0;
+                    wfx.Samples.wValidBitsPerSample = 0;
+                    wfx.dwChannelMask = 0;
+                    wfx.SubFormat = GUID_NULL;
+                    stream->playbackPin = FilterCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx,&result);
+                }
+            }
+        }
+
+        if(stream->playbackPin == NULL)
+        {
+            goto error;
+        }
+
+        switch(hostOutputSampleFormat)
+        {
+            case paInt16: stream->outputSampleSize = 2; break;
+            case paInt24: stream->outputSampleSize = 3; break;
+            case paInt32:
+            case paFloat32: stream->outputSampleSize = 4; break;
+        }
+
+        stream->playbackPin->frameSize /= stream->bytesPerOutputFrame;
+        PA_DEBUG(("Pin output frames: %d\n",stream->playbackPin->frameSize));
+    }
+    else
+    {
+        stream->playbackPin = NULL;
+        stream->bytesPerOutputFrame = 0;
+    }
+
+    /* Calculate the framesPerHostXxxxBuffer size based upon the suggested latency values */
+
+    /* Record the buffer length */
+    if(inputParameters)
+    {
+        /* Calculate the frames from the user's value - add a bit to round up */
+            stream->framesPerHostIBuffer = (unsigned long)((inputParameters->suggestedLatency*sampleRate)+0.0001);
+        if(stream->framesPerHostIBuffer > (unsigned long)sampleRate)
+        { /* Upper limit is 1 second */
+              stream->framesPerHostIBuffer = (unsigned long)sampleRate;
+        }
+        else if(stream->framesPerHostIBuffer < stream->recordingPin->frameSize)
+        {
+              stream->framesPerHostIBuffer = stream->recordingPin->frameSize;
+        }
+        PA_DEBUG(("Input frames chosen:%ld\n",stream->framesPerHostIBuffer));
+    }
+
+    if(outputParameters)
+    {
+        /* Calculate the frames from the user's value - add a bit to round up */
+        stream->framesPerHostOBuffer = (unsigned long)((outputParameters->suggestedLatency*sampleRate)+0.0001);
+        if(stream->framesPerHostOBuffer > (unsigned long)sampleRate)
+        { /* Upper limit is 1 second */
+                  stream->framesPerHostOBuffer = (unsigned long)sampleRate;
+        }
+        else if(stream->framesPerHostOBuffer < stream->playbackPin->frameSize)
+        {
+              stream->framesPerHostOBuffer = stream->playbackPin->frameSize;
+        }
+        PA_DEBUG(("Output frames chosen:%ld\n",stream->framesPerHostOBuffer));
+    }
+
+    /* Host buffer size is bounded to the largest of the input and output
+    frame sizes */
+
+    result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
+              stream->userInputChannels, inputSampleFormat, hostInputSampleFormat,
+              stream->userOutputChannels, outputSampleFormat, hostOutputSampleFormat,
+              sampleRate, streamFlags, framesPerBuffer,
+              max(stream->framesPerHostOBuffer,stream->framesPerHostIBuffer),
+              paUtilBoundedHostBufferSize,
+              streamCallback, userData );
+    if( result != paNoError )
+        goto error;
+
+    stream->streamRepresentation.streamInfo.inputLatency =
+            ((double)stream->framesPerHostIBuffer) / sampleRate;
+    stream->streamRepresentation.streamInfo.outputLatency =
+            ((double)stream->framesPerHostOBuffer) / sampleRate;
+    stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
+
+      PA_DEBUG(("BytesPerInputFrame = %d\n",stream->bytesPerInputFrame));
+      PA_DEBUG(("BytesPerOutputFrame = %d\n",stream->bytesPerOutputFrame));
+
+    /* Allocate all the buffers for host I/O */
+    size = 2 * (stream->framesPerHostIBuffer*stream->bytesPerInputFrame +  stream->framesPerHostOBuffer*stream->bytesPerOutputFrame);
+    PA_DEBUG(("Buffer size = %d\n",size));
+    stream->hostBuffer = (char*)PaUtil_AllocateMemory(size);
+    PA_DEBUG(("Buffer allocated\n"));
+    if( !stream->hostBuffer )
+    {
+        PA_DEBUG(("Cannot allocate host buffer!\n"));
+        result = paInsufficientMemory;
+        goto error;
+    }
+    PA_DEBUG(("Buffer start = %p\n",stream->hostBuffer));
+    /* memset(stream->hostBuffer,0,size); */
+
+    /* Set up the packets */
+    stream->events[0] = CreateEvent(NULL, FALSE, FALSE, NULL);
+    ResetEvent(stream->events[0]); /* Record buffer 1 */
+    stream->events[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
+    ResetEvent(stream->events[1]); /* Record buffer 2 */
+    stream->events[2] = CreateEvent(NULL, FALSE, FALSE, NULL);
+    ResetEvent(stream->events[2]); /* Play buffer 1 */
+    stream->events[3] = CreateEvent(NULL, FALSE, FALSE, NULL);
+    ResetEvent(stream->events[3]); /* Play buffer 2 */
+    stream->events[4] = CreateEvent(NULL, FALSE, FALSE, NULL);
+    ResetEvent(stream->events[4]); /* Abort event */
+    if(stream->userInputChannels > 0)
+    {
+        DATAPACKET *p = &(stream->packets[0]);
+        p->Signal.hEvent = stream->events[0];
+        p->Header.Data = stream->hostBuffer;
+        p->Header.FrameExtent = stream->framesPerHostIBuffer*stream->bytesPerInputFrame;
+        p->Header.DataUsed = 0;
+        p->Header.Size = sizeof(p->Header);
+        p->Header.PresentationTime.Numerator = 1;
+        p->Header.PresentationTime.Denominator = 1;
+
+        p = &(stream->packets[1]);
+        p->Signal.hEvent = stream->events[1];
+        p->Header.Data = stream->hostBuffer + stream->framesPerHostIBuffer*stream->bytesPerInputFrame;
+        p->Header.FrameExtent = stream->framesPerHostIBuffer*stream->bytesPerInputFrame;
+        p->Header.DataUsed = 0;
+        p->Header.Size = sizeof(p->Header);
+        p->Header.PresentationTime.Numerator = 1;
+        p->Header.PresentationTime.Denominator = 1;
+    }
+    if(stream->userOutputChannels > 0)
+    {
+        DATAPACKET *p = &(stream->packets[2]);
+        p->Signal.hEvent = stream->events[2];
+        p->Header.Data = stream->hostBuffer + 2*stream->framesPerHostIBuffer*stream->bytesPerInputFrame;
+        p->Header.FrameExtent = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame;
+        p->Header.DataUsed = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame;
+        p->Header.Size = sizeof(p->Header);
+        p->Header.PresentationTime.Numerator = 1;
+        p->Header.PresentationTime.Denominator = 1;
+    
+        p = &(stream->packets[3]);
+        p->Signal.hEvent = stream->events[3];
+        p->Header.Data = stream->hostBuffer + 2*stream->framesPerHostIBuffer*stream->bytesPerInputFrame + stream->framesPerHostOBuffer*stream->bytesPerOutputFrame;
+        p->Header.FrameExtent = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame;
+        p->Header.DataUsed = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame;
+        p->Header.Size = sizeof(p->Header);
+        p->Header.PresentationTime.Numerator = 1;
+        p->Header.PresentationTime.Denominator = 1;
+    }
+
+    stream->streamStarted = 0;
+    stream->streamActive = 0;
+    stream->streamStop = 0;
+    stream->streamAbort = 0;
+    stream->streamFlags = streamFlags;
+    stream->oldProcessPriority = REALTIME_PRIORITY_CLASS;
+
+    *s = (PaStream*)stream;
+
+    PA_LOGL_;
+    return result;
+
+error:
+    size = 5;
+    while(size--)
+    {
+        if(stream->events[size] != NULL)
+        {
+            CloseHandle(stream->events[size]);
+            stream->events[size] = NULL;
+        }
+    }
+    if(stream->hostBuffer)
+        PaUtil_FreeMemory( stream->hostBuffer );
+
+    if(stream->playbackPin)
+        PinClose(stream->playbackPin);
+    if(stream->recordingPin)
+        PinClose(stream->recordingPin);
+
+    if( stream )
+        PaUtil_FreeMemory( stream );
+
+    PA_LOGL_;
+    return result;
+}
+
+/*
+    When CloseStream() is called, the multi-api layer ensures that
+    the stream has already been stopped or aborted.
+*/
+static PaError CloseStream( PaStream* s )
+{
+    PaError result = paNoError;
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    int size;
+
+    PA_LOGE_;
+
+    assert(!stream->streamStarted);
+    assert(!stream->streamActive);
+
+    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
+    size = 5;
+    while(size--)
+    {
+        if(stream->events[size] != NULL)
+        {
+            CloseHandle(stream->events[size]);
+            stream->events[size] = NULL;
+        }
+    }
+    if(stream->hostBuffer)
+        PaUtil_FreeMemory( stream->hostBuffer );
+
+    if(stream->playbackPin)
+        PinClose(stream->playbackPin);
+    if(stream->recordingPin)
+        PinClose(stream->recordingPin);
+
+    PaUtil_FreeMemory( stream );
+
+    PA_LOGL_;
+    return result;
+}
+
+/*
+Write the supplied packet to the pin
+Asynchronous
+Should return false on success
+*/
+static BOOL PinWrite(HANDLE h, DATAPACKET* p)
+{
+    unsigned long cbReturned = 0;
+    return DeviceIoControl(h,IOCTL_KS_WRITE_STREAM,NULL,0,
+                            &p->Header,p->Header.Size,&cbReturned,&p->Signal);
+}
+
+/*
+Read to the supplied packet from the pin
+Asynchronous
+Should return false on success
+*/
+static BOOL PinRead(HANDLE h, DATAPACKET* p)
+{
+    unsigned long cbReturned = 0;
+    return DeviceIoControl(h,IOCTL_KS_READ_STREAM,NULL,0,
+                            &p->Header,p->Header.Size,&cbReturned,&p->Signal);
+}
+
+/*
+Copy the first interleaved channel of 16 bit data to the other channels
+*/
+static void DuplicateFirstChannelInt16(void* buffer, int channels, int samples)
+{
+    unsigned short* data = (unsigned short*)buffer;
+    int channel;
+    unsigned short sourceSample;
+    while( samples-- )
+    {
+        sourceSample = *data++;
+        channel = channels-1;
+        while( channel-- )
+        {
+            *data++ = sourceSample;
+        }
+    }
+}
+
+/*
+Copy the first interleaved channel of 24 bit data to the other channels
+*/
+static void DuplicateFirstChannelInt24(void* buffer, int channels, int samples)
+{
+    unsigned char* data = (unsigned char*)buffer;
+    int channel;
+    unsigned char sourceSample[3];
+    while( samples-- )
+    {
+        sourceSample[0] = data[0];
+        sourceSample[1] = data[1];
+        sourceSample[2] = data[2];
+        data += 3;
+        channel = channels-1;
+        while( channel-- )
+        {
+            data[0] = sourceSample[0];
+            data[1] = sourceSample[1];
+            data[2] = sourceSample[2];
+            data += 3;
+        }
+    }
+}
+
+/*
+Copy the first interleaved channel of 32 bit data to the other channels
+*/
+static void DuplicateFirstChannelInt32(void* buffer, int channels, int samples)
+{
+    unsigned long* data = (unsigned long*)buffer;
+    int channel;
+    unsigned long sourceSample;
+    while( samples-- )
+    {
+        sourceSample = *data++;
+        channel = channels-1;
+        while( channel-- )
+        {
+            *data++ = sourceSample;
+        }
+    }
+}
+
+static DWORD WINAPI ProcessingThread(LPVOID pParam)
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)pParam;
+    PaStreamCallbackTimeInfo ti;
+    int cbResult = paContinue;
+    int inbuf = 0;
+    int outbuf = 0;
+    int pending = 0;
+    PaError result;
+    unsigned long wait;
+    unsigned long eventSignaled;
+    int fillPlaybuf = 0;
+    int emptyRecordbuf = 0;
+    int framesProcessed;
+    unsigned long timeout;
+    int i;
+    int doChannelCopy;
+    int priming = 0;
+    PaStreamCallbackFlags underover = 0;
+
+    PA_LOGE_;
+
+    ti.inputBufferAdcTime = 0.0;
+    ti.currentTime = 0.0;
+    ti.outputBufferDacTime = 0.0;
+
+    /* Get double buffering going */
+
+    /* Submit buffers */
+    if(stream->playbackPin)
+    {
+        result = PinSetState(stream->playbackPin, KSSTATE_RUN);
+
+        PA_DEBUG(("play state run = %d;",(int)result));
+        SetEvent(stream->events[outbuf+2]);
+        outbuf = (outbuf+1)&1;
+        SetEvent(stream->events[outbuf+2]);
+        outbuf = (outbuf+1)&1;
+        pending += 2;
+        priming += 4;
+    }
+    if(stream->recordingPin)
+    {
+        result = PinSetState(stream->recordingPin, KSSTATE_RUN);
+
+        PA_DEBUG(("recording state run = %d;",(int)result));
+        PinRead(stream->recordingPin->handle,&stream->packets[inbuf]);
+        inbuf = (inbuf+1)&1; /* Increment and wrap */
+        PinRead(stream->recordingPin->handle,&stream->packets[inbuf]);
+        inbuf = (inbuf+1)&1; /* Increment and wrap */
+        /* FIXME - do error checking */
+        pending += 2;
+    }
+    PA_DEBUG(("Out buffer len:%f\n",(2000*stream->framesPerHostOBuffer) / stream->streamRepresentation.streamInfo.sampleRate));
+    PA_DEBUG(("In buffer len:%f\n",(2000*stream->framesPerHostIBuffer) / stream->streamRepresentation.streamInfo.sampleRate));
+    timeout = max(
+       ((2000*(DWORD)stream->framesPerHostOBuffer) / (DWORD)stream->streamRepresentation.streamInfo.sampleRate),
+       ((2000*(DWORD)stream->framesPerHostIBuffer) / (DWORD)stream->streamRepresentation.streamInfo.sampleRate));
+    timeout = max(timeout,1);
+    PA_DEBUG(("Timeout = %ld\n",timeout));
+
+    while(!stream->streamAbort)
+    {
+        fillPlaybuf = 0;
+        emptyRecordbuf = 0;
+
+        /* Wait for next input or output buffer to be finished with*/
+        assert(pending>0);
+
+        if(stream->streamStop)
+        {
+            PA_DEBUG(("ss1:pending=%d ",pending));
+        }
+        wait = WaitForMultipleObjects(5, stream->events, FALSE, 0);
+        if( wait == WAIT_TIMEOUT )
+        {
+            /* No (under|over)flow has ocurred */
+            wait = WaitForMultipleObjects(5, stream->events, FALSE, timeout);
+            eventSignaled = wait - WAIT_OBJECT_0;
+        }
+        else
+        {
+            eventSignaled = wait - WAIT_OBJECT_0;
+            if( eventSignaled < 2 )
+            {
+                underover |= paInputOverflow;
+                PA_DEBUG(("Input overflow\n"));
+            }
+            else if(( eventSignaled < 4 )&&(!priming))
+            {
+                underover |= paOutputUnderflow;
+                PA_DEBUG(("Output underflow\n"));
+            }
+        }
+
+        if(stream->streamStop)
+        {
+            PA_DEBUG(("ss2:wait=%ld",wait));
+        }
+        if(wait == WAIT_FAILED)
+        {
+            PA_DEBUG(("Wait fail = %ld! ",wait));
+            break;
+        }
+        if(wait == WAIT_TIMEOUT)
+        {
+            continue;
+        }
+
+        if(eventSignaled < 2)
+        { /* Recording input buffer has been filled */
+            if(stream->playbackPin)
+            {
+                /* First check if also the next playback buffer has been signaled */
+                wait = WaitForSingleObject(stream->events[outbuf+2],0);
+                if(wait == WAIT_OBJECT_0)
+                {
+                    /* Yes, so do both buffers at same time */
+                    fillPlaybuf = 1;
+                    pending--;
+                    /* Was this an underflow situation? */
+                    if( underover )
+                        underover |= paOutputUnderflow; /* Yes! */
+                }
+            }
+            emptyRecordbuf = 1;
+            pending--;
+        }
+        else if(eventSignaled < 4)
+        { /* Playback output buffer has been emptied */
+            if(stream->recordingPin)
+            {
+                /* First check if also the next recording buffer has been signaled */
+                wait = WaitForSingleObject(stream->events[inbuf],0);
+                if(wait == WAIT_OBJECT_0)
+                { /* Yes, so do both buffers at same time */
+                    emptyRecordbuf = 1;
+                    pending--;
+                    /* Was this an overflow situation? */
+                    if( underover )
+                        underover |= paInputOverflow; /* Yes! */
+                }
+            }
+            fillPlaybuf = 1;
+            pending--;
+        }
+        else
+        {
+            /* Abort event! */
+            assert(stream->streamAbort); /* Should have been set */
+            PA_DEBUG(("ABORTING "));
+            break;
+        }
+        ResetEvent(stream->events[eventSignaled]);
+
+        if(stream->streamStop)
+        {
+            PA_DEBUG(("Stream stop! pending=%d",pending));
+            cbResult = paComplete; /* Stop, but play remaining buffers */
+        }
+
+        /* Do necessary buffer processing (which will invoke user callback if necessary */
+        doChannelCopy = 0;
+        if(cbResult==paContinue)
+        {
+            PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
+            if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) ==
+                (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) )
+                PaUtil_BeginBufferProcessing(&stream->bufferProcessor,&ti,underover);
+            underover = 0; /* Reset the (under|over)flow status */
+            if(fillPlaybuf)
+            {
+                PaUtil_SetOutputFrameCount(&stream->bufferProcessor,0);
+                if( stream->userOutputChannels == 1 )
+                {
+                    /* Write the single user channel to the first interleaved block */
+                    PaUtil_SetOutputChannel(&stream->bufferProcessor,0,stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels);
+                    /* We will do a copy to the other channels after the data has been written */
+                    doChannelCopy = 1;
+                }
+                else
+                {
+                    for(i=0;i<stream->userOutputChannels;i++)
+                    {
+                        /* Only write the user output channels. Leave the rest blank */
+                        PaUtil_SetOutputChannel(&stream->bufferProcessor,i,((unsigned char*)(stream->packets[outbuf+2].Header.Data))+(i*stream->outputSampleSize),stream->deviceOutputChannels);
+                    }
+                }
+            }
+            if(emptyRecordbuf)
+            {
+                PaUtil_SetInputFrameCount(&stream->bufferProcessor,stream->packets[inbuf].Header.DataUsed/stream->bytesPerInputFrame);
+                for(i=0;i<stream->userInputChannels;i++)
+                {
+                    /* Only read as many channels as the user wants */
+                    PaUtil_SetInputChannel(&stream->bufferProcessor,i,((unsigned char*)(stream->packets[inbuf].Header.Data))+(i*stream->inputSampleSize),stream->deviceInputChannels);
+                }
+            }
+            
+            if (stream->recordingPin && stream->playbackPin) /* full duplex */
+            {
+                /* Only call the EndBufferProcessing function when the total input frames == total output frames */
+
+                if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) ==
+                        (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) )
+                {
+                    framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult);
+                }
+                else
+                {
+                    framesProcessed = 0;
+                }
+            }
+            else 
+            {
+                framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult);
+            }
+
+            if( doChannelCopy )
+            {
+                /* Copy the first output channel to the other channels */
+                switch(stream->outputSampleSize)
+                {
+                    case 2:
+                        DuplicateFirstChannelInt16(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer);
+                        break;
+                    case 3:
+                        DuplicateFirstChannelInt24(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer);
+                        break;
+                    case 4:
+                        DuplicateFirstChannelInt32(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer);
+                        break;
+                    default:
+                        assert(0); /* Unsupported format! */
+                        break;
+                }
+            }
+            PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed );
+        }
+        else
+        {
+            fillPlaybuf = 0;
+            emptyRecordbuf = 0;
+        }
+            
+        /*
+        if(cbResult != paContinue)
+        {
+            PA_DEBUG(("cbResult=%d, pending=%d:",cbResult,pending));
+        }
+        */
+        /* Submit buffers */
+        if((fillPlaybuf)&&(cbResult!=paAbort))
+        {
+            if(!PinWrite(stream->playbackPin->handle,&stream->packets[outbuf+2]))
+                outbuf = (outbuf+1)&1; /* Increment and wrap */
+            pending++;
+            if( priming )
+                priming--; /* Have to prime twice */
+        }
+        if((emptyRecordbuf)&&(cbResult==paContinue))
+        {
+            stream->packets[inbuf].Header.DataUsed = 0; /* Reset for reuse */
+            PinRead(stream->recordingPin->handle,&stream->packets[inbuf]);
+            inbuf = (inbuf+1)&1; /* Increment and wrap */
+            pending++;
+        }
+        if(pending==0)
+        {
+            PA_DEBUG(("pending==0 finished...;"));
+            break;
+        }
+        if((!stream->playbackPin)&&(cbResult!=paContinue))
+        {
+            PA_DEBUG(("record only cbResult=%d...;",cbResult));
+            break;
+        }
+    }
+
+    PA_DEBUG(("Finished thread"));
+
+    /* Finished, either normally or aborted */
+    if(stream->playbackPin)
+    {
+        result = PinSetState(stream->playbackPin, KSSTATE_PAUSE);
+        result = PinSetState(stream->playbackPin, KSSTATE_STOP);
+    }
+    if(stream->recordingPin)
+    {
+        result = PinSetState(stream->recordingPin, KSSTATE_PAUSE);
+        result = PinSetState(stream->recordingPin, KSSTATE_STOP);
+    }
+
+    stream->streamActive = 0;
+
+    if((!stream->streamStop)&&(!stream->streamAbort))
+    {
+          /* Invoke the user stream finished callback */
+          /* Only do it from here if not being stopped/aborted by user */
+          if( stream->streamRepresentation.streamFinishedCallback != 0 )
+              stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    }
+    stream->streamStop = 0;
+    stream->streamAbort = 0;
+
+    /* Reset process priority if necessary */
+    if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS)
+    {
+        SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority);
+        stream->oldProcessPriority = REALTIME_PRIORITY_CLASS;
+    }
+
+    PA_LOGL_;
+    EXIT_THREAD;
+    return 0;
+}
+
+static PaError StartStream( PaStream *s )
+{
+    PaError result = paNoError;
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    DWORD dwID;
+    BOOL ret;
+    int size;
+
+    PA_LOGE_;
+
+    stream->streamStop = 0;
+    stream->streamAbort = 0;
+    size = 5;
+    while(size--)
+    {
+        if(stream->events[size] != NULL)
+        {
+            ResetEvent(stream->events[size]);
+        }
+    }
+
+    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
+
+    stream->oldProcessPriority = GetPriorityClass(GetCurrentProcess());
+    /* Uncomment the following line to enable dynamic boosting of the process
+     * priority to real time for best low latency support
+     * Disabled by default because RT processes can easily block the OS */
+    /*ret = SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
+      PA_DEBUG(("Class ret = %d;",ret));*/
+
+    stream->streamStarted = 1;
+    stream->streamThread = (HANDLE)_beginthreadex(NULL, 0, ProcessingThread, stream, 0, &dwID);
+    if(stream->streamThread == NULL)
+    {
+        stream->streamStarted = 0;
+        result = paInsufficientMemory;
+        goto end;
+    }
+    ret = SetThreadPriority(stream->streamThread,THREAD_PRIORITY_TIME_CRITICAL);
+    PA_DEBUG(("Priority ret = %d;",ret));
+    /* Make the stream active */
+    stream->streamActive = 1;
+
+end:
+    PA_LOGL_;
+    return result;
+}
+
+
+static PaError StopStream( PaStream *s )
+{
+    PaError result = paNoError;
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    int doCb = 0;
+
+    PA_LOGE_;
+
+    if(stream->streamActive)
+    {
+        doCb = 1;
+        stream->streamStop = 1;
+        while(stream->streamActive)
+        {
+            PA_DEBUG(("W."));
+            Sleep(10); /* Let thread sleep for 10 msec */
+        }
+    }
+
+    PA_DEBUG(("Terminating thread"));
+    if(stream->streamStarted && stream->streamThread)
+    {
+        TerminateThread(stream->streamThread,0);
+        stream->streamThread = NULL;
+    }
+
+    stream->streamStarted = 0;
+
+    if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS)
+    {
+        SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority);
+        stream->oldProcessPriority = REALTIME_PRIORITY_CLASS;
+    }
+
+    if(doCb)
+    {
+        /* Do user callback now after all state has been reset */
+        /* This means it should be safe for the called function */
+        /* to invoke e.g. StartStream */
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+             stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    }
+
+    PA_LOGL_;
+    return result;
+}
+
+static PaError AbortStream( PaStream *s )
+{
+    PaError result = paNoError;
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    int doCb = 0;
+
+    PA_LOGE_;
+
+    if(stream->streamActive)
+    {
+        doCb = 1;
+        stream->streamAbort = 1;
+        SetEvent(stream->events[4]); /* Signal immediately */
+        while(stream->streamActive)
+        {
+            Sleep(10);
+        }
+    }
+
+    if(stream->streamStarted && stream->streamThread)
+    {
+        TerminateThread(stream->streamThread,0);
+        stream->streamThread = NULL;
+    }
+
+    stream->streamStarted = 0;
+
+    if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS)
+    {
+        SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority);
+        stream->oldProcessPriority = REALTIME_PRIORITY_CLASS;
+    }
+
+    if(doCb)
+    {
+        /* Do user callback now after all state has been reset */
+        /* This means it should be safe for the called function */
+        /* to invoke e.g. StartStream */
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    }
+
+    stream->streamActive = 0;
+    stream->streamStarted = 0;
+
+    PA_LOGL_;
+    return result;
+}
+
+
+static PaError IsStreamStopped( PaStream *s )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    int result = 0;
+
+    PA_LOGE_;
+
+    if(!stream->streamStarted)
+        result = 1;
+
+    PA_LOGL_;
+    return result;
+}
+
+
+static PaError IsStreamActive( PaStream *s )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    int result = 0;
+
+    PA_LOGE_;
+
+    if(stream->streamActive)
+        result = 1;
+
+    PA_LOGL_;
+    return result;
+}
+
+
+static PaTime GetStreamTime( PaStream* s )
+{
+    PA_LOGE_;
+    PA_LOGL_;
+    (void)s;
+    return PaUtil_GetTime();
+}
+
+
+static double GetStreamCpuLoad( PaStream* s )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+    double result;
+    PA_LOGE_;
+    result = PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
+    PA_LOGL_;
+    return result;
+}
+
+
+/*
+    As separate stream interfaces are used for blocking and callback
+    streams, the following functions can be guaranteed to only be called
+    for blocking streams.
+*/
+
+static PaError ReadStream( PaStream* s,
+                           void *buffer,
+                           unsigned long frames )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+
+    PA_LOGE_;
+
+    /* suppress unused variable warnings */
+    (void) buffer;
+    (void) frames;
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+    PA_LOGL_;
+    return paNoError;
+}
+
+
+static PaError WriteStream( PaStream* s,
+                            const void *buffer,
+                            unsigned long frames )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+
+    PA_LOGE_;
+
+    /* suppress unused variable warnings */
+    (void) buffer;
+    (void) frames;
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+    PA_LOGL_;
+    return paNoError;
+}
+
+
+static signed long GetStreamReadAvailable( PaStream* s )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+
+    PA_LOGE_;
+
+    /* suppress unused variable warnings */
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+    PA_LOGL_;
+    return 0;
+}
+
+
+static signed long GetStreamWriteAvailable( PaStream* s )
+{
+    PaWinWdmStream *stream = (PaWinWdmStream*)s;
+
+    PA_LOGE_;
+    /* suppress unused variable warnings */
+    (void) stream;
+
+    /* IMPLEMENT ME, see portaudio.h for required behavior*/
+    PA_LOGL_;
+    return 0;
+}
\ No newline at end of file
diff --git a/portaudio/src/hostapi/wdmks/readme.txt b/portaudio/src/hostapi/wdmks/readme.txt
new file mode 100644
index 000000000..1a381fe79
--- /dev/null
+++ b/portaudio/src/hostapi/wdmks/readme.txt
@@ -0,0 +1,82 @@
+Notes about WDM-KS host API
+---------------------------
+
+Status history
+--------------
+10th November 2005:
+Made following changes:
+ * OpenStream: Try all PaSampleFormats internally if the the chosen
+     format is not supported natively.  This fixed several problems
+     with soundcards that soundcards that did not take kindly to
+     using 24-bit 3-byte formats.
+ * OpenStream: Make the minimum framesPerHostIBuffer (and framesPerHostOBuffer)
+     the default frameSize for the playback/recording pin.
+ * ProcessingThread: Added a switch to only call PaUtil_EndBufferProcessing
+     if the total input frames equals the total output frames
+
+5th September 2004:
+This is the first public version of the code. It should be considered
+an alpha release with zero guarantee not to crash on any particular 
+system. So far it has only been tested in the author's development
+environment, which means a Win2k/SP2 PIII laptop with integrated 
+SoundMAX driver and USB Tascam US-428 compiled with both MinGW
+(GCC 3.3) and MSVC++6 using the MS DirectX 9 SDK.
+It has been most widely tested with the MinGW build, with most of the
+test programs (particularly paqa_devs and paqa_errs) passing.
+There are some notable failures: patest_out_underflow and both of the
+blocking I/O tests (as blocking I/O is not implemented).
+At this point the code needs to be tested with a much wider variety 
+of configurations and feedback provided from testers regarding
+both working and failing cases.
+
+What is the WDM-KS host API?
+----------------------------
+PortAudio for Windows currently has 3 functional host implementations.
+MME uses the oldest Windows audio API which does not offer good
+play/record latency. 
+DirectX improves this, but still imposes a penalty
+of 10s of milliseconds due to the system mixing of streams from
+multiple applications. 
+ASIO offers very good latency, but requires special drivers which are
+not always available for cheaper audio hardware. Also, when ASIO 
+drivers are available, they are not always so robust because they 
+bypass all of the standardised Windows device driver architecture 
+and hit the hardware their own way.
+Alternatively there are a couple of free (but closed source) ASIO 
+implementations which connect to the lower level Windows 
+"Kernel Streaming" API, but again these require special installation 
+by the user, and can be limited in functionality or difficult to use. 
+
+This is where the PortAudio "WDM-KS" host implementation comes in.
+It directly connects PortAudio to the same Kernel Streaming API which
+those ASIO bridges use. This avoids the mixing penatly of DirectX, 
+giving at least as good latency as any ASIO driver, but it has the
+advantage of working with ANY Windows audio hardware which is available
+through the normal MME/DirectX routes without the user requiring 
+any additional device drivers to be installed, and allowing all 
+device selection to be done through the normal PortAudio API.
+
+Note that in general you should only be using this host API if your 
+application has a real requirement for very low latency audio (<20ms), 
+either because you are generating sounds in real-time based upon 
+user input, or you a processing recorded audio in real time.
+
+The only thing to be aware of is that using the KS interface will
+block that device from being used by the rest of system through
+the higher level APIs, or conversely, if the system is using
+a device, the KS API will not be able to use it. MS recommend that
+you should keep the device open only when your application has focus.
+In PortAudio terms, this means having a stream Open on a WDMKS device.
+
+Usage
+-----
+To add the WDMKS backend to your program which is already using 
+PortAudio, you must undefine PA_NO_WDMKS from your build file,
+and include the pa_win_wdmks\pa_win_wdmks.c into your build.
+The file should compile in both C and C++.
+You will need a DirectX SDK installed on your system for the
+ks.h and ksmedia.h header files.
+You will need to link to the system "setupapi" library.
+Note that if you use MinGW, you will get more warnings from 
+the DX header files when using GCC(C), and still a few warnings
+with G++(CPP).
\ No newline at end of file
diff --git a/portaudio/src/hostapi/wmme/pa_win_wmme.c b/portaudio/src/hostapi/wmme/pa_win_wmme.c
index 3264ebf89..2436d8de1 100644
--- a/portaudio/src/hostapi/wmme/pa_win_wmme.c
+++ b/portaudio/src/hostapi/wmme/pa_win_wmme.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_win_wmme.c 1229 2007-06-15 16:11:11Z rossb $
+ * $Id: pa_win_wmme.c 1432 2009-12-09 01:31:44Z rossb $
  * pa_win_wmme.c
  * Implementation of PortAudio for Windows MultiMedia Extensions (WMME)       
  *                                                                                         
@@ -62,7 +62,9 @@
 */
 
 /** @file
-	@ingroup hostaip_src
+	@ingroup hostapi_src
+
+    @brief Win32 host API implementation for the Windows MultiMedia Extensions (WMME) audio API.
 
 	@todo Fix buffer catch up code, can sometimes get stuck (perhaps fixed now,
             needs to be reviewed and tested.)
@@ -88,6 +90,10 @@ Non-critical stuff for the future:
     
     @todo define UNICODE and _UNICODE in the project settings and see what breaks
 
+    @todo refactor conversion of MMSYSTEM errors into PA arrors into a single function.
+
+    @todo cleanup WAVEFORMATEXTENSIBLE retry in InitializeWaveHandles to not use a for loop
+
 */
 
 /*
@@ -133,8 +139,29 @@ Non-critical stuff for the future:
 #include "pa_debugprint.h"
 
 #include "pa_win_wmme.h"
+#include "pa_win_waveformat.h"
+
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+#include "pa_win_wdmks_utils.h"
+#ifndef DRV_QUERYDEVICEINTERFACE
+#define DRV_QUERYDEVICEINTERFACE     (DRV_RESERVED + 12)
+#endif
+#ifndef DRV_QUERYDEVICEINTERFACESIZE
+#define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13)
+#endif
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
 
-#if (defined(UNDER_CE))
+/* use CreateThread for CYGWIN, _beginthreadex for all others */
+#if !defined(__CYGWIN__) && !defined(_WIN32_WCE)
+#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#define PA_THREAD_FUNC static unsigned WINAPI
+#define PA_THREAD_ID unsigned
+#else
+#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#define PA_THREAD_FUNC static DWORD WINAPI
+#define PA_THREAD_ID DWORD
+#endif
+#if (defined(_WIN32_WCE))
 #pragma comment(lib, "Coredll.lib")
 #elif (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
 #pragma comment(lib, "winmm.lib")
@@ -144,7 +171,11 @@ Non-critical stuff for the future:
  provided in newer platform sdks
  */
 #ifndef DWORD_PTR
-#define DWORD_PTR DWORD
+    #if defined(_WIN64)
+        #define DWORD_PTR unsigned __int64
+    #else
+        #define DWORD_PTR unsigned long
+    #endif
 #endif
 
 /************************************************* Constants ********/
@@ -181,6 +212,34 @@ Non-critical stuff for the future:
 static const char constInputMapperSuffix_[] = " - Input";
 static const char constOutputMapperSuffix_[] = " - Output";
 
+/*
+copies TCHAR string to explicit char string
+*/
+char *StrTCpyToC(char *to, const TCHAR *from)
+{
+#if !defined(_UNICODE) && !defined(UNICODE)
+	return strcpy(to, from);
+#else
+	int count = wcslen(from);
+	if (count != 0)
+		if (WideCharToMultiByte(CP_ACP, 0, from, count, to, count, NULL, NULL) == 0)
+			return NULL;
+	return to;
+#endif
+}
+
+/*
+returns length of TCHAR string
+*/
+size_t StrTLen(const TCHAR *str)
+{
+#if !defined(_UNICODE) && !defined(UNICODE)
+	return strlen(str);
+#else
+	return wcslen(str);	
+#endif
+}
+
 /********************************************************************/
 
 typedef struct PaWinMmeStream PaWinMmeStream;     /* forward declaration */
@@ -374,6 +433,8 @@ typedef struct
 {
     PaDeviceInfo inheritedDeviceInfo;
     DWORD dwFormats; /**<< standard formats bitmask from the WAVEINCAPS and WAVEOUTCAPS structures */
+    char deviceInputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/
+    char deviceOutputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/
 }
 PaWinMmeDeviceInfo;
 
@@ -445,6 +506,21 @@ static UINT LocalDeviceIndexToWinMmeDeviceId( PaWinMmeHostApiRepresentation *hos
 }
 
 
+static int SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( PaSampleFormat sampleFormat, unsigned long winMmeSpecificFlags )
+{
+    int waveFormatTag = 0;
+
+    if( winMmeSpecificFlags & paWinMmeWaveFormatDolbyAc3Spdif )
+        waveFormatTag = PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF;
+    else if( winMmeSpecificFlags & paWinMmeWaveFormatWmaSpdif )
+        waveFormatTag = PAWIN_WAVE_FORMAT_WMA_SPDIF;
+    else
+        waveFormatTag = PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat );
+
+    return waveFormatTag;
+}
+
+
 static PaError QueryInputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx )
 {
     MMRESULT mmresult;
@@ -499,41 +575,57 @@ static PaError QueryOutputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx
 
 static PaError QueryFormatSupported( PaDeviceInfo *deviceInfo,
         PaError (*waveFormatExQueryFunction)(int, WAVEFORMATEX*),
-        int winMmeDeviceId, int channels, double sampleRate )
+        int winMmeDeviceId, int channels, double sampleRate, unsigned long winMmeSpecificFlags )
 {
     PaWinMmeDeviceInfo *winMmeDeviceInfo = (PaWinMmeDeviceInfo*)deviceInfo;
-    WAVEFORMATEX waveFormatEx;
+    PaWinWaveFormat waveFormat;
+    PaSampleFormat sampleFormat;
+    int waveFormatTag;
     
-    if( sampleRate == 11025.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1S16)) ) ){
+    /* @todo at the moment we only query with 16 bit sample format and directout speaker config*/
 
-        return paNoError;
-    }
+    sampleFormat = paInt16;
+    waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags );
 
-    if( sampleRate == 22050.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2S16)) ) ){
+    if( waveFormatTag == PaWin_SampleFormatToLinearWaveFormatTag( paInt16 ) ){
+    
+        /* attempt bypass querying the device for linear formats */
 
-        return paNoError;
+        if( sampleRate == 11025.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1S16)) ) ){
+
+            return paNoError;
+        }
+
+        if( sampleRate == 22050.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2S16)) ) ){
+
+            return paNoError;
+        }
+
+        if( sampleRate == 44100.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4S16)) ) ){
+
+            return paNoError;
+        }
     }
 
-    if( sampleRate == 44100.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4S16)) ) ){
 
+    /* first, attempt to query the device using WAVEFORMATEXTENSIBLE, 
+       if this fails we fall back to WAVEFORMATEX */
+
+    PaWin_InitializeWaveFormatExtensible( &waveFormat, channels, sampleFormat, waveFormatTag,
+            sampleRate, PAWIN_SPEAKER_DIRECTOUT );
+
+    if( waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat ) == paNoError )
         return paNoError;
-    }
 
-    waveFormatEx.wFormatTag = WAVE_FORMAT_PCM;
-    waveFormatEx.nChannels = (WORD)channels;
-    waveFormatEx.nSamplesPerSec = (DWORD)sampleRate;
-    waveFormatEx.nAvgBytesPerSec = waveFormatEx.nSamplesPerSec * channels * sizeof(short);
-    waveFormatEx.nBlockAlign = (WORD)(channels * sizeof(short));
-    waveFormatEx.wBitsPerSample = 16;
-    waveFormatEx.cbSize = 0;
+    PaWin_InitializeWaveFormatEx( &waveFormat, channels, sampleFormat, waveFormatTag, sampleRate );
 
-    return waveFormatExQueryFunction( winMmeDeviceId, &waveFormatEx );
+    return waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat );
 }
 
 
@@ -553,7 +645,7 @@ static void DetectDefaultSampleRate( PaWinMmeDeviceInfo *winMmeDeviceInfo, int w
     for( i=0; i < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++i )
     {
         double sampleRate = defaultSampleRateSearchOrder_[ i ]; 
-        PaError paerror = QueryFormatSupported( deviceInfo, waveFormatExQueryFunction, winMmeDeviceId, maxChannels, sampleRate );
+        PaError paerror = QueryFormatSupported( deviceInfo, waveFormatExQueryFunction, winMmeDeviceId, maxChannels, sampleRate, 0 );
         if( paerror == paNoError )
         {
             deviceInfo->defaultSampleRate = sampleRate;
@@ -563,6 +655,40 @@ static void DetectDefaultSampleRate( PaWinMmeDeviceInfo *winMmeDeviceInfo, int w
 }
 
 
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+static int QueryWaveInKSFilterMaxChannels( int waveInDeviceId, int *maxChannels )
+{
+    void *devicePath;
+    DWORD devicePathSize;
+    int result = 0;
+
+    if( waveInMessage((HWAVEIN)waveInDeviceId, DRV_QUERYDEVICEINTERFACESIZE,
+            (DWORD_PTR)&devicePathSize, 0 ) != MMSYSERR_NOERROR )
+        return 0;
+
+    devicePath = PaUtil_AllocateMemory( devicePathSize );
+    if( !devicePath )
+        return 0;
+
+    /* apparently DRV_QUERYDEVICEINTERFACE returns a unicode interface path, although this is undocumented */
+    if( waveInMessage((HWAVEIN)waveInDeviceId, DRV_QUERYDEVICEINTERFACE,
+            (DWORD_PTR)devicePath, devicePathSize ) == MMSYSERR_NOERROR )
+    {
+        int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( devicePath, /* isInput= */ 1  );
+        if( count > 0 )
+        {
+            *maxChannels = count;
+            result = 1;
+        }
+    }
+
+    PaUtil_FreeMemory( devicePath );
+
+    return result;
+}
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+
 static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeDeviceInfo *winMmeDeviceInfo, UINT winMmeInputDeviceId, int *success )
 {
@@ -594,39 +720,52 @@ static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeH
     {
         /* Append I/O suffix to WAVE_MAPPER device. */
         deviceName = (char *)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_) );
+                    winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_) );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, wic.szPname );
+        StrTCpyToC( deviceName, wic.szPname );
         strcat( deviceName, constInputMapperSuffix_ );
     }
     else
     {
         deviceName = (char*)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( wic.szPname ) + 1 );
+                    winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, wic.szPname  );
+        StrTCpyToC( deviceName, wic.szPname  );
     }
     deviceInfo->name = deviceName;
 
-    deviceInfo->maxInputChannels = wic.wChannels;
-    /* Sometimes a device can return a rediculously large number of channels.
-     * This happened with an SBLive card on a Windows ME box.
-     * If that happens, then force it to 2 channels.  PLB20010413
+    if( wic.wChannels == 0xFFFF || wic.wChannels < 1 || wic.wChannels > 255 ){
+        /* For Windows versions using WDM (possibly Windows 98 ME and later)
+         * the kernel mixer sits between the application and the driver. As a result,
+         * wave*GetDevCaps often kernel mixer channel counts, which are unlimited.
+         * When this happens we assume the device is stereo and set a flag
+         * so that other channel counts can be tried with OpenStream -- i.e. when
+         * device*ChannelCountIsKnown is false, OpenStream will try whatever
+         * channel count you supply.
+         * see also InitializeOutputDeviceInfo() below.
      */
-    if( (deviceInfo->maxInputChannels < 1) || (deviceInfo->maxInputChannels > 256) )
-    {
-        PA_DEBUG(("Pa_GetDeviceInfo: Num input channels reported as %d! Changed to 2.\n", deviceInfo->maxInputChannels ));
+
+        PA_DEBUG(("Pa_GetDeviceInfo: Num input channels reported as %d! Changed to 2.\n", wic.wChannels ));
         deviceInfo->maxInputChannels = 2;
+        winMmeDeviceInfo->deviceInputChannelCountIsKnown = 0;
+    }else{
+        deviceInfo->maxInputChannels = wic.wChannels;
+        winMmeDeviceInfo->deviceInputChannelCountIsKnown = 1;
     }
 
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+    winMmeDeviceInfo->deviceInputChannelCountIsKnown = 
+            QueryWaveInKSFilterMaxChannels( winMmeInputDeviceId, &deviceInfo->maxInputChannels );
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
     winMmeDeviceInfo->dwFormats = wic.dwFormats;
 
     DetectDefaultSampleRate( winMmeDeviceInfo, winMmeInputDeviceId,
@@ -639,6 +778,40 @@ error:
 }
 
 
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+static int QueryWaveOutKSFilterMaxChannels( int waveOutDeviceId, int *maxChannels )
+{
+    void *devicePath;
+    DWORD devicePathSize;
+    int result = 0;
+
+    if( waveOutMessage((HWAVEOUT)waveOutDeviceId, DRV_QUERYDEVICEINTERFACESIZE,
+            (DWORD_PTR)&devicePathSize, 0 ) != MMSYSERR_NOERROR )
+        return 0;
+
+    devicePath = PaUtil_AllocateMemory( devicePathSize );
+    if( !devicePath )
+        return 0;
+
+    /* apparently DRV_QUERYDEVICEINTERFACE returns a unicode interface path, although this is undocumented */
+    if( waveOutMessage((HWAVEOUT)waveOutDeviceId, DRV_QUERYDEVICEINTERFACE,
+            (DWORD_PTR)devicePath, devicePathSize ) == MMSYSERR_NOERROR )
+    {
+        int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( devicePath, /* isInput= */ 0  );
+        if( count > 0 )
+        {
+            *maxChannels = count;
+            result = 1;
+        }
+    }
+
+    PaUtil_FreeMemory( devicePath );
+
+    return result;
+}
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
+
 static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeDeviceInfo *winMmeDeviceInfo, UINT winMmeOutputDeviceId, int *success )
 {
@@ -647,7 +820,8 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme
     MMRESULT mmresult;
     WAVEOUTCAPS woc;
     PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo;
-    
+    int wdmksDeviceOutputChannelCountIsKnown;
+
     *success = 0;
 
     mmresult = waveOutGetDevCaps( winMmeOutputDeviceId, &woc, sizeof( WAVEOUTCAPS ) );
@@ -670,39 +844,54 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme
     {
         /* Append I/O suffix to WAVE_MAPPER device. */
         deviceName = (char *)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_) );
+                    winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_) );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, woc.szPname );
+        StrTCpyToC( deviceName, woc.szPname );
         strcat( deviceName, constOutputMapperSuffix_ );
     }
     else
     {
         deviceName = (char*)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( woc.szPname ) + 1 );
+                    winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, woc.szPname  );
+        StrTCpyToC( deviceName, woc.szPname  );
     }
     deviceInfo->name = deviceName;
 
-    deviceInfo->maxOutputChannels = woc.wChannels;
-    /* Sometimes a device can return a rediculously large number of channels.
-     * This happened with an SBLive card on a Windows ME box.
-     * It also happens on Win XP!
+    if( woc.wChannels == 0xFFFF || woc.wChannels < 1 || woc.wChannels > 255 ){
+        /* For Windows versions using WDM (possibly Windows 98 ME and later)
+         * the kernel mixer sits between the application and the driver. As a result,
+         * wave*GetDevCaps often kernel mixer channel counts, which are unlimited.
+         * When this happens we assume the device is stereo and set a flag
+         * so that other channel counts can be tried with OpenStream -- i.e. when
+         * device*ChannelCountIsKnown is false, OpenStream will try whatever
+         * channel count you supply.
+         * see also InitializeInputDeviceInfo() above.
      */
-    if( (deviceInfo->maxOutputChannels < 1) || (deviceInfo->maxOutputChannels > 256) )
-    {
-        PA_DEBUG(("Pa_GetDeviceInfo: Num output channels reported as %d! Changed to 2.\n", deviceInfo->maxOutputChannels ));
+
+        PA_DEBUG(("Pa_GetDeviceInfo: Num output channels reported as %d! Changed to 2.\n", woc.wChannels ));
         deviceInfo->maxOutputChannels = 2;
+        winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 0;
+    }else{
+        deviceInfo->maxOutputChannels = woc.wChannels;
+        winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1;
     }
 
+#ifdef PAWIN_USE_WDMKS_DEVICE_INFO
+    wdmksDeviceOutputChannelCountIsKnown = QueryWaveOutKSFilterMaxChannels( 
+			winMmeOutputDeviceId, &deviceInfo->maxOutputChannels );
+    if( wdmksDeviceOutputChannelCountIsKnown && !winMmeDeviceInfo->deviceOutputChannelCountIsKnown )
+        winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1;
+#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
+
     winMmeDeviceInfo->dwFormats = woc.dwFormats;
 
     DetectDefaultSampleRate( winMmeDeviceInfo, winMmeOutputDeviceId,
@@ -748,6 +937,8 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
     PaWinMmeDeviceInfo *deviceInfoArray;
     int deviceInfoInitializationSucceeded;
     PaTime defaultLowLatency, defaultHighLatency;
+    DWORD waveInPreferredDevice, waveOutPreferredDevice;
+    DWORD preferredDeviceStatusFlags;
 
     winMmeHostApi = (PaWinMmeHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinMmeHostApiRepresentation) );
     if( !winMmeHostApi )
@@ -779,6 +970,19 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
     winMmeHostApi->inputDeviceCount = 0;
     winMmeHostApi->outputDeviceCount = 0;
 
+#if !defined(DRVM_MAPPER_PREFERRED_GET)
+/* DRVM_MAPPER_PREFERRED_GET is defined in mmddk.h but we avoid a dependency on the DDK by defining it here */
+#define DRVM_MAPPER_PREFERRED_GET    (0x2000+21)
+#endif
+
+    /* the following calls assume that if wave*Message fails the preferred device parameter won't be modified */
+    preferredDeviceStatusFlags = 0;
+    waveInPreferredDevice = -1;
+    waveInMessage( (HWAVEIN)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveInPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags );
+
+    preferredDeviceStatusFlags = 0;
+    waveOutPreferredDevice = -1;
+    waveOutMessage( (HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveOutPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags );
 
     maximumPossibleDeviceCount = 0;
 
@@ -830,7 +1034,9 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                 deviceInfo->hostApi = hostApiIndex;
 
                 deviceInfo->maxInputChannels = 0;
+                wmmeDeviceInfo->deviceInputChannelCountIsKnown = 1;
                 deviceInfo->maxOutputChannels = 0;
+                wmmeDeviceInfo->deviceOutputChannelCountIsKnown = 1;
 
                 deviceInfo->defaultLowInputLatency = defaultLowLatency;
                 deviceInfo->defaultLowOutputLatency = defaultLowLatency;
@@ -843,8 +1049,14 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                     goto error;
 
                 if( deviceInfoInitializationSucceeded ){
-                    if( (*hostApi)->info.defaultInputDevice == paNoDevice )
+                    if( (*hostApi)->info.defaultInputDevice == paNoDevice ){
+                        /* if there is currently no default device, use the first one available */
                         (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount;
+                    
+                    }else if( winMmeDeviceId == waveInPreferredDevice ){
+                        /* set the default device to the system preferred device */
+                        (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount;
+                    }
 
                     winMmeHostApi->winMmeDeviceIds[ (*hostApi)->info.deviceCount ] = winMmeDeviceId;
                     (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo;
@@ -865,7 +1077,9 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                 deviceInfo->hostApi = hostApiIndex;
 
                 deviceInfo->maxInputChannels = 0;
+                wmmeDeviceInfo->deviceInputChannelCountIsKnown = 1;
                 deviceInfo->maxOutputChannels = 0;
+                wmmeDeviceInfo->deviceOutputChannelCountIsKnown = 1;
 
                 deviceInfo->defaultLowInputLatency = defaultLowLatency;
                 deviceInfo->defaultLowOutputLatency = defaultLowLatency;
@@ -878,9 +1092,15 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                     goto error;
 
                 if( deviceInfoInitializationSucceeded ){
-                    if( (*hostApi)->info.defaultOutputDevice == paNoDevice )
+                    if( (*hostApi)->info.defaultOutputDevice == paNoDevice ){
+                        /* if there is currently no default device, use the first one available */
                         (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount;
 
+                    }else if( winMmeDeviceId == waveOutPreferredDevice ){
+                        /* set the default device to the system preferred device */
+                        (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount;
+                    }
+
                     winMmeHostApi->winMmeDeviceIds[ (*hostApi)->info.deviceCount ] = winMmeDeviceId;
                     (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo;
 
@@ -891,7 +1111,6 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
         }
     }
     
-
     InitializeDefaultDeviceIdsFromEnv( winMmeHostApi );
 
     (*hostApi)->Terminate = Terminate;
@@ -941,6 +1160,34 @@ static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 }
 
 
+static PaError IsInputChannelCountSupported( PaWinMmeDeviceInfo* deviceInfo, int channelCount )
+{
+    PaError result = paNoError;
+
+    if( channelCount > 0
+            && deviceInfo->deviceInputChannelCountIsKnown
+            && channelCount > deviceInfo->inheritedDeviceInfo.maxInputChannels ){
+
+        result = paInvalidChannelCount; 
+    }
+
+    return result;
+}
+
+static PaError IsOutputChannelCountSupported( PaWinMmeDeviceInfo* deviceInfo, int channelCount )
+{
+    PaError result = paNoError;
+
+    if( channelCount > 0
+            && deviceInfo->deviceOutputChannelCountIsKnown
+            && channelCount > deviceInfo->inheritedDeviceInfo.maxOutputChannels ){
+
+        result = paInvalidChannelCount; 
+    }
+
+    return result;
+}
+
 static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
@@ -985,13 +1232,19 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                 inputDeviceInfo = hostApi->deviceInfos[ inputStreamInfo->devices[i].device ];
 
                 /* check that input device can support inputChannelCount */
-                if( inputStreamInfo->devices[i].channelCount <= 0
-                        || inputStreamInfo->devices[i].channelCount > inputDeviceInfo->maxInputChannels )
+                if( inputStreamInfo->devices[i].channelCount < 1 )
                     return paInvalidChannelCount;
 
+                paerror = IsInputChannelCountSupported( (PaWinMmeDeviceInfo*)inputDeviceInfo, 
+                        inputStreamInfo->devices[i].channelCount );
+                if( paerror != paNoError )
+                    return paerror;
+
                 /* test for valid sample rate, see comment above */
                 winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputStreamInfo->devices[i].device );
-                paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, winMmeInputDeviceId, inputStreamInfo->devices[i].channelCount, sampleRate );
+                paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, 
+                        winMmeInputDeviceId, inputStreamInfo->devices[i].channelCount, sampleRate, 
+                        ((inputStreamInfo) ? inputStreamInfo->flags : 0) );
                 if( paerror != paNoError )
                     return paInvalidSampleRate;
             }
@@ -1007,12 +1260,15 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
             inputDeviceInfo = hostApi->deviceInfos[ inputParameters->device ];
 
             /* check that input device can support inputChannelCount */
-            if( inputChannelCount > inputDeviceInfo->maxInputChannels )
-                return paInvalidChannelCount;
+            paerror = IsInputChannelCountSupported( (PaWinMmeDeviceInfo*)inputDeviceInfo, inputChannelCount );
+            if( paerror != paNoError )
+                return paerror;
 
             /* test for valid sample rate, see comment above */
             winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputParameters->device );
-            paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, winMmeInputDeviceId, inputChannelCount, sampleRate );
+            paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, 
+                    winMmeInputDeviceId, inputChannelCount, sampleRate,
+                    ((inputStreamInfo) ? inputStreamInfo->flags : 0) );
             if( paerror != paNoError )
                 return paInvalidSampleRate;
         }
@@ -1040,13 +1296,19 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                 outputDeviceInfo = hostApi->deviceInfos[ outputStreamInfo->devices[i].device ];
 
                 /* check that output device can support outputChannelCount */
-                if( outputStreamInfo->devices[i].channelCount <= 0
-                        || outputStreamInfo->devices[i].channelCount > outputDeviceInfo->maxOutputChannels )
+                if( outputStreamInfo->devices[i].channelCount < 1 )
                     return paInvalidChannelCount;
 
+                paerror = IsOutputChannelCountSupported( (PaWinMmeDeviceInfo*)outputDeviceInfo, 
+                        outputStreamInfo->devices[i].channelCount );
+                if( paerror != paNoError )
+                    return paerror;
+
                 /* test for valid sample rate, see comment above */
                 winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputStreamInfo->devices[i].device );
-                paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, winMmeOutputDeviceId, outputStreamInfo->devices[i].channelCount, sampleRate );
+                paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, 
+                        winMmeOutputDeviceId, outputStreamInfo->devices[i].channelCount, sampleRate,
+                        ((outputStreamInfo) ? outputStreamInfo->flags : 0) );
                 if( paerror != paNoError )
                     return paInvalidSampleRate;
             }
@@ -1062,12 +1324,15 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
             outputDeviceInfo = hostApi->deviceInfos[ outputParameters->device ];
 
             /* check that output device can support outputChannelCount */
-            if( outputChannelCount > outputDeviceInfo->maxOutputChannels )
-                return paInvalidChannelCount;
+            paerror = IsOutputChannelCountSupported( (PaWinMmeDeviceInfo*)outputDeviceInfo, outputChannelCount );
+            if( paerror != paNoError )
+                return paerror;
 
             /* test for valid sample rate, see comment above */
             winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputParameters->device );
-            paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, winMmeOutputDeviceId, outputChannelCount, sampleRate );
+            paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, 
+                    winMmeOutputDeviceId, outputChannelCount, sampleRate,
+                    ((outputStreamInfo) ? outputStreamInfo->flags : 0) );
             if( paerror != paNoError )
                 return paInvalidSampleRate;
         }
@@ -1491,9 +1756,10 @@ typedef struct
 static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers );
 static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers,
+        unsigned long winMmeSpecificFlags,
         unsigned long bytesPerHostSample,
         double sampleRate, PaWinMmeDeviceAndChannelCount *devices,
-        unsigned int deviceCount, int isInput );
+        unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput );
 static PaError TerminateWaveHandles( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, int isInput, int currentlyProcessingAnError );
 static PaError InitializeWaveHeaders( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers,
         unsigned long hostBufferCount,
@@ -1515,15 +1781,16 @@ static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionH
 
 static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers,
+        unsigned long winMmeSpecificFlags,
         unsigned long bytesPerHostSample,
         double sampleRate, PaWinMmeDeviceAndChannelCount *devices,
-        unsigned int deviceCount, int isInput )
+        unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput )
 {
     PaError result;
     MMRESULT mmresult;
-    unsigned long bytesPerFrame;
-    WAVEFORMATEX wfx;
-    signed int i;
+    signed int i, j;
+    PaSampleFormat sampleFormat;
+    int waveFormatTag;
 
     /* for error cleanup we expect that InitializeSingleDirectionHandlesAndBuffers()
         has already been called to zero some fields */       
@@ -1551,64 +1818,98 @@ static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostA
             ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i] = 0;
     }
 
-    wfx.wFormatTag = WAVE_FORMAT_PCM;
-    wfx.nSamplesPerSec = (DWORD) sampleRate;
-    wfx.cbSize = 0;
-    
+    /* @todo at the moment we only use 16 bit sample format */
+    sampleFormat = paInt16;
+    waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags );
+
     for( i = 0; i < (signed int)deviceCount; ++i )
     {
-        UINT winMmeDeviceId;
+        PaWinWaveFormat waveFormat;
+        UINT winMmeDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, devices[i].device );
+    
+        /* @todo: consider providing a flag or #define to not try waveformat extensible 
+           this could just initialize j to 1 the first time round. */
 
-        winMmeDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, devices[i].device );
-        wfx.nChannels = (WORD)devices[i].channelCount;
+        for( j = 0; j < 2; ++j )
+        {
+            if( j == 0 )
+            { 
+                /* first, attempt to open the device using WAVEFORMATEXTENSIBLE, 
+                    if this fails we fall back to WAVEFORMATEX */
 
-        bytesPerFrame = wfx.nChannels * bytesPerHostSample;
+                PaWin_InitializeWaveFormatExtensible( &waveFormat, devices[i].channelCount, 
+                        sampleFormat, waveFormatTag, sampleRate, channelMask );
 
-        wfx.nAvgBytesPerSec = (DWORD)(bytesPerFrame * sampleRate);
-        wfx.nBlockAlign = (WORD)bytesPerFrame;
-        wfx.wBitsPerSample = (WORD)((bytesPerFrame/wfx.nChannels) * 8);
+            }
+            else
+            {
+                /* retry with WAVEFORMATEX */
 
-        /* REVIEW: consider not firing an event for input when a full duplex
-            stream is being used. this would probably depend on the
-            neverDropInput flag. */
+                PaWin_InitializeWaveFormatEx( &waveFormat, devices[i].channelCount, 
+                        sampleFormat, waveFormatTag, sampleRate );
+            }
 
-        if( isInput )
-            mmresult = waveInOpen( &((HWAVEIN*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, &wfx,
+            /* REVIEW: consider not firing an event for input when a full duplex
+                stream is being used. this would probably depend on the
+                neverDropInput flag. */
+
+            if( isInput )
+            {
+                mmresult = waveInOpen( &((HWAVEIN*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, 
+                                    (WAVEFORMATEX*)&waveFormat,
                                (DWORD_PTR)handlesAndBuffers->bufferEvent, (DWORD_PTR)0, CALLBACK_EVENT );
-        else
-            mmresult = waveOutOpen( &((HWAVEOUT*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, &wfx,
+            }
+            else
+            {
+                mmresult = waveOutOpen( &((HWAVEOUT*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, 
+                                    (WAVEFORMATEX*)&waveFormat,
                                 (DWORD_PTR)handlesAndBuffers->bufferEvent, (DWORD_PTR)0, CALLBACK_EVENT );
+            }
 
-        if( mmresult != MMSYSERR_NOERROR )
-        {
-            switch( mmresult )
+            if( mmresult == MMSYSERR_NOERROR )
             {
-                case MMSYSERR_ALLOCATED:    /* Specified resource is already allocated. */
-                    result = paDeviceUnavailable;
-                    break;
-                case MMSYSERR_NODRIVER:	    /* No device driver is present. */
-                    result = paDeviceUnavailable;
-                    break;
-                case MMSYSERR_NOMEM:	    /* Unable to allocate or lock memory. */
-                    result = paInsufficientMemory;
-                    break;
+                break; /* success */
+            }
+            else if( j == 0 )
+            {
+                continue; /* try again with WAVEFORMATEX */
+            }
+            else
+            {
+                switch( mmresult )
+                {
+                    case MMSYSERR_ALLOCATED:    /* Specified resource is already allocated. */
+                        result = paDeviceUnavailable;
+                        break;
+                    case MMSYSERR_NODRIVER:	    /* No device driver is present. */
+                        result = paDeviceUnavailable;
+                        break;
+                    case MMSYSERR_NOMEM:	    /* Unable to allocate or lock memory. */
+                        result = paInsufficientMemory;
+                        break;
 
-                case MMSYSERR_BADDEVICEID:	/* Specified device identifier is out of range. */
-                    /* falls through */
-                case WAVERR_BADFORMAT:      /* Attempted to open with an unsupported waveform-audio format. */
-                    /* falls through */
-                default:
-                    result = paUnanticipatedHostError;
-                    if( isInput )
-                    {
-                        PA_MME_SET_LAST_WAVEIN_ERROR( mmresult );
-                    }
-                    else
-                    {
-                        PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult );
-                    }
+                    case MMSYSERR_BADDEVICEID:	/* Specified device identifier is out of range. */
+                        /* falls through */
+
+                    case WAVERR_BADFORMAT:      /* Attempted to open with an unsupported waveform-audio format. */
+                                                    /* This can also occur if we try to open the device with an unsupported
+                                                     * number of channels. This is attempted when device*ChannelCountIsKnown is
+                                                     * set to 0. 
+                                                     */
+                        /* falls through */
+                    default:
+                        result = paUnanticipatedHostError;
+                        if( isInput )
+                        {
+                            PA_MME_SET_LAST_WAVEIN_ERROR( mmresult );
+                        }
+                        else
+                        {
+                            PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult );
+                        }
+                }
+                goto error;
             }
-            goto error;
         }
     }
 
@@ -1829,7 +2130,7 @@ struct PaWinMmeStream
     /* Processing thread management -------------- */
     HANDLE abortEvent;
     HANDLE processingThread;
-    DWORD processingThreadId;
+    PA_THREAD_ID processingThreadId;
 
     char throttleProcessingThreadOnOverload; /* 0 -> don't throtte, non-0 -> throttle */
     int processingThreadPriority;
@@ -1850,6 +2151,7 @@ struct PaWinMmeStream
 static PaError ValidateWinMmeSpecificStreamInfo(
         const PaStreamParameters *streamParameters,
         const PaWinMmeStreamInfo *streamInfo,
+        unsigned long *winMmeSpecificFlags,
         char *throttleProcessingThreadOnOverload,
         unsigned long *deviceCount )
 {
@@ -1861,6 +2163,8 @@ static PaError ValidateWinMmeSpecificStreamInfo(
 	        return paIncompatibleHostApiSpecificStreamInfo;
 	    }
 
+        *winMmeSpecificFlags = streamInfo->flags;
+
 	    if( streamInfo->flags & paWinMmeDontThrottleOverloadedProcessingThread )
 	        *throttleProcessingThreadOnOverload = 0;
             
@@ -1926,12 +2230,20 @@ static PaError ValidateInputChannelCounts(
         unsigned long deviceCount )
 {
     unsigned int i;
+    PaWinMmeDeviceInfo *inputDeviceInfo;
+    PaError paerror;
 
 	for( i=0; i < deviceCount; ++i )
 	{
-		if( devices[i].channelCount < 1 || devices[i].channelCount
-					> hostApi->deviceInfos[ devices[i].device ]->maxInputChannels )
+        if( devices[i].channelCount < 1 )
         	return paInvalidChannelCount;
+
+        inputDeviceInfo = 
+                (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ];
+
+        paerror = IsInputChannelCountSupported( inputDeviceInfo, devices[i].channelCount );
+        if( paerror != paNoError )
+            return paerror;
 	}
 
     return paNoError;
@@ -1943,12 +2255,20 @@ static PaError ValidateOutputChannelCounts(
         unsigned long deviceCount )
 {
     unsigned int i;
+    PaWinMmeDeviceInfo *outputDeviceInfo;
+    PaError paerror;
 
 	for( i=0; i < deviceCount; ++i )
 	{
-		if( devices[i].channelCount < 1 || devices[i].channelCount
-					> hostApi->deviceInfos[ devices[i].device ]->maxOutputChannels )
+        if( devices[i].channelCount < 1 )
         	return paInvalidChannelCount;
+
+        outputDeviceInfo = 
+                (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ];
+
+        paerror = IsOutputChannelCountSupported( outputDeviceInfo, devices[i].channelCount );
+        if( paerror != paNoError )
+            return paerror;
 	}
 
     return paNoError;
@@ -1981,14 +2301,17 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     PaSampleFormat inputSampleFormat, outputSampleFormat;
     double suggestedInputLatency, suggestedOutputLatency;
     PaWinMmeStreamInfo *inputStreamInfo, *outputStreamInfo;
+    PaWinWaveFormatChannelMask inputChannelMask, outputChannelMask;
     unsigned long framesPerHostInputBuffer;
     unsigned long hostInputBufferCount;
     unsigned long framesPerHostOutputBuffer;
     unsigned long hostOutputBufferCount;
     unsigned long framesPerBufferProcessorCall;
     PaWinMmeDeviceAndChannelCount *inputDevices = 0;  /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */
+    unsigned long winMmeSpecificInputFlags = 0;
     unsigned long inputDeviceCount = 0;            
     PaWinMmeDeviceAndChannelCount *outputDevices = 0;
+    unsigned long winMmeSpecificOutputFlags = 0;
     unsigned long outputDeviceCount = 0;                /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */
     char throttleProcessingThreadOnOverload = 1;
 
@@ -2004,6 +2327,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 		/* validate input hostApiSpecificStreamInfo */
         inputStreamInfo = (PaWinMmeStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
 		result = ValidateWinMmeSpecificStreamInfo( inputParameters, inputStreamInfo,
+                &winMmeSpecificInputFlags,
 				&throttleProcessingThreadOnOverload,
 				&inputDeviceCount );
 		if( result != paNoError ) return result;
@@ -2019,6 +2343,18 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
         hostInputSampleFormat =
             PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, inputSampleFormat );
+
+        if( inputDeviceCount != 1 ){
+            /* always use direct speakers when using multi-device multichannel mode */
+            inputChannelMask = PAWIN_SPEAKER_DIRECTOUT;           
+        }
+        else
+        {
+            if( inputStreamInfo && inputStreamInfo->flags & paWinMmeUseChannelMask )
+                inputChannelMask = inputStreamInfo->channelMask;
+            else
+                inputChannelMask = PaWin_DefaultChannelMask( inputDevices[0].channelCount );
+        }
 	}
     else
     {
@@ -2041,6 +2377,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 		/* validate output hostApiSpecificStreamInfo */
         outputStreamInfo = (PaWinMmeStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
 		result = ValidateWinMmeSpecificStreamInfo( outputParameters, outputStreamInfo,
+                &winMmeSpecificOutputFlags,
 				&throttleProcessingThreadOnOverload,
 				&outputDeviceCount );
 		if( result != paNoError ) return result;
@@ -2056,6 +2393,18 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
         hostOutputSampleFormat =
             PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, outputSampleFormat );
+
+        if( outputDeviceCount != 1 ){
+            /* always use direct speakers when using multi-device multichannel mode */
+            outputChannelMask = PAWIN_SPEAKER_DIRECTOUT;           
+        }
+        else
+        {
+            if( outputStreamInfo && outputStreamInfo->flags & paWinMmeUseChannelMask )
+                outputChannelMask = outputStreamInfo->channelMask;
+            else
+                outputChannelMask = PaWin_DefaultChannelMask( outputDevices[0].channelCount );
+        }
     }
     else
     {
@@ -2078,6 +2427,14 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         return paInvalidFlag; /* unexpected platform specific flag */
 
 
+    /* always disable clipping and dithering if we are outputting a raw spdif stream */
+    if( (winMmeSpecificOutputFlags & paWinMmeWaveFormatDolbyAc3Spdif)
+            || (winMmeSpecificOutputFlags & paWinMmeWaveFormatWmaSpdif) ){
+
+        streamFlags = streamFlags | paClipOff | paDitherOff;
+    }
+
+
     result = CalculateBufferSettings( &framesPerHostInputBuffer, &hostInputBufferCount,
                 &framesPerHostOutputBuffer, &hostOutputBufferCount,
                 inputChannelCount, hostInputSampleFormat, suggestedInputLatency, inputStreamInfo,
@@ -2176,16 +2533,18 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     if( inputParameters )
     {
         result = InitializeWaveHandles( winMmeHostApi, &stream->input,
+                winMmeSpecificInputFlags,
                 stream->bufferProcessor.bytesPerHostInputSample, sampleRate,
-                inputDevices, inputDeviceCount, 1 /* isInput */ );
+                inputDevices, inputDeviceCount, inputChannelMask, 1 /* isInput */ );
         if( result != paNoError ) goto error;
     }
     
     if( outputParameters )
     {
         result = InitializeWaveHandles( winMmeHostApi, &stream->output,
+                winMmeSpecificOutputFlags,
                 stream->bufferProcessor.bytesPerHostOutputSample, sampleRate,
-                outputDevices, outputDeviceCount, 0 /* isInput */ );
+                outputDevices, outputDeviceCount, outputChannelMask, 0 /* isInput */ );
         if( result != paNoError ) goto error;
     }
 
@@ -2340,6 +2699,7 @@ static PaError AdvanceToNextInputBuffer( PaWinMmeStream *stream )
 
     for( i=0; i < stream->input.deviceCount; ++i )
     {
+        stream->input.waveHeaders[i][ stream->input.currentBufferIndex ].dwFlags &= ~WHDR_DONE;
         mmresult = waveInAddBuffer( ((HWAVEIN*)stream->input.waveHandles)[i],
                                     &stream->input.waveHeaders[i][ stream->input.currentBufferIndex ],
                                     sizeof(WAVEHDR) );
@@ -2436,7 +2796,7 @@ static PaError CatchUpOutputBuffers( PaWinMmeStream *stream )
 }
 
 
-static DWORD WINAPI ProcessingThreadProc( void *pArg )
+PA_THREAD_FUNC ProcessingThreadProc( void *pArg )
 {
     PaWinMmeStream *stream = (PaWinMmeStream *)pArg;
     HANDLE events[3];
@@ -2642,7 +3002,7 @@ static DWORD WINAPI ProcessingThreadProc( void *pArg )
                         for( i=0; i<stream->input.deviceCount; ++i )
                         {
                              /* we have stored the number of channels in the buffer in dwUser */
-                            int channelCount = stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser;
+                            int channelCount = (int)stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser;
                             
                             PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, channel,
                                     stream->input.waveHeaders[i][ hostInputBufferIndex ].lpData +
@@ -2663,7 +3023,7 @@ static DWORD WINAPI ProcessingThreadProc( void *pArg )
                         for( i=0; i<stream->output.deviceCount; ++i )
                         {
                             /* we have stored the number of channels in the buffer in dwUser */
-                            int channelCount = stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
+                            int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
 
                             PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel,
                                     stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData +
@@ -2866,6 +3226,7 @@ static PaError StartStream( PaStream *s )
         {
             for( j=0; j<stream->input.deviceCount; ++j )
             {
+                stream->input.waveHeaders[j][i].dwFlags &= ~WHDR_DONE;
                 mmresult = waveInAddBuffer( ((HWAVEIN*)stream->input.waveHandles)[j], &stream->input.waveHeaders[j][i], sizeof(WAVEHDR) );
                 if( mmresult != MMSYSERR_NOERROR )
                 {
@@ -2912,7 +3273,7 @@ static PaError StartStream( PaStream *s )
                     for( j=0; j<stream->output.deviceCount; ++j )
                     {
                         /* we have stored the number of channels in the buffer in dwUser */
-                        int channelCount = stream->output.waveHeaders[j][i].dwUser;
+                        int channelCount = (int)stream->output.waveHeaders[j][i].dwUser;
 
                         PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel,
                                 stream->output.waveHeaders[j][i].lpData +
@@ -2988,7 +3349,7 @@ static PaError StartStream( PaStream *s )
         if( result != paNoError ) goto error;
 
         /* Create thread that waits for audio buffers to be ready for processing. */
-        stream->processingThread = CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId );
+        stream->processingThread = CREATE_THREAD;
         if( !stream->processingThread )
         {
             result = paUnanticipatedHostError;
@@ -3120,7 +3481,7 @@ static PaError StopStream( PaStream *s )
                 for( i=0; i<stream->output.deviceCount; ++i )
                 {
                     /* we have stored the number of channels in the buffer in dwUser */
-                    int channelCount = stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
+                    int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
 
                     PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel,
                             stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData +
@@ -3344,7 +3705,7 @@ static PaError ReadStream( PaStream* s,
         }
         else
         {
-            userBuffer = alloca( sizeof(void*) * stream->bufferProcessor.inputChannelCount );
+            userBuffer = (void*)alloca( sizeof(void*) * stream->bufferProcessor.inputChannelCount );
             if( !userBuffer )
                 return paInsufficientMemory;
             for( i = 0; i<stream->bufferProcessor.inputChannelCount; ++i )
@@ -3372,7 +3733,7 @@ static PaError ReadStream( PaStream* s,
                 for( i=0; i<stream->input.deviceCount; ++i )
                 {
                     /* we have stored the number of channels in the buffer in dwUser */
-                    int channelCount = stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser;
+                    int channelCount = (int)stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser;
 
                     PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, channel,
                             stream->input.waveHeaders[i][ hostInputBufferIndex ].lpData +
@@ -3448,7 +3809,7 @@ static PaError WriteStream( PaStream* s,
         }
         else
         {
-            userBuffer = alloca( sizeof(void*) * stream->bufferProcessor.outputChannelCount );
+            userBuffer = (const void*)alloca( sizeof(void*) * stream->bufferProcessor.outputChannelCount );
             if( !userBuffer )
                 return paInsufficientMemory;
             for( i = 0; i<stream->bufferProcessor.outputChannelCount; ++i )
@@ -3477,7 +3838,7 @@ static PaError WriteStream( PaStream* s,
                 for( i=0; i<stream->output.deviceCount; ++i )
                 {
                     /* we have stored the number of channels in the buffer in dwUser */
-                    int channelCount = stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
+                    int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser;
 
                     PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel,
                             stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData +
diff --git a/portaudio/src/os/unix/pa_unix_hostapis.c b/portaudio/src/os/unix/pa_unix_hostapis.c
index d695e1b19..339e1b148 100644
--- a/portaudio/src/os/unix/pa_unix_hostapis.c
+++ b/portaudio/src/os/unix/pa_unix_hostapis.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_unix_hostapis.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_unix_hostapis.c 1413 2009-05-24 17:00:36Z aknudsen $
  * Portable Audio I/O Library UNIX initialization table
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -49,10 +49,26 @@ PaError PaOSS_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
 PaError PaSGI_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 /* Linux AudioScience HPI */
 PaError PaAsiHpi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 
+/** Note that on Linux, ALSA is placed before OSS so that the former is preferred over the latter.
+ */
 
 PaUtilHostApiInitializer *paHostApiInitializers[] =
     {
+#ifdef __linux__
+
+#ifdef PA_USE_ALSA
+        PaAlsa_Initialize,
+#endif
+
+#ifdef PA_USE_OSS
+        PaOSS_Initialize,
+#endif
+
+#else   /* __linux__ */
+
 #ifdef PA_USE_OSS
         PaOSS_Initialize,
 #endif
@@ -61,6 +77,8 @@ PaUtilHostApiInitializer *paHostApiInitializers[] =
         PaAlsa_Initialize,
 #endif
 
+#endif  /* __linux__ */
+
 #ifdef PA_USE_JACK
         PaJack_Initialize,
 #endif
@@ -72,6 +90,15 @@ PaUtilHostApiInitializer *paHostApiInitializers[] =
 #ifdef PA_USE_ASIHPI
         PaAsiHpi_Initialize,
 #endif
+
+#ifdef PA_USE_COREAUDIO
+        PaMacCore_Initialize,
+#endif
+
+#ifdef PA_USE_SKELETON
+        PaSkeleton_Initialize,
+#endif
+
         0   /* NULL terminated array */
     };
 
diff --git a/portaudio/src/os/unix/pa_unix_util.c b/portaudio/src/os/unix/pa_unix_util.c
index 1cb838752..18f806c50 100644
--- a/portaudio/src/os/unix/pa_unix_util.c
+++ b/portaudio/src/os/unix/pa_unix_util.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_unix_util.c 1232 2007-06-16 14:49:43Z rossb $
+ * $Id: pa_unix_util.c 1510 2010-06-10 08:05:29Z dmitrykos $
  * Portable Audio I/O Library
  * UNIX platform-specific support functions
  *
@@ -51,6 +51,13 @@
 #include <math.h>
 #include <errno.h>
 
+#if defined(__APPLE__) && !defined(HAVE_MACH_ABSOLUTE_TIME)
+#define HAVE_MACH_ABSOLUTE_TIME
+#endif
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+#include <mach/mach_time.h>
+#endif
+
 #include "pa_util.h"
 #include "pa_unix_util.h"
 #include "pa_debugprint.h"
@@ -118,27 +125,47 @@ void Pa_Sleep( long msec )
 #endif
 }
 
-/*            *** NOT USED YET: ***
-static int usePerformanceCounter_;
-static double microsecondsPerTick_;
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+/*
+    Discussion on the CoreAudio mailing list suggests that calling
+    gettimeofday (or anything else in the BSD layer) is not real-time
+    safe, so we use mach_absolute_time on OSX. This implementation is 
+    based on these two links:
+
+    Technical Q&A QA1398 - Mach Absolute Time Units
+    http://developer.apple.com/mac/library/qa/qa2004/qa1398.html
+
+    Tutorial: Performance and Time.
+    http://www.macresearch.org/tutorial_performance_and_time
 */
 
+/* Scaler to convert the result of mach_absolute_time to seconds */
+static double machSecondsConversionScaler_ = 0.0; 
+#endif
+
 void PaUtil_InitializeClock( void )
 {
-    /* TODO */
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+    mach_timebase_info_data_t info;
+    kern_return_t err = mach_timebase_info( &info );
+    if( err == 0  )
+        machSecondsConversionScaler_ = 1e-9 * (double) info.numer / (double) info.denom;
+#endif
 }
 
 
 PaTime PaUtil_GetTime( void )
 {
-#ifdef HAVE_CLOCK_GETTIME
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+    return mach_absolute_time() * machSecondsConversionScaler_;
+#elif defined(HAVE_CLOCK_GETTIME)
     struct timespec tp;
     clock_gettime(CLOCK_REALTIME, &tp);
-    return (PaTime)(tp.tv_sec + tp.tv_nsec / 1.e9);
+    return (PaTime)(tp.tv_sec + tp.tv_nsec * 1e-9);
 #else
     struct timeval tv;
     gettimeofday( &tv, NULL );
-    return (PaTime) tv.tv_usec / 1000000. + tv.tv_sec;
+    return (PaTime) tv.tv_usec * 1e-6 + tv.tv_sec;
 #endif
 }
 
@@ -166,9 +193,15 @@ PaError PaUtil_CancelThreading( PaUtilThreading *threading, int wait, PaError *e
     if( exitResult )
         *exitResult = paNoError;
 
+    /* If pthread_cancel is not supported (Android platform) whole this function can lead to indefinite waiting if 
+       working thread (callbackThread) has'n received any stop signals from outside, please keep 
+       this in mind when considering using PaUtil_CancelThreading
+    */
+#ifdef PTHREAD_CANCELED
     /* Only kill the thread if it isn't in the process of stopping (flushing adaptation buffers) */
     if( !wait )
         pthread_cancel( threading->callbackThread );   /* XXX: Safe to call this if the thread has exited on its own? */
+#endif
     pthread_join( threading->callbackThread, &pret );
 
 #ifdef PTHREAD_CANCELED
@@ -190,7 +223,7 @@ PaError PaUtil_CancelThreading( PaUtilThreading *threading, int wait, PaError *e
 /* paUnixMainThread 
  * We have to be a bit careful with defining this global variable,
  * as explained below. */
-#ifdef __apple__
+#ifdef __APPLE__
 /* apple/gcc has a "problem" with global vars and dynamic libs.
    Initializing it seems to fix the problem.
    Described a bit in this thread:
@@ -400,12 +433,19 @@ PaError PaUnixThread_Terminate( PaUnixThread* self, int wait, PaError* exitResul
     {
         PA_DEBUG(( "%s: Canceling thread %d\n", __FUNCTION__, self->thread ));
         /* XXX: Safe to call this if the thread has exited on its own? */
+#ifdef PTHREAD_CANCELED
         pthread_cancel( self->thread );
+#endif
     }
     PA_DEBUG(( "%s: Joining thread %d\n", __FUNCTION__, self->thread ));
     PA_ENSURE_SYSTEM( pthread_join( self->thread, &pret ), 0 );
 
+#ifdef PTHREAD_CANCELED
     if( pret && PTHREAD_CANCELED != pret )
+#else
+    /* !wait means the thread may have been canceled */
+    if( pret && wait )
+#endif
     {
         if( exitResult )
         {
@@ -479,9 +519,11 @@ PaError PaUnixMutex_Terminate( PaUnixMutex* self )
 PaError PaUnixMutex_Lock( PaUnixMutex* self )
 {
     PaError result = paNoError;
-    int oldState;
     
+#ifdef PTHREAD_CANCEL
+	int oldState;
     PA_ENSURE_SYSTEM( pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, &oldState ), 0 );
+#endif
     PA_ENSURE_SYSTEM( pthread_mutex_lock( &self->mtx ), 0 );
 
 error:
@@ -495,10 +537,12 @@ error:
 PaError PaUnixMutex_Unlock( PaUnixMutex* self )
 {
     PaError result = paNoError;
-    int oldState;
 
     PA_ENSURE_SYSTEM( pthread_mutex_unlock( &self->mtx ), 0 );
+#ifdef PTHREAD_CANCEL
+	int oldState;
     PA_ENSURE_SYSTEM( pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, &oldState ), 0 );
+#endif
 
 error:
     return result;
diff --git a/portaudio/src/os/win/pa_win_hostapis.c b/portaudio/src/os/win/pa_win_hostapis.c
index 83f1e9141..df084cbfa 100644
--- a/portaudio/src/os/win/pa_win_hostapis.c
+++ b/portaudio/src/os/win/pa_win_hostapis.c
@@ -1,9 +1,9 @@
 /*
- * $Id: pa_win_hostapis.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_win_hostapis.c 1453 2010-02-16 09:46:08Z dmitrykos $
  * Portable Audio I/O Library Windows initialization table
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -39,7 +39,7 @@
 /** @file
  @ingroup win_src
 
-    Win32 host API initialization function table.
+    @brief Win32 host API initialization function table.
 
     @todo Consider using PA_USE_WMME etc instead of PA_NO_WMME. This is what
     the Unix version does, we should consider being consistent.
@@ -58,7 +58,7 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
 PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
-PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 
 #ifdef __cplusplus
 }
@@ -80,17 +80,17 @@ PaUtilHostApiInitializer *paHostApiInitializers[] =
         PaAsio_Initialize,
 #endif
 
-/*
 #ifndef PA_NO_WASAPI
-		PaWinWasapi_Initialize,
+		PaWasapi_Initialize,
 #endif
 
+/*
 #ifndef PA_NO_WDMKS
        PaWinWdm_Initialize,
 #endif
 */
 
-        PaSkeleton_Initialize, /* just for testing */
+        //PaSkeleton_Initialize, /* just for testing */
 
         0   /* NULL terminated array */
     };
diff --git a/portaudio/src/os/win/pa_win_util.c b/portaudio/src/os/win/pa_win_util.c
index 2f0cdf343..45eb26867 100644
--- a/portaudio/src/os/win/pa_win_util.c
+++ b/portaudio/src/os/win/pa_win_util.c
@@ -1,10 +1,10 @@
 /*
- * $Id: pa_win_util.c 1197 2007-05-04 13:07:10Z gordon_gidluck $
+ * $Id: pa_win_util.c 1437 2009-12-10 08:10:08Z rossb $
  * Portable Audio I/O Library
  * Win32 platform-specific support functions
  *
  * Based on the Open Source API proposed by Ross Bencina
- * Copyright (c) 1999-2000 Ross Bencina
+ * Copyright (c) 1999-2008 Ross Bencina
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -40,7 +40,7 @@
 /** @file
  @ingroup win_src
 
- Win32 platform-specific support functions.
+ @brief Win32 implementation of platform-specific PaUtil support functions.
 
     @todo Implement workaround for QueryPerformanceCounter() skipping forward
     bug. (see msdn kb Q274323).
@@ -51,6 +51,10 @@
 
 #include "pa_util.h"
 
+#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */
+#pragma comment( lib, "winmm.lib" )
+#endif
+
 
 /*
    Track memory allocations to avoid leaks.
diff --git a/portaudio/src/os/win/pa_win_waveformat.c b/portaudio/src/os/win/pa_win_waveformat.c
new file mode 100644
index 000000000..bbf616c34
--- /dev/null
+++ b/portaudio/src/os/win/pa_win_waveformat.c
@@ -0,0 +1,154 @@
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WAVEFORMAT* data structure utilities
+ * portaudio.h should be included before this file.
+ *
+ * Copyright (c) 2007 Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include "portaudio.h"
+#include "pa_win_waveformat.h"
+
+
+#if !defined(WAVE_FORMAT_EXTENSIBLE)
+#define  WAVE_FORMAT_EXTENSIBLE         0xFFFE
+#endif
+
+static GUID pawin_ksDataFormatSubtypeGuidBase = 
+	{ (USHORT)(WAVE_FORMAT_PCM), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 };
+
+
+int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat )
+{
+    if( sampleFormat == paFloat32 )
+        return PAWIN_WAVE_FORMAT_IEEE_FLOAT;
+    
+    return PAWIN_WAVE_FORMAT_PCM;
+}
+
+
+void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate )
+{
+	WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat;
+    int bytesPerSample = Pa_GetSampleSize(sampleFormat);
+	unsigned long bytesPerFrame = numChannels * bytesPerSample;
+	
+    waveFormatEx->wFormatTag = waveFormatTag;
+	waveFormatEx->nChannels = (WORD)numChannels;
+	waveFormatEx->nSamplesPerSec = (DWORD)sampleRate;
+	waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame;
+	waveFormatEx->nBlockAlign = (WORD)bytesPerFrame;
+	waveFormatEx->wBitsPerSample = bytesPerSample * 8;
+	waveFormatEx->cbSize = 0;
+}
+
+
+void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
+		PaWinWaveFormatChannelMask channelMask )
+{
+	WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat;
+    int bytesPerSample = Pa_GetSampleSize(sampleFormat);
+	unsigned long bytesPerFrame = numChannels * bytesPerSample;
+    GUID guid;
+
+	waveFormatEx->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
+	waveFormatEx->nChannels = (WORD)numChannels;
+	waveFormatEx->nSamplesPerSec = (DWORD)sampleRate;
+	waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame;
+	waveFormatEx->nBlockAlign = (WORD)bytesPerFrame;
+	waveFormatEx->wBitsPerSample = bytesPerSample * 8;
+	waveFormatEx->cbSize = 22;
+
+	*((WORD*)&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE]) =
+			waveFormatEx->wBitsPerSample;
+
+	*((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask;
+		
+    guid = pawin_ksDataFormatSubtypeGuidBase;
+    guid.Data1 = (USHORT)waveFormatTag;
+    *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid;
+}
+
+
+PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels )
+{
+	switch( numChannels ){
+		case 1:
+			return PAWIN_SPEAKER_MONO;
+		case 2:
+			return PAWIN_SPEAKER_STEREO; 
+		case 3:
+            return PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_FRONT_RIGHT;
+		case 4:
+			return PAWIN_SPEAKER_QUAD;
+		case 5:
+            return PAWIN_SPEAKER_QUAD | PAWIN_SPEAKER_FRONT_CENTER;
+		case 6:
+            /* The meaning of the PAWIN_SPEAKER_5POINT1 flag has changed over time:
+                http://msdn2.microsoft.com/en-us/library/aa474707.aspx
+               We use PAWIN_SPEAKER_5POINT1 (not PAWIN_SPEAKER_5POINT1_SURROUND)
+               because on some cards (eg Audigy) PAWIN_SPEAKER_5POINT1_SURROUND 
+               results in a virtual mixdown placing the rear output in the 
+               front _and_ rear speakers.
+            */
+			return PAWIN_SPEAKER_5POINT1; 
+        /* case 7: */
+		case 8:
+			return PAWIN_SPEAKER_7POINT1;
+	}
+
+    /* Apparently some Audigy drivers will output silence 
+       if the direct-out constant (0) is used. So this is not ideal.    
+    */
+	return  PAWIN_SPEAKER_DIRECTOUT;
+
+    /* Note that Alec Rogers proposed the following as an alternate method to 
+        generate the default channel mask, however it doesn't seem to be an improvement
+        over the above, since some drivers will matrix outputs mapping to non-present
+        speakers accross multiple physical speakers.
+
+        if(nChannels==1) {
+            pwfFormat->dwChannelMask = SPEAKER_FRONT_CENTER;
+        }
+        else {
+            pwfFormat->dwChannelMask = 0;
+            for(i=0; i<nChannels; i++)
+                pwfFormat->dwChannelMask = (pwfFormat->dwChannelMask << 1) | 0x1;
+        }
+    */
+}
diff --git a/portaudio/src/os/win/pa_win_wdmks_utils.c b/portaudio/src/os/win/pa_win_wdmks_utils.c
new file mode 100644
index 000000000..a830f76df
--- /dev/null
+++ b/portaudio/src/os/win/pa_win_wdmks_utils.c
@@ -0,0 +1,297 @@
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WDM KS utilities
+ *
+ * Copyright (c) 1999 - 2007 Andrew Baldwin, Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+#include <windows.h>
+#include <mmreg.h>
+#ifndef WAVE_FORMAT_IEEE_FLOAT
+    #define WAVE_FORMAT_IEEE_FLOAT 0x0003   // MinGW32 does not define this
+#endif    
+#ifndef _WAVEFORMATEXTENSIBLE_
+    #define _WAVEFORMATEXTENSIBLE_          // MinGW32 does not define this
+#endif
+#ifndef _INC_MMREG
+    #define _INC_MMREG                      // for STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
+#endif
+#include <winioctl.h>						// MinGW32 does not define this automatically
+#include <ks.h>
+#include <ksmedia.h>
+#include <stdio.h>                          // just for some development printfs
+
+#include "portaudio.h"
+#include "pa_util.h"
+#include "pa_win_wdmks_utils.h"
+
+#if !defined(PA_WDMKS_NO_KSGUID_LIB) && !defined(PAWIN_WDMKS_NO_KSGUID_LIB)
+    #if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
+        #pragma comment( lib, "ksguid.lib" )
+    #endif
+    #define pa_KSDATAFORMAT_TYPE_AUDIO            KSDATAFORMAT_TYPE_AUDIO
+    #define pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT    KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
+    #define pa_KSDATAFORMAT_SUBTYPE_PCM           KSDATAFORMAT_SUBTYPE_PCM
+    #define pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX  KSDATAFORMAT_SUBTYPE_WAVEFORMATEX
+    #define pa_KSMEDIUMSETID_Standard             KSMEDIUMSETID_Standard
+    #define pa_KSINTERFACESETID_Standard          KSINTERFACESETID_Standard
+    #define pa_KSPROPSETID_Pin                    KSPROPSETID_Pin
+#else
+    static const GUID pa_KSDATAFORMAT_TYPE_AUDIO            = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
+    static const GUID pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT    = { STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT };
+    static const GUID pa_KSDATAFORMAT_SUBTYPE_PCM           = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
+    static const GUID pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX  = { STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX };
+    static const GUID pa_KSMEDIUMSETID_Standard             = { STATIC_KSMEDIUMSETID_Standard };
+    static const GUID pa_KSINTERFACESETID_Standard          = { STATIC_KSINTERFACESETID_Standard };
+    static const GUID pa_KSPROPSETID_Pin                    = { STATIC_KSPROPSETID_Pin };
+#endif
+
+
+#define pa_IS_VALID_WAVEFORMATEX_GUID(Guid)\
+    (!memcmp(((PUSHORT)&pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
+
+
+
+static PaError WdmGetPinPropertySimple(
+    HANDLE  handle,
+    unsigned long pinId,
+    unsigned long property,
+    void* value,
+    unsigned long valueSize )
+{
+    DWORD bytesReturned;
+    KSP_PIN ksPProp;
+    ksPProp.Property.Set = pa_KSPROPSETID_Pin;
+    ksPProp.Property.Id = property;
+    ksPProp.Property.Flags = KSPROPERTY_TYPE_GET;
+    ksPProp.PinId = pinId;
+    ksPProp.Reserved = 0;
+
+    if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN),
+            value, valueSize, &bytesReturned, NULL ) == 0 || bytesReturned != valueSize )
+    {
+        return paUnanticipatedHostError;
+    }
+    else
+    {
+        return paNoError;
+    }
+}
+
+
+static PaError WdmGetPinPropertyMulti(
+    HANDLE handle,
+    unsigned long pinId,
+    unsigned long property,
+    KSMULTIPLE_ITEM** ksMultipleItem)
+{
+    unsigned long multipleItemSize = 0;
+    KSP_PIN ksPProp;
+    DWORD bytesReturned;
+
+    *ksMultipleItem = 0;
+
+    ksPProp.Property.Set = pa_KSPROPSETID_Pin;
+    ksPProp.Property.Id = property;
+    ksPProp.Property.Flags = KSPROPERTY_TYPE_GET;
+    ksPProp.PinId = pinId;
+    ksPProp.Reserved = 0;
+
+    if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp.Property,
+            sizeof(KSP_PIN), NULL, 0, &multipleItemSize, NULL ) == 0 && GetLastError() != ERROR_MORE_DATA )
+    {
+        return paUnanticipatedHostError;
+    }
+
+    *ksMultipleItem = (KSMULTIPLE_ITEM*)PaUtil_AllocateMemory( multipleItemSize );
+    if( !*ksMultipleItem )
+    {
+        return paInsufficientMemory;
+    }
+
+    if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN),
+            (void*)*ksMultipleItem,  multipleItemSize, &bytesReturned, NULL ) == 0 || bytesReturned != multipleItemSize )
+    {
+        PaUtil_FreeMemory( ksMultipleItem );
+        return paUnanticipatedHostError;
+    }
+
+    return paNoError;
+}
+
+
+static int GetKSFilterPinCount( HANDLE deviceHandle )
+{
+    DWORD result;
+
+    if( WdmGetPinPropertySimple( deviceHandle, 0, KSPROPERTY_PIN_CTYPES, &result, sizeof(result) ) == paNoError ){
+        return result;
+    }else{
+        return 0;
+    }
+}
+
+
+static KSPIN_COMMUNICATION GetKSFilterPinPropertyCommunication( HANDLE deviceHandle, int pinId )
+{
+    KSPIN_COMMUNICATION result;
+
+    if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_COMMUNICATION, &result, sizeof(result) ) == paNoError ){
+        return result;
+    }else{
+        return KSPIN_COMMUNICATION_NONE;
+    }
+}
+
+
+static KSPIN_DATAFLOW GetKSFilterPinPropertyDataflow( HANDLE deviceHandle, int pinId )
+{
+    KSPIN_DATAFLOW result;
+
+    if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_DATAFLOW, &result, sizeof(result) ) == paNoError ){
+        return result;
+    }else{
+        return (KSPIN_DATAFLOW)0;
+    }
+}
+
+
+static int KSFilterPinPropertyIdentifiersInclude( 
+        HANDLE deviceHandle, int pinId, unsigned long property, const GUID *identifierSet, unsigned long identifierId  )
+{
+    KSMULTIPLE_ITEM* item = NULL;
+    KSIDENTIFIER* identifier;
+    int i;
+    int result = 0;
+
+    if( WdmGetPinPropertyMulti( deviceHandle, pinId, property, &item) != paNoError )
+        return 0;
+    
+    identifier = (KSIDENTIFIER*)(item+1);
+
+    for( i = 0; i < (int)item->Count; i++ )
+    {
+        if( !memcmp( (void*)&identifier[i].Set, (void*)identifierSet, sizeof( GUID ) ) &&
+           ( identifier[i].Id == identifierId ) )
+        {
+            result = 1;
+            break;
+        }
+    }
+
+    PaUtil_FreeMemory( item );
+
+    return result;
+}
+
+
+/* return the maximum channel count supported by any pin on the device. 
+   if isInput is non-zero we query input pins, otherwise output pins.
+*/
+int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput )
+{
+    HANDLE deviceHandle;
+	ULONG i;
+    int pinCount, pinId;
+    int result = 0;
+    KSPIN_DATAFLOW requiredDataflowDirection = (isInput ? KSPIN_DATAFLOW_OUT : KSPIN_DATAFLOW_IN );
+    
+    if( !wcharDevicePath )
+        return 0;
+
+    deviceHandle = CreateFileW( (LPCWSTR)wcharDevicePath, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
+    if( deviceHandle == INVALID_HANDLE_VALUE )
+        return 0;
+
+    pinCount = GetKSFilterPinCount( deviceHandle );
+    for( pinId = 0; pinId < pinCount; ++pinId )
+    {
+        KSPIN_COMMUNICATION communication = GetKSFilterPinPropertyCommunication( deviceHandle, pinId );
+        KSPIN_DATAFLOW dataflow = GetKSFilterPinPropertyDataflow( deviceHandle, pinId );
+        if( ( dataflow == requiredDataflowDirection ) &&
+                (( communication == KSPIN_COMMUNICATION_SINK) ||
+                 ( communication == KSPIN_COMMUNICATION_BOTH)) 
+             && ( KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, 
+                    KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_STREAMING )
+                || KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, 
+                    KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_LOOPED_STREAMING ) )
+             && KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, 
+                    KSPROPERTY_PIN_MEDIUMS, &pa_KSMEDIUMSETID_Standard, KSMEDIUM_STANDARD_DEVIO ) )
+         {
+            KSMULTIPLE_ITEM* item = NULL;
+            if( WdmGetPinPropertyMulti( deviceHandle, pinId, KSPROPERTY_PIN_DATARANGES, &item ) == paNoError )
+            {
+                KSDATARANGE *dataRange = (KSDATARANGE*)(item+1);
+
+                for( i=0; i < item->Count; ++i ){
+
+                    if( pa_IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat)
+                            || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_PCM, sizeof(GUID) ) == 0
+                            || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, sizeof(GUID) ) == 0
+                            || ( ( memcmp( (void*)&dataRange->MajorFormat, (void*)&pa_KSDATAFORMAT_TYPE_AUDIO, sizeof(GUID) ) == 0 )
+                                && ( memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof(GUID) ) == 0 ) ) )
+                    {
+                        KSDATARANGE_AUDIO *dataRangeAudio = (KSDATARANGE_AUDIO*)dataRange;
+                        
+                        /*
+                        printf( ">>> %d %d %d %d %S\n", isInput, dataflow, communication, dataRangeAudio->MaximumChannels, devicePath );
+                       
+                        if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, sizeof(GUID) ) == 0 )
+                            printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\n" );
+                        else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_DSOUND, sizeof(GUID) ) == 0 )
+                            printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_DSOUND\n" );
+                        else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WILDCARD, sizeof(GUID) ) == 0 )
+                            printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WILDCARD\n" );
+                        else
+                            printf( "\tspecifier: ?\n" );
+                        */
+
+                        /*
+                            We assume that very high values for MaximumChannels are not useful and indicate
+                            that the driver isn't prepared to tell us the real number of channels which it supports.
+                        */
+                        if( dataRangeAudio->MaximumChannels  < 0xFFFFUL && (int)dataRangeAudio->MaximumChannels > result )
+                            result = (int)dataRangeAudio->MaximumChannels;
+                    }
+                    
+                    dataRange = (KSDATARANGE*)( ((char*)dataRange) + dataRange->FormatSize);
+                }
+
+                PaUtil_FreeMemory( item );
+            }
+        }
+    }
+    
+    CloseHandle( deviceHandle );
+    return result;
+}
diff --git a/portaudio/src/os/win/pa_win_wdmks_utils.h b/portaudio/src/os/win/pa_win_wdmks_utils.h
new file mode 100644
index 000000000..f54035f45
--- /dev/null
+++ b/portaudio/src/os/win/pa_win_wdmks_utils.h
@@ -0,0 +1,65 @@
+#ifndef PA_WIN_WDMKS_UTILS_H
+#define PA_WIN_WDMKS_UTILS_H
+
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WDM KS utilities
+ *
+ * Copyright (c) 1999 - 2007 Ross Bencina, Andrew Baldwin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @brief Utilities for working with the Windows WDM KS API
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+    Query for the maximum number of channels supported by any pin of the
+    specified device. Returns 0 if the query fails for any reason.
+
+    @param wcharDevicePath A system level PnP interface path, supplied as a WCHAR unicode string.
+    Declard as void* to avoid introducing a dependency on wchar_t here.
+
+    @param isInput A flag specifying whether to query for input (non-zero) or output (zero) channels.
+*/
+int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput );
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WDMKS_UTILS_H */
\ No newline at end of file
diff --git a/portaudio/src/os/win/pa_x86_plain_converters.c b/portaudio/src/os/win/pa_x86_plain_converters.c
index 63b058dfa..4fcde40cb 100644
--- a/portaudio/src/os/win/pa_x86_plain_converters.c
+++ b/portaudio/src/os/win/pa_x86_plain_converters.c
@@ -124,13 +124,13 @@ static const double ditheredInt16Scaler_ = 0x7FFE;
 
 #define PA_DITHER_BITS_   (15)
 /* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */
-#define PA_FLOAT_DITHER_SCALE_  (1.0 / ((1<<PA_DITHER_BITS_)-1))
+#define PA_FLOAT_DITHER_SCALE_  (1.0F / ((1<<PA_DITHER_BITS_)-1))
 static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;
 #define PA_DITHER_SHIFT_  ((32 - PA_DITHER_BITS_) + 1)
 
 /* -------------------------------------------------------------------------- */
 
-#ifdef _WIN64
+#if defined(_WIN64) || defined(_WIN32_WCE)
 
 /*
 	-EMT64/AMD64 uses different asm
diff --git a/portmidi/CHANGELOG.txt b/portmidi/CHANGELOG.txt
index fd118e814..986137ea6 100644
--- a/portmidi/CHANGELOG.txt
+++ b/portmidi/CHANGELOG.txt
@@ -1,4 +1,14 @@
 /* CHANGELOG FOR PORTMIDI
+ *
+ * 02Jan09 Roger Dannenberg
+ * - Created Java interface and wrote PmDefaults application to set
+ *   values for Pm_GetDefaultInputDeviceID() and 
+ *   Pm_GetDefaultOutputDeviceID(). Other fixes.
+ *
+ * 19Jun08 Roger Dannenberg and Austin Sung
+ * - Removed USE_DLL_FOR_CLEANUP -- Windows 2000 through Vista seem to be
+ *   fixed now, and can recover if MIDI ports are left open
+ * - Various other minor patches
  *
  * 17Jan07 Roger Dannenberg
  * - Lots more help for Common Lisp user in pm_cl
diff --git a/portmidi/README.txt b/portmidi/README.txt
old mode 100755
new mode 100644
index 0ab950d03..2d2d6fb95
--- a/portmidi/README.txt
+++ b/portmidi/README.txt
@@ -1,7 +1,8 @@
 README for PortMidi
-Roger Dannenberg
 
-VERSION: this is the 17-Jan-07 version of PortMidi.
+Roger B. Dannenberg
+
+VERSION: please use "svn info" to get info.
 
 Documentation for PortMidi is found in pm_common/portmidi.h.
 
@@ -27,7 +28,7 @@ ERROR HANDLING
 
 Error handling turned out to be much more complicated than expected.
 PortMidi functions return error codes that the caller can check.
-In addition, errors may occur asynchronously due to MIDI input. 
+In addition, errors may occur asynchronously due to MIDI input.
 However, for Windows, there are virtually no errors that can
 occur if the code is correct and not passing bogus values. One
 exception is an error that the system is out of memory, but my
@@ -39,8 +40,8 @@ Ordinarily, the caller checks for an error code. If the error is
 system-dependent, pmHostError is returned and the caller can
 call Pm_GetHostErrorText to get a text description of the error.
 
-Host error codes are system-specific and are recorded in the 
-system-specific data allocated for each open MIDI port. 
+Host error codes are system-specific and are recorded in the
+system-specific data allocated for each open MIDI port.
 However, if an error occurs on open or close,
 we cannot store the error with the device because there will be
 no device data (assuming PortMidi cleans up after devices that
@@ -56,7 +57,7 @@ overhead even if the user does not want to look at the error data.
 
 The system-specific Read, Write, Poll, etc. implementations should
 check for asynchronous errors and return immediately if one is
-found so that these get reported. This happens in the Mac OS X 
+found so that these get reported. This happens in the Mac OS X
 code, where lots of things are happening in callbacks, but again,
 in Windows, there are no error codes recorded in callbacks.
 
@@ -64,7 +65,7 @@ DEBUGGING
 
 If you are building a console application for research, we suggest
 compiling with the option PM_CHECK_ERRORS. This will insert a
-check for error return values at the end of each PortMidi 
+check for error return values at the end of each PortMidi
 function. If an error is encountered, a text message is printed
 using printf(), the user is asked to type ENTER, and then exit(-1)
 is called to clean up and terminate the program.
diff --git a/portmidi/license.txt b/portmidi/license.txt
index b04523be4..c757b3713 100644
--- a/portmidi/license.txt
+++ b/portmidi/license.txt
@@ -3,10 +3,10 @@
  *
  * license.txt -- a copy of the PortMidi copyright notice and license information
  *
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
+ * Latest version available at: http://sourceforge.net/projects/portmedia
  *
  * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
- * Copyright (c) 2001-2006 Roger B. Dannenberg
+ * Copyright (c) 2001-2009 Roger B. Dannenberg
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
diff --git a/portmidi/pm_common/pminternal.h b/portmidi/pm_common/pminternal.h
old mode 100755
new mode 100644
index b8c032325..bd1e68ee4
--- a/portmidi/pm_common/pminternal.h
+++ b/portmidi/pm_common/pminternal.h
@@ -21,6 +21,8 @@
 extern "C" {
 #endif
 
+extern int pm_initialized; /* see note in portmidi.c */
+
 /* these are defined in system-specific file */
 void *pm_alloc(size_t s);
 void pm_free(void *ptr);
@@ -102,16 +104,8 @@ typedef struct pm_internal_struct {
     PmTimeProcPtr time_proc; /* where to get the time */
     void *time_info; /* pass this to get_time() */
     long buffer_len; /* how big is the buffer or queue? */
-#ifdef NEWBUFFER
     PmQueue *queue;
-#else
-    PmEvent *buffer; /* storage for: 
-                        - midi input 
-                        - midi output w/latency != 0 */
-    long head;
-    long tail;
-    int overflow; /* set to non-zero if input is dropped */
-#endif
+
     long latency; /* time delay in ms between timestamps and actual output */
                   /* set to zero to get immediate, simple blocking output */
                   /* if latency is zero, timestamps will be ignored; */
@@ -143,7 +137,7 @@ typedef struct pm_internal_struct {
      * important
      */
     unsigned char *fill_base; /* addr of ptr to sysex data */
-    int *fill_offset_ptr; /* offset of next sysex byte */
+    unsigned long *fill_offset_ptr; /* offset of next sysex byte */
     int fill_length; /* how many sysex bytes to write */
 } PmInternal;
 
@@ -176,6 +170,8 @@ void pm_read_short(PmInternal *midi, PmEvent *event);
 #define is_real_time(msg) \
     ((Pm_MessageStatus(msg) & MIDI_REALTIME_MASK) == MIDI_REALTIME_MASK)
 
+int pm_find_default_device(char *pattern, int is_input);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/portmidi/pm_common/pmutil.c b/portmidi/pm_common/pmutil.c
old mode 100755
new mode 100644
index 42f386c1d..eb3d80a44
--- a/portmidi/pm_common/pmutil.c
+++ b/portmidi/pm_common/pmutil.c
@@ -1,9 +1,9 @@
 /* pmutil.c -- some helpful utilities for building midi
                applications that use PortMidi
  */
-#include "stdlib.h"
-#include "assert.h"
-#include "memory.h"
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
 #include "portmidi.h"
 #include "pmutil.h"
 #include "pminternal.h"
@@ -38,11 +38,10 @@ typedef struct {
 
 PmQueue *Pm_QueueCreate(long num_msgs, long bytes_per_msg)
 {
-    PmQueueRep *queue = (PmQueueRep *) pm_alloc(sizeof(PmQueueRep));
     int int32s_per_msg = ((bytes_per_msg + sizeof(int32) - 1) &
                           ~(sizeof(int32) - 1)) / sizeof(int32);
-    /* arg checking */
-    if (!queue) 
+    PmQueueRep *queue = (PmQueueRep *) pm_alloc(sizeof(PmQueueRep));
+    if (!queue) /* memory allocation failed */
         return NULL;
 
     /* need extra word per message for non-zero encoding */
@@ -77,7 +76,7 @@ PmError Pm_QueueDestroy(PmQueue *q)
 {
     PmQueueRep *queue = (PmQueueRep *) q;
         
-        /* arg checking */
+    /* arg checking */
     if (!queue || !queue->buffer || !queue->peek) 
                 return pmBadPtr;
     
@@ -107,16 +106,9 @@ PmError Pm_Dequeue(PmQueue *q, void *msg)
         return pmBufferOverflow;
     }
     if (queue->peek_flag) {
-#ifdef QUEUE_DEBUG
-        printf("Pm_Dequeue returns peek msg:");
-        for (i = 0; i < queue->msg_size - 1; i++) {
-            printf(" %d", queue->peek[i]);
-        }
-        printf("\n");
-#endif
         memcpy(msg, queue->peek, (queue->msg_size - 1) * sizeof(int32));
         queue->peek_flag = FALSE;
-        return 1;
+        return pmGotData;
     }
 
     head = queue->head;
@@ -148,16 +140,9 @@ PmError Pm_Dequeue(PmQueue *q, void *msg)
      */
     for (i = queue->msg_size - 1; i >= 0; i--) {
         if (!queue->buffer[head + i]) {
-            return 0;
+            return pmNoData;
         }
     }
-#ifdef QUEUE_DEBUG
-    printf("Pm_Dequeue:");
-    for (i = 0; i < queue->msg_size; i++) {
-        printf(" %d", queue->buffer[head + i]);
-    }
-    printf("\n");
-#endif
     memcpy(msg, (char *) &queue->buffer[head + 1], 
            sizeof(int32) * (queue->msg_size - 1));
     /* fix up zeros */
@@ -176,7 +161,7 @@ PmError Pm_Dequeue(PmQueue *q, void *msg)
     head += queue->msg_size;
     if (head == queue->len) head = 0;
     queue->head = head;
-    return 1; /* success */
+    return pmGotData; /* success */
 }
 
 
@@ -185,10 +170,11 @@ PmError Pm_SetOverflow(PmQueue *q)
 {
     PmQueueRep *queue = (PmQueueRep *) q;
     long tail;
-    /* no more enqueue until receiver acknowledges overflow */
-    if (queue->overflow) return pmBufferOverflow;
+    /* arg checking */
     if (!queue)
         return pmBadPtr;
+    /* no more enqueue until receiver acknowledges overflow */
+    if (queue->overflow) return pmBufferOverflow;
     tail = queue->tail;
     queue->overflow = tail + 1;
     return pmBufferOverflow;
@@ -202,12 +188,11 @@ PmError Pm_Enqueue(PmQueue *q, void *msg)
     int i;
     int32 *src = (int32 *) msg;
     int32 *ptr;
-
     int32 *dest;
-
     int rslt;
+    if (!queue) 
+        return pmBadPtr;
     /* no more enqueue until receiver acknowledges overflow */
-    if (!queue) return pmBadPtr;
     if (queue->overflow) return pmBufferOverflow;
     rslt = Pm_QueueFull(q);
     /* already checked above: if (rslt == pmBadPtr) return rslt; */
@@ -231,13 +216,6 @@ PmError Pm_Enqueue(PmQueue *q, void *msg)
         dest++;
     }
     *ptr = i;
-#ifdef QUEUE_DEBUG
-    printf("Pm_Enqueue:");
-    for (i = 0; i < queue->msg_size; i++) {
-        printf(" %d", queue->buffer[tail + i]);
-    }
-    printf("\n");
-#endif
     tail += queue->msg_size;
     if (tail == queue->len) tail = 0;
     queue->tail = tail;
@@ -246,18 +224,18 @@ PmError Pm_Enqueue(PmQueue *q, void *msg)
 
 
 int Pm_QueueEmpty(PmQueue *q)
-{ 
+{
     PmQueueRep *queue = (PmQueueRep *) q;
-    if (!queue) return TRUE;
-    return (queue->buffer[queue->head] == 0);
+    return (!queue) ||  /* null pointer -> return "empty" */
+           (queue->buffer[queue->head] == 0 && !queue->peek_flag);
 }
 
 
 int Pm_QueueFull(PmQueue *q)
 {
-    PmQueueRep *queue = (PmQueueRep *) q;
     int tail;
     int i; 
+    PmQueueRep *queue = (PmQueueRep *) q;
     /* arg checking */
     if (!queue)
         return pmBadPtr;
@@ -271,12 +249,12 @@ int Pm_QueueFull(PmQueue *q)
     return FALSE;
 }
 
+
 void *Pm_QueuePeek(PmQueue *q)
 {
-    PmQueueRep *queue = (PmQueueRep *) q;
     PmError rslt;
     long temp;
-
+    PmQueueRep *queue = (PmQueueRep *) q;
     /* arg checking */
     if (!queue)
         return NULL;
diff --git a/portmidi/pm_common/pmutil.h b/portmidi/pm_common/pmutil.h
old mode 100755
new mode 100644
index 8e4294670..10a85ffba
--- a/portmidi/pm_common/pmutil.h
+++ b/portmidi/pm_common/pmutil.h
@@ -78,6 +78,9 @@ PmError Pm_Enqueue(PmQueue *queue, void *msg);
     Pm_Dequeue() could still return 0 after Pm_QueueEmpty() returns
     false. On the other hand, Pm_QueueFull() is pessimistic: if it
     returns false, then Pm_Enqueue() is guaranteed to succeed. 
+
+    Error conditions: Pm_QueueFull() returns pmBadPtr if queue is NULL.
+    Pm_QueueEmpty() returns FALSE if queue is NULL.
  */
 int Pm_QueueFull(PmQueue *queue);
 int Pm_QueueEmpty(PmQueue *queue);
diff --git a/portmidi/pm_common/portmidi.c b/portmidi/pm_common/portmidi.c
old mode 100755
new mode 100644
index 71988e471..79329835d
--- a/portmidi/pm_common/portmidi.c
+++ b/portmidi/pm_common/portmidi.c
@@ -1,1184 +1,1124 @@
-#include "stdlib.h"
-#include "string.h"
-#include "portmidi.h"
-#include "porttime.h"
-#ifdef NEWBUFFER
-#include "pmutil.h"
-#endif
-#include "pminternal.h"
-#include <assert.h>
-
-#define MIDI_CLOCK      0xf8
-#define MIDI_ACTIVE     0xfe
-#define MIDI_STATUS_MASK 0x80
-#define MIDI_SYSEX      0xf0
-#define MIDI_EOX        0xf7
-#define MIDI_START      0xFA
-#define MIDI_STOP       0xFC
-#define MIDI_CONTINUE   0xFB
-#define MIDI_F9         0xF9
-#define MIDI_FD         0xFD
-#define MIDI_RESET      0xFF
-#define MIDI_NOTE_ON    0x90
-#define MIDI_NOTE_OFF   0x80
-#define MIDI_CHANNEL_AT 0xD0
-#define MIDI_POLY_AT    0xA0
-#define MIDI_PROGRAM    0xC0
-#define MIDI_CONTROL    0xB0
-#define MIDI_PITCHBEND  0xE0
-#define MIDI_MTC        0xF1
-#define MIDI_SONGPOS    0xF2
-#define MIDI_SONGSEL    0xF3
-#define MIDI_TUNE       0xF6
-
-#define is_empty(midi) ((midi)->tail == (midi)->head)
-
-static int pm_initialized = FALSE;
-int pm_hosterror;
-char pm_hosterror_text[PM_HOST_ERROR_MSG_LEN];
-
-#ifdef PM_CHECK_ERRORS
-
-#include <stdio.h>
-
-#define STRING_MAX 80
-
-static void prompt_and_exit(void)
-{
-    char line[STRING_MAX];
-    printf("type ENTER...");
-    fgets(line, STRING_MAX, stdin);
-    /* this will clean up open ports: */
-    exit(-1);
-}
-
-
-static PmError pm_errmsg(PmError err)
-{
-    if (err == pmHostError) {
-        /* it seems pointless to allocate memory and copy the string,
-         * so I will do the work of Pm_GetHostErrorText directly
-         */
-        printf("PortMidi found host error...\n  %s\n", pm_hosterror_text);
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* clear the message */
-        prompt_and_exit();
-    } else if (err < 0) {
-        printf("PortMidi call failed...\n  %s\n", Pm_GetErrorText(err));
-        prompt_and_exit();
-    }
-    return err;
-}
-#else
-#define pm_errmsg(err) err
-#endif
-
-/*
-====================================================================
-system implementation of portmidi interface
-====================================================================
-*/
-
-int pm_descriptor_max = 0;
-int pm_descriptor_index = 0;
-descriptor_type descriptors = NULL;
-
-/* pm_add_device -- describe interface/device pair to library 
- *
- * This is called at intialization time, once for each 
- * interface (e.g. DirectSound) and device (e.g. SoundBlaster 1)
- * The strings are retained but NOT COPIED, so do not destroy them!
- *
- * returns pmInvalidDeviceId if device memory is exceeded
- * otherwise returns pmNoError
- */
-PmError pm_add_device(char *interf, char *name, int input, 
-                      void *descriptor, pm_fns_type dictionary) {
-    if (pm_descriptor_index >= pm_descriptor_max) {
-        // expand descriptors
-        descriptor_type new_descriptors = 
-                pm_alloc(sizeof(descriptor_node) * (pm_descriptor_max + 32));
-        if (!new_descriptors) return pmInsufficientMemory;
-        if (descriptors) {
-            memcpy(new_descriptors, descriptors, 
-                   sizeof(descriptor_node) * pm_descriptor_max);
-            free(descriptors);
-        }
-        pm_descriptor_max += 32;
-        descriptors = new_descriptors;
-    }
-    descriptors[pm_descriptor_index].pub.interf = interf;
-    descriptors[pm_descriptor_index].pub.name = name;
-    descriptors[pm_descriptor_index].pub.input = input;
-    descriptors[pm_descriptor_index].pub.output = !input;
-
-    /* default state: nothing to close (for automatic device closing) */
-    descriptors[pm_descriptor_index].pub.opened = FALSE;
-
-    /* ID number passed to win32 multimedia API open */
-    descriptors[pm_descriptor_index].descriptor = descriptor;
-    
-    /* points to PmInternal, allows automatic device closing */
-    descriptors[pm_descriptor_index].internalDescriptor = NULL;
-
-    descriptors[pm_descriptor_index].dictionary = dictionary;
-    
-    pm_descriptor_index++;
-    
-    return pmNoError;
-}
-
-
-/*
-====================================================================
-portmidi implementation
-====================================================================
-*/
-
-int Pm_CountDevices( void ) {
-    Pm_Initialize();
-    /* no error checking -- Pm_Initialize() does not fail */
-    return pm_descriptor_index;
-}
-
-
-const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id ) {
-    Pm_Initialize(); /* no error check needed */
-    if (id >= 0 && id < pm_descriptor_index) {
-        return &descriptors[id].pub;
-    }
-    return NULL;
-}
-
-/* pm_success_fn -- "noop" function pointer */
-PmError pm_success_fn(PmInternal *midi) {
-    return pmNoError;
-}
-
-/* none_write -- returns an error if called */
-PmError none_write_short(PmInternal *midi, PmEvent *buffer) {
-    return pmBadPtr;
-}
-
-/* pm_fail_timestamp_fn -- placeholder for begin_sysex and flush */
-PmError pm_fail_timestamp_fn(PmInternal *midi, PmTimestamp timestamp) {
-    return pmBadPtr;
-}
-
-PmError none_write_byte(PmInternal *midi, unsigned char byte, 
-                        PmTimestamp timestamp) {
-    return pmBadPtr;
-}
-
-/* pm_fail_fn -- generic function, returns error if called */
-PmError pm_fail_fn(PmInternal *midi) {
-    return pmBadPtr;
-}
-
-static PmError none_open(PmInternal *midi, void *driverInfo) {
-    return pmBadPtr;
-}
-static void none_get_host_error(PmInternal * midi, char * msg, unsigned int len) {
-    strcpy(msg, "");
-}
-static unsigned int none_has_host_error(PmInternal * midi) {
-    return FALSE;
-}
-PmTimestamp none_synchronize(PmInternal *midi) {
-    return 0;
-}
-
-#define none_abort pm_fail_fn
-#define none_close pm_fail_fn
-
-pm_fns_node pm_none_dictionary = {
-    none_write_short,
-    none_sysex,
-    none_sysex,
-    none_write_byte,
-    none_write_short,
-    none_write_flush,
-    none_synchronize,
-    none_open,
-    none_abort, 
-    none_close,
-    none_poll,
-    none_has_host_error,
-    none_get_host_error 
-};
-
-
-const char *Pm_GetErrorText( PmError errnum ) {
-    const char *msg;
-
-    switch(errnum)
-    {
-    case pmNoError:                  
-        msg = ""; 
-        break;
-    case pmHostError:                
-        msg = "PortMidi: `Host error'"; 
-        break;
-    case pmInvalidDeviceId:          
-        msg = "PortMidi: `Invalid device ID'"; 
-        break;
-    case pmInsufficientMemory:       
-        msg = "PortMidi: `Insufficient memory'"; 
-        break;
-    case pmBufferTooSmall:           
-        msg = "PortMidi: `Buffer too small'"; 
-        break;
-    case pmBadPtr:                   
-        msg = "PortMidi: `Bad pointer'"; 
-        break;
-    case pmInternalError:            
-        msg = "PortMidi: `Internal PortMidi Error'"; 
-        break;
-    case pmBufferOverflow:
-        msg = "PortMidi: `Buffer overflow'";
-        break;
-    case pmBadData:
-        msg = "PortMidi: `Invalid MIDI message Data'";
-        break;
-    case pmBufferMaxSize:
-        msg = "PortMidi: `Buffer cannot be made larger'";
-        break;
-    default:                         
-        msg = "PortMidi: `Illegal error number'"; 
-        break;
-    }
-    return msg;
-}
-
-
-/* This can be called whenever you get a pmHostError return value.
- * The error will always be in the global pm_hosterror_text.
- */
-void Pm_GetHostErrorText(char * msg, unsigned int len) {
-    assert(msg);
-    assert(len > 0);
-    if (pm_hosterror) {
-        strncpy(msg, (char *) pm_hosterror_text, len);
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* clear the message; not necessary, but it
-                                     might help with debugging */
-        msg[len - 1] = 0; /* make sure string is terminated */
-    } else {
-        msg[0] = 0; /* no string to return */
-    }
-}
-
-
-int Pm_HasHostError(PortMidiStream * stream) {
-    if (pm_hosterror) return TRUE;
-    if (stream) {
-        PmInternal * midi = (PmInternal *) stream;
-        pm_hosterror = (*midi->dictionary->has_host_error)(midi);
-        if (pm_hosterror) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-            /* now error message is global */
-            return TRUE;
-        }
-    }
-    return FALSE;
-}
-
-
-PmError Pm_Initialize( void ) {
-    if (!pm_initialized) {
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* the null string */
-        pm_init();
-        pm_initialized = TRUE;
-    }
-    return pmNoError;
-}
-
-
-PmError Pm_Terminate( void ) {
-    if (pm_initialized) {
-        pm_term();
-        // if there are no devices, descriptors might still be NULL
-        if (descriptors != NULL) {
-            free(descriptors);
-            descriptors = NULL;
-        }
-        pm_descriptor_index = 0;
-        pm_descriptor_max = 0;
-        pm_initialized = FALSE;
-    }
-    return pmNoError;
-}
-
-
-/* Pm_Read -- read up to length longs from source into buffer */
-/*
- * returns number of longs actually read, or error code
- */
-PmError Pm_Read(PortMidiStream *stream, PmEvent *buffer, long length) {
-    PmInternal *midi = (PmInternal *) stream;
-    int n = 0;
-#ifndef NEWBUFFER
-    long head;
-#endif
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.input)
-        err = pmBadPtr;    
-    /* First poll for data in the buffer...
-     * This either simply checks for data, or attempts first to fill the buffer
-     * with data from the MIDI hardware; this depends on the implementation.
-     * We could call Pm_Poll here, but that would redo a lot of redundant
-     * parameter checking, so I copied some code from Pm_Poll to here: */
-    else err = (*(midi->dictionary->poll))(midi);
-
-    if (err != pmNoError) {
-        if (err == pmHostError) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-          pm_hosterror = TRUE;
-        }
-        return pm_errmsg(err);
-    }
-
-#ifdef NEWBUFFER
-    while (n < length) {
-        PmError err = Pm_Dequeue(midi->queue, buffer++);
-        if (err == pmBufferOverflow) {
-            /* ignore the data we have retreived so far */
-            return pm_errmsg(pmBufferOverflow);
-        } else if (err == 0) { /* empty queue */
-            break;
-        }
-        n++;
-    }
-#else
-    head = midi->head;
-    while (head != midi->tail && n < length) {
-        PmEvent event = midi->buffer[head++];
-        *buffer++ = event;
-        if (head == midi->buffer_len) head = 0;
-        n++;
-    }
-    midi->head = head;
-    if (midi->overflow) {
-        midi->head = midi->tail;
-        midi->overflow = FALSE;
-        return pm_errmsg(pmBufferOverflow);
-    }
-#endif
-    return n;
-}
-
-PmError Pm_Poll( PortMidiStream *stream )
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-#ifdef NEWBUFFER
-    PmEvent *event;
-#endif
-
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.input)
-        err = pmBadPtr;
-    else
-        err = (*(midi->dictionary->poll))(midi);
-
-    if (err != pmNoError) {
-        if (err == pmHostError) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-           pm_hosterror = TRUE;
-        }
-        return pm_errmsg(err);
-    }
-
-#ifdef NEWBUFFER
-    event = (PmEvent *) Pm_QueuePeek(midi->queue);
-    return event != NULL;
-#else
-    return midi->head != midi->tail;
-#endif
-}
-
-
-/* this is called from Pm_Write and Pm_WriteSysEx to issue a
- * call to the system-dependent end_sysex function and handle 
- * the error return
- */
-static PmError pm_end_sysex(PmInternal *midi)
-{
-    PmError err = (*midi->dictionary->end_sysex)(midi, 0);
-    midi->sysex_in_progress = FALSE;
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-    return err;
-}
-
-
-/* to facilitate correct error-handling, Pm_Write, Pm_WriteShort, and
-   Pm_WriteSysEx all operate a state machine that "outputs" calls to
-   write_short, begin_sysex, write_byte, end_sysex, and write_realtime */
-
-PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length)
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-    int i;
-    int bits;
-    
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.output)
-        err = pmBadPtr;
-    else
-        err = pmNoError;
-    
-    if (err != pmNoError) goto pm_write_error;
-    
-    if (midi->latency == 0) {
-        midi->now = 0;
-    } else {
-        midi->now = (*(midi->time_proc))(midi->time_info);
-        if (midi->first_message || midi->sync_time + 100 /*ms*/ < midi->now) {
-            /* time to resync */
-            midi->now = (*midi->dictionary->synchronize)(midi);
-            midi->first_message = FALSE;
-        }
-    }
-    /* error recovery: when a sysex is detected, we call
-     *   dictionary->begin_sysex() followed by calls to
-     *   dictionary->write_byte() and dictionary->write_realtime()
-     *   until an end-of-sysex is detected, when we call
-     *   dictionary->end_sysex(). After an error occurs, 
-     *   Pm_Write() continues to call functions. For example,
-     *   it will continue to call write_byte() even after
-     *   an error sending a sysex message, and end_sysex() will be
-     *   called when an EOX or non-real-time status is found.
-     * When errors are detected, Pm_Write() returns immediately, 
-     *   so it is possible that this will drop data and leave
-     *   sysex messages in a partially transmitted state.
-     */
-    for (i = 0; i < length; i++) {
-        unsigned long msg = buffer[i].message;
-        bits = 0;
-        /* is this a sysex message? */
-        if (Pm_MessageStatus(msg) == MIDI_SYSEX) {
-            if (midi->sysex_in_progress) {
-                /* error: previous sysex was not terminated by EOX */
-                midi->sysex_in_progress = FALSE;
-                err = pmBadData;
-                goto pm_write_error;
-            }
-            midi->sysex_in_progress = TRUE;
-            if ((err = (*midi->dictionary->begin_sysex)(midi, 
-                               buffer[i].timestamp)) != pmNoError)
-                goto pm_write_error;
-            if ((err = (*midi->dictionary->write_byte)(midi, MIDI_SYSEX,
-                               buffer[i].timestamp)) != pmNoError) 
-                goto pm_write_error;
-            bits = 8;
-            /* fall through to continue sysex processing */
-        } else if ((msg & MIDI_STATUS_MASK) && 
-                   (Pm_MessageStatus(msg) != MIDI_EOX)) {
-            /* a non-sysex message */
-            if (midi->sysex_in_progress) {
-                /* this should be a realtime message */
-                if (is_real_time(msg)) {
-                    if ((err = (*midi->dictionary->write_realtime)(midi, 
-                                       &(buffer[i]))) != pmNoError)
-                        goto pm_write_error;
-                } else {
-                    midi->sysex_in_progress = FALSE;
-                    err = pmBadData;
-                    /* ignore any error from this, because we already have one */
-                    /* pass 0 as timestamp -- it's ignored */
-                    (*midi->dictionary->end_sysex)(midi, 0);
-                    goto pm_write_error;
-                }
-            } else { /* regular short midi message */
-                if ((err = (*midi->dictionary->write_short)(midi, 
-                                   &(buffer[i]))) != pmNoError)
-                    goto pm_write_error;
-                continue;
-            }
-        }
-        if (midi->sysex_in_progress) { /* send sysex bytes until EOX */
-            /* see if we can accelerate data transfer */
-            if (bits == 0 && midi->fill_base && /* 4 bytes to copy */
-                (*midi->fill_offset_ptr) + 4 <= midi->fill_length &&
-                (msg & 0x80808080) == 0) { /* all data */
-                    /* copy 4 bytes from msg to fill_base + fill_offset */
-                    unsigned char *ptr = midi->fill_base + 
-                                         *(midi->fill_offset_ptr);
-                    ptr[0] = msg; ptr[1] = msg >> 8; 
-                    ptr[2] = msg >> 18; ptr[3] = msg >> 24;
-                    (*midi->fill_offset_ptr) += 4;
-                     continue;
-            }
-            /* no acceleration, so do byte-by-byte copying */
-            while (bits < 32) {
-                unsigned char midi_byte = (unsigned char) (msg >> bits);
-                if ((err = (*midi->dictionary->write_byte)(midi, midi_byte, 
-                                   buffer[i].timestamp)) != pmNoError)
-                    goto pm_write_error;
-                if (midi_byte == MIDI_EOX) {
-                    err = pm_end_sysex(midi);
-                    if (err != pmNoError) goto error_exit;
-                    break; /* from while loop */
-                }
-                bits += 8;
-            }
-        } else {
-            /* not in sysex mode, but message did not start with status */
-            err = pmBadData;
-            goto pm_write_error;
-        }
-    }
-    /* after all messages are processed, send the data */
-    if (!midi->sysex_in_progress)
-        err = (*midi->dictionary->write_flush)(midi, 0);
-pm_write_error:
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-error_exit:
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_WriteShort( PortMidiStream *stream, long when, long msg)
-{
-    PmEvent event;
-    
-    event.timestamp = when;
-    event.message = msg;
-    return Pm_Write(stream, &event, 1);
-}
-
-
-PmError Pm_WriteSysEx(PortMidiStream *stream, PmTimestamp when, 
-                      unsigned char *msg)
-{
-    /* allocate buffer space for PM_DEFAULT_SYSEX_BUFFER_SIZE bytes */
-    /* each PmEvent holds sizeof(PmMessage) bytes of sysex data */
-#define BUFLEN (PM_DEFAULT_SYSEX_BUFFER_SIZE / sizeof(PmMessage))
-    PmEvent buffer[BUFLEN];
-    int buffer_size = 1; /* first time, send 1. After that, it's BUFLEN */
-    PmInternal *midi = (PmInternal *) stream;
-    /* the next byte in the buffer is represented by an index, bufx, and
-       a shift in bits */
-    int shift = 0;
-    int bufx = 0;
-    buffer[0].message = 0;
-    buffer[0].timestamp = when;
-
-    while (1) {
-        /* insert next byte into buffer */
-        buffer[bufx].message |= ((*msg) << shift);
-        shift += 8;
-        if (*msg++ == MIDI_EOX) break;
-        if (shift == 32) {
-            shift = 0;
-            bufx++;
-            if (bufx == buffer_size) {
-                PmError err = Pm_Write(stream, buffer, buffer_size);
-                /* note: Pm_Write has already called errmsg() */
-                if (err) return err;
-                /* prepare to fill another buffer */
-                bufx = 0;
-                buffer_size = BUFLEN;
-                /* optimization: maybe we can just copy bytes */
-                if (midi->fill_base) {
-                    PmError err;
-                    while (*(midi->fill_offset_ptr) < midi->fill_length) {
-                        midi->fill_base[(*midi->fill_offset_ptr)++] = *msg;
-                        if (*msg++ == MIDI_EOX) {
-                            err = pm_end_sysex(midi);
-                            if (err != pmNoError) return pm_errmsg(err);
-                            goto end_of_sysex;
-                        }
-                    }
-                    /* I thought that I could do a pm_Write here and
-                     * change this if to a loop, avoiding calls in Pm_Write
-                     * to the slower write_byte, but since 
-                     * sysex_in_progress is true, this will not flush
-                     * the buffer, and we'll infinite loop: */
-                    /* err = Pm_Write(stream, buffer, 0);
-                       if (err) return err; */
-                    /* instead, the way this works is that Pm_Write calls
-                     * write_byte on 4 bytes. The first, since the buffer
-                     * is full, will flush the buffer and allocate a new
-                     * one. This primes the buffer so
-                     * that we can return to the loop above and fill it
-                     * efficiently without a lot of function calls.
-                     */
-                    buffer_size = 1; /* get another message started */
-                }
-            }
-            buffer[bufx].message = 0;
-            buffer[bufx].timestamp = when;
-        } 
-        /* keep inserting bytes until you find MIDI_EOX */
-    }
-end_of_sysex:
-    /* we're finished sending full buffers, but there may
-     * be a partial one left.
-     */
-    if (shift != 0) bufx++; /* add partial message to buffer len */
-    if (bufx) { /* bufx is number of PmEvents to send from buffer */
-        PmError err = Pm_Write(stream, buffer, bufx);
-        if (err) return err;
-    }
-    return pmNoError;
-}
-
-
-
-PmError Pm_OpenInput(PortMidiStream** stream,
-                     PmDeviceID inputDevice,
-                     void *inputDriverInfo,
-                     long bufferSize,
-                     PmTimeProcPtr time_proc,
-                     void *time_info) {
-    PmInternal *midi;
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    *stream = NULL;
-    
-    /* arg checking */
-    if (inputDevice < 0 || inputDevice >= pm_descriptor_index) 
-        err = pmInvalidDeviceId;
-    else if (!descriptors[inputDevice].pub.input) 
-        err =  pmBadPtr;
-    else if(descriptors[inputDevice].pub.opened)
-        err =  pmBadPtr;
-    
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* create portMidi internal data */
-    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
-    *stream = midi;
-    if (!midi) {
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->device_id = inputDevice;
-    midi->write_flag = FALSE;
-    midi->time_proc = time_proc;
-    midi->time_info = time_info;
-    /* windows adds timestamps in the driver and these are more accurate than
-       using a time_proc, so do not automatically provide a time proc. Non-win
-       implementations may want to provide a default time_proc in their
-       system-specific midi_out_open() method.
-     */
-    if (bufferSize <= 0) bufferSize = 256; /* default buffer size */
-#ifdef NEWBUFFER
-    midi->queue = Pm_QueueCreate(bufferSize, sizeof(PmEvent));
-    if (!midi->queue) {
-#else
-    else bufferSize++; /* buffer holds N-1 msgs, so increase request by 1 */
-    midi->buffer = (PmEvent *) pm_alloc(sizeof(PmEvent) * midi->buffer_len); 
-    midi->head = 0;
-    midi->tail = 0;
-    midi->overflow = FALSE;
-    if (!midi->buffer) { 
-#endif
-        /* free portMidi data */
-        *stream = NULL;
-        pm_free(midi); 
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->buffer_len = bufferSize; /* portMidi input storage */
-    midi->latency = 0; /* not used */
-    midi->sysex_in_progress = FALSE;
-    midi->sysex_message = 0; 
-    midi->sysex_message_count = 0; 
-    midi->filters = PM_FILT_ACTIVE;
-    midi->channel_mask = 0xFFFF;
-    midi->sync_time = 0;
-    midi->first_message = TRUE;
-    midi->dictionary = descriptors[inputDevice].dictionary;
-    midi->fill_base = NULL;
-    midi->fill_offset_ptr = NULL;
-    midi->fill_length = 0;
-    descriptors[inputDevice].internalDescriptor = midi;
-    /* open system dependent input device */
-    err = (*midi->dictionary->open)(midi, inputDriverInfo);
-    if (err) {
-        *stream = NULL;
-        descriptors[inputDevice].internalDescriptor = NULL;
-        /* free portMidi data */
-#ifdef NEWBUFFER
-        Pm_QueueDestroy(midi->queue);
-#else
-        pm_free(midi->buffer);  
-#endif
-        pm_free(midi);
-    } else {
-        /* portMidi input open successful */
-        descriptors[inputDevice].pub.opened = TRUE;
-    }
-error_return:
-    /* note: if there is a pmHostError, it is the responsibility
-     * of the system-dependent code (*midi->dictionary->open)()
-     * to set pm_hosterror and pm_hosterror_text
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_OpenOutput(PortMidiStream** stream,
-                      PmDeviceID outputDevice,
-                      void *outputDriverInfo,
-                      long bufferSize,
-                      PmTimeProcPtr time_proc,
-                      void *time_info,
-                      long latency ) {
-    PmInternal *midi;
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    *stream =  NULL;
-    
-    /* arg checking */
-    if (outputDevice < 0 || outputDevice >= pm_descriptor_index)
-        err = pmInvalidDeviceId;
-    else if (!descriptors[outputDevice].pub.output) 
-        err = pmInvalidDeviceId;
-    else if (descriptors[outputDevice].pub.opened)
-        err = pmInvalidDeviceId;
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* create portMidi internal data */
-    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
-    *stream = midi;                 
-    if (!midi) {
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->device_id = outputDevice;
-    midi->write_flag = TRUE;
-    midi->time_proc = time_proc;
-    /* if latency > 0, we need a time reference. If none is provided,
-       use PortTime library */
-    if (time_proc == NULL && latency != 0) {
-        if (!Pt_Started()) 
-            Pt_Start(1, 0, 0);
-        /* time_get does not take a parameter, so coerce */
-        midi->time_proc = (PmTimeProcPtr) Pt_Time;
-    }
-    midi->time_info = time_info;
-    midi->buffer_len = bufferSize;
-#ifdef NEWBUFFER
-    midi->queue = NULL; /* unused by output */
-#else
-    midi->buffer = NULL;
-    midi->head = 0; /* unused by output */
-    midi->tail = 0; /* unused by output */
-    midi->overflow = FALSE; /* not used */
-#endif
-    /* if latency zero, output immediate (timestamps ignored) */
-    /* if latency < 0, use 0 but don't return an error */
-    if (latency < 0) latency = 0;
-    midi->latency = latency;
-    midi->sysex_in_progress = FALSE;
-    midi->sysex_message = 0; /* unused by output */
-    midi->sysex_message_count = 0; /* unused by output */
-    midi->filters = 0; /* not used for output */
-    midi->channel_mask = 0xFFFF;
-    midi->sync_time = 0;
-    midi->first_message = TRUE;
-    midi->dictionary = descriptors[outputDevice].dictionary;
-    midi->fill_base = NULL;
-    midi->fill_offset_ptr = NULL;
-    midi->fill_length = 0;
-    descriptors[outputDevice].internalDescriptor = midi;
-    /* open system dependent output device */
-    err = (*midi->dictionary->open)(midi, outputDriverInfo);
-    if (err) {
-        *stream = NULL;
-        descriptors[outputDevice].internalDescriptor = NULL;
-        /* free portMidi data */
-        pm_free(midi); 
-    } else {
-        /* portMidi input open successful */
-        descriptors[outputDevice].pub.opened = TRUE;
-    }
-error_return:
-    /* note: system-dependent code must set pm_hosterror and
-     * pm_hosterror_text if a pmHostError occurs
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_SetChannelMask(PortMidiStream *stream, int mask)
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    if (midi == NULL)
-        err = pmBadPtr;
-    else
-        midi->channel_mask = mask;
-
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_SetFilter(PortMidiStream *stream, long filters) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    /* arg checking */
-    if (midi == NULL)
-        err = pmBadPtr;
-    else if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else
-        midi->filters = filters;
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_Close( PortMidiStream *stream ) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if (midi == NULL) /* midi must point to something */
-        err = pmBadPtr;
-    /* if it is an open device, the device_id will be valid */
-    else if (midi->device_id < 0 || midi->device_id >= pm_descriptor_index)
-        err = pmBadPtr;
-    /* and the device should be in the opened state */
-    else if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* close the device */
-    err = (*midi->dictionary->close)(midi);
-    /* even if an error occurred, continue with cleanup */
-    descriptors[midi->device_id].internalDescriptor = NULL;
-    descriptors[midi->device_id].pub.opened = FALSE;
-#ifdef NEWBUFFER
-    if (midi->queue) Pm_QueueDestroy(midi->queue);
-#else
-    if (midi->buffer) pm_free(midi->buffer);       
-#endif
-    pm_free(midi); 
-error_return:
-    /* system dependent code must set pm_hosterror and
-     * pm_hosterror_text if a pmHostError occurs.
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_Abort( PortMidiStream* stream ) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-    /* arg checking */
-    if (midi == NULL)
-        err = pmBadPtr;
-    if (!descriptors[midi->device_id].pub.output)
-        err = pmBadPtr;
-    if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else
-        err = (*midi->dictionary->abort)(midi);
-
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-    return pm_errmsg(err);
-}
-
-#ifndef NEWBUFFER
-/* this is apparently an orphan routine -- I can find no reference to it now -RBD */
-
-/* in win32 multimedia API (via callbacks) some of these functions used; assume never fail */
-long pm_next_time(PmInternal *midi) {
-
-    /* arg checking */
-    assert(midi != NULL);
-    
-    return midi->buffer[midi->head].timestamp;
-}
-#endif
-
-
-/* pm_channel_filtered returns non-zero if the channel mask is blocking the current channel */
-#define pm_channel_filtered(status, mask) \
-    ((((status) & 0xF0) != 0xF0) && (!(Pm_Channel((status) & 0x0F) & (mask))))
-
-
-/* The following two functions will checks to see if a MIDI message matches
-   the filtering criteria.  Since the sysex routines only want to filter realtime messages,
-   we need to have separate routines.
- */
-
-
-/* pm_realtime_filtered returns non-zero if the filter will kill the current message.
-   Note that only realtime messages are checked here.
- */
-#define pm_realtime_filtered(status, filters) \
-    ((((status) & 0xF0) == 0xF0) && ((1 << ((status) & 0xF)) & (filters)))
-
-/*
-    return ((status == MIDI_ACTIVE) && (filters & PM_FILT_ACTIVE))
-            ||  ((status == MIDI_CLOCK) && (filters & PM_FILT_CLOCK))
-            ||  ((status == MIDI_START) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_STOP) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_CONTINUE) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_F9) && (filters & PM_FILT_F9))
-            ||  ((status == MIDI_FD) && (filters & PM_FILT_FD))
-            ||  ((status == MIDI_RESET) && (filters & PM_FILT_RESET))
-            ||  ((status == MIDI_MTC) && (filters & PM_FILT_MTC))
-            ||  ((status == MIDI_SONGPOS) && (filters & PM_FILT_SONG_POSITION))
-            ||  ((status == MIDI_SONGSEL) && (filters & PM_FILT_SONG_SELECT))
-            ||  ((status == MIDI_TUNE) && (filters & PM_FILT_TUNE));
-}*/
-
-
-/* pm_status_filtered returns non-zero if a filter will kill the current message, based on status.
-   Note that sysex and real time are not checked.  It is up to the subsystem (winmm, core midi, alsa)
-   to filter sysex, as it is handled more easily and efficiently at that level.
-   Realtime message are filtered in pm_realtime_filtered.
- */
-#define pm_status_filtered(status, filters) ((1 << (16 + ((status) >> 4))) & (filters))
-
-
-/*
-    return  ((status == MIDI_NOTE_ON) && (filters & PM_FILT_NOTE))
-            ||  ((status == MIDI_NOTE_OFF) && (filters & PM_FILT_NOTE))
-            ||  ((status == MIDI_CHANNEL_AT) && (filters & PM_FILT_CHANNEL_AFTERTOUCH))
-            ||  ((status == MIDI_POLY_AT) && (filters & PM_FILT_POLY_AFTERTOUCH))
-            ||  ((status == MIDI_PROGRAM) && (filters & PM_FILT_PROGRAM))
-            ||  ((status == MIDI_CONTROL) && (filters & PM_FILT_CONTROL))
-            ||  ((status == MIDI_PITCHBEND) && (filters & PM_FILT_PITCHBEND));
-
-}
-*/
-
-void pm_flush_sysex(PmInternal *midi, PmTimestamp timestamp)
-{
-    PmEvent event;
-    
-    /* there may be nothing in the buffer */
-    if (midi->sysex_message_count == 0) return; /* nothing to flush */
-    
-    event.message = midi->sysex_message;
-    event.timestamp = timestamp;
-    /* copied from pm_read_short, avoids filtering */
-    if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-        midi->sysex_in_progress = FALSE;
-    }
-    midi->sysex_message_count = 0;
-    midi->sysex_message = 0;
-}
-
-
-/* pm_read_short and pm_read_bytes
-   are the interface between system-dependent MIDI input handlers
-   and the system-independent PortMIDI code.
-   The input handler MUST obey these rules:
-   1) all short input messages must be sent to pm_read_short, which
-      enqueues them to a FIFO for the application.
-   2) eash buffer of sysex bytes should be reported by calling pm_read_bytes
-      (which sets midi->sysex_in_progress). After the eox byte, 
-      pm_read_bytes will clear sysex_in_progress
- */
-
-/* pm_read_short is the place where all input messages arrive from 
-   system-dependent code such as pmwinmm.c. Here, the messages
-   are entered into the PortMidi input buffer. 
- */
-void pm_read_short(PmInternal *midi, PmEvent *event)
-{ 
-#ifndef NEWBUFFER
-    long tail;
-#endif
-    int status;
-    /* arg checking */
-    assert(midi != NULL);
-    /* midi filtering is applied here */
-    status = Pm_MessageStatus(event->message);
-    if (!pm_status_filtered(status, midi->filters)
-        && (!is_real_time(status) || 
-            !pm_realtime_filtered(status, midi->filters))
-        && !pm_channel_filtered(status, midi->channel_mask)) {
-        /* if sysex is in progress and we get a status byte, it had
-           better be a realtime message or the starting SYSEX byte;
-           otherwise, we exit the sysex_in_progress state
-         */
-        if (midi->sysex_in_progress && (status & MIDI_STATUS_MASK)) {
-            /* two choices: real-time or not. If it's real-time, then
-             * this should be delivered as a sysex byte because it is
-             * embedded in a sysex message
-             */
-            if (is_real_time(status)) {
-                midi->sysex_message |= 
-                        (status << (8 * midi->sysex_message_count++));
-                if (midi->sysex_message_count == 4) {
-                    pm_flush_sysex(midi, event->timestamp);
-                }
-            } else { /* otherwise, it's not real-time. This interrupts
-                      * a sysex message in progress */
-                midi->sysex_in_progress = FALSE;
-            }
-#ifdef NEWBUFFER
-        } else if (Pm_Enqueue(midi->queue, event) == pmBufferOverflow) {
-            midi->sysex_in_progress = FALSE;
-        }
-#else
-        } else {
-            /* don't try to do anything more in an overflow state */
-            if (midi->overflow) return;
-
-            /* insert the message */
-            tail = midi->tail;
-            midi->buffer[tail++] = *event;
-            if (tail == midi->buffer_len) tail = 0;
-            if (tail == midi->head || midi->overflow) {
-                midi->overflow = TRUE;
-                midi->sysex_in_progress = FALSE; 
-                /* drop the rest of the message, this must be cleared 
-                   by caller when EOX is received */
-                   return;
-            }
-            midi->tail = tail; /* complete the write */
-        }
-#endif
-    }
-}
-
-/* pm_read_bytes -- read one (partial) sysex msg from MIDI data */
-/*
- * returns how many bytes processed
- */
-unsigned int pm_read_bytes(PmInternal *midi, unsigned char *data, 
-                    int len, PmTimestamp timestamp)
-{
-    unsigned int i = 0; /* index into data */
-    PmEvent event;
-    event.timestamp = timestamp;
-    assert(midi);
-    /* note that since buffers may not have multiples of 4 bytes,
-     * pm_read_bytes may be called in the middle of an outgoing
-     * 4-byte PortMidi message. sysex_in_progress indicates that
-     * a sysex has been sent but no eox.
-     */
-    if (len == 0) return 0; /* sanity check */
-    if (!midi->sysex_in_progress) {
-        while (i < len) { /* process all data */
-            unsigned char byte = data[i++];
-            if (byte == MIDI_SYSEX &&
-                !pm_realtime_filtered(byte, midi->filters)) {
-                midi->sysex_in_progress = TRUE;
-                i--; /* back up so code below will get SYSEX byte */
-                break; /* continue looping below to process msg */
-            } else if (byte == MIDI_EOX) {
-                midi->sysex_in_progress = FALSE;
-                return i; /* done with one message */
-            } else if (byte & MIDI_STATUS_MASK) {
-                /* We're getting MIDI but no sysex in progress.
-                 * Either the SYSEX status byte was dropped or
-                 * the message was filtered. Drop the data, but
-                 * send any embedded realtime bytes.
-                 */
-                /* assume that this is a real-time message:
-                 * it is an error to pass non-real-time messages
-                 * to pm_read_bytes
-                 */
-                event.message = byte;
-                pm_read_short(midi, &event);
-            }
-        } /* all bytes in the buffer are processed */
-    }
-    /* Now, i<len implies sysex_in_progress. If sysex_in_progress
-     * becomes false in the loop, there must have been an overflow
-     * and we can just drop all remaining bytes 
-     */
-    while (i < len && midi->sysex_in_progress) {
-        if (midi->sysex_message_count == 0 && i <= len - 4 &&
-            ((event.message = (((long) data[i]) | 
-                             (((long) data[i+1]) << 8) |
-                             (((long) data[i+2]) << 16) |
-                             (((long) data[i+3]) << 24))) &
-             0x80808080) == 0) { /* all data, no status */ 
-            if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-                midi->sysex_in_progress = FALSE;
-            }
-            i += 4;
-        } else {
-            while (i < len) {
-                /* send one byte at a time */
-                unsigned char byte = data[i++];
-                if (is_real_time(byte) && 
-                    pm_realtime_filtered(byte, midi->filters)) {
-                    continue; /* real-time data is filtered, so omit */
-                }
-                midi->sysex_message |= 
-                    (byte << (8 * midi->sysex_message_count++));
-                if (byte == MIDI_EOX) {
-                    midi->sysex_in_progress = FALSE;
-                    pm_flush_sysex(midi, event.timestamp);
-                    return i;
-                } else if (midi->sysex_message_count == 4) {
-                    pm_flush_sysex(midi, event.timestamp);
-                    /* after handling at least one non-data byte
-                     * and reaching a 4-byte message boundary,
-                     * resume trying to send 4 at a time in outer loop
-                     */
-                    break;
-                }
-            }
-        }
-    }
-    return i;
-}
-
-
-#ifndef NEWBUFFER
-/* this code is apparently never called */
-int pm_queue_full(PmInternal *midi)
-{
-    long tail;
-
-    /* arg checking */
-    assert(midi != NULL);
-    
-    tail = midi->tail + 1;
-    if (tail == midi->buffer_len) tail = 0;
-    return tail == midi->head;
-}
-#endif
+#ifdef _MSC_VER
+ #pragma warning(disable: 4244) // stop warnings about downsize typecasts
+ #pragma warning(disable: 4018) // stop warnings about signed/unsigned
+#endif
+
+#include "stdlib.h"
+#include "string.h"
+#include "portmidi.h"
+#include "porttime.h"
+#include "pmutil.h"
+#include "pminternal.h"
+#include <assert.h>
+
+#define MIDI_CLOCK      0xf8
+#define MIDI_ACTIVE     0xfe
+#define MIDI_STATUS_MASK 0x80
+#define MIDI_SYSEX      0xf0
+#define MIDI_EOX        0xf7
+#define MIDI_START      0xFA
+#define MIDI_STOP       0xFC
+#define MIDI_CONTINUE   0xFB
+#define MIDI_F9         0xF9
+#define MIDI_FD         0xFD
+#define MIDI_RESET      0xFF
+#define MIDI_NOTE_ON    0x90
+#define MIDI_NOTE_OFF   0x80
+#define MIDI_CHANNEL_AT 0xD0
+#define MIDI_POLY_AT    0xA0
+#define MIDI_PROGRAM    0xC0
+#define MIDI_CONTROL    0xB0
+#define MIDI_PITCHBEND  0xE0
+#define MIDI_MTC        0xF1
+#define MIDI_SONGPOS    0xF2
+#define MIDI_SONGSEL    0xF3
+#define MIDI_TUNE       0xF6
+
+#define is_empty(midi) ((midi)->tail == (midi)->head)
+
+/* this is not static so that pm_init can set it directly if
+ *   (see pmmac.c:pm_init())
+ */
+int pm_initialized = FALSE;
+
+int pm_hosterror;
+char pm_hosterror_text[PM_HOST_ERROR_MSG_LEN];
+
+#ifdef PM_CHECK_ERRORS
+
+#include <stdio.h>
+
+#define STRING_MAX 80
+
+static void prompt_and_exit(void)
+{
+    char line[STRING_MAX];
+    printf("type ENTER...");
+    fgets(line, STRING_MAX, stdin);
+    /* this will clean up open ports: */
+    exit(-1);
+}
+
+
+static PmError pm_errmsg(PmError err)
+{
+    if (err == pmHostError) {
+        /* it seems pointless to allocate memory and copy the string,
+         * so I will do the work of Pm_GetHostErrorText directly
+         */
+        printf("PortMidi found host error...\n  %s\n", pm_hosterror_text);
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* clear the message */
+        prompt_and_exit();
+    } else if (err < 0) {
+        printf("PortMidi call failed...\n  %s\n", Pm_GetErrorText(err));
+        prompt_and_exit();
+    }
+    return err;
+}
+#else
+#define pm_errmsg(err) err
+#endif
+
+/*
+====================================================================
+system implementation of portmidi interface
+====================================================================
+*/
+
+int pm_descriptor_max = 0;
+int pm_descriptor_index = 0;
+descriptor_type descriptors = NULL;
+
+/* pm_add_device -- describe interface/device pair to library 
+ *
+ * This is called at intialization time, once for each 
+ * interface (e.g. DirectSound) and device (e.g. SoundBlaster 1)
+ * The strings are retained but NOT COPIED, so do not destroy them!
+ *
+ * returns pmInvalidDeviceId if device memory is exceeded
+ * otherwise returns pmNoError
+ */
+PmError pm_add_device(char *interf, char *name, int input, 
+                      void *descriptor, pm_fns_type dictionary) {
+    if (pm_descriptor_index >= pm_descriptor_max) {
+        // expand descriptors
+        descriptor_type new_descriptors = (descriptor_type) 
+            pm_alloc(sizeof(descriptor_node) * (pm_descriptor_max + 32));
+        if (!new_descriptors) return pmInsufficientMemory;
+        if (descriptors) {
+            memcpy(new_descriptors, descriptors, 
+                   sizeof(descriptor_node) * pm_descriptor_max);
+            free(descriptors);
+        }
+        pm_descriptor_max += 32;
+        descriptors = new_descriptors;
+    }
+    descriptors[pm_descriptor_index].pub.interf = interf;
+    descriptors[pm_descriptor_index].pub.name = name;
+    descriptors[pm_descriptor_index].pub.input = input;
+    descriptors[pm_descriptor_index].pub.output = !input;
+
+    /* default state: nothing to close (for automatic device closing) */
+    descriptors[pm_descriptor_index].pub.opened = FALSE;
+
+    /* ID number passed to win32 multimedia API open */
+    descriptors[pm_descriptor_index].descriptor = descriptor;
+    
+    /* points to PmInternal, allows automatic device closing */
+    descriptors[pm_descriptor_index].internalDescriptor = NULL;
+
+    descriptors[pm_descriptor_index].dictionary = dictionary;
+    
+    pm_descriptor_index++;
+    
+    return pmNoError;
+}
+
+
+/* utility to look up device, given a pattern, 
+   note: pattern is modified
+ */
+int pm_find_default_device(char *pattern, int is_input)
+{
+    int id = pmNoDevice;
+    int i;
+    /* first parse pattern into name, interf parts */
+    char *interf_pref = ""; /* initially assume it is not there */
+    char *name_pref = strstr(pattern, ", ");
+
+    if (name_pref) { /* found separator, adjust the pointer */
+        interf_pref = pattern;
+        name_pref[0] = 0;
+        name_pref += 2;
+    } else {
+        name_pref = pattern; /* whole string is the name pattern */
+    }
+    for (i = 0; i < pm_descriptor_index; i++) {
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        if (info->input == is_input &&
+            strstr(info->name, name_pref) &&
+            strstr(info->interf, interf_pref)) {
+            id = i;
+            break;
+        }
+    }    
+    return id;
+}
+
+
+/*
+====================================================================
+portmidi implementation
+====================================================================
+*/
+
+int Pm_CountDevices( void ) {
+    Pm_Initialize();
+    /* no error checking -- Pm_Initialize() does not fail */
+    return pm_descriptor_index;
+}
+
+
+const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id ) {
+    Pm_Initialize(); /* no error check needed */
+    if (id >= 0 && id < pm_descriptor_index) {
+        return &descriptors[id].pub;
+    }
+    return NULL;
+}
+
+/* pm_success_fn -- "noop" function pointer */
+PmError pm_success_fn(PmInternal *midi) {
+    return pmNoError;
+}
+
+/* none_write -- returns an error if called */
+PmError none_write_short(PmInternal *midi, PmEvent *buffer) {
+    return pmBadPtr;
+}
+
+/* pm_fail_timestamp_fn -- placeholder for begin_sysex and flush */
+PmError pm_fail_timestamp_fn(PmInternal *midi, PmTimestamp timestamp) {
+    return pmBadPtr;
+}
+
+PmError none_write_byte(PmInternal *midi, unsigned char byte, 
+                        PmTimestamp timestamp) {
+    return pmBadPtr;
+}
+
+/* pm_fail_fn -- generic function, returns error if called */
+PmError pm_fail_fn(PmInternal *midi) {
+    return pmBadPtr;
+}
+
+static PmError none_open(PmInternal *midi, void *driverInfo) {
+    return pmBadPtr;
+}
+static void none_get_host_error(PmInternal * midi, char * msg, unsigned int len) {
+    strcpy(msg, "");
+}
+static unsigned int none_has_host_error(PmInternal * midi) {
+    return FALSE;
+}
+PmTimestamp none_synchronize(PmInternal *midi) {
+    return 0;
+}
+
+#define none_abort pm_fail_fn
+#define none_close pm_fail_fn
+
+pm_fns_node pm_none_dictionary = {
+    none_write_short,
+    none_sysex,
+    none_sysex,
+    none_write_byte,
+    none_write_short,
+    none_write_flush,
+    none_synchronize,
+    none_open,
+    none_abort, 
+    none_close,
+    none_poll,
+    none_has_host_error,
+    none_get_host_error 
+};
+
+
+const char *Pm_GetErrorText( PmError errnum ) {
+    const char *msg;
+
+    switch(errnum)
+    {
+    case pmNoError:                  
+        msg = ""; 
+        break;
+    case pmHostError:                
+        msg = "PortMidi: `Host error'"; 
+        break;
+    case pmInvalidDeviceId:          
+        msg = "PortMidi: `Invalid device ID'"; 
+        break;
+    case pmInsufficientMemory:       
+        msg = "PortMidi: `Insufficient memory'"; 
+        break;
+    case pmBufferTooSmall:           
+        msg = "PortMidi: `Buffer too small'"; 
+        break;
+    case pmBadPtr:                   
+        msg = "PortMidi: `Bad pointer'"; 
+        break;
+    case pmInternalError:            
+        msg = "PortMidi: `Internal PortMidi Error'"; 
+        break;
+    case pmBufferOverflow:
+        msg = "PortMidi: `Buffer overflow'";
+        break;
+    case pmBadData:
+        msg = "PortMidi: `Invalid MIDI message Data'";
+        break;
+    case pmBufferMaxSize:
+        msg = "PortMidi: `Buffer cannot be made larger'";
+        break;
+    default:                         
+        msg = "PortMidi: `Illegal error number'"; 
+        break;
+    }
+    return msg;
+}
+
+
+/* This can be called whenever you get a pmHostError return value.
+ * The error will always be in the global pm_hosterror_text.
+ */
+void Pm_GetHostErrorText(char * msg, unsigned int len) {
+    assert(msg);
+    assert(len > 0);
+    if (pm_hosterror) {
+        strncpy(msg, (char *) pm_hosterror_text, len);
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* clear the message; not necessary, but it
+                                     might help with debugging */
+        msg[len - 1] = 0; /* make sure string is terminated */
+    } else {
+        msg[0] = 0; /* no string to return */
+    }
+}
+
+
+int Pm_HasHostError(PortMidiStream * stream) {
+    if (pm_hosterror) return TRUE;
+    if (stream) {
+        PmInternal * midi = (PmInternal *) stream;
+        pm_hosterror = (*midi->dictionary->has_host_error)(midi);
+        if (pm_hosterror) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+            /* now error message is global */
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+
+PmError Pm_Initialize( void ) {
+    if (!pm_initialized) {
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* the null string */
+        pm_init();
+        pm_initialized = TRUE;
+    }
+    return pmNoError;
+}
+
+
+PmError Pm_Terminate( void ) {
+    if (pm_initialized) {
+        pm_term();
+        // if there are no devices, descriptors might still be NULL
+        if (descriptors != NULL) {
+            free(descriptors);
+            descriptors = NULL;
+        }
+        pm_descriptor_index = 0;
+        pm_descriptor_max = 0;
+        pm_initialized = FALSE;
+    }
+    return pmNoError;
+}
+
+
+/* Pm_Read -- read up to length longs from source into buffer */
+/*
+ * returns number of longs actually read, or error code
+ */
+int Pm_Read(PortMidiStream *stream, PmEvent *buffer, long length) {
+    PmInternal *midi = (PmInternal *) stream;
+    int n = 0;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.input)
+        err = pmBadPtr;    
+    /* First poll for data in the buffer...
+     * This either simply checks for data, or attempts first to fill the buffer
+     * with data from the MIDI hardware; this depends on the implementation.
+     * We could call Pm_Poll here, but that would redo a lot of redundant
+     * parameter checking, so I copied some code from Pm_Poll to here: */
+    else err = (*(midi->dictionary->poll))(midi);
+
+    if (err != pmNoError) {
+        if (err == pmHostError) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+          pm_hosterror = TRUE;
+        }
+        return pm_errmsg(err);
+    }
+
+    while (n < length) {
+        PmError err = Pm_Dequeue(midi->queue, buffer++);
+        if (err == pmBufferOverflow) {
+            /* ignore the data we have retreived so far */
+            return pm_errmsg(pmBufferOverflow);
+        } else if (err == 0) { /* empty queue */
+            break;
+        }
+        n++;
+    }
+    return n;
+}
+
+PmError Pm_Poll( PortMidiStream *stream )
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err;
+
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.input)
+        err = pmBadPtr;
+    else
+        err = (*(midi->dictionary->poll))(midi);
+
+    if (err != pmNoError) {
+        if (err == pmHostError) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+           pm_hosterror = TRUE;
+        }
+        return pm_errmsg(err);
+    }
+
+    return !Pm_QueueEmpty(midi->queue);
+}
+
+
+/* this is called from Pm_Write and Pm_WriteSysEx to issue a
+ * call to the system-dependent end_sysex function and handle 
+ * the error return
+ */
+static PmError pm_end_sysex(PmInternal *midi)
+{
+    PmError err = (*midi->dictionary->end_sysex)(midi, 0);
+    midi->sysex_in_progress = FALSE;
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+    return err;
+}
+
+
+/* to facilitate correct error-handling, Pm_Write, Pm_WriteShort, and
+   Pm_WriteSysEx all operate a state machine that "outputs" calls to
+   write_short, begin_sysex, write_byte, end_sysex, and write_realtime */
+
+PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length)
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+    int i;
+    int bits;
+    
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.output)
+        err = pmBadPtr;
+    else
+        err = pmNoError;
+    
+    if (err != pmNoError) goto pm_write_error;
+    
+    if (midi->latency == 0) {
+        midi->now = 0;
+    } else {
+        midi->now = (*(midi->time_proc))(midi->time_info);
+        if (midi->first_message || midi->sync_time + 100 /*ms*/ < midi->now) {
+            /* time to resync */
+            midi->now = (*midi->dictionary->synchronize)(midi);
+            midi->first_message = FALSE;
+        }
+    }
+    /* error recovery: when a sysex is detected, we call
+     *   dictionary->begin_sysex() followed by calls to
+     *   dictionary->write_byte() and dictionary->write_realtime()
+     *   until an end-of-sysex is detected, when we call
+     *   dictionary->end_sysex(). After an error occurs, 
+     *   Pm_Write() continues to call functions. For example,
+     *   it will continue to call write_byte() even after
+     *   an error sending a sysex message, and end_sysex() will be
+     *   called when an EOX or non-real-time status is found.
+     * When errors are detected, Pm_Write() returns immediately, 
+     *   so it is possible that this will drop data and leave
+     *   sysex messages in a partially transmitted state.
+     */
+    for (i = 0; i < length; i++) {
+        unsigned long msg = buffer[i].message;
+        bits = 0;
+        /* is this a sysex message? */
+        if (Pm_MessageStatus(msg) == MIDI_SYSEX) {
+            if (midi->sysex_in_progress) {
+                /* error: previous sysex was not terminated by EOX */
+                midi->sysex_in_progress = FALSE;
+                err = pmBadData;
+                goto pm_write_error;
+            }
+            midi->sysex_in_progress = TRUE;
+            if ((err = (*midi->dictionary->begin_sysex)(midi, 
+                               buffer[i].timestamp)) != pmNoError)
+                goto pm_write_error;
+            if ((err = (*midi->dictionary->write_byte)(midi, MIDI_SYSEX,
+                               buffer[i].timestamp)) != pmNoError) 
+                goto pm_write_error;
+            bits = 8;
+            /* fall through to continue sysex processing */
+        } else if ((msg & MIDI_STATUS_MASK) && 
+                   (Pm_MessageStatus(msg) != MIDI_EOX)) {
+            /* a non-sysex message */
+            if (midi->sysex_in_progress) {
+                /* this should be a realtime message */
+                if (is_real_time(msg)) {
+                    if ((err = (*midi->dictionary->write_realtime)(midi, 
+                                       &(buffer[i]))) != pmNoError)
+                        goto pm_write_error;
+                } else {
+                    midi->sysex_in_progress = FALSE;
+                    err = pmBadData;
+                    /* ignore any error from this, because we already have one */
+                    /* pass 0 as timestamp -- it's ignored */
+                    (*midi->dictionary->end_sysex)(midi, 0);
+                    goto pm_write_error;
+                }
+            } else { /* regular short midi message */
+                if ((err = (*midi->dictionary->write_short)(midi, 
+                                   &(buffer[i]))) != pmNoError)
+                    goto pm_write_error;
+                continue;
+            }
+        }
+        if (midi->sysex_in_progress) { /* send sysex bytes until EOX */
+            /* see if we can accelerate data transfer */
+            if (bits == 0 && midi->fill_base && /* 4 bytes to copy */
+                (*midi->fill_offset_ptr) + 4 <= midi->fill_length &&
+                (msg & 0x80808080) == 0) { /* all data */
+                    /* copy 4 bytes from msg to fill_base + fill_offset */
+                    unsigned char *ptr = midi->fill_base + 
+                                         *(midi->fill_offset_ptr);
+                    ptr[0] = msg; ptr[1] = msg >> 8; 
+                    ptr[2] = msg >> 18; ptr[3] = msg >> 24;
+                    (*midi->fill_offset_ptr) += 4;
+                     continue;
+            }
+            /* no acceleration, so do byte-by-byte copying */
+            while (bits < 32) {
+                unsigned char midi_byte = (unsigned char) (msg >> bits);
+                if ((err = (*midi->dictionary->write_byte)(midi, midi_byte, 
+                                   buffer[i].timestamp)) != pmNoError)
+                    goto pm_write_error;
+                if (midi_byte == MIDI_EOX) {
+                    err = pm_end_sysex(midi);
+                    if (err != pmNoError) goto error_exit;
+                    break; /* from while loop */
+                }
+                bits += 8;
+            }
+        } else {
+            /* not in sysex mode, but message did not start with status */
+            err = pmBadData;
+            goto pm_write_error;
+        }
+    }
+    /* after all messages are processed, send the data */
+    if (!midi->sysex_in_progress)
+        err = (*midi->dictionary->write_flush)(midi, 0);
+pm_write_error:
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+error_exit:
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_WriteShort(PortMidiStream *stream, long when, long msg)
+{
+    PmEvent event;
+    
+    event.timestamp = when;
+    event.message = msg;
+    return Pm_Write(stream, &event, 1);
+}
+
+
+PmError Pm_WriteSysEx(PortMidiStream *stream, PmTimestamp when, 
+                      unsigned char *msg)
+{
+    /* allocate buffer space for PM_DEFAULT_SYSEX_BUFFER_SIZE bytes */
+    /* each PmEvent holds sizeof(PmMessage) bytes of sysex data */
+    #define BUFLEN (PM_DEFAULT_SYSEX_BUFFER_SIZE / sizeof(PmMessage))
+    PmEvent buffer[BUFLEN];
+    int buffer_size = 1; /* first time, send 1. After that, it's BUFLEN */
+    PmInternal *midi = (PmInternal *) stream;
+    /* the next byte in the buffer is represented by an index, bufx, and
+       a shift in bits */
+    int shift = 0;
+    int bufx = 0;
+    buffer[0].message = 0;
+    buffer[0].timestamp = when;
+
+    while (1) {
+        /* insert next byte into buffer */
+        buffer[bufx].message |= ((*msg) << shift);
+        shift += 8;
+        if (*msg++ == MIDI_EOX) break;
+        if (shift == 32) {
+            shift = 0;
+            bufx++;
+            if (bufx == buffer_size) {
+                PmError err = Pm_Write(stream, buffer, buffer_size);
+                /* note: Pm_Write has already called errmsg() */
+                if (err) return err;
+                /* prepare to fill another buffer */
+                bufx = 0;
+                buffer_size = BUFLEN;
+                /* optimization: maybe we can just copy bytes */
+                if (midi->fill_base) {
+                    PmError err;
+                    while (*(midi->fill_offset_ptr) < midi->fill_length) {
+                        midi->fill_base[(*midi->fill_offset_ptr)++] = *msg;
+                        if (*msg++ == MIDI_EOX) {
+                            err = pm_end_sysex(midi);
+                            if (err != pmNoError) return pm_errmsg(err);
+                            goto end_of_sysex;
+                        }
+                    }
+                    /* I thought that I could do a pm_Write here and
+                     * change this if to a loop, avoiding calls in Pm_Write
+                     * to the slower write_byte, but since 
+                     * sysex_in_progress is true, this will not flush
+                     * the buffer, and we'll infinite loop: */
+                    /* err = Pm_Write(stream, buffer, 0);
+                       if (err) return err; */
+                    /* instead, the way this works is that Pm_Write calls
+                     * write_byte on 4 bytes. The first, since the buffer
+                     * is full, will flush the buffer and allocate a new
+                     * one. This primes the buffer so
+                     * that we can return to the loop above and fill it
+                     * efficiently without a lot of function calls.
+                     */
+                    buffer_size = 1; /* get another message started */
+                }
+            }
+            buffer[bufx].message = 0;
+            buffer[bufx].timestamp = when;
+        } 
+        /* keep inserting bytes until you find MIDI_EOX */
+    }
+end_of_sysex:
+    /* we're finished sending full buffers, but there may
+     * be a partial one left.
+     */
+    if (shift != 0) bufx++; /* add partial message to buffer len */
+    if (bufx) { /* bufx is number of PmEvents to send from buffer */
+        PmError err = Pm_Write(stream, buffer, bufx);
+        if (err) return err;
+    }
+    return pmNoError;
+}
+
+
+
+PmError Pm_OpenInput(PortMidiStream** stream,
+                     PmDeviceID inputDevice,
+                     void *inputDriverInfo,
+                     long bufferSize,
+                     PmTimeProcPtr time_proc,
+                     void *time_info)
+{
+    PmInternal *midi;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    *stream = NULL;
+    
+    /* arg checking */
+    if (inputDevice < 0 || inputDevice >= pm_descriptor_index) 
+        err = pmInvalidDeviceId;
+    else if (!descriptors[inputDevice].pub.input) 
+        err =  pmInvalidDeviceId;
+    else if(descriptors[inputDevice].pub.opened)
+        err =  pmInvalidDeviceId;
+    
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* create portMidi internal data */
+    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
+    *stream = midi;
+    if (!midi) {
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->device_id = inputDevice;
+    midi->write_flag = FALSE;
+    midi->time_proc = time_proc;
+    midi->time_info = time_info;
+    /* windows adds timestamps in the driver and these are more accurate than
+       using a time_proc, so do not automatically provide a time proc. Non-win
+       implementations may want to provide a default time_proc in their
+       system-specific midi_out_open() method.
+     */
+    if (bufferSize <= 0) bufferSize = 256; /* default buffer size */
+    midi->queue = Pm_QueueCreate(bufferSize, sizeof(PmEvent));
+    if (!midi->queue) {
+        /* free portMidi data */
+        *stream = NULL;
+        pm_free(midi); 
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->buffer_len = bufferSize; /* portMidi input storage */
+    midi->latency = 0; /* not used */
+    midi->sysex_in_progress = FALSE;
+    midi->sysex_message = 0; 
+    midi->sysex_message_count = 0; 
+    midi->filters = PM_FILT_ACTIVE;
+    midi->channel_mask = 0xFFFF;
+    midi->sync_time = 0;
+    midi->first_message = TRUE;
+    midi->dictionary = descriptors[inputDevice].dictionary;
+    midi->fill_base = NULL;
+    midi->fill_offset_ptr = NULL;
+    midi->fill_length = 0;
+    descriptors[inputDevice].internalDescriptor = midi;
+    /* open system dependent input device */
+    err = (*midi->dictionary->open)(midi, inputDriverInfo);
+    if (err) {
+        *stream = NULL;
+        descriptors[inputDevice].internalDescriptor = NULL;
+        /* free portMidi data */
+        Pm_QueueDestroy(midi->queue);
+        pm_free(midi);
+    } else {
+        /* portMidi input open successful */
+        descriptors[inputDevice].pub.opened = TRUE;
+    }
+error_return:
+    /* note: if there is a pmHostError, it is the responsibility
+     * of the system-dependent code (*midi->dictionary->open)()
+     * to set pm_hosterror and pm_hosterror_text
+     */
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_OpenOutput(PortMidiStream** stream,
+                      PmDeviceID outputDevice,
+                      void *outputDriverInfo,
+                      long bufferSize,
+                      PmTimeProcPtr time_proc,
+                      void *time_info,
+                      long latency ) 
+{
+    PmInternal *midi;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    *stream =  NULL;
+    
+    /* arg checking */
+    if (outputDevice < 0 || outputDevice >= pm_descriptor_index)
+        err = pmInvalidDeviceId;
+    else if (!descriptors[outputDevice].pub.output) 
+        err = pmInvalidDeviceId;
+    else if (descriptors[outputDevice].pub.opened)
+        err = pmInvalidDeviceId;
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* create portMidi internal data */
+    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
+    *stream = midi;                 
+    if (!midi) {
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->device_id = outputDevice;
+    midi->write_flag = TRUE;
+    midi->time_proc = time_proc;
+    /* if latency > 0, we need a time reference. If none is provided,
+       use PortTime library */
+    if (time_proc == NULL && latency != 0) {
+        if (!Pt_Started()) 
+            Pt_Start(1, 0, 0);
+        /* time_get does not take a parameter, so coerce */
+        midi->time_proc = (PmTimeProcPtr) Pt_Time;
+    }
+    midi->time_info = time_info;
+    midi->buffer_len = bufferSize;
+    midi->queue = NULL; /* unused by output */
+    /* if latency zero, output immediate (timestamps ignored) */
+    /* if latency < 0, use 0 but don't return an error */
+    if (latency < 0) latency = 0;
+    midi->latency = latency;
+    midi->sysex_in_progress = FALSE;
+    midi->sysex_message = 0; /* unused by output */
+    midi->sysex_message_count = 0; /* unused by output */
+    midi->filters = 0; /* not used for output */
+    midi->channel_mask = 0xFFFF;
+    midi->sync_time = 0;
+    midi->first_message = TRUE;
+    midi->dictionary = descriptors[outputDevice].dictionary;
+    midi->fill_base = NULL;
+    midi->fill_offset_ptr = NULL;
+    midi->fill_length = 0;
+    descriptors[outputDevice].internalDescriptor = midi;
+    /* open system dependent output device */
+    err = (*midi->dictionary->open)(midi, outputDriverInfo);
+    if (err) {
+        *stream = NULL;
+        descriptors[outputDevice].internalDescriptor = NULL;
+        /* free portMidi data */
+        pm_free(midi); 
+    } else {
+        /* portMidi input open successful */
+        descriptors[outputDevice].pub.opened = TRUE;
+    }
+error_return:
+    /* note: system-dependent code must set pm_hosterror and
+     * pm_hosterror_text if a pmHostError occurs
+     */
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_SetChannelMask(PortMidiStream *stream, int mask)
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    if (midi == NULL)
+        err = pmBadPtr;
+    else
+        midi->channel_mask = mask;
+
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_SetFilter(PortMidiStream *stream, long filters) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    /* arg checking */
+    if (midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else
+        midi->filters = filters;
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_Close( PortMidiStream *stream ) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if (midi == NULL) /* midi must point to something */
+        err = pmBadPtr;
+    /* if it is an open device, the device_id will be valid */
+    else if (midi->device_id < 0 || midi->device_id >= pm_descriptor_index)
+        err = pmBadPtr;
+    /* and the device should be in the opened state */
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* close the device */
+    err = (*midi->dictionary->close)(midi);
+    /* even if an error occurred, continue with cleanup */
+    descriptors[midi->device_id].internalDescriptor = NULL;
+    descriptors[midi->device_id].pub.opened = FALSE;
+    if (midi->queue) Pm_QueueDestroy(midi->queue);
+    pm_free(midi); 
+error_return:
+    /* system dependent code must set pm_hosterror and
+     * pm_hosterror_text if a pmHostError occurs.
+     */
+    return pm_errmsg(err);
+}
+
+
+PmError Pm_Abort( PortMidiStream* stream ) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err;
+    /* arg checking */
+    if (midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.output)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else
+        err = (*midi->dictionary->abort)(midi);
+
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+    return pm_errmsg(err);
+}
+
+
+
+/* pm_channel_filtered returns non-zero if the channel mask is blocking the current channel */
+#define pm_channel_filtered(status, mask) \
+    ((((status) & 0xF0) != 0xF0) && (!(Pm_Channel((status) & 0x0F) & (mask))))
+
+
+/* The following two functions will checks to see if a MIDI message matches
+   the filtering criteria.  Since the sysex routines only want to filter realtime messages,
+   we need to have separate routines.
+ */
+
+
+/* pm_realtime_filtered returns non-zero if the filter will kill the current message.
+   Note that only realtime messages are checked here.
+ */
+#define pm_realtime_filtered(status, filters) \
+    ((((status) & 0xF0) == 0xF0) && ((1 << ((status) & 0xF)) & (filters)))
+
+/*
+    return ((status == MIDI_ACTIVE) && (filters & PM_FILT_ACTIVE))
+            ||  ((status == MIDI_CLOCK) && (filters & PM_FILT_CLOCK))
+            ||  ((status == MIDI_START) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_STOP) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_CONTINUE) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_F9) && (filters & PM_FILT_F9))
+            ||  ((status == MIDI_FD) && (filters & PM_FILT_FD))
+            ||  ((status == MIDI_RESET) && (filters & PM_FILT_RESET))
+            ||  ((status == MIDI_MTC) && (filters & PM_FILT_MTC))
+            ||  ((status == MIDI_SONGPOS) && (filters & PM_FILT_SONG_POSITION))
+            ||  ((status == MIDI_SONGSEL) && (filters & PM_FILT_SONG_SELECT))
+            ||  ((status == MIDI_TUNE) && (filters & PM_FILT_TUNE));
+}*/
+
+
+/* pm_status_filtered returns non-zero if a filter will kill the current message, based on status.
+   Note that sysex and real time are not checked.  It is up to the subsystem (winmm, core midi, alsa)
+   to filter sysex, as it is handled more easily and efficiently at that level.
+   Realtime message are filtered in pm_realtime_filtered.
+ */
+#define pm_status_filtered(status, filters) ((1 << (16 + ((status) >> 4))) & (filters))
+
+
+/*
+    return  ((status == MIDI_NOTE_ON) && (filters & PM_FILT_NOTE))
+            ||  ((status == MIDI_NOTE_OFF) && (filters & PM_FILT_NOTE))
+            ||  ((status == MIDI_CHANNEL_AT) && (filters & PM_FILT_CHANNEL_AFTERTOUCH))
+            ||  ((status == MIDI_POLY_AT) && (filters & PM_FILT_POLY_AFTERTOUCH))
+            ||  ((status == MIDI_PROGRAM) && (filters & PM_FILT_PROGRAM))
+            ||  ((status == MIDI_CONTROL) && (filters & PM_FILT_CONTROL))
+            ||  ((status == MIDI_PITCHBEND) && (filters & PM_FILT_PITCHBEND));
+
+}
+*/
+
+static void pm_flush_sysex(PmInternal *midi, PmTimestamp timestamp)
+{
+    PmEvent event;
+    
+    /* there may be nothing in the buffer */
+    if (midi->sysex_message_count == 0) return; /* nothing to flush */
+    
+    event.message = midi->sysex_message;
+    event.timestamp = timestamp;
+    /* copied from pm_read_short, avoids filtering */
+    if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
+        midi->sysex_in_progress = FALSE;
+    }
+    midi->sysex_message_count = 0;
+    midi->sysex_message = 0;
+}
+
+
+/* pm_read_short and pm_read_bytes
+   are the interface between system-dependent MIDI input handlers
+   and the system-independent PortMIDI code.
+   The input handler MUST obey these rules:
+   1) all short input messages must be sent to pm_read_short, which
+      enqueues them to a FIFO for the application.
+   2) each buffer of sysex bytes should be reported by calling pm_read_bytes
+      (which sets midi->sysex_in_progress). After the eox byte, 
+      pm_read_bytes will clear sysex_in_progress
+ */
+
+/* pm_read_short is the place where all input messages arrive from 
+   system-dependent code such as pmwinmm.c. Here, the messages
+   are entered into the PortMidi input buffer. 
+ */
+void pm_read_short(PmInternal *midi, PmEvent *event)
+{ 
+    int status;
+    /* arg checking */
+    assert(midi != NULL);
+    /* midi filtering is applied here */
+    status = Pm_MessageStatus(event->message);
+    if (!pm_status_filtered(status, midi->filters)
+        && (!is_real_time(status) || 
+            !pm_realtime_filtered(status, midi->filters))
+        && !pm_channel_filtered(status, midi->channel_mask)) {
+        /* if sysex is in progress and we get a status byte, it had
+           better be a realtime message or the starting SYSEX byte;
+           otherwise, we exit the sysex_in_progress state
+         */
+        if (midi->sysex_in_progress && (status & MIDI_STATUS_MASK)) {
+            /* two choices: real-time or not. If it's real-time, then
+             * this should be delivered as a sysex byte because it is
+             * embedded in a sysex message
+             */
+            if (is_real_time(status)) {
+                midi->sysex_message |= 
+                        (status << (8 * midi->sysex_message_count++));
+                if (midi->sysex_message_count == 4) {
+                    pm_flush_sysex(midi, event->timestamp);
+                }
+            } else { /* otherwise, it's not real-time. This interrupts
+                      * a sysex message in progress */
+                midi->sysex_in_progress = FALSE;
+            }
+        } else if (Pm_Enqueue(midi->queue, event) == pmBufferOverflow) {
+            midi->sysex_in_progress = FALSE;
+        }
+    }
+}
+
+/* pm_read_bytes -- read one (partial) sysex msg from MIDI data */
+/*
+ * returns how many bytes processed
+ */
+unsigned int pm_read_bytes(PmInternal *midi, unsigned char *data, 
+                    int len, PmTimestamp timestamp)
+{
+    int i = 0; /* index into data, must not be unsigned (!) */
+    PmEvent event;
+    event.timestamp = timestamp;
+    assert(midi);
+    /* note that since buffers may not have multiples of 4 bytes,
+     * pm_read_bytes may be called in the middle of an outgoing
+     * 4-byte PortMidi message. sysex_in_progress indicates that
+     * a sysex has been sent but no eox.
+     */
+    if (len == 0) return 0; /* sanity check */
+    if (!midi->sysex_in_progress) {
+        while (i < len) { /* process all data */
+            unsigned char byte = data[i++];
+            if (byte == MIDI_SYSEX &&
+                !pm_realtime_filtered(byte, midi->filters)) {
+                midi->sysex_in_progress = TRUE;
+                i--; /* back up so code below will get SYSEX byte */
+                break; /* continue looping below to process msg */
+            } else if (byte == MIDI_EOX) {
+                midi->sysex_in_progress = FALSE;
+                return i; /* done with one message */
+            } else if (byte & MIDI_STATUS_MASK) {
+                /* We're getting MIDI but no sysex in progress.
+                 * Either the SYSEX status byte was dropped or
+                 * the message was filtered. Drop the data, but
+                 * send any embedded realtime bytes.
+                 */
+                /* assume that this is a real-time message:
+                 * it is an error to pass non-real-time messages
+                 * to pm_read_bytes
+                 */
+                event.message = byte;
+                pm_read_short(midi, &event);
+            }
+        } /* all bytes in the buffer are processed */
+    }
+    /* Now, i<len implies sysex_in_progress. If sysex_in_progress
+     * becomes false in the loop, there must have been an overflow
+     * and we can just drop all remaining bytes 
+     */
+    while (i < len && midi->sysex_in_progress) {
+        if (midi->sysex_message_count == 0 && i <= len - 4 &&
+            ((event.message = (((long) data[i]) | 
+                             (((long) data[i+1]) << 8) |
+                             (((long) data[i+2]) << 16) |
+                             (((long) data[i+3]) << 24))) &
+             0x80808080) == 0) { /* all data, no status */ 
+            if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
+                midi->sysex_in_progress = FALSE;
+            }
+            i += 4;
+        } else {
+            while (i < len) {
+                /* send one byte at a time */
+                unsigned char byte = data[i++];
+                if (is_real_time(byte) && 
+                    pm_realtime_filtered(byte, midi->filters)) {
+                    continue; /* real-time data is filtered, so omit */
+                }
+                midi->sysex_message |= 
+                    (byte << (8 * midi->sysex_message_count++));
+                if (byte == MIDI_EOX) {
+                    midi->sysex_in_progress = FALSE;
+                    pm_flush_sysex(midi, event.timestamp);
+                    return i;
+                } else if (midi->sysex_message_count == 4) {
+                    pm_flush_sysex(midi, event.timestamp);
+                    /* after handling at least one non-data byte
+                     * and reaching a 4-byte message boundary,
+                     * resume trying to send 4 at a time in outer loop
+                     */
+                    break;
+                }
+            }
+        }
+    }
+    return i;
+}
+
+
diff --git a/portmidi/pm_common/portmidi.h b/portmidi/pm_common/portmidi.h
old mode 100755
new mode 100644
index 8f4879f38..6601fc83a
--- a/portmidi/pm_common/portmidi.h
+++ b/portmidi/pm_common/portmidi.h
@@ -7,12 +7,7 @@ extern "C" {
 /*
  * PortMidi Portable Real-Time MIDI Library
  * PortMidi API Header File
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
- *
- * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
- * Copyright (c) 2001-2006 Roger B. Dannenberg
- *
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
+ * Latest version available at: http://sourceforge.net/projects/portmedia
  *
  * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
  * Copyright (c) 2001-2006 Roger B. Dannenberg
@@ -51,24 +46,6 @@ extern "C" {
 /* CHANGELOG FOR PORTMIDI
  *     (see ../CHANGELOG.txt)
  *
- * IMPORTANT INFORMATION ABOUT A WIN32 BUG:
- *
- *    Windows apparently has a serious midi bug -- if you do not close ports, Windows
- *    may crash. PortMidi tries to protect against this by using a DLL to clean up.
- *
- *    If client exits for example with:
- *      i)  assert 
- *      ii) Ctrl^c, 
- *    then DLL clean-up routine called. However, when client does something 
- *    really bad (e.g. assigns value to NULL pointer) then DLL CLEANUP ROUTINE
- *    NEVER RUNS! In this state, if you wait around long enough, you will
- *    probably get the blue screen of death. Can also go into Pview and there will
- *    exist zombie process that you can't kill.
- *
- *    You can enable the DLL cleanup routine by defining USE_DLL_FOR_CLEANUP.
- *    Do not define this preprocessor symbol if you do not want to use this
- *    feature.
- *
  * NOTES ON HOST ERROR REPORTING: 
  *
  *    PortMidi errors (of type PmError) are generic, system-independent errors.
@@ -113,8 +90,6 @@ extern "C" {
  *    PM_CHECK_ERRORS more-or-less takes over error checking for return values,
  *        stopping your program and printing error messages when an error
  *        occurs. This also uses stdio for console text I/O.
- *    USE_DLL_FOR_CLEANUP is described above. (Windows only.)
- *    
  */ 
 
 #ifndef FALSE
@@ -127,11 +102,13 @@ extern "C" {
 /* default size of buffers for sysex transmission: */
 #define PM_DEFAULT_SYSEX_BUFFER_SIZE 1024
 
-
+/** List of portmidi errors.*/
 typedef enum {
     pmNoError = 0,
+    pmNoData = 0, /**< A "no error" return that also indicates no data avail. */
+    pmGotData = 1, /**< A "no error" return that also indicates data available */
     pmHostError = -10000,
-    pmInvalidDeviceId, /* out of range or 
+    pmInvalidDeviceId, /** out of range or 
                         * output device when input is requested or 
                         * input device when output is requested or
                         * device is already opened 
@@ -139,33 +116,34 @@ typedef enum {
     pmInsufficientMemory,
     pmBufferTooSmall,
     pmBufferOverflow,
-    pmBadPtr,
-    pmBadData, /* illegal midi data, e.g. missing EOX */
+    pmBadPtr, /* PortMidiStream parameter is NULL or
+               * stream is not opened or
+               * stream is output when input is required or
+               * stream is input when output is required */
+    pmBadData, /** illegal midi data, e.g. missing EOX */
     pmInternalError,
-    pmBufferMaxSize /* buffer is already as large as it can be */
+    pmBufferMaxSize /** buffer is already as large as it can be */
     /* NOTE: If you add a new error type, be sure to update Pm_GetErrorText() */
 } PmError;
 
-/*
+/**
     Pm_Initialize() is the library initialisation function - call this before
     using the library.
 */
-
 PmError Pm_Initialize( void );
 
-/*
+/**
     Pm_Terminate() is the library termination function - call this after
     using the library.
 */
-
 PmError Pm_Terminate( void );
 
-/*  A single PortMidiStream is a descriptor for an open MIDI device.
+/**  A single PortMidiStream is a descriptor for an open MIDI device.
 */
 typedef void PortMidiStream;
 #define PmStream PortMidiStream
 
-/*
+/**
     Test whether stream has a pending host error. Normally, the client finds
     out about errors through returned error codes, but some errors can occur
     asynchronously where the client does not
@@ -182,13 +160,13 @@ typedef void PortMidiStream;
 int Pm_HasHostError( PortMidiStream * stream );
 
 
-/*  Translate portmidi error number into human readable message.
+/**  Translate portmidi error number into human readable message.
     These strings are constants (set at compile time) so client has 
     no need to allocate storage
 */
 const char *Pm_GetErrorText( PmError errnum );
 
-/*  Translate portmidi host error into human readable message.
+/**  Translate portmidi host error into human readable message.
     These strings are computed at run time, so client has to allocate storage.
     After this routine executes, the host error is cleared. 
 */
@@ -198,7 +176,7 @@ void Pm_GetHostErrorText(char * msg, unsigned int len);
 #define PM_HOST_ERROR_MSG_LEN 256u /* any host error msg will occupy less 
                                       than this number of characters */
 
-/*
+/**
     Device enumeration mechanism.
 
     Device ids range from 0 to Pm_CountDevices()-1.
@@ -207,75 +185,77 @@ void Pm_GetHostErrorText(char * msg, unsigned int len);
 typedef int PmDeviceID;
 #define pmNoDevice -1
 typedef struct {
-    int structVersion; 
-    const char *interf; /* underlying MIDI API, e.g. MMSystem or DirectX */
-    const char *name;   /* device name, e.g. USB MidiSport 1x1 */
-    int input; /* true iff input is available */
-    int output; /* true iff output is available */
-    int opened; /* used by generic PortMidi code to do error checking on arguments */
+    int structVersion; /**< this internal structure version */ 
+    const char *interf; /**< underlying MIDI API, e.g. MMSystem or DirectX */
+    const char *name;   /**< device name, e.g. USB MidiSport 1x1 */
+    int input; /**< true iff input is available */
+    int output; /**< true iff output is available */
+    int opened; /**< used by generic PortMidi code to do error checking on arguments */
 
 } PmDeviceInfo;
 
-
+/**  Get devices count, ids range from 0 to Pm_CountDevices()-1. */
 int Pm_CountDevices( void );
-/*
+/**
     Pm_GetDefaultInputDeviceID(), Pm_GetDefaultOutputDeviceID()
 
     Return the default device ID or pmNoDevice if there are no devices.
-    The result can be passed to Pm_OpenMidi().
+    The result (but not pmNoDevice) can be passed to Pm_OpenMidi().
     
-    On the PC, the user can specify a default device by
-    setting an environment variable. For example, to use device #1.
-
-        set PM_RECOMMENDED_OUTPUT_DEVICE=1
+    The default device can be specified using a small application
+    named pmdefaults that is part of the PortMidi distribution. This
+    program in turn uses the Java Preferences object created by
+    java.util.prefs.Preferences.userRoot().node("/PortMidi"); the
+    preference is set by calling 
+        prefs.put("PM_RECOMMENDED_OUTPUT_DEVICE", prefName);
+    or  prefs.put("PM_RECOMMENDED_INPUT_DEVICE", prefName);
     
-    The user should first determine the available device ID by using
-    the supplied application "testin" or "testout".
-
-    In general, the registry is a better place for this kind of info,
-    and with USB devices that can come and go, using integers is not
-    very reliable for device identification. Under Windows, if
-    PM_RECOMMENDED_OUTPUT_DEVICE (or PM_RECOMMENDED_INPUT_DEVICE) is
-    *NOT* found in the environment, then the default device is obtained
-    by looking for a string in the registry under:
-        HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Input_Device
-    and HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Output_Device
-    for a string. The number of the first device with a substring that
-    matches the string exactly is returned. For example, if the string
-    in the registry is "USB", and device 1 is named 
-    "In USB MidiSport 1x1", then that will be the default
-    input because it contains the string "USB".
-
-    In addition to the name, PmDeviceInfo has the member "interf", which
-    is the interface name. (The "interface" is the underlying software
-    system or API used by PortMidi to access devices. Examples are 
-    MMSystem, DirectX (not implemented), ALSA, OSS (not implemented), etc.)
-    At present, the only Win32 interface is "MMSystem", the only Linux
-    interface is "ALSA", and the only Max OS X interface is "CoreMIDI".
-    To specify both the interface and the device name in the registry,
-    separate the two with a comma and a space, e.g.:
-        MMSystem, In USB MidiSport 1x1
-    In this case, the string before the comma must be a substring of
-    the "interf" string, and the string after the space must be a 
-    substring of the "name" name string in order to match the device.
-
-    Note: in the current release, the default is simply the first device
-    (the input or output device with the lowest PmDeviceID).
+    In the statements above, prefName is a string describing the
+    MIDI device in the form "interf, name" where interf identifies
+    the underlying software system or API used by PortMdi to access
+    devices and name is the name of the device. These correspond to 
+    the interf and name fields of a PmDeviceInfo. (Currently supported
+    interfaces are "MMSystem" for Win32, "ALSA" for Linux, and 
+    "CoreMIDI" for OS X, so in fact, there is no choice of interface.)
+    In "interf, name", the strings are actually substrings of 
+    the full interface and name strings. For example, the preference 
+    "Core, Sport" will match a device with interface "CoreMIDI"
+    and name "In USB MidiSport 1x1". It will also match "CoreMIDI"
+    and "In USB MidiSport 2x2". The devices are enumerated in device
+    ID order, so the lowest device ID that matches the pattern becomes
+    the default device. Finally, if the comma-space (", ") separator
+    between interface and name parts of the preference is not found,
+    the entire preference string is interpreted as a name, and the
+    interface part is the empty string, which matches anything.
+
+    On the MAC, preferences are stored in 
+      /Users/$NAME/Library/Preferences/com.apple.java.util.prefs.plist
+    which is a binary file. In addition to the pmdefaults program,
+    there are utilities that can read and edit this preference file.
+
+    On the PC, 
+
+    On Linux, 
+
 */
 PmDeviceID Pm_GetDefaultInputDeviceID( void );
+/** see PmDeviceID Pm_GetDefaultInputDeviceID() */
 PmDeviceID Pm_GetDefaultOutputDeviceID( void );
 
-/*
+/**
     PmTimestamp is used to represent a millisecond clock with arbitrary
     start time. The type is used for all MIDI timestampes and clocks.
 */
 typedef long PmTimestamp;
 typedef PmTimestamp (*PmTimeProcPtr)(void *time_info);
 
-/* TRUE if t1 before t2 */
+/** TRUE if t1 before t2 */
 #define PmBefore(t1,t2) ((t1-t2) < 0)
-
-/*
+/** 
+    \defgroup grp_device Input/Output Devices Handling
+    @{
+*/
+/**
     Pm_GetDeviceInfo() returns a pointer to a PmDeviceInfo structure
     referring to the device specified by id.
     If id is out of range the function returns NULL.
@@ -286,7 +266,7 @@ typedef PmTimestamp (*PmTimeProcPtr)(void *time_info);
 */
 const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id );
 
-/*
+/**
     Pm_OpenInput() and Pm_OpenOutput() open devices.
 
     stream is the address of a PortMidiStream pointer which will receive
@@ -316,10 +296,10 @@ const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id );
     latency is the delay in milliseconds applied to timestamps to determine 
     when the output should actually occur. (If latency is < 0, 0 is assumed.) 
     If latency is zero, timestamps are ignored and all output is delivered
-    immediately. If latency is greater than zero, output is delayed until
-    the message timestamp plus the latency. (NOTE: time is measured relative
-    to the time source indicated by time_proc. Timestamps are absolute, not
-    relative delays or offsets.) In some cases, PortMidi can obtain
+    immediately. If latency is greater than zero, output is delayed until the
+    message timestamp plus the latency. (NOTE: the time is measured relative 
+    to the time source indicated by time_proc. Timestamps are absolute,
+    not relative delays or offsets.) In some cases, PortMidi can obtain
     better timing than your application by passing timestamps along to the
     device driver or hardware. Latency may also help you to synchronize midi
     data to audio data by matching midi latency to the audio buffer latency.
@@ -334,7 +314,11 @@ const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id );
     time_proc result values are appended to incoming MIDI data, and time_proc
     times are used to schedule outgoing MIDI data (when latency is non-zero).
 
-    time_info is a pointer passed to time_proc. 
+    time_info is a pointer passed to time_proc.
+
+    Example: If I provide a timestamp of 5000, latency is 1, and time_proc
+    returns 4990, then the desired output time will be when time_proc returns
+    timestamp+latency = 5001. This will be 5001-4990 = 11ms from now.
 
     return value:
     Upon success Pm_Open() returns PmNoError and places a pointer to a
@@ -360,8 +344,14 @@ PmError Pm_OpenOutput( PortMidiStream** stream,
                 PmTimeProcPtr time_proc,
                 void *time_info,
                 long latency );
+  /** @} */
+
+/**
+   \defgroup grp_events_filters Events and Filters Handling
+   @{
+*/
 
-/* 
+/*  \function PmError Pm_SetFilter( PortMidiStream* stream, long filters )
     Pm_SetFilter() sets filters on an open input stream to drop selected
     input types. By default, only active sensing messages are filtered.
     To prohibit, say, active sensing and sysex messages, call
@@ -374,55 +364,57 @@ PmError Pm_OpenOutput( PortMidiStream** stream,
     Or you may be using a sequencer or drum-machine for MIDI clock information but want to
     exclude any notes it may play.
  */
-
-/* filter active sensing messages (0xFE): */
+    
+/* Filter bit-mask definitions */
+/** filter active sensing messages (0xFE): */
 #define PM_FILT_ACTIVE (1 << 0x0E)
-/* filter system exclusive messages (0xF0): */
+/** filter system exclusive messages (0xF0): */
 #define PM_FILT_SYSEX (1 << 0x00)
-/* filter clock messages (CLOCK 0xF8, START 0xFA, STOP 0xFC, and CONTINUE 0xFB) */
-#define PM_FILT_CLOCK ((1 << 0x08) | (1 << 0x0A) | (1 << 0x0C) | (1 << 0x0B))
-/* filter play messages (start 0xFA, stop 0xFC, continue 0xFB) */
-#define PM_FILT_PLAY (1 << 0x0A)
-/* filter tick messages (0xF9) */
+/** filter MIDI clock message (0xF8) */
+#define PM_FILT_CLOCK (1 << 0x08)
+/** filter play messages (start 0xFA, stop 0xFC, continue 0xFB) */
+#define PM_FILT_PLAY ((1 << 0x0A) | (1 << 0x0C) | (1 << 0x0B))
+/** filter tick messages (0xF9) */
 #define PM_FILT_TICK (1 << 0x09)
-/* filter undefined FD messages */
+/** filter undefined FD messages */
 #define PM_FILT_FD (1 << 0x0D)
-/* filter undefined real-time messages */
+/** filter undefined real-time messages */
 #define PM_FILT_UNDEFINED PM_FILT_FD
-/* filter reset messages (0xFF) */
+/** filter reset messages (0xFF) */
 #define PM_FILT_RESET (1 << 0x0F)
-/* filter all real-time messages */
+/** filter all real-time messages */
 #define PM_FILT_REALTIME (PM_FILT_ACTIVE | PM_FILT_SYSEX | PM_FILT_CLOCK | \
     PM_FILT_PLAY | PM_FILT_UNDEFINED | PM_FILT_RESET | PM_FILT_TICK)
-/* filter note-on and note-off (0x90-0x9F and 0x80-0x8F */
+/** filter note-on and note-off (0x90-0x9F and 0x80-0x8F */
 #define PM_FILT_NOTE ((1 << 0x19) | (1 << 0x18))
-/* filter channel aftertouch (most midi controllers use this) (0xD0-0xDF)*/
+/** filter channel aftertouch (most midi controllers use this) (0xD0-0xDF)*/
 #define PM_FILT_CHANNEL_AFTERTOUCH (1 << 0x1D)
-/* per-note aftertouch (0xA0-0xAF) */
+/** per-note aftertouch (0xA0-0xAF) */
 #define PM_FILT_POLY_AFTERTOUCH (1 << 0x1A)
-/* filter both channel and poly aftertouch */
+/** filter both channel and poly aftertouch */
 #define PM_FILT_AFTERTOUCH (PM_FILT_CHANNEL_AFTERTOUCH | PM_FILT_POLY_AFTERTOUCH)
-/* Program changes (0xC0-0xCF) */
+/** Program changes (0xC0-0xCF) */
 #define PM_FILT_PROGRAM (1 << 0x1C)
-/* Control Changes (CC's) (0xB0-0xBF)*/
+/** Control Changes (CC's) (0xB0-0xBF)*/
 #define PM_FILT_CONTROL (1 << 0x1B)
-/* Pitch Bender (0xE0-0xEF*/
+/** Pitch Bender (0xE0-0xEF*/
 #define PM_FILT_PITCHBEND (1 << 0x1E)
-/* MIDI Time Code (0xF1)*/
+/** MIDI Time Code (0xF1)*/
 #define PM_FILT_MTC (1 << 0x01)
-/* Song Position (0xF2) */
+/** Song Position (0xF2) */
 #define PM_FILT_SONG_POSITION (1 << 0x02)
-/* Song Select (0xF3)*/
+/** Song Select (0xF3)*/
 #define PM_FILT_SONG_SELECT (1 << 0x03)
-/* Tuning request (0xF6)*/
+/** Tuning request (0xF6)*/
 #define PM_FILT_TUNE (1 << 0x06)
-/* All System Common messages (mtc, song position, song select, tune request) */
+/** All System Common messages (mtc, song position, song select, tune request) */
 #define PM_FILT_SYSTEMCOMMON (PM_FILT_MTC | PM_FILT_SONG_POSITION | PM_FILT_SONG_SELECT | PM_FILT_TUNE)
 
 
 PmError Pm_SetFilter( PortMidiStream* stream, long filters );
 
-/*
+#define Pm_Channel(channel) (1<<(channel))
+/**
     Pm_SetChannelMask() filters incoming messages based on channel.
     The mask is a 16-bit bitfield corresponding to appropriate channels
     The Pm_Channel macro can assist in calling this function.
@@ -433,11 +425,9 @@ PmError Pm_SetFilter( PortMidiStream* stream, long filters );
 
     All channels are allowed by default
 */
-#define Pm_Channel(channel) (1<<(channel))
-
 PmError Pm_SetChannelMask(PortMidiStream *stream, int mask);
 
-/*
+/**
     Pm_Abort() terminates outgoing messages immediately
     The caller should immediately close the output port;
     this call may result in transmission of a partial midi message.
@@ -447,14 +437,14 @@ PmError Pm_SetChannelMask(PortMidiStream *stream, int mask);
  */
 PmError Pm_Abort( PortMidiStream* stream );
      
-/*
+/**
     Pm_Close() closes a midi stream, flushing any pending buffers.
     (PortMidi attempts to close open streams when the application 
     exits -- this is particularly difficult under Windows.)
 */
 PmError Pm_Close( PortMidiStream* stream );
 
-/*
+/**
     Pm_Message() encodes a short Midi message into a long word. If data1
     and/or data2 are not present, use zero.
 
@@ -469,7 +459,9 @@ PmError Pm_Close( PortMidiStream* stream );
 #define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
 #define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)
 
-/* All midi data comes in the form of PmEvent structures. A sysex
+typedef long PmMessage; /**< see PmEvent */
+/**
+   All midi data comes in the form of PmEvent structures. A sysex
    message is encoded as a sequence of PmEvent structures, with each
    structure carrying 4 bytes of the message, i.e. only the first
    PmEvent carries the status byte.
@@ -511,7 +503,7 @@ PmError Pm_Close( PortMidiStream* stream );
    latency (the latency parameter used when opening the output port.)
    Do not expect PortMidi to sort data according to timestamps -- 
    messages should be sent in the correct order, and timestamps MUST 
-   be non-decreasing.
+   be non-decreasing. See also "Example" for Pm_OpenOutput() above.
 
    A sysex message will generally fill many PmEvent structures. On 
    output to a PortMidiStream with non-zero latency, the first timestamp
@@ -533,13 +525,18 @@ PmError Pm_Close( PortMidiStream* stream );
    the interrupting real-time message to insure that timestamps are
    non-decreasing.
  */
-typedef long PmMessage;
 typedef struct {
     PmMessage      message;
     PmTimestamp    timestamp;
 } PmEvent;
 
-/*
+/** 
+    @}
+*/
+/** \defgroup grp_io Reading and Writing Midi Messages
+    @{
+*/
+/**
     Pm_Read() retrieves midi data into a buffer, and returns the number
     of events read. Result is a non-negative number unless an error occurs, 
     in which case a PmError value will be returned.
@@ -563,15 +560,15 @@ typedef struct {
     message" and will be flushed as well.
 
 */
-PmError Pm_Read( PortMidiStream *stream, PmEvent *buffer, long length );
+int Pm_Read( PortMidiStream *stream, PmEvent *buffer, long length );
 
-/*
+/**
     Pm_Poll() tests whether input is available, 
     returning TRUE, FALSE, or an error value.
 */
 PmError Pm_Poll( PortMidiStream *stream);
 
-/* 
+/** 
     Pm_Write() writes midi data from a buffer. This may contain:
         - short messages 
     or 
@@ -586,7 +583,7 @@ PmError Pm_Poll( PortMidiStream *stream);
 */
 PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length );
 
-/*
+/**
     Pm_WriteShort() writes a timestamped non-system-exclusive midi message.
     Messages are delivered in order as received, and timestamps must be 
     non-decreasing. (But timestamps are ignored if the stream was opened
@@ -594,11 +591,12 @@ PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length );
 */
 PmError Pm_WriteShort( PortMidiStream *stream, PmTimestamp when, long msg);
 
-/*
+/**
     Pm_WriteSysEx() writes a timestamped system-exclusive midi message.
 */
 PmError Pm_WriteSysEx( PortMidiStream *stream, PmTimestamp when, unsigned char *msg);
 
+/** @} */
 
 #ifdef __cplusplus
 }
diff --git a/portmidi/pm_linux/README_LINUX.txt b/portmidi/pm_linux/README_LINUX.txt
old mode 100755
new mode 100644
index d3adf5a9b..ab6e456fb
--- a/portmidi/pm_linux/README_LINUX.txt
+++ b/portmidi/pm_linux/README_LINUX.txt
@@ -24,6 +24,24 @@ check for errors yourself.
 This code has not been carefully tested; however, 
 all test programs in pm_test seem to run properly.
 
+A NOTE ABOUT AMD64:
+
+When compiling portmidi under linux on an AMD64, I had to add the -fPIC
+flag to the gcc flags.
+
+Reason: when trying to build John Harrison's pyPortMidi gcc bailed out
+with this error:
+
+./linux/libportmidi.a(pmlinux.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
+./linux/libportmidi.a: could not read symbols: Bad value
+collect2: ld returned 1 exit status
+error: command 'gcc' failed with exit status 1
+
+What they said:
+http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3
+On certain architectures (AMD64 amongst them), shared libraries *must* 
+be "PIC-enabled".
+
 CHANGELOG
 
 29-aug-2006 Roger B. Dannenberg
diff --git a/portmidi/pm_linux/pmlinux.c b/portmidi/pm_linux/pmlinux.c
old mode 100755
new mode 100644
diff --git a/portmidi/pm_linux/pmlinux.h b/portmidi/pm_linux/pmlinux.h
old mode 100755
new mode 100644
diff --git a/portmidi/pm_linux/pmlinuxalsa.c b/portmidi/pm_linux/pmlinuxalsa.c
old mode 100755
new mode 100644
index 6132e0906..1574b8dd9
--- a/portmidi/pm_linux/pmlinuxalsa.c
+++ b/portmidi/pm_linux/pmlinuxalsa.c
@@ -9,9 +9,7 @@
 
 #include "stdlib.h"
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "pmlinuxalsa.h"
 #include "string.h"
diff --git a/portmidi/pm_linux/pmlinuxalsa.h b/portmidi/pm_linux/pmlinuxalsa.h
old mode 100755
new mode 100644
diff --git a/portmidi/pm_mac/finddefault.c b/portmidi/pm_mac/finddefault.c
new file mode 100644
index 000000000..a155c9e41
--- /dev/null
+++ b/portmidi/pm_mac/finddefault.c
@@ -0,0 +1,55 @@
+/* finddefault.c -- find_default_device() implementation
+   Roger Dannenberg, June 2008
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "portmidi.h"
+#include "pmmacosxcm.h"
+#include "readbinaryplist.h"
+
+/* Parse preference files, find default device, search devices --
+   This parses the preference file(s) once for input and once for
+   output, which is inefficient but much simpler to manage. Note
+   that using the readbinaryplist.c module, you cannot keep two
+   plist files (user and system) open at once (due to a simple
+   memory management scheme).
+*/
+PmDeviceID find_default_device(char *path, int input, PmDeviceID id)
+/* path -- the name of the preference we are searching for
+   input -- true iff this is an input device
+   id -- current default device id
+   returns matching device id if found, otherwise id
+*/
+{
+    static char *pref_file = "com.apple.java.util.prefs.plist";
+    char *pref_str = NULL;
+    // read device preferences
+    value_ptr prefs = bplist_read_user_pref(pref_file);
+    if (prefs) {
+        value_ptr pref_val = value_dict_lookup_using_path(prefs, path);
+        if (pref_val) {
+            pref_str = value_get_asciistring(pref_val);
+        }
+    }
+    if (!pref_str) {
+        bplist_free_data(); /* look elsewhere */
+        prefs = bplist_read_system_pref(pref_file);
+        if (prefs) {
+            value_ptr pref_val = value_dict_lookup_using_path(prefs, path);
+            if (pref_val) {
+                pref_str = value_get_asciistring(pref_val);
+            }
+        }
+    }
+    if (pref_str) { /* search devices for match */
+        int i = pm_find_default_device(pref_str, input);
+        if (i != pmNoDevice) {
+            id = i;
+	}
+    }
+    if (prefs) {
+        bplist_free_data();
+    }
+    return id;
+}
diff --git a/portmidi/pm_mac/pmmac.c b/portmidi/pm_mac/pmmac.c
old mode 100755
new mode 100644
index fbf31c83d..13ac68300
--- a/portmidi/pm_mac/pmmac.c
+++ b/portmidi/pm_mac/pmmac.c
@@ -11,27 +11,44 @@ non-CoreMIDI devices.
 
 #include "stdlib.h"
 #include "portmidi.h"
+#include "pmutil.h"
+#include "pminternal.h"
 #include "pmmacosxcm.h"
 
-PmError pm_init()
+PmDeviceID pm_default_input_device_id = -1;
+PmDeviceID pm_default_output_device_id = -1;
+
+void pm_init()
 {
-    return pm_macosxcm_init();
+    PmError err = pm_macosxcm_init();
+    // this is set when we return to Pm_Initialize, but we need it
+    // now in order to (successfully) call Pm_CountDevices()
+    pm_initialized = TRUE;
+    if (!err) {
+        pm_default_input_device_id = find_default_device(
+                "/PortMidi/PM_RECOMMENDED_INPUT_DEVICE", TRUE, 
+                pm_default_input_device_id);
+        pm_default_output_device_id = find_default_device(
+                "/PortMidi/PM_RECOMMENDED_OUTPUT_DEVICE", FALSE, 
+                pm_default_output_device_id);
+    }
 }
 
+
 void pm_term(void)
 {
     pm_macosxcm_term();
 }
 
-PmDeviceID pm_default_input_device_id = -1;
-PmDeviceID pm_default_output_device_id = -1;
 
 PmDeviceID Pm_GetDefaultInputDeviceID()
 {
+    Pm_Initialize();
     return pm_default_input_device_id;
 }
 
 PmDeviceID Pm_GetDefaultOutputDeviceID() {
+    Pm_Initialize();
     return pm_default_output_device_id;
 }
 
diff --git a/portmidi/pm_mac/pmmac.h b/portmidi/pm_mac/pmmac.h
old mode 100755
new mode 100644
diff --git a/portmidi/pm_mac/pmmacosxcm.c b/portmidi/pm_mac/pmmacosxcm.c
old mode 100755
new mode 100644
index 4971da1b6..14c5f8167
--- a/portmidi/pm_mac/pmmacosxcm.c
+++ b/portmidi/pm_mac/pmmacosxcm.c
@@ -26,9 +26,7 @@
 //#define CM_DEBUG 1
 
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "porttime.h"
 #include "pmmac.h"
@@ -102,7 +100,7 @@ midi_length(long msg)
         3, 3, 3, 3, 2, 2, 3, 1          /* 0x80 through 0xf0 */
     };
     static int low_lengths[] = {
-        1, 1, 3, 2, 1, 1, 1, 1,         /* 0xf0 through 0xf8 */
+        1, 2, 3, 2, 1, 1, 1, 1,         /* 0xf0 through 0xf8 */
         1, 1, 1, 1, 1, 1, 1, 1          /* 0xf9 through 0xff */
     };
 
@@ -110,7 +108,7 @@ midi_length(long msg)
     high = status >> 4;
     low = status & 15;
 
-    return (high != 0xF0) ? high_lengths[high] : low_lengths[low];
+    return (high != 0xF) ? high_lengths[high] : low_lengths[low];
 }
 
 static PmTimestamp midi_synchronize(PmInternal *midi)
@@ -420,7 +418,18 @@ midi_out_close(PmInternal *midi)
 static PmError
 midi_abort(PmInternal *midi)
 {
-    return pmNoError;
+    PmError err = pmNoError;
+    OSStatus macHostError;
+    MIDIEndpointRef endpoint =
+            (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
+    macHostError = MIDIFlushOutput(endpoint);
+    if (macHostError != noErr) {
+        pm_hosterror = macHostError;
+        sprintf(pm_hosterror_text,
+                "Host error %ld: MIDIFlushOutput()", macHostError);
+        err = pmHostError;
+    }
+    return err;
 }
 
 
@@ -552,13 +561,7 @@ midi_end_sysex(PmInternal *midi, PmTimestamp when)
     /* make sure we don't go backward in time */
     if (m->sysex_timestamp < m->last_time) m->sysex_timestamp = m->last_time;
     
-        /* if flush has been called in the meantime, packet list is NULL */
-    if (m->packet == NULL) {
-        m->packet = MIDIPacketListInit(m->packetList);
-        assert(m->packet);
-    }
-
-        /* now send what's in the buffer */
+    /* now send what's in the buffer */
     err = send_packet(midi, m->sysex_buffer, m->sysex_byte_count,
                       m->sysex_timestamp);
     m->sysex_byte_count = 0;
@@ -679,6 +682,10 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
   
   str = NULL;
   MIDIObjectGetStringProperty(device, kMIDIPropertyName, &str);
+  if (CFStringGetLength(result) == 0) {
+      CFRelease(result);
+      return str;
+  }
   if (str != NULL) {
     // if an external device has only one entity, throw away
     // the endpoint name and just use the device name
@@ -686,6 +693,10 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
       CFRelease(result);
       return str;
     } else {
+      if (CFStringGetLength(str) == 0) {
+        CFRelease(str);
+        return result;
+      }
       // does the entity name already start with the device name?
       // (some drivers do this though they shouldn't)
       // if so, do not prepend
@@ -703,6 +714,7 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
   return result;
 }
 
+
 // Obtain the name of an endpoint, following connections.
 // The result should be released by the caller.
 static CFStringRef ConnectedEndpointName(MIDIEndpointRef endpoint)
diff --git a/portmidi/pm_mac/pmmacosxcm.h b/portmidi/pm_mac/pmmacosxcm.h
old mode 100755
new mode 100644
index 172593595..97235b5dd
--- a/portmidi/pm_mac/pmmacosxcm.h
+++ b/portmidi/pm_mac/pmmacosxcm.h
@@ -1,4 +1,6 @@
 /* system-specific definitions */
 
 PmError pm_macosxcm_init(void);
-void pm_macosxcm_term(void);
\ No newline at end of file
+void pm_macosxcm_term(void);
+
+PmDeviceID find_default_device(char *path, int input, PmDeviceID id);
diff --git a/portmidi/pm_mac/readbinaryplist.c b/portmidi/pm_mac/readbinaryplist.c
new file mode 100644
index 000000000..027121523
--- /dev/null
+++ b/portmidi/pm_mac/readbinaryplist.c
@@ -0,0 +1,1079 @@
+/*
+
+readbinaryplist.c -- Roger B. Dannenberg, Jun 2008
+Based on ReadBinaryPList.m by Jens Ayton, 2007
+
+Here are his comments:
+
+Reader for binary property list files (version 00).
+
+This has been found to work on all 566 binary plists in my ~/Library/Preferences/
+and /Library/Preferences/ directories. This probably does not provide full
+test coverage. It has also been found to provide different data to Apple's
+implementation when presented with a key-value archive. This is because Apple's
+implementation produces undocumented CFKeyArchiverUID objects. My implementation
+produces dictionaries instead, matching the in-file representation used in XML
+and OpenStep plists. See extract_uid().
+
+Full disclosure: in implementing this software, I read one comment and one
+struct defintion in CFLite, Apple's implementation, which is under the APSL
+license. I also deduced the information about CFKeyArchiverUID from that code.
+However, none of the implementation was copied.
+
+Copyright (C) 2007 Jens Ayton
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+*/
+
+/* A note about memory management:
+Strings and possibly other values are unique and because the values
+associated with IDs are cached, you end up with a directed graph rather
+than a tree. It is tricky to free the data because if you do a simple
+depth-first search to free nodes, you will free nodes twice. I decided
+to allocate memory from blocks of 1024 bytes and keep the blocks in a
+list associated with but private to this module. So the user should
+access this module by calling:
+    bplist_read_file() or bplist_read_user_pref() or 
+    bplist_read_system_pref()
+which returns a value. When you are done with the value, call
+    bplist_free_data()
+This will of course free the value_ptr returned by bplist_read_*()
+
+To deal with memory exhaustion (what happens when malloc returns
+NULL?), use setjmp/longjmp -- a single setjmp protects the whole
+parser, and allocate uses longjmp to abort. After abort, memory
+is freed and NULL is returned to caller. There is not much here
+in the way of error reporting.
+
+Memory is obtained by calling allocate which either returns the
+memory requested or calls longjmp, so callers don't have to check.
+
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include "readbinaryplist.h"
+#include <Carbon/Carbon.h>
+
+#define NO 0
+#define YES 1
+#define BOOL int
+
+#define MAXPATHLEN 256
+/* #define BPLIST_LOG_VERBOSE 1 */
+
+#if BPLIST_LOG_VERBOSE
+    #ifndef BPLIST_LOG
+        #define BPLIST_LOG 1
+    #endif
+#endif
+
+#if BPLIST_LOG
+    #define bplist_log printf
+#else
+    #define bplist_log(...)
+#endif
+
+#if BPLIST_LOG_VERBOSE
+    #define bplist_log_verbose bplist_log
+#else
+    #define bplist_log_verbose(...)
+#endif
+
+
+/********* MEMORY MANAGEMENT ********/
+#define BLOCK_SIZE 1024
+// memory is aligned to multiples of this; assume malloc automatically
+// aligns to this number and assume this number is > sizeof(void *)
+#define ALIGNMENT 8
+static void *block_list = NULL;
+static char *free_ptr = NULL;
+static char *end_ptr = NULL;
+static jmp_buf abort_parsing;
+
+static void *allocate(size_t size)
+{
+    void *result;
+    if (free_ptr + size > end_ptr) {
+        size_t how_much = BLOCK_SIZE;
+        // align everything to 8 bytes
+        if (size > BLOCK_SIZE - ALIGNMENT) {
+            how_much = size + ALIGNMENT;
+        }
+        result = malloc(how_much);
+        if (result == NULL) {
+            /* serious problem */
+            longjmp(abort_parsing, 1);
+        }
+        *((void **)result) = block_list;
+        block_list = result;
+        free_ptr = ((char *) result) + ALIGNMENT;
+        end_ptr = ((char *) result) + how_much;
+    }
+    // now, there is enough rooom at free_ptr
+    result = free_ptr;
+    free_ptr += size;
+    return result;
+}
+
+void bplist_free_data()
+{
+    while (block_list) {
+        void *next = *(void **)block_list;
+        free(block_list);
+        block_list = next;
+    }
+    free_ptr = NULL;
+    end_ptr = NULL;
+}
+
+// layout of trailer -- last 32 bytes in plist data
+    uint8_t unused[6];
+    uint8_t offset_int_size;
+    uint8_t object_ref_size;
+    uint64_t object_count;
+    uint64_t top_level_object;
+    uint64_t offset_table_offset;
+
+
+enum
+{
+    kHEADER_SIZE = 8,
+    kTRAILER_SIZE = 32, //sizeof(bplist_trailer_node),
+    kMINIMUM_SANE_SIZE = kHEADER_SIZE + kTRAILER_SIZE
+};
+
+
+static const char kHEADER_BYTES[kHEADER_SIZE] = "bplist00";
+
+// map from UID key to previously parsed value
+typedef struct cache_struct {
+    uint64_t key;
+    value_ptr value;
+    struct cache_struct *next;
+} cache_node, *cache_ptr;
+
+
+typedef struct bplist_info
+{
+    uint64_t object_count;
+    const uint8_t *data_bytes;
+    uint64_t length;
+    uint64_t offset_table_offset;
+    uint8_t offset_int_size;
+    uint8_t object_ref_size;
+    cache_ptr cache;
+} bplist_info_node, *bplist_info_ptr;
+
+
+static value_ptr bplist_read_pldata(pldata_ptr data);
+static value_ptr bplist_read_pref(char *filename, OSType folder_type);
+static uint64_t read_sized_int(bplist_info_ptr bplist, uint64_t offset, uint8_t size);
+static uint64_t read_offset(bplist_info_ptr bplist, uint64_t index);
+static BOOL read_self_sized_int(bplist_info_ptr bplist, uint64_t offset, uint64_t *outValue, size_t *outSize);
+
+static value_ptr extract_object(bplist_info_ptr bplist, uint64_t objectRef);
+static value_ptr extract_simple(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_int(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_real(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_date(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_data(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_ascii_string(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_unicode_string(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_uid(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_array(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_dictionary(bplist_info_ptr bplist, uint64_t offset);
+
+
+value_ptr value_create()
+{
+    value_ptr value = (value_ptr) allocate(sizeof(value_node));
+    return value;
+}
+
+
+void value_set_integer(value_ptr v, int64_t i) {
+    v->tag = kTAG_INT; v->integer = i;
+}
+
+void value_set_real(value_ptr v, double d) {
+    v->tag = kTAG_REAL; v->real = d;
+}
+
+// d is seconds since 1 January 2001
+void value_set_date(value_ptr v, double d) {
+    v->tag = kTAG_DATE; v->real = d;
+}
+
+void value_set_ascii_string(value_ptr v, const uint8_t *s, size_t len) {
+    v->tag = kTAG_ASCIISTRING;
+    v->string = (char *) allocate(len + 1);
+    memcpy(v->string, s, len);
+    v->string[len] = 0;
+}
+
+void value_set_unicode_string(value_ptr v, const uint8_t *s, size_t len) {
+    v->tag = kTAG_UNICODESTRING;
+    v->string = (char *) allocate(len + 1);
+    memcpy(v->string, s, len);
+    v->string[len] = 0;
+}
+
+void value_set_uid(value_ptr v, uint64_t uid)
+{
+    v->tag = kTAG_UID; v->uinteger = uid;
+}
+
+// value->data points to a pldata that points to the actual bytes
+// the bytes are copied, so caller must free byte source (*data)
+void value_set_data(value_ptr v, const uint8_t *data, size_t len) {
+    v->tag = kTAG_DATA;
+    pldata_ptr pldata = (pldata_ptr) allocate(sizeof(pldata_node));
+    pldata->data = (uint8_t *) allocate(len);
+    memcpy(pldata->data, data, len);
+    pldata->len = len;
+    v->data = pldata;
+    printf("value at %p gets data at %p\n", v, pldata);
+}
+
+// caller releases ownership of array to value_ptr v
+void value_set_array(value_ptr v, value_ptr *array, size_t length) {
+    array_ptr a = (array_ptr) allocate(sizeof(array_node));
+    a->array = array;
+    a->length = length;
+    v->tag = kTAG_ARRAY;
+    v->array = a;
+}
+
+// caller releases ownership of dict to value_ptr v
+void value_set_dict(value_ptr v, dict_ptr dict) {
+    v->tag = kTAG_DICTIONARY;
+    v->dict = dict;
+}
+
+
+// look up an objectref in the cache, a ref->value_ptr mapping
+value_ptr cache_lookup(cache_ptr cache, uint64_t ref)
+{
+    while (cache) {
+        if (cache->key == ref) {
+            return cache->value;
+        }
+        cache = cache->next;
+    }
+    return NULL;
+}
+
+
+// insert an objectref and value in the cache
+void cache_insert(cache_ptr *cache, uint64_t ref, value_ptr value)
+{
+    cache_ptr c = (cache_ptr) allocate(sizeof(cache_node));
+    c->key = ref;
+    c->value = value;
+    c->next = *cache;
+    *cache = c;
+}
+
+
+// insert an objectref and value in a dictionary
+void dict_insert(dict_ptr *dict, value_ptr key, value_ptr value)
+{
+    dict_ptr d = (dict_ptr) allocate(sizeof(dict_node));
+    d->key = key;
+    d->value = value;
+    d->next = *dict;
+    *dict = d;
+}
+
+
+BOOL is_binary_plist(pldata_ptr data)
+{
+    if (data->len < kMINIMUM_SANE_SIZE)  return NO;
+    return memcmp(data->data, kHEADER_BYTES, kHEADER_SIZE) == 0;
+}
+
+
+value_ptr bplist_read_file(char *filename)
+{
+    struct stat stbuf;
+    pldata_node pldata;
+    FILE *file;
+    size_t n;
+    value_ptr value;
+    int rslt = stat(filename, &stbuf);
+    if (rslt) {
+        perror("in stat: ");
+        bplist_log("Could not stat %s, error %d\n", filename, rslt);
+        return NULL;
+    }
+    pldata.len = stbuf.st_size;
+    // note: this is supposed to be malloc, not allocate. It is separate
+    // from the graph structure, large, and easy to free right after
+    // parsing.
+    pldata.data = (uint8_t *) malloc(pldata.len);
+    if (!pldata.data) {
+        bplist_log("Could not allocate %d bytes for %s\n",
+                   (long) pldata.len, filename);
+        return NULL;
+    }
+    file = fopen(filename, "rb");
+    if (!file) {
+        bplist_log("Could not open %s\n", filename);
+        return NULL;
+    }
+    n = fread(pldata.data, 1, pldata.len, file);
+    if (n != pldata.len) {
+        bplist_log("Error reading from %s\n", filename);
+        return NULL;
+    }
+    value = bplist_read_pldata(&pldata);
+    free(pldata.data);
+    return value;
+}
+
+
+value_ptr bplist_read_pref(char *filename, OSType folder_type)
+{
+    FSRef prefdir;
+    char cstr[MAXPATHLEN];
+
+    OSErr err = FSFindFolder(kOnAppropriateDisk, folder_type,
+                             FALSE, &prefdir);
+    if (err) {
+        bplist_log("Error finding preferences folder: %d\n", err);
+        return NULL;
+    }
+    err = FSRefMakePath(&prefdir, (UInt8 *) cstr, (UInt32) (MAXPATHLEN - 1));
+    if (err) {
+        bplist_log("Error making path name for preferences folder: %d\n", err);
+        return NULL;
+    }
+    strlcat(cstr, "/", MAXPATHLEN);
+    strlcat(cstr, filename, MAXPATHLEN);
+    return bplist_read_file(cstr);
+}
+
+
+value_ptr bplist_read_system_pref(char *filename) {
+    return bplist_read_pref(filename, kSystemPreferencesFolderType);
+}
+
+
+value_ptr bplist_read_user_pref(char *filename) {
+    return bplist_read_pref(filename, kPreferencesFolderType);
+}
+
+
+// data is stored with high-order bytes first.
+// read from plist data in a machine-independent fashion
+//
+uint64_t convert_uint64(uint8_t *ptr)
+{
+    uint64_t rslt = 0;
+    int i;
+    // shift in bytes, high-order first
+    for (i = 0; i < sizeof(uint64_t); i++) {
+        rslt <<= 8;
+        rslt += ptr[i];
+    }
+    return rslt;
+}
+
+
+value_ptr bplist_read_pldata(pldata_ptr data)
+{
+    value_ptr result = NULL;
+    bplist_info_node bplist;
+    uint8_t *ptr;
+    uint64_t top_level_object;
+    int i;
+
+    if (data == NULL)  return NULL;
+    if (!is_binary_plist(data)) {
+        bplist_log("Bad binary plist: too short or invalid header.\n");
+        return NULL;
+    }
+        
+    // read trailer
+    ptr = (uint8_t *) (data->data + data->len - kTRAILER_SIZE);
+    bplist.offset_int_size = ptr[6];
+    bplist.object_ref_size = ptr[7];
+    bplist.object_count = convert_uint64(ptr + 8);
+    top_level_object = convert_uint64(ptr + 16);
+    bplist.offset_table_offset = convert_uint64(ptr + 24);
+        
+    // Basic sanity checks
+    if (bplist.offset_int_size < 1 || bplist.offset_int_size > 8 ||
+        bplist.object_ref_size < 1 || bplist.object_ref_size > 8 ||
+        bplist.offset_table_offset < kHEADER_SIZE) {
+        bplist_log("Bad binary plist: trailer declared insane.\n");
+        return NULL;                
+    }
+        
+    // Ensure offset table is inside file
+    uint64_t offsetTableSize = bplist.offset_int_size * bplist.object_count;
+    if (offsetTableSize + bplist.offset_table_offset + kTRAILER_SIZE > 
+        data->len) {
+        bplist_log("Bad binary plist: offset table overlaps end of container.\n");
+        return NULL;
+    }
+        
+    bplist.data_bytes = data->data;
+    bplist.length = data->len;
+    bplist.cache = NULL; /* dictionary is empty */
+
+    bplist_log_verbose("Got a sane bplist with %llu items, offset_int_size: %u, object_ref_size: %u\n", 
+                      bplist.object_count, bplist.offset_int_size, 
+                      bplist.object_ref_size);
+    /* at this point, we are ready to do some parsing which allocates
+        memory for the result data structure. If memory allocation (using
+        allocate fails, a longjmp will return to here and we simply give up
+     */
+    i = setjmp(abort_parsing);
+    if (i == 0) {
+        result = extract_object(&bplist, top_level_object);
+    } else {
+        bplist_log("allocate() failed to allocate memory. Giving up.\n");
+        result = NULL;
+    }
+    if (!result) {
+        bplist_free_data();
+    }
+    return result;
+}
+
+
+static value_ptr extract_object(bplist_info_ptr bplist, uint64_t objectRef)
+{
+    uint64_t offset;
+    value_ptr result = NULL;
+    uint8_t objectTag;
+    
+    if (objectRef >= bplist->object_count) {
+        // Out-of-range object reference.
+        bplist_log("Bad binary plist: object index is out of range.\n");
+        return NULL;
+    }
+        
+    // Use cached object if it exists
+    result = cache_lookup(bplist->cache, objectRef);
+    if (result != NULL)  return result;
+        
+    // Otherwise, find object in file.
+    offset = read_offset(bplist, objectRef);
+    if (offset > bplist->length) {
+        // Out-of-range offset.
+        bplist_log("Bad binary plist: object outside container.\n");
+        return NULL;
+    }
+    objectTag = *(bplist->data_bytes + offset);
+    switch (objectTag & 0xF0) {
+    case kTAG_SIMPLE:
+        result = extract_simple(bplist, offset);
+        break;
+                
+    case kTAG_INT:
+        result = extract_int(bplist, offset);
+        break;
+                        
+    case kTAG_REAL:
+        result = extract_real(bplist, offset);
+        break;
+                        
+    case kTAG_DATE:
+        result = extract_date(bplist, offset);
+        break;
+                        
+    case kTAG_DATA:
+        result = extract_data(bplist, offset);
+        break;
+                        
+    case kTAG_ASCIISTRING:
+        result = extract_ascii_string(bplist, offset);
+        break;
+                        
+    case kTAG_UNICODESTRING:
+        result = extract_unicode_string(bplist, offset);
+        break;
+        
+    case kTAG_UID:
+        result = extract_uid(bplist, offset);
+        break;
+        
+    case kTAG_ARRAY:
+        result = extract_array(bplist, offset);
+        break;
+        
+    case kTAG_DICTIONARY:
+        result = extract_dictionary(bplist, offset);
+        break;
+        
+    default:
+        // Unknown tag.
+        bplist_log("Bad binary plist: unknown tag 0x%X.\n", 
+                   (objectTag & 0x0F) >> 4);
+        result = NULL;
+    }
+    
+    // Cache and return result.
+    if (result != NULL)  
+        cache_insert(&bplist->cache, objectRef, result);
+    return result;
+}
+
+
+static uint64_t read_sized_int(bplist_info_ptr bplist, uint64_t offset, 
+                               uint8_t size)
+{
+    assert(bplist->data_bytes != NULL && size >= 1 && size <= 8 && 
+           offset + size <= bplist->length);
+        
+    uint64_t result = 0;
+    const uint8_t *byte = bplist->data_bytes + offset;
+        
+    do {
+        // note that ints seem to be high-order first
+        result = (result << 8) | *byte++;
+    } while (--size);
+        
+    return result;
+}
+
+
+static uint64_t read_offset(bplist_info_ptr bplist, uint64_t index)
+{
+    assert(index < bplist->object_count);
+        
+    return read_sized_int(bplist, 
+            bplist->offset_table_offset + bplist->offset_int_size * index, 
+            bplist->offset_int_size);
+}
+
+
+static BOOL read_self_sized_int(bplist_info_ptr bplist, uint64_t offset, 
+                             uint64_t *outValue, size_t *outSize)
+{
+    uint32_t size;
+    int64_t value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    size = 1 << (bplist->data_bytes[offset] & 0x0F);
+    if (size > 8) {
+        // Maximum allowable size in this implementation is 1<<3 = 8 bytes.
+        // This also happens to be the biggest we can handle.
+        return NO;
+    }
+        
+    if (offset + 1 + size > bplist->length) {
+        // Out of range.
+        return NO;
+    }
+        
+    value = read_sized_int(bplist, offset + 1, size);
+    
+    if (outValue != NULL) *outValue = value;
+    if (outSize != NULL) *outSize = size + 1; // +1 for tag byte.
+    return YES;
+}
+
+
+static value_ptr extract_simple(bplist_info_ptr bplist, uint64_t offset)
+{
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+    value_ptr value = value_create();
+        
+    switch (bplist->data_bytes[offset]) {
+    case kVALUE_NULL:
+        value->tag = kVALUE_NULL;
+        return value;
+        
+    case kVALUE_TRUE:
+        value->tag = kVALUE_TRUE;
+        return value;
+                        
+    case kVALUE_FALSE:
+        value->tag = kVALUE_FALSE;
+        return value;
+    }
+        
+    // Note: kVALUE_FILLER is treated as invalid, because it, er, is.
+    bplist_log("Bad binary plist: invalid atom.\n");
+    free(value);
+    return NULL;
+}
+
+
+static value_ptr extract_int(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value = value_create();
+    value->tag = kTAG_INT;
+
+    if (!read_self_sized_int(bplist, offset, &value->uinteger, NULL)) {
+        bplist_log("Bad binary plist: invalid integer object.\n");
+    }
+        
+    /* NOTE: originally, I sign-extended here. This was the wrong thing; it
+       turns out that negative ints are always stored as 64-bit, and smaller
+       ints are unsigned.
+    */
+    return value;
+}
+
+
+static value_ptr extract_real(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value = value_create();
+    uint32_t size;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+    
+    size = 1 << (bplist->data_bytes[offset] & 0x0F);
+        
+    // FIXME: what to do if faced with other sizes for float/double?
+    assert (sizeof (float) == sizeof (uint32_t) && 
+            sizeof (double) == sizeof (uint64_t));
+        
+    if (offset + 1 + size > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "floating-point number");
+        free(value);
+        return NULL;
+    }
+        
+    if (size == sizeof (float)) {
+        uint32_t i = read_sized_int(bplist, offset + 1, size); 
+        // Note that this handles byte swapping.
+        value_set_real(value, *(float *)&i);
+        return value;
+    } else if (size == sizeof (double)) {
+        uint64_t i = read_sized_int(bplist, offset + 1, size);
+        // Note that this handles byte swapping.
+        value_set_real(value, *(double *)&i);
+        return value;
+    } else {
+        // Can't handle floats of other sizes.
+        bplist_log("Bad binary plist: can't handle %u-byte float.\n", size);
+        free(value);
+        return NULL;
+    }
+}
+
+
+static value_ptr extract_date(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value;
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    // Data has size code like int and real, but only 3 (meaning 8 bytes) is valid.
+    if (bplist->data_bytes[offset] != kVALUE_FULLDATETAG) {
+        bplist_log("Bad binary plist: invalid size for date object.\n");
+        return NULL;
+    }
+        
+    if (offset + 1 + sizeof (double) > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "date");
+        return NULL;
+    }
+        
+    // FIXME: what to do if faced with other sizes for double?
+    assert (sizeof (double) == sizeof (uint64_t));
+        
+    uint64_t date = read_sized_int(bplist, offset + 1, sizeof(double));
+    // Note that this handles byte swapping.
+    value = value_create();
+    value_set_date(value, *(double *)&date);
+    return value;
+}
+
+
+uint64_t bplist_get_a_size(bplist_info_ptr bplist, 
+                           uint64_t *offset_ptr, char *msg)
+{
+    uint64_t size = bplist->data_bytes[*offset_ptr] & 0x0F;
+    (*offset_ptr)++;
+    if (size == 0x0F) {
+        // 0x0F means separate int size follows. 
+        // Smaller values are used for short data.
+        size_t extra; // the length of the data size we are about to read
+        if ((bplist->data_bytes[*offset_ptr] & 0xF0) != kTAG_INT) {
+            // Bad data, mistagged size int
+            bplist_log("Bad binary plist: %s object size is not tagged as int.\n",
+                       msg);
+            return UINT64_MAX; // error
+        }
+                
+        // read integer data as size, extra tells how many bytes to skip
+        if (!read_self_sized_int(bplist, *offset_ptr, &size, &extra)) {
+            bplist_log("Bad binary plist: invalid %s object size tag.\n", 
+                      "data");
+            return UINT64_MAX; // error
+        }
+        (*offset_ptr) += extra;
+    }
+
+    if (*offset_ptr + size > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "data");
+        return UINT64_MAX; // error
+    }
+    return size;
+}
+
+
+static value_ptr extract_data(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "data")) == UINT64_MAX) 
+        return NULL;
+        
+    value = value_create();
+    value_set_data(value, bplist->data_bytes + offset, size);
+    return value;
+}
+
+
+static value_ptr extract_ascii_string(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value; // return value
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "ascii string")) ==
+        UINT64_MAX) 
+        return NULL;
+
+    value = value_create();
+    value_set_ascii_string(value, bplist->data_bytes + offset, size);
+    return value;
+}
+
+
+static value_ptr extract_unicode_string(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "unicode string")) == 
+        UINT64_MAX)
+        return NULL;
+        
+    value = value_create();
+    value_set_unicode_string(value, bplist->data_bytes + offset, size);
+    return value;
+}
+
+
+static value_ptr extract_uid(bplist_info_ptr bplist, uint64_t offset)
+{
+    /* UIDs are used by Cocoa's key-value coder.
+       When writing other plist formats, they are expanded to dictionaries of
+       the form <dict><key>CF$UID</key><integer>value</integer></dict>, so we
+       do the same here on reading. This results in plists identical to what
+       running plutil -convert xml1 gives us. However, this is not the same
+       result as [Core]Foundation's plist parser, which extracts them as un-
+       introspectable CF objects. In fact, it even seems to convert the CF$UID
+       dictionaries from XML plists on the fly.
+    */
+        
+    value_ptr value;
+    uint64_t uid;
+        
+    if (!read_self_sized_int(bplist, offset, &uid, NULL)) {
+        bplist_log("Bad binary plist: invalid UID object.\n");
+        return NULL;
+    }
+        
+    assert(NO); // original code suggests using a string for a key
+    // but our dictionaries all use big ints for keys, so I don't know
+    // what to do here
+
+    value = value_create();
+    value_set_uid(value, uid);
+    // return [NSDictionary dictionaryWithObject:
+    //         [NSNumber numberWithUnsignedLongLong:value] 
+    //         forKey:"CF$UID"];
+}
+
+
+static value_ptr extract_array(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t i, count;
+    uint64_t size;
+    uint64_t elementID;
+    value_ptr element = NULL;
+    value_ptr *array = NULL;
+    value_ptr value = NULL;
+    BOOL ok = YES;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((count = bplist_get_a_size(bplist, &offset, "array")) == UINT64_MAX)
+        return NULL;
+        
+    if (count > UINT64_MAX / bplist->object_ref_size - offset) {
+        // Offset overflow.
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "array");
+        return NULL;
+    }
+        
+    size = bplist->object_ref_size * count;
+    if (size + offset > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "array");
+        return NULL;
+    }
+        
+    // got count, the number of array elements
+
+    value = value_create();
+    assert(value);
+
+    if (count == 0) {
+        value_set_array(value, array, count);
+        return value;
+    }
+        
+    array = allocate(sizeof(value_ptr) * count);
+        
+    for (i = 0; i != count; ++i) {
+        bplist_log_verbose("[%u]\n", i);
+        elementID = read_sized_int(bplist, offset + i * bplist->object_ref_size, 
+                                 bplist->object_ref_size);
+        element = extract_object(bplist, elementID);
+        if (element != NULL) {
+            array[i] = element;
+        } else {
+            ok = NO;
+            break;
+        }
+    }
+    if (ok) {
+        value_set_array(value, array, count);
+    }
+
+    return value;
+}
+
+
+static value_ptr extract_dictionary(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t i, count;
+    uint64_t size;
+    uint64_t elementID;
+    value_ptr value = NULL;
+    dict_ptr dict = NULL;
+    BOOL ok = YES;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+        
+    if ((count = bplist_get_a_size(bplist, &offset, "array")) == UINT64_MAX)
+        return NULL;
+
+    if (count > UINT64_MAX / (bplist->object_ref_size * 2) - offset) {
+        // Offset overflow.
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "dictionary");
+        return NULL;
+    }
+    
+    size = bplist->object_ref_size * count * 2;
+    if (size + offset > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "dictionary");
+        return NULL;
+    }
+    
+    value = value_create();
+    if (count == 0) {
+        value_set_dict(value, NULL);
+        return value;
+    }
+
+    for (i = 0; i != count; ++i) {
+        value_ptr key;
+        value_ptr val;
+        elementID = read_sized_int(bplist, offset + i * bplist->object_ref_size, 
+                                 bplist->object_ref_size);
+        key = extract_object(bplist, elementID);
+        if (key != NULL) {
+            bplist_log_verbose("key: %p\n", key);
+        } else {
+            ok = NO;
+            break;
+        }
+                    
+        elementID = read_sized_int(bplist, 
+                            offset + (i + count) * bplist->object_ref_size, 
+                            bplist->object_ref_size);
+        val = extract_object(bplist, elementID);
+        if (val != NULL) {
+            dict_insert(&dict, key, val);
+        } else {
+            ok = NO;
+            break;
+        }
+    }
+    if (ok) {
+        value_set_dict(value, dict);
+    }
+    
+    return value;
+}
+
+/*************** functions for accessing values ****************/
+
+
+char *value_get_asciistring(value_ptr v)
+{
+    if (v->tag != kTAG_ASCIISTRING) return NULL;
+    return v->string;
+}
+
+
+value_ptr value_dict_lookup_using_string(value_ptr v, char *key)
+{
+    dict_ptr dict;
+    if (v->tag != kTAG_DICTIONARY) return NULL; // not a dictionary
+    dict = v->dict;
+    /* search for key */
+    while (dict) {
+        if (dict->key && dict->key->tag == kTAG_ASCIISTRING &&
+            strcmp(key, dict->key->string) == 0) { // found it
+            return dict->value;
+        }
+        dict = dict->next;
+    }
+    return NULL; /* not found */
+}
+
+value_ptr value_dict_lookup_using_path(value_ptr v, char *path)
+{
+    char key[MAX_KEY_SIZE];
+    while (*path) { /* more to the path */
+        int i = 0;
+        while (i < MAX_KEY_SIZE - 1) {
+            key[i] = *path++;
+            if (key[i] == '/') { /* end of entry in path */
+                key[i + 1] = 0;
+                break;
+            }
+            if (!key[i]) {
+                path--; /* back up to end of string char */
+                break;  /* this will cause outer loop to exit */
+            }
+            i++;
+        }
+        if (!v || v->tag != kTAG_DICTIONARY) return NULL;
+        /* now, look up the key to get next value */
+        v = value_dict_lookup_using_string(v, key);
+        if (v == NULL) return NULL;
+    }
+    return v;
+}
+                
+
+/*************** functions for debugging ***************/
+
+void plist_print(value_ptr v)
+{
+    size_t i;
+    int comma_needed;
+    dict_ptr dict;
+    if (!v) {
+        printf("NULL");
+        return;
+    }
+    switch (v->tag & 0xF0) {
+    case kTAG_SIMPLE:
+        switch (v->tag) {
+        case kVALUE_NULL: 
+            printf("NULL@%p", v); break;
+        case kVALUE_FALSE: 
+            printf("FALSE@%p", v); break;
+        case kVALUE_TRUE:
+            printf("TRUE@%p", v); break;
+        default:
+            printf("UNKNOWN tag=%x@%p", v->tag, v); break;
+        }
+        break;
+    case kTAG_INT:
+        printf("%lld@%p", v->integer, v); break;
+    case kTAG_REAL:
+        printf("%g@%p", v->real, v); break;
+    case kTAG_DATE:
+        printf("date:%g@%p", v->real, v); break;
+    case kTAG_DATA:
+        printf("data@%p->%p:[%p:", v, v->data, v->data->data);
+        for (i = 0; i < v->data->len; i++) {
+            printf(" %2x", v->data->data[i]);
+        }
+        printf("]"); break;
+    case kTAG_ASCIISTRING:
+        printf("%p:\"%s\"@%p", v->string, v->string, v); break;
+    case kTAG_UNICODESTRING:
+        printf("unicode:%p:\"%s\"@%p", v->string, v->string, v); break;
+    case kTAG_UID:
+        printf("UID:%llu@%p", v->uinteger, v); break;
+    case kTAG_ARRAY:
+        comma_needed = FALSE;
+        printf("%p->%p:[%p:", v, v->array, v->array->array);
+        for (i = 0; i < v->array->length; i++) {
+            if (comma_needed) printf(", ");
+            plist_print(v->array->array[i]);
+            comma_needed = TRUE;
+        }
+        printf("]"); break;
+    case kTAG_DICTIONARY:
+        comma_needed = FALSE;
+        printf("%p:[", v);
+        dict = v->dict;
+        while (dict) {
+            if (comma_needed) printf(", ");
+            printf("%p:", dict);
+            plist_print(dict->key);
+            printf("->");
+            plist_print(dict->value);
+            comma_needed = TRUE;
+            dict = dict->next;
+        }
+        printf("]"); break;
+    default:
+        printf("UNKNOWN tag=%x", v->tag);
+        break;
+    }
+}
+
+            
diff --git a/portmidi/pm_mac/readbinaryplist.h b/portmidi/pm_mac/readbinaryplist.h
new file mode 100644
index 000000000..596138a02
--- /dev/null
+++ b/portmidi/pm_mac/readbinaryplist.h
@@ -0,0 +1,88 @@
+/* readbinaryplist.h -- header to read preference files
+
+   Roger B. Dannenberg, Jun 2008
+*/
+
+#include <stdint.h>
+
+#ifndef TRUE
+    #define TRUE 1
+    #define FALSE 0
+#endif
+
+#define MAX_KEY_SIZE 256
+
+enum
+{
+    // Object tags (high nybble)
+    kTAG_SIMPLE = 0x00,        // Null, true, false, filler, or invalid
+    kTAG_INT = 0x10,
+    kTAG_REAL = 0x20,
+    kTAG_DATE = 0x30,
+    kTAG_DATA = 0x40,
+    kTAG_ASCIISTRING = 0x50,
+    kTAG_UNICODESTRING = 0x60,
+    kTAG_UID = 0x80,
+    kTAG_ARRAY = 0xA0,
+    kTAG_DICTIONARY = 0xD0,
+    
+    // "simple" object values
+    kVALUE_NULL = 0x00,
+    kVALUE_FALSE = 0x08,
+    kVALUE_TRUE = 0x09,
+    kVALUE_FILLER = 0x0F,
+    
+    kVALUE_FULLDATETAG = 0x33        // Dates are tagged with a whole byte.
+};
+
+
+typedef struct {
+    uint8_t *data;
+    size_t len;
+} pldata_node, *pldata_ptr;
+
+
+typedef struct {
+    struct value_struct **array;
+    uint64_t length;
+} array_node, *array_ptr;
+
+
+// a dict_node is a list of <key, value> pairs
+typedef struct dict_struct {
+    struct value_struct *key;
+    struct value_struct *value;
+    struct dict_struct *next;
+} dict_node, *dict_ptr;
+
+
+// an value_node is a value with a tag telling the type
+typedef struct value_struct {
+    int tag;
+    union {
+        int64_t integer;
+        uint64_t uinteger;
+        double real;
+        char *string;
+        pldata_ptr data;
+        array_ptr array;
+        struct dict_struct *dict;
+    };
+} value_node, *value_ptr;
+
+
+value_ptr bplist_read_file(char *filename);
+value_ptr bplist_read_user_pref(char *filename);
+value_ptr bplist_read_system_pref(char *filename);
+void bplist_free_data();
+
+/*************** functions for accessing values ****************/
+
+char *value_get_asciistring(value_ptr v);
+value_ptr value_dict_lookup_using_string(value_ptr v, char *key);
+value_ptr value_dict_lookup_using_path(value_ptr v, char *path);
+
+/*************** functions for debugging ***************/
+
+void plist_print(value_ptr v);
+
diff --git a/portmidi/pm_win/README_WIN.txt b/portmidi/pm_win/README_WIN.txt
old mode 100755
new mode 100644
index 3fe5ee417..29549cb18
--- a/portmidi/pm_win/README_WIN.txt
+++ b/portmidi/pm_win/README_WIN.txt
@@ -1,19 +1,12 @@
 File: PortMidi Win32 Readme
 Author: Belinda Thom, June 16 2002
-Revised by: Roger Dannenberg, June 2002, May 2004
+Revised by: Roger Dannenberg, June 2002, May 2004, June 2007, 
+            Umpei Kurokawa, June 2007
 
 =============================================================================
 USING PORTMIDI:
 =============================================================================
 
-PortMidi has been created using a DLL because the Win32 MMedia API doesn't 
-handle midiInput properly in the debugger. Specifically, it doesn't clean up
-after itself if the user (i.e. you, a PortMidi application) hasn't explicitly
-closed all open midi input devices. This lack of cleanup can lead to much
-pain and agony, including the blue-screen-of-death. This situation becomes
-increasingly unacceptable when you are debugging your code, so a portMidi DLL
-seemed to be the most elegant solution.
-
 Using Microsoft Visual C++ project files (provided with PortMidi), there
 are two configurations of the PortMidi library. The Debug version is 
 intended for debugging, especially in a console application. The Debug
@@ -38,9 +31,9 @@ See <...>\pm_dll_test\test.c or <...>\multithread\test.c for usage examples.
 =============================================================================
 TO INSTALL PORTMIDI:
 =============================================================================
-1)  download portmidi.zip
+1)  get current source from the portmedia project at SourceForge.net
 
-2)  unzip portmidi.zip into directory: <...>\portmidi
+2)  copy source into directory: <...>\portmidi
 
 =============================================================================
 TO COMPILE PORTMIDI:
@@ -48,58 +41,59 @@ TO COMPILE PORTMIDI:
 
 3)  cd to or open the portmidi directory
 
-4)  start or click on the portmidi.dsw workspace
-
+4)  start or click on the portmidi.sln workspace (note, there is also
+    portmidi-VC9.sln for Visual C++ version 9 users).
+	
 5)  the following projects exist within this workspace:
     - portmidi (the PortMidi library)
-	- pm_dll (the dll library used to close midi ports on program exit)
-	- porttime (a small portable library implementing timer facilities)
-	- test (simple midi I/O testing)
-	- multithread (an example illustrating low-latency MIDI processing
-            using a dedicated low-latency thread)
-	- sysex (simple sysex message I/O testing)
-	- latency (uses porttime to measure system latency)
+    - porttime (a small portable library implementing timer facilities)
+    - test (simple midi I/O testing)
+    - midithread (an example illustrating low-latency MIDI processing
+        using a dedicated low-latency thread)
+    - sysex (simple sysex message I/O testing)
+    - latency (uses porttime to measure system latency)
+    - midithru (an example illustrating software MIDI THRU)
+    - qtest (a test of the new multicore-safe queue implementation)
+    - mm  (allows monitoring of midi messages)
+    - pmjni (a dll to provide an interface to PortMidi for Java)
+
+6)  open the pmjni project properties
+    - visit Configuration Properties, C/C++, General
+    - find Additional Include Directories property and open the editor (...)
+    - at the end of the list, you will find two paths beginning with E:\
+    - these are absolute paths to the Java SDK; you'll need to install the
+      Java SDK (from Sun) and update these directories in order to build
+      this project.
 
 6)  verify that all project settings are for Win32 Debug release:
-	- type Alt-F7
-	- highlight all three projects in left part of Project Settings window; 
-	- "Settings For" should say "Win32 Debug"
+    - type Alt-F7
+    - highlight all three projects in left part of Project Settings window; 
+    - "Settings For" should say "Win32 Debug"
+	
+    -In Visual C++ 2005 Express Edition, there is a drop down menu in 
+     the top toolbar to select the Win32 and Debug option.
 
 7)  use Build->Batch Build ... to build everything in the project
-
+	
+    -In Visual C++ 2005 Express Edition, use Build->Build Solution
+	
 8)  The settings for these projects were distributed in the zip file, so
     compile should just work.
 
-9)  IMPORTANT! PortMidi uses a DLL, pm_dll.dll, but there is no simple way
-    to set up projects to use pm_dll. THEREFORE, you need to copy DLLs
-    as follows (you can do this with <...>\portmidi\pm_win\copy-dll.bat):
-        copy <...>\portmidi\pm_win\Debug\pm_dll.dll to:
-            <...>\portmidi\pm_test\latencyDebug\pm_dll.dll
-            <...>\portmidi\pm_test\midithreadDebug\pm_dll.dll
-            <...>\portmidi\pm_test\sysexDebug\pm_dll.dll
-            <...>\portmidi\pm_test\testDebug\pm_dll.dll
-            <...>\portmidi\pm_test\midithruDebug\pm_dll.dll
-        and copy <...>\portmidi\pm_win\Release\pm_dll.dll to:
-            <...>\portmidi\pm_test\latencyRelease\pm_dll.dll
-            <...>\portmidi\pm_test\midithreadRelease\pm_dll.dll
-            <...>\portmidi\pm_test\sysexRelease\pm_dll.dll
-            <...>\portmidi\pm_test\testRelease\pm_dll.dll
-            <...>\portmidi\pm_test\midithruRelease\pm_dll.dll
-    each time you rebuild the pm_dll project, these copies must be redone!
-
-    Since Windows will look in the executable directory for DLLs, we 
-    recommend that you always install a copy of pm_dll.dll (either the
-    debug version or the release version) in the same directory as the
-    application using PortMidi. The release DLL is about 40KB. This will 
-    ensure that the application uses the correct DLL.
-
-10) run test project; use the menu that shows up from the command prompt to
+9)  run test project; use the menu that shows up from the command prompt to
     test that portMidi works on your system. tests include: 
 		- verify midi output works
 		- verify midi input works
-		- verify midi input w/midi thru works
 
-11) run other projects if you wish: sysex, latency, midithread, mm, qtest
+10) run other projects if you wish: sysex, latency, midithread, mm, 
+    qtest, midithru
+
+11) use pm_java/make.bat (run in a cmd window from pm_java) to compile
+    the java code.
+
+12) run pm_java/pmdefaults.bat (run in a cmd window from pm_java) to
+    run the PmDefaults program. This lets you select the default input
+    and output devices for PortMidi.
 
 ============================================================================
 TO CREATE YOUR OWN PORTMIDI CLIENT APPLICATION:
@@ -119,43 +113,35 @@ The easiest way is to start a new project w/in the portMidi workspace:
       in the next step)
 	- Click OK
 	- Select "An Empty Project" and click Finish
-
+	
+	In Visual C++ 2005 Express Edition, 
+	- File->New->Projects
+	- Location: <...>\portmidi\<yourProjectName>
+	- select Add to solution
+	- select CLR Empty project in CLR
+	- select Win32 Console Application in Win32
+	- select Empty project in General
+	
 2) Now this project will be the active project. Make it explicitly depend
    on PortMidi dll:
 	- Project->Dependencies
 	- Click pm_dll
 
-3) Important! in order to be able to use portMidi DLL from your new project
-   and set breakpoints,	copy following files from <...>\pm_dll\Debug into 
-   <...>\<yourProjectName>\Debug directory:
-		pm_dll.lib
-		pm_dll.dll
-    each time you rebuild pm_dll, these copies must be redone!
-
-4) add whatever files you wish to add to your new project, using portMidi
+3) add whatever files you wish to add to your new project, using portMidi
    calls as desired (see USING PORTMIDI at top of this readme)
 
-5) when you include portMidi files, do so like this:
-	- #include "..\pm_dll\portmidi.h"
+4) when you include portMidi files, do so like this:
+	- #include "..\pm_common\portmidi.h"
 	- etc.
 
-6) build and run your project
+5) build and run your project
 
 ============================================================================
 DESIGN NOTES
 ============================================================================
 
-The DLL is used so that PortMidi can (usually) close open devices when the
-program terminates. Failure to close input devices under WinNT, Win2K, and
-probably later systems causes the OS to crash.
-
-This is accomplished with a .LIB/.DLL pair, linking to the .LIB
-in order to access functions in the .DLL. 
-
-PortMidi for Win32 exists as a simple library,
+PortMidi for Win32 exists as a simple static library,
 with Win32-specific code in pmwin.c and MM-specific code in pmwinmm.c.
-pmwin.c uses a DLL in pmdll.c to call Pm_Terminate() when the program
-exits to make sure that all MIDI ports are closed.
 
 Orderly cleanup after errors are encountered is based on a fixed order of
 steps and state changes to reflect each step. Here's the order:
@@ -171,10 +157,8 @@ To open input:
         set descriptor field of PmInternal structure
         - open device
         set handle field of midiwinmm_type structure
-        - allocate buffer 1 for sysex
-        buffer is added to input port
-        - allocate buffer 2 for sysex
-        buffer is added to input port
+        - allocate buffers
+        - start device
         - return
     - return
 
@@ -287,5 +271,15 @@ part of PortMidi is allowed to directly copy sysex bytes to
 "fill_base[*fill_offset_ptr++]" until *fill_offset_ptr reaches
 fill_length. See the code for details.
 
+-----------
+
+Additional notes on using VS 2005 (maybe this is obsolete now?):
+
+1) Make sure "Configuration: All Configurations" is selected in all of the following Properties modifications!
+
+2) In my case the project defaulted to compiling all .c files with the C++ compiler, which was disastrous. I had to go to set Properties for each file, to wit: Expand Configuration Properties, Expand C/C++, Select Advanced, set the Compile As popup to Compile as C Code (/TC). (For better or worse, the project I inherited has a bunch of .c files that rely on C++ features, so I couldn't reliably set this the project properties level.)
+
+3) While you're there, make sure that the C/C++ -> General -> "Compile with Common Language Runtime support" is set to "No Common Language Runtime support" (the C compiler *can't* support CLR, but VS won't do anything useful like automatically set the two options to match)-.
+
+4) I never got VS precompiled header thing to work sensibly, so I took the path of least resistance and turned PCH's off for all my files. Properties -> Configuration Properties -> C/C++ -> Precompiled Headers -> Create/Use Precompiled Header popup set to "Not Using Precompiled Headers". The compiler is reasonably fast even if it has to parse all the header files, so unless someone wants to explain VS's PCHs to me, the hell with it, I say.
 
-  
\ No newline at end of file
diff --git a/portmidi/pm_win/copy-dll.bat b/portmidi/pm_win/copy-dll.bat
old mode 100755
new mode 100644
diff --git a/portmidi/pm_win/debugging_dlls.txt b/portmidi/pm_win/debugging_dlls.txt
old mode 100755
new mode 100644
diff --git a/portmidi/pm_win/pm_dll.dsp b/portmidi/pm_win/pm_dll.dsp
old mode 100755
new mode 100644
diff --git a/portmidi/pm_win/pmdll.c b/portmidi/pm_win/pmdll.c
old mode 100755
new mode 100644
diff --git a/portmidi/pm_win/pmdll.h b/portmidi/pm_win/pmdll.h
old mode 100755
new mode 100644
diff --git a/portmidi/pm_win/pmwin.c b/portmidi/pm_win/pmwin.c
old mode 100755
new mode 100644
index 716b68fa5..5b4dec63f
--- a/portmidi/pm_win/pmwin.c
+++ b/portmidi/pm_win/pmwin.c
@@ -9,6 +9,7 @@
    be separate from the main portmidi.c file because it is system
    dependent, and it is separate from, say, pmwinmm.c, because it
    might need to register devices for winmm, directx, and others.
+
  */
 
 #include "stdlib.h"
@@ -16,12 +17,10 @@
 #include "pmutil.h"
 #include "pminternal.h"
 #include "pmwinmm.h"
-#ifdef USE_DLL_FOR_CLEANUP
-#include "pmdll.h" /* used to close ports on exit */
-#endif
 #ifdef DEBUG
 #include "stdio.h"
 #endif
+#include <windows.h>
 
 /* pm_exit is called when the program exits.
    It calls pm_term to make sure PortMidi is properly closed.
@@ -45,20 +44,9 @@ static void pm_exit(void) {
 /* pm_init is the windows-dependent initialization.*/
 void pm_init(void)
 {
-#ifdef USE_DLL_FOR_CLEANUP
-    /* we were hoping a DLL could offer more robust cleanup after errors,
-       but the DLL does not seem to run after crashes. Thus, the atexit()
-       mechanism is just as powerful, and simpler to implement.
-     */
-    pm_set_close_function(pm_exit);
-#ifdef DEBUG
-    printf("registered pm_term with cleanup DLL\n");
-#endif
-#else
     atexit(pm_exit);
 #ifdef DEBUG
     printf("registered pm_exit with atexit()\n");
-#endif
 #endif
     pm_winmm_init();
     /* initialize other APIs (DirectX?) here */
@@ -70,37 +58,77 @@ void pm_term(void) {
 }
 
 
-PmDeviceID Pm_GetDefaultInputDeviceID() {
-    /* This routine should check the environment and the registry
-       as specified in portmidi.h, but for now, it just returns
-       the first device of the proper input/output flavor.
-     */
-    int i;
+static PmDeviceID pm_get_default_device_id(int is_input, char *key) {
+    HKEY hkey;
+#define PATTERN_MAX 256
+    char pattern[PATTERN_MAX];
+    long pattern_max = PATTERN_MAX;
+    DWORD dwType;
+    /* Find first input or device -- this is the default. */
+    PmDeviceID id = pmNoDevice;
+    int i, j;
     Pm_Initialize(); /* make sure descriptors exist! */
     for (i = 0; i < pm_descriptor_index; i++) {
-        if (descriptors[i].pub.input) {
-            return i;
+        if (descriptors[i].pub.input == is_input) {
+            id = i;
+            break;
         }
     }
-    return pmNoDevice;
+    /* Look in registry for a default device name pattern. */
+    if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &hkey) != 
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "JavaSoft", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "Prefs", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "/Port/Midi", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegQueryValueEx(hkey, key, NULL, &dwType, pattern, &pattern_max) != 
+	ERROR_SUCCESS) {
+        return id;
+    }
+
+    /* decode pattern: upper case encoded with "/" prefix */
+    i = j = 0;
+    while (pattern[i]) {
+        if (pattern[i] == '/' && pattern[i + 1]) {
+            pattern[j++] = toupper(pattern[++i]);
+	} else {
+            pattern[j++] = tolower(pattern[i]);
+	}
+        i++;
+    }
+    pattern[j] = 0; /* end of string */
+
+    /* now pattern is the string from the registry; search for match */
+    i = pm_find_default_device(pattern, is_input);
+    if (i != pmNoDevice) {
+        id = i;
+    }
+    return id;
 }
 
+
+PmDeviceID Pm_GetDefaultInputDeviceID() {
+    return pm_get_default_device_id(TRUE, 
+           "/P/M_/R/E/C/O/M/M/E/N/D/E/D_/I/N/P/U/T_/D/E/V/I/C/E");
+}
+
+
 PmDeviceID Pm_GetDefaultOutputDeviceID() {
-    /* This routine should check the environment and the registry
-       as specified in portmidi.h, but for now, it just returns
-       the first device of the proper input/output flavor.
-     */
-    int i;
-    Pm_Initialize(); /* make sure descriptors exist! */
-    for (i = 0; i < pm_descriptor_index; i++) {
-        if (descriptors[i].pub.output) {
-            return i;
-        }
-    }
-    return pmNoDevice;
-    return 0;
+  return pm_get_default_device_id(FALSE,
+          "/P/M_/R/E/C/O/M/M/E/N/D/E/D_/O/U/T/P/U/T_/D/E/V/I/C/E");
 }
 
+
 #include "stdio.h" 
 
 void *pm_alloc(size_t s) {
@@ -112,3 +140,4 @@ void pm_free(void *ptr) {
     free(ptr); 
 }
 
+
diff --git a/portmidi/pm_win/pmwinmm.c b/portmidi/pm_win/pmwinmm.c
old mode 100755
new mode 100644
index 395b1134c..502e0592c
--- a/portmidi/pm_win/pmwinmm.c
+++ b/portmidi/pm_win/pmwinmm.c
@@ -1,18 +1,23 @@
 /* pmwinmm.c -- system specific definitions */
 
-/* without this define, InitializeCriticalSectionAndSpinCount is undefined */
-/* this version level means "Windows 2000 and higher" */
-#define _WIN32_WINNT 0x0500
+#ifdef _MSC_VER
+ #pragma warning(disable: 4133) // stop warnings about implicit typecasts
+#endif
+
+#ifndef _WIN32_WINNT
+    /* without this define, InitializeCriticalSectionAndSpinCount is 
+     * undefined. This version level means "Windows 2000 and higher" 
+     */
+    #define _WIN32_WINNT 0x0500
+#endif
 
 #include "windows.h"
 #include "mmsystem.h"
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "pmwinmm.h"
-#include "string.h"
+#include <string.h>
 #include "porttime.h"
 
 /* asserts used to verify portMidi code logic is sound; later may want
@@ -158,8 +163,8 @@ static void pm_winmm_general_inputs()
     UINT i;
     WORD wRtn;
     midi_num_inputs = midiInGetNumDevs();
-    midi_in_caps = pm_alloc(sizeof(MIDIINCAPS) * midi_num_inputs);
-
+    midi_in_caps = (MIDIINCAPS *) pm_alloc(sizeof(MIDIINCAPS) * 
+                                           midi_num_inputs);
     if (midi_in_caps == NULL) {
         /* if you can't open a particular system-level midi interface
          * (such as winmm), we just consider that system or API to be
@@ -575,11 +580,12 @@ static PmError winmm_in_open(PmInternal *midi, void *driverInfo)
      */
     InitializeCriticalSectionAndSpinCount(&m->lock, 4000);
     /* open device */
-    pm_hosterror = midiInOpen(&(m->handle.in),  /* input device handle */
-                              dwDevice,  /* device ID */
-                              (DWORD) winmm_in_callback,  /* callback address */
-                              (DWORD) midi,  /* callback instance data */
-                              CALLBACK_FUNCTION); /* callback is a procedure */
+    pm_hosterror = midiInOpen(
+	    &(m->handle.in),  /* input device handle */
+	    dwDevice,  /* device ID */
+	    (DWORD_PTR) winmm_in_callback,  /* callback address */
+	    (DWORD_PTR) midi,  /* callback instance data */
+	    CALLBACK_FUNCTION); /* callback is a procedure */
     if (pm_hosterror) goto free_descriptor;
 
     if (num_input_buffers < MIN_INPUT_BUFFERS)
@@ -668,22 +674,29 @@ static void FAR PASCAL winmm_in_callback(
     PmInternal *midi = (PmInternal *) dwInstance;
     midiwinmm_type m = (midiwinmm_type) midi->descriptor;
 
-    /* if this callback is reentered with data, we're in trouble. It's hard
-     * to imagine that Microsoft would allow callbacks to be reentrant --
-     * isn't the model that this is like a hardware interrupt? -- but I've
-     * seen reentrant behavior using a debugger, so it happens.
+    /* NOTE: we do not just EnterCriticalSection() here because an
+     * MIM_CLOSE message arrives when the port is closed, but then
+     * the m->lock has been destroyed.
      */
-    EnterCriticalSection(&m->lock);
 
     switch (wMsg) {
     case MIM_DATA: {
+        /* if this callback is reentered with data, we're in trouble. 
+         * It's hard to imagine that Microsoft would allow callbacks 
+         * to be reentrant -- isn't the model that this is like a 
+         * hardware interrupt? -- but I've seen reentrant behavior 
+         * using a debugger, so it happens.
+         */
+        long new_driver_time;
+        EnterCriticalSection(&m->lock);
+
         /* dwParam1 is MIDI data received, packed into DWORD w/ 1st byte of
                 message LOB;
            dwParam2 is time message received by input device driver, specified
             in [ms] from when midiInStart called.
            each message is expanded to include the status byte */
 
-        long new_driver_time = dwParam2;
+        new_driver_time = dwParam2;
 
         if ((dwParam1 & 0x80) == 0) {
             /* not a status byte -- ignore it. This happened running the
@@ -699,13 +712,16 @@ static void FAR PASCAL winmm_in_callback(
             event.message = dwParam1;
             pm_read_short(midi, &event);
         }
+        LeaveCriticalSection(&m->lock);
         break;
     }
     case MIM_LONGDATA: {
         MIDIHDR *lpMidiHdr = (MIDIHDR *) dwParam1;
-        unsigned char *data = lpMidiHdr->lpData;
+        unsigned char *data = (unsigned char *) lpMidiHdr->lpData;
         unsigned int processed = 0;
         int remaining = lpMidiHdr->dwBytesRecorded;
+
+        EnterCriticalSection(&m->lock);
         /* printf("midi_in_callback -- lpMidiHdr %x, %d bytes, %2x...\n", 
                 lpMidiHdr, lpMidiHdr->dwBytesRecorded, *data); */
         if (midi->time_proc)
@@ -718,38 +734,7 @@ static void FAR PASCAL winmm_in_callback(
             remaining -= amt;
             processed += amt;
         }
-#ifdef DELETE_THIS
-        unsigned int i = 0;
-        long size = sizeof(MIDIHDR) + lpMidiHdr->dwBufferLength;
-
-        while (i < lpMidiHdr->dwBytesRecorded) {
-            /* optimization: if message_count == 0, we are on an (output)
-             * message boundary so we can transfer data directly to the
-             * queue
-             */
-            PmEvent event;
-            if (midi->sysex_message_count == 0 &&
-                !midi->flush &&
-                i <= lpMidiHdr->dwBytesRecorded - 4 &&
-                ((event.message = (((long) data[0]) | 
-                        (((long) data[1]) << 8) | (((long) data[2]) << 16) |
-                        (((long) data[3]) << 24))) &
-                 0x80808080) == 0) { /* all data, no status */
-                event.timestamp = dwParam2;
-                if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-                    midi->flush = TRUE;
-                }
-                i += 4;
-                data += 4;
-            /* non-optimized: process one byte at a time. This is used to 
-             * handle any embedded SYSEX or EOX bytes and to finish */
-            } else {
-                pm_read_byte(midi, *data, dwParam2);
-                data++;
-                i++;
-            }
-        }
-#endif
+
         /* when a device is closed, the pending MIM_LONGDATA buffers are
            returned to this callback with dwBytesRecorded == 0. In this
            case, we do not want to send them back to the interface (if
@@ -757,6 +742,7 @@ static void FAR PASCAL winmm_in_callback(
         if (lpMidiHdr->dwBytesRecorded > 0) {
             lpMidiHdr->dwBytesRecorded = 0;
             lpMidiHdr->dwFlags = 0;
+			
             /* note: no error checking -- can this actually fail? */
             assert(midiInPrepareHeader(hMidiIn, lpMidiHdr, 
                         sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
@@ -767,7 +753,10 @@ static void FAR PASCAL winmm_in_callback(
              */
             assert(midiInAddBuffer(hMidiIn, lpMidiHdr, 
                         sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
+            LeaveCriticalSection(&m->lock);
         } else {
+            midiInUnprepareHeader(hMidiIn,lpMidiHdr,sizeof(MIDIHDR));
+            LeaveCriticalSection(&m->lock);
             pm_free(lpMidiHdr);
         }
         break;
@@ -785,7 +774,6 @@ static void FAR PASCAL winmm_in_callback(
     default:
         break;
     }
-    LeaveCriticalSection(&m->lock);
 }
 
 /*
@@ -874,20 +862,22 @@ static PmError winmm_out_open(PmInternal *midi, void *driverInfo)
     /* open device */
     if (midi->latency == 0) {
         /* use simple midi out calls */
-        pm_hosterror = midiOutOpen((LPHMIDIOUT) & m->handle.out,  /* device Handle */
-                                   dwDevice,  /* device ID  */
-                                   /* note: same callback fn as for StreamOpen: */
-                                   (DWORD) winmm_streamout_callback, /* callback fn */
-                                   (DWORD) midi,  /* callback instance data */
-                                   CALLBACK_FUNCTION); /* callback type */
+        pm_hosterror = midiOutOpen(
+                (LPHMIDIOUT) & m->handle.out,  /* device Handle */
+		dwDevice,  /* device ID  */
+		/* note: same callback fn as for StreamOpen: */
+		(DWORD_PTR) winmm_streamout_callback, /* callback fn */
+		(DWORD_PTR) midi,  /* callback instance data */
+		CALLBACK_FUNCTION); /* callback type */
     } else {
         /* use stream-based midi output (schedulable in future) */
-        pm_hosterror = midiStreamOpen(&m->handle.stream,  /* device Handle */
-                                      (LPUINT) & dwDevice,  /* device ID pointer */
-                                      1,  /* reserved, must be 1 */
-                                      (DWORD) winmm_streamout_callback,
-                                      (DWORD) midi,  /* callback instance data */
-                                      CALLBACK_FUNCTION);
+        pm_hosterror = midiStreamOpen(
+	        &m->handle.stream,  /* device Handle */
+		(LPUINT) & dwDevice,  /* device ID pointer */
+		1,  /* reserved, must be 1 */
+		(DWORD_PTR) winmm_streamout_callback,
+		(DWORD_PTR) midi,  /* callback instance data */
+		CALLBACK_FUNCTION);
     }
     if (pm_hosterror != MMSYSERR_NOERROR) {
         goto free_descriptor;
@@ -1215,7 +1205,7 @@ static PmError winmm_write_byte(PmInternal *midi, unsigned char byte,
     if (!hdr) {
         m->hdr = hdr = get_free_output_buffer(midi);
         assert(hdr);
-        midi->fill_base = m->hdr->lpData;
+        midi->fill_base = (unsigned char *) m->hdr->lpData;
         midi->fill_offset_ptr = &(hdr->dwBytesRecorded);
         /* when buffer fills, Pm_WriteSysEx will revert to calling
          * pmwin_write_byte, which expect to have space, so leave
@@ -1319,10 +1309,12 @@ static void CALLBACK winmm_out_callback(HMIDIOUT hmo, UINT wMsg,
        buffers are free, so we need to do something to flag empty buffers if
        we leave them prepared
      */
+    /*
     printf("out_callback: hdr %x, wMsg %x, MOM_DONE %x\n", 
            hdr, wMsg, MOM_DONE);
+    */
     if (wMsg == MOM_DONE)
-    assert(midiOutUnprepareHeader(m->handle.out, hdr,
+        assert(midiOutUnprepareHeader(m->handle.out, hdr,
                         sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
     /* notify waiting sender that a buffer is available */
     err = SetEvent(m->buffer_signal);
diff --git a/portmidi/pm_win/pmwinmm.h b/portmidi/pm_win/pmwinmm.h
old mode 100755
new mode 100644
diff --git a/portmidi/porttime/porttime.c b/portmidi/porttime/porttime.c
old mode 100755
new mode 100644
diff --git a/portmidi/porttime/porttime.dsp b/portmidi/porttime/porttime.dsp
old mode 100755
new mode 100644
diff --git a/portmidi/porttime/porttime.h b/portmidi/porttime/porttime.h
old mode 100755
new mode 100644
index 029ea7779..eff0f782e
--- a/portmidi/porttime/porttime.h
+++ b/portmidi/porttime/porttime.h
@@ -13,11 +13,11 @@ extern "C" {
 
 
 typedef enum {
-    ptNoError = 0,
-    ptHostError = -10000,
-    ptAlreadyStarted,
-    ptAlreadyStopped,
-    ptInsufficientMemory
+    ptNoError = 0,         /* success */
+    ptHostError = -10000,  /* a system-specific error occurred */
+    ptAlreadyStarted,      /* cannot start timer because it is already started */
+    ptAlreadyStopped,      /* cannot stop timer because it is already stopped */
+    ptInsufficientMemory   /* memory could not be allocated */
 } PtError;
 
 
@@ -25,12 +25,48 @@ typedef long PtTimestamp;
 
 typedef void (PtCallback)( PtTimestamp timestamp, void *userData );
 
+/*
+    Pt_Start() starts a real-time service.
 
+    resolution is the timer resolution in ms. The time will advance every
+    resolution ms.
+
+    callback is a function pointer to be called every resolution ms.
+
+    userData is passed to callback as a parameter.
+
+    return value:
+    Upon success, returns ptNoError. See PtError for other values.
+*/
 PtError Pt_Start(int resolution, PtCallback *callback, void *userData);
+
+/*
+    Pt_Stop() stops the timer.
+
+    return value:
+    Upon success, returns ptNoError. See PtError for other values.
+*/
 PtError Pt_Stop();
+
+/*
+    Pt_Started() returns true iff the timer is running.
+*/
 int Pt_Started();
+
+/* 
+    Pt_Time() returns the current time in ms.
+*/
 PtTimestamp Pt_Time();
 
+/*
+    Pt_Sleep() pauses, allowing other threads to run.
+
+    duration is the length of the pause in ms. The true duration 
+    of the pause may be rounded to the nearest or next clock tick
+    as determined by resolution in Pt_Start().
+*/
+void Pt_Sleep(long duration);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/portmidi/porttime/ptlinux.c b/portmidi/porttime/ptlinux.c
old mode 100755
new mode 100644
index 468575aa3..b43ca8b27
--- a/portmidi/porttime/ptlinux.c
+++ b/portmidi/porttime/ptlinux.c
@@ -59,7 +59,7 @@ static void *Pt_CallbackProc(void *p)
     /* printf("pt_callback_proc_id %d, id %d\n", pt_callback_proc_id,
            parameters->id); */
     if (geteuid() == 0) setpriority(PRIO_PROCESS, 0, -20);
-	while (pt_callback_proc_id == parameters->id) {
+    while (pt_callback_proc_id == parameters->id) {
         /* wait for a multiple of resolution ms */
         struct timeval timeout;
         int delay = mytime++ * parameters->resolution - Pt_Time();
@@ -124,4 +124,10 @@ PtTimestamp Pt_Time()
 }
 
 
+void Pt_Sleep(long duration)
+{
+    usleep(duration * 1000);
+}
+
+
 
diff --git a/portmidi/porttime/ptmacosx_cf.c b/portmidi/porttime/ptmacosx_cf.c
old mode 100755
new mode 100644
index c0c22a32e..09a8c6145
--- a/portmidi/porttime/ptmacosx_cf.c
+++ b/portmidi/porttime/ptmacosx_cf.c
@@ -133,3 +133,8 @@ PtTimestamp Pt_Time()
     return (PtTimestamp) ((now - startTime) * 1000.0);
 }
 
+
+void Pt_Sleep(long duration)
+{
+    usleep(duration * 1000);
+}
diff --git a/portmidi/porttime/ptmacosx_mach.c b/portmidi/porttime/ptmacosx_mach.c
old mode 100755
new mode 100644
index 37d4318b7..f0fdcf96a
--- a/portmidi/porttime/ptmacosx_mach.c
+++ b/portmidi/porttime/ptmacosx_mach.c
@@ -8,6 +8,7 @@
 #import <mach/mach_error.h>
 #import <mach/mach_time.h>
 #import <mach/clock.h>
+#include <unistd.h>
 
 #include "porttime.h"
 #include "sys/time.h"
@@ -122,3 +123,8 @@ PtTimestamp Pt_Time()
     return (PtTimestamp)(nsec_time / NSEC_PER_MSEC);
 }
 
+
+void Pt_Sleep(long duration)
+{
+    usleep(duration * 1000);
+}
diff --git a/portmidi/porttime/ptwinmm.c b/portmidi/porttime/ptwinmm.c
old mode 100755
new mode 100644
index bbfebb0ec..581441586
--- a/portmidi/porttime/ptwinmm.c
+++ b/portmidi/porttime/ptwinmm.c
@@ -14,8 +14,8 @@ static long time_resolution;
 static MMRESULT timer_id;
 static PtCallback *time_callback;
 
-void CALLBACK winmm_time_callback(UINT uID, UINT uMsg, DWORD dwUser, 
-                                  DWORD dw1, DWORD dw2)
+void CALLBACK winmm_time_callback(UINT uID, UINT uMsg, DWORD_PTR dwUser, 
+                                  DWORD_PTR dw1, DWORD_PTR dw2)
 {
     (*time_callback)(Pt_Time(), (void *) dwUser);
 }
@@ -31,7 +31,7 @@ PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
     time_callback = callback;
     if (callback) {
         timer_id = timeSetEvent(resolution, 1, winmm_time_callback, 
-            (DWORD) userData, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
+            (DWORD_PTR) userData, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
         if (!timer_id) return ptHostError;
     }
     return ptNoError;
@@ -63,3 +63,8 @@ PtTimestamp Pt_Time()
     return timeGetTime() - time_offset;
 }
 
+
+void Pt_Sleep(long duration)
+{
+    Sleep(duration);
+}
diff --git a/src/acinclude.m4 b/src/acinclude.m4
new file mode 100644
index 000000000..f1df5e5bb
--- /dev/null
+++ b/src/acinclude.m4
@@ -0,0 +1,1050 @@
+# Various support functions for configure.ac in asterisk
+#
+
+# Helper function to check for gcc attributes.
+# AST_GCC_ATTRIBUTE([attribute name])
+
+AC_DEFUN([AST_GCC_ATTRIBUTE],
+[
+AC_MSG_CHECKING(for compiler 'attribute $1' support)
+AC_COMPILE_IFELSE(
+	AC_LANG_PROGRAM([static int __attribute__(($1)) test(void) {}],
+			[]),
+	AC_MSG_RESULT(yes)
+	AC_DEFINE_UNQUOTED([HAVE_ATTRIBUTE_$1], 1, [Define to 1 if your GCC C compiler supports the '$1' attribute.]),
+	AC_MSG_RESULT(no))
+])
+
+# Helper function to setup variables for a package.
+# $1 -> the package name. Used in configure.ac and also as a prefix
+#	for the variables ($1_DIR, $1_INCLUDE, $1_LIB) in makeopts
+# $3 ->	option name, used in --with-$3 or --without-$3 when calling configure.
+# $2 and $4 are just text describing the package (short and long form)
+
+# AST_EXT_LIB_SETUP([package], [short description], [configure option name], [long description])
+
+AC_DEFUN([AST_EXT_LIB_SETUP],
+[
+    $1_DESCRIP="$2"
+    $1_OPTION="$3"
+    AC_ARG_WITH([$3], AC_HELP_STRING([--with-$3=PATH],[use $2 files in PATH $4]),
+    [
+	case ${withval} in
+	n|no)
+	USE_$1=no
+	;;
+	y|ye|yes)
+	ac_mandatory_list="${ac_mandatory_list} $1"
+	;;
+	*)
+	$1_DIR="${withval}"
+	ac_mandatory_list="${ac_mandatory_list} $1"
+	;;
+	esac
+    ])
+    PBX_$1=0
+    AC_SUBST([$1_LIB])
+    AC_SUBST([$1_INCLUDE])
+    AC_SUBST([$1_DIR])
+    AC_SUBST([PBX_$1])
+])
+
+# Check whether any of the mandatory modules are not present, and
+# print error messages in case. The mandatory list is built using
+# --with-* arguments when invoking configure.
+
+AC_DEFUN([AST_CHECK_MANDATORY],
+[
+	AC_MSG_CHECKING([for mandatory modules: ${ac_mandatory_list}])
+	err=0;
+	for i in ${ac_mandatory_list}; do
+		eval "a=\${PBX_$i}"
+		if test "x${a}" = "x1" ; then continue; fi
+		if test ${err} = "0" ; then AC_MSG_RESULT(fail) ; fi
+		AC_MSG_RESULT()
+		eval "a=\${${i}_OPTION}"
+		AC_MSG_NOTICE([***])
+		AC_MSG_NOTICE([*** The $i installation appears to be missing or broken.])
+		AC_MSG_NOTICE([*** Either correct the installation, or run configure])
+		AC_MSG_NOTICE([*** including --without-${a}.])
+		err=1
+	done
+	if test $err = 1 ; then exit 1; fi
+	AC_MSG_RESULT(ok)
+])
+
+# The next three functions check for the availability of a given package.
+# AST_C_DEFINE_CHECK looks for the presence of a #define in a header file,
+# AST_EXT_LIB_CHECK looks for a symbol in a given library, or at least
+#	for the presence of a header file.
+# AST_EXT_TOOL_CHECK looks for a symbol in using $1-config to determine CFLAGS and LIBS
+#
+# They are only run if PBX_$1 != 1 (where $1 is the package),
+# so you can call them multiple times and stop at the first matching one.
+# On success, they both set PBX_$1 = 1, set $1_INCLUDE and $1_LIB as applicable,
+# and also #define HAVE_$1 1 and #define HAVE_$1_VERSION ${last_argument}
+# in autoconfig.h so you can tell which test succeeded.
+# They should be called after AST_EXT_LIB_SETUP($1, ...)
+
+# Check if a given macro is defined in a certain header.
+
+# AST_C_DEFINE_CHECK([package], [macro name], [header file], [version])
+AC_DEFUN([AST_C_DEFINE_CHECK],
+[
+    if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
+	AC_MSG_CHECKING([for $2 in $3])
+	saved_cppflags="${CPPFLAGS}"
+	if test "x${$1_DIR}" != "x"; then
+	    $1_INCLUDE="-I${$1_DIR}/include"
+	fi
+	CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE}"
+
+	AC_COMPILE_IFELSE(
+	    [ AC_LANG_PROGRAM( [#include <$3>], [int foo = $2;]) ],
+	    [   AC_MSG_RESULT(yes)
+		PBX_$1=1
+		AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 headers.])
+		AC_DEFINE([HAVE_$1_VERSION], $4, [Define $1 headers version])
+	    ],
+	    [       AC_MSG_RESULT(no) ] 
+	)
+	CPPFLAGS="${saved_cppflags}"
+    fi
+])
+
+
+# Check for existence of a given package ($1), either looking up a function
+# in a library, or, if no function is supplied, only check for the
+# existence of the header files.
+
+# AST_EXT_LIB_CHECK([package], [library], [function], [header],
+#	 [extra libs], [extra cflags], [version])
+AC_DEFUN([AST_EXT_LIB_CHECK],
+[
+if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
+   pbxlibdir=""
+   # if --with-$1=DIR has been specified, use it.
+   if test "x${$1_DIR}" != "x"; then
+      if test -d ${$1_DIR}/lib; then
+      	 pbxlibdir="-L${$1_DIR}/lib"
+      else
+      	 pbxlibdir="-L${$1_DIR}"
+      fi
+   fi
+   pbxfuncname="$3"
+   if test "x${pbxfuncname}" = "x" ; then   # empty lib, assume only headers
+      AST_$1_FOUND=yes
+   else
+      AC_CHECK_LIB([$2], [${pbxfuncname}], [AST_$1_FOUND=yes], [AST_$1_FOUND=no], ${pbxlibdir} $5)
+   fi
+
+   # now check for the header.
+   if test "${AST_$1_FOUND}" = "yes"; then
+      $1_LIB="${pbxlibdir} -l$2 $5"
+      # if --with-$1=DIR has been specified, use it.
+      if test "x${$1_DIR}" != "x"; then
+	 $1_INCLUDE="-I${$1_DIR}/include"
+      fi
+      $1_INCLUDE="${$1_INCLUDE} $6"
+      if test "x$4" = "x" ; then	# no header, assume found
+         $1_HEADER_FOUND="1"
+      else				# check for the header
+         saved_cppflags="${CPPFLAGS}"
+         CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE} $6"
+	 AC_CHECK_HEADER([$4], [$1_HEADER_FOUND=1], [$1_HEADER_FOUND=0])
+         CPPFLAGS="${saved_cppflags}"
+      fi
+      if test "x${$1_HEADER_FOUND}" = "x0" ; then
+         $1_LIB=""
+         $1_INCLUDE=""
+      else
+         if test "x${pbxfuncname}" = "x" ; then		# only checking headers -> no library
+	    $1_LIB=""
+	 fi
+         PBX_$1=1
+         # XXX don't know how to evaluate the description (third argument) in AC_DEFINE_UNQUOTED
+         AC_DEFINE_UNQUOTED([HAVE_$1], 1, [Define this to indicate the ${$1_DESCRIP} library])
+	 AC_DEFINE_UNQUOTED([HAVE_$1_VERSION], [$7], [Define to indicate the ${$1_DESCRIP} library version])
+      fi
+   fi
+fi
+])
+
+
+# Check for a package using $2-config. Similar to AST_EXT_LIB_CHECK,
+# but use $2-config to determine cflags and libraries to use.
+# $3 and $4 can be used to replace --cflags and --libs in the request 
+
+# AST_EXT_TOOL_CHECK([package], [tool name], [--cflags], [--libs])
+AC_DEFUN([AST_EXT_TOOL_CHECK],
+[
+    if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
+	PBX_$1=0
+	AC_CHECK_TOOL(CONFIG_$1, $2-config, No)
+	if test ! "x${CONFIG_$1}" = xNo; then
+	    if test x"$3" = x ; then A=--cflags ; else A="$3" ; fi
+	    $1_INCLUDE=$(${CONFIG_$1} $A)
+	    if test x"$4" = x ; then A=--libs ; else A="$4" ; fi
+	    $1_LIB=$(${CONFIG_$1} $A)
+	    PBX_$1=1
+	    AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.])
+	fi
+    fi
+])
+
+AC_DEFUN(
+[AST_CHECK_GNU_MAKE], [AC_CACHE_CHECK(for GNU make, GNU_MAKE,
+   GNU_MAKE='Not Found' ;
+   GNU_MAKE_VERSION_MAJOR=0 ;
+   GNU_MAKE_VERSION_MINOR=0 ;
+   for a in make gmake gnumake ; do
+      if test -z "$a" ; then continue ; fi ;
+      if ( sh -c "$a --version" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then
+         GNU_MAKE=$a ;
+         GNU_MAKE_VERSION_MAJOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f3 -d' ' | cut -f1 -d'.'`
+         GNU_MAKE_VERSION_MINOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f2 -d'.' | cut -c1-2`
+         break;
+      fi
+   done ;
+) ;
+if test  "x$GNU_MAKE" = "xNot Found"  ; then
+   AC_MSG_ERROR( *** Please install GNU make.  It is required to build Asterisk!)
+   exit 1
+fi
+AC_SUBST([GNU_MAKE])
+])
+
+
+AC_DEFUN(
+[AST_CHECK_PWLIB], [
+PWLIB_INCDIR=
+PWLIB_LIBDIR=
+AC_LANG_PUSH([C++])
+if test "${PWLIBDIR:-unset}" != "unset" ; then
+  AC_CHECK_HEADER(${PWLIBDIR}/version.h, HAS_PWLIB=1, )
+fi
+if test "${HAS_PWLIB:-unset}" = "unset" ; then
+  if test "${OPENH323DIR:-unset}" != "unset"; then
+    AC_CHECK_HEADER(${OPENH323DIR}/../pwlib/version.h, HAS_PWLIB=1, )
+  fi
+  if test "${HAS_PWLIB:-unset}" != "unset" ; then
+    PWLIBDIR="${OPENH323DIR}/../pwlib"
+  else
+    AC_CHECK_HEADER(${HOME}/pwlib/include/ptlib.h, HAS_PWLIB=1, )
+    if test "${HAS_PWLIB:-unset}" != "unset" ; then
+      PWLIBDIR="${HOME}/pwlib"
+    else
+      AC_CHECK_HEADER(/usr/local/include/ptlib.h, HAS_PWLIB=1, )
+      if test "${HAS_PWLIB:-unset}" != "unset" ; then
+        AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/bin)
+        if test "${PTLIB_CONFIG:-unset}" = "unset" ; then
+          AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/share/pwlib/make)
+        fi
+        PWLIB_INCDIR="/usr/local/include"
+        PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
+        if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
+          if test "x$LIB64" != "x"; then
+            PWLIB_LIBDIR="/usr/local/lib64"
+          else
+            PWLIB_LIBDIR="/usr/local/lib"
+          fi
+        fi
+        PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
+        PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
+      else
+        AC_CHECK_HEADER(/usr/include/ptlib.h, HAS_PWLIB=1, )
+        if test "${HAS_PWLIB:-unset}" != "unset" ; then
+          AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/pwlib/make)
+          PWLIB_INCDIR="/usr/include"
+          PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
+          if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
+            if test "x$LIB64" != "x"; then
+              PWLIB_LIBDIR="/usr/lib64"
+            else
+              PWLIB_LIBDIR="/usr/lib"
+            fi
+          fi
+          PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
+          PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
+        fi
+      fi
+    fi
+  fi
+fi
+
+#if test "${HAS_PWLIB:-unset}" = "unset" ; then
+#  echo "Cannot find pwlib - please install or set PWLIBDIR and try again"
+#  exit
+#fi
+
+if test "${HAS_PWLIB:-unset}" != "unset" ; then
+  if test "${PWLIBDIR:-unset}" = "unset" ; then
+    if test "${PTLIB_CONFIG:-unset}" != "unset" ; then
+      PWLIBDIR=`$PTLIB_CONFIG --prefix`
+    else
+      echo "Cannot find ptlib-config - please install and try again"
+      exit
+    fi
+  fi
+
+  if test "x$PWLIBDIR" = "x/usr" -o "x$PWLIBDIR" = "x/usr/"; then
+    PWLIBDIR="/usr/share/pwlib"
+    PWLIB_INCDIR="/usr/include"
+    if test "x$LIB64" != "x"; then
+      PWLIB_LIBDIR="/usr/lib64"
+    else
+      PWLIB_LIBDIR="/usr/lib"
+    fi
+  fi
+  if test "x$PWLIBDIR" = "x/usr/local" -o "x$PWLIBDIR" = "x/usr/"; then
+    PWLIBDIR="/usr/local/share/pwlib"
+    PWLIB_INCDIR="/usr/local/include"
+    if test "x$LIB64" != "x"; then
+      PWLIB_LIBDIR="/usr/local/lib64"
+    else
+      PWLIB_LIBDIR="/usr/local/lib"
+    fi
+  fi
+
+  if test "${PWLIB_INCDIR:-unset}" = "unset"; then
+    PWLIB_INCDIR="${PWLIBDIR}/include"
+  fi
+  if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
+    PWLIB_LIBDIR="${PWLIBDIR}/lib"
+  fi
+
+  AC_SUBST([PWLIBDIR])
+  AC_SUBST([PWLIB_INCDIR])
+  AC_SUBST([PWLIB_LIBDIR])
+fi
+  AC_LANG_POP([C++])
+])
+
+
+AC_DEFUN(
+[AST_CHECK_OPENH323_PLATFORM], [
+PWLIB_OSTYPE=
+case "$host_os" in
+  linux*)          PWLIB_OSTYPE=linux ;
+  		;;
+  freebsd* )       PWLIB_OSTYPE=FreeBSD ;
+  		;;
+  openbsd* )       PWLIB_OSTYPE=OpenBSD ;
+				   ENDLDLIBS="-lossaudio" ;
+		;;
+  netbsd* )        PWLIB_OSTYPE=NetBSD ;
+				   ENDLDLIBS="-lossaudio" ;
+		;;
+  solaris* | sunos* ) PWLIB_OSTYPE=solaris ;
+		;;
+  darwin* )	       PWLIB_OSTYPE=Darwin ;
+		;;
+  beos*)           PWLIB_OSTYPE=beos ;
+                   STDCCFLAGS="$STDCCFLAGS -D__BEOS__"
+		;;
+  cygwin*)         PWLIB_OSTYPE=cygwin ;
+		;;
+  mingw*)	       PWLIB_OSTYPE=mingw ;
+		           STDCCFLAGS="$STDCCFLAGS -mms-bitfields" ;
+		           ENDLDLIBS="-lwinmm -lwsock32 -lsnmpapi -lmpr -lcomdlg32 -lgdi32 -lavicap32" ;
+		;;
+  * )		       PWLIB_OSTYPE="$host_os" ;
+		           AC_MSG_WARN("OS $PWLIB_OSTYPE not recognized - proceed with caution!") ;
+		;;
+esac
+
+PWLIB_MACHTYPE=
+case "$host_cpu" in
+   x86 | i686 | i586 | i486 | i386 ) PWLIB_MACHTYPE=x86
+                   ;;
+
+   x86_64)	   PWLIB_MACHTYPE=x86_64 ;
+		   P_64BIT=1 ;
+                   LIB64=1 ;
+		   ;;
+
+   alpha | alphaev56 | alphaev6 | alphaev67 | alphaev7) PWLIB_MACHTYPE=alpha ;
+		   P_64BIT=1 ;
+		   ;;
+
+   sparc )         PWLIB_MACHTYPE=sparc ;
+		   ;;
+
+   powerpc )       PWLIB_MACHTYPE=ppc ;
+		   ;;
+
+   ppc )           PWLIB_MACHTYPE=ppc ;
+		   ;;
+
+   powerpc64 )     PWLIB_MACHTYPE=ppc64 ;
+		   P_64BIT=1 ;
+                   LIB64=1 ;
+		   ;;
+
+   ppc64 )         PWLIB_MACHTYPE=ppc64 ;
+		   P_64BIT=1 ;
+                   LIB64=1 ;
+		   ;;
+
+   ia64)	   PWLIB_MACHTYPE=ia64 ;
+		   P_64BIT=1 ;
+	  	   ;;
+
+   s390x)	   PWLIB_MACHTYPE=s390x ;
+		   P_64BIT=1 ;
+                   LIB64=1 ;
+		   ;;
+
+   s390)	   PWLIB_MACHTYPE=s390 ;
+		   ;;
+
+   * )		   PWLIB_MACHTYPE="$host_cpu";
+		   AC_MSG_WARN("CPU $PWLIB_MACHTYPE not recognized - proceed with caution!") ;;
+esac
+
+PWLIB_PLATFORM="${PWLIB_OSTYPE}_${PWLIB_MACHTYPE}"
+
+AC_SUBST([PWLIB_PLATFORM])
+])
+
+
+AC_DEFUN(
+[AST_CHECK_OPENH323], [
+OPENH323_INCDIR=
+OPENH323_LIBDIR=
+AC_LANG_PUSH([C++])
+if test "${OPENH323DIR:-unset}" != "unset" ; then
+  AC_CHECK_HEADER(${OPENH323DIR}/version.h, HAS_OPENH323=1, )
+fi
+if test "${HAS_OPENH323:-unset}" = "unset" ; then
+  AC_CHECK_HEADER(${PWLIBDIR}/../openh323/version.h, OPENH323DIR="${PWLIBDIR}/../openh323"; HAS_OPENH323=1, )
+  if test "${HAS_OPENH323:-unset}" != "unset" ; then
+    OPENH323DIR="${PWLIBDIR}/../openh323"
+    saved_cppflags="${CPPFLAGS}"
+    CPPFLAGS="${CPPFLAGS} -I${PWLIB_INCDIR}/openh323 -I${PWLIB_INCDIR}"
+    AC_CHECK_HEADER(${OPENH323DIR}/include/h323.h, , OPENH323_INCDIR="${PWLIB_INCDIR}/openh323"; OPENH323_LIBDIR="${PWLIB_LIBDIR}", [#include <ptlib.h>])
+    CPPFLAGS="${saved_cppflags}"
+  else
+    saved_cppflags="${CPPFLAGS}"
+    CPPFLAGS="${CPPFLAGS} -I${HOME}/openh323/include -I${PWLIB_INCDIR}"
+    AC_CHECK_HEADER(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
+    CPPFLAGS="${saved_cppflags}"
+    if test "${HAS_OPENH323:-unset}" != "unset" ; then
+      OPENH323DIR="${HOME}/openh323"
+    else
+      saved_cppflags="${CPPFLAGS}"
+      CPPFLAGS="${CPPFLAGS} -I/usr/local/include/openh323 -I${PWLIB_INCDIR}"
+      AC_CHECK_HEADER(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
+      CPPFLAGS="${saved_cppflags}"
+      if test "${HAS_OPENH323:-unset}" != "unset" ; then
+        OPENH323DIR="/usr/local/share/openh323"
+        OPENH323_INCDIR="/usr/local/include/openh323"
+        if test "x$LIB64" != "x"; then
+          OPENH323_LIBDIR="/usr/local/lib64"
+        else
+          OPENH323_LIBDIR="/usr/local/lib"
+        fi
+      else
+        saved_cppflags="${CPPFLAGS}"
+        CPPFLAGS="${CPPFLAGS} -I/usr/include/openh323 -I${PWLIB_INCDIR}"
+        AC_CHECK_HEADER(/usr/include/openh323/h323.h, HAS_OPENH323=1, , [#include <ptlib.h>])
+        CPPFLAGS="${saved_cppflags}"
+        if test "${HAS_OPENH323:-unset}" != "unset" ; then
+          OPENH323DIR="/usr/share/openh323"
+          OPENH323_INCDIR="/usr/include/openh323"
+          if test "x$LIB64" != "x"; then
+            OPENH323_LIBDIR="/usr/lib64"
+          else
+            OPENH323_LIBDIR="/usr/lib"
+          fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+if test "${HAS_OPENH323:-unset}" != "unset" ; then
+  if test "${OPENH323_INCDIR:-unset}" = "unset"; then
+    OPENH323_INCDIR="${OPENH323DIR}/include"
+  fi
+  if test "${OPENH323_LIBDIR:-unset}" = "unset"; then
+    OPENH323_LIBDIR="${OPENH323DIR}/lib"
+  fi
+
+  OPENH323_LIBDIR="`cd ${OPENH323_LIBDIR}; pwd`"
+  OPENH323_INCDIR="`cd ${OPENH323_INCDIR}; pwd`"
+  OPENH323DIR="`cd ${OPENH323DIR}; pwd`"
+
+  AC_SUBST([OPENH323DIR])
+  AC_SUBST([OPENH323_INCDIR])
+  AC_SUBST([OPENH323_LIBDIR])
+fi
+  AC_LANG_POP([C++])
+])
+
+
+AC_DEFUN(
+[AST_CHECK_PWLIB_VERSION], [
+	if test "${HAS_$2:-unset}" != "unset"; then
+		$2_VERSION=`grep "$2_VERSION" ${$2_INCDIR}/$3 | cut -f2 -d ' ' | sed -e 's/"//g'`
+		$2_MAJOR_VERSION=`echo ${$2_VERSION} | cut -f1 -d.`
+		$2_MINOR_VERSION=`echo ${$2_VERSION} | cut -f2 -d.`
+		$2_BUILD_NUMBER=`echo ${$2_VERSION} | cut -f3 -d.`
+		let $2_VER=${$2_MAJOR_VERSION}*10000+${$2_MINOR_VERSION}*100+${$2_BUILD_NUMBER}
+		let $2_REQ=$4*10000+$5*100+$6
+
+		AC_MSG_CHECKING(if $1 version ${$2_VERSION} is compatible with chan_h323)
+		if test ${$2_VER} -lt ${$2_REQ}; then
+			AC_MSG_RESULT(no)
+			unset HAS_$2
+		else
+			AC_MSG_RESULT(yes)
+		fi
+	fi
+])
+
+
+AC_DEFUN(
+[AST_CHECK_PWLIB_BUILD], [
+	if test "${HAS_$2:-unset}" != "unset"; then
+	   AC_MSG_CHECKING($1 installation validity)
+
+	   saved_cppflags="${CPPFLAGS}"
+	   saved_libs="${LIBS}"
+	   if test "${$2_LIB:-unset}" != "unset"; then
+	      LIBS="${LIBS} ${$2_LIB} $7"
+	   else
+    	      LIBS="${LIBS} -L${$2_LIBDIR} -l${PLATFORM_$2} $7"
+	   fi
+	   CPPFLAGS="${CPPFLAGS} -I${$2_INCDIR} $6"
+
+	   AC_LANG_PUSH([C++])
+
+	   AC_LINK_IFELSE(
+		[AC_LANG_PROGRAM([$4],[$5])],
+		[	AC_MSG_RESULT(yes) 
+			ac_cv_lib_$2="yes" 
+		],
+		[	AC_MSG_RESULT(no) 
+			ac_cv_lib_$2="no" 
+		]
+		)
+
+	   AC_LANG_POP([C++])
+
+	   LIBS="${saved_libs}"
+	   CPPFLAGS="${saved_cppflags}"
+
+	   if test "${ac_cv_lib_$2}" = "yes"; then
+	      if test "${$2_LIB:-undef}" = "undef"; then
+	         if test "${$2_LIBDIR}" != "" -a "${$2_LIBDIR}" != "/usr/lib"; then
+	            $2_LIB="-L${$2_LIBDIR} -l${PLATFORM_$2}"
+	         else
+	            $2_LIB="-l${PLATFORM_$2}"
+	         fi
+	      fi
+	      if test "${$2_INCDIR}" != "" -a "${$2_INCDIR}" != "/usr/include"; then
+	         $2_INCLUDE="-I${$2_INCDIR}"
+	      fi
+	   	  PBX_$2=1
+	   	  AC_DEFINE([HAVE_$2], 1, [$3])
+	   fi
+	fi
+])
+
+AC_DEFUN(
+[AST_CHECK_OPENH323_BUILD], [
+	if test "${HAS_OPENH323:-unset}" != "unset"; then
+		AC_MSG_CHECKING(OpenH323 build option)
+		OPENH323_SUFFIX=
+		prefixes="h323_${PWLIB_PLATFORM}_ h323_ openh323"
+		for pfx in $prefixes; do
+			files=`ls -l ${OPENH323_LIBDIR}/lib${pfx}*.so* 2>/dev/null`
+			libfile=
+			if test -n "$files"; then
+				for f in $files; do
+					if test -f $f -a ! -L $f; then
+						libfile=`basename $f`
+						break;
+					fi
+				done
+			fi
+			if test -n "$libfile"; then
+				OPENH323_PREFIX=$pfx
+				break;
+			fi
+		done
+		if test "${libfile:-unset}" != "unset"; then
+			OPENH323_SUFFIX=`eval "echo ${libfile} | sed -e 's/lib${OPENH323_PREFIX}\(@<:@^.@:>@*\)\..*/\1/'"`
+		fi
+		case "${OPENH323_SUFFIX}" in
+			n)
+				OPENH323_BUILD="notrace";;
+			r)
+				OPENH323_BUILD="opt";;
+			d)
+				OPENH323_BUILD="debug";;
+			*)
+				if test "${OPENH323_PREFIX:-undef}" = "openh323"; then
+					notrace=`eval "grep NOTRACE ${OPENH323DIR}/openh323u.mak | grep = | sed -e 's/@<:@A-Z0-9_@:>@*@<:@ 	@:>@*=@<:@ 	@:>@*//'"`
+					if test "x$notrace" = "x"; then
+						notrace="0"
+					fi
+					if test "$notrace" -ne 0; then
+						OPENH323_BUILD="notrace"
+					else
+						OPENH323_BUILD="opt"
+					fi
+					OPENH323_LIB="-l${OPENH323_PREFIX}"
+				else
+					OPENH323_BUILD="notrace"
+				fi
+				;;
+		esac
+		AC_MSG_RESULT(${OPENH323_BUILD})
+
+		AC_SUBST([OPENH323_SUFFIX])
+		AC_SUBST([OPENH323_BUILD])
+	fi
+])
+
+
+# AST_FUNC_FORK
+# -------------
+AN_FUNCTION([fork],  [AST_FUNC_FORK])
+AN_FUNCTION([vfork], [AST_FUNC_FORK])
+AC_DEFUN([AST_FUNC_FORK],
+[AC_REQUIRE([AC_TYPE_PID_T])dnl
+AC_CHECK_HEADERS(vfork.h)
+AC_CHECK_FUNCS(fork vfork)
+if test "x$ac_cv_func_fork" = xyes; then
+  _AST_FUNC_FORK
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp* | *-*-uclinux* | *-*-linux-uclibc* )
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  AC_MSG_WARN([result $ac_cv_func_fork_works guessed because of cross compilation])
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  _AC_FUNC_VFORK
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  AC_MSG_WARN([result $ac_cv_func_vfork_works guessed because of cross compilation])
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+  AC_DEFINE(HAVE_WORKING_VFORK, 1, [Define to 1 if `vfork' works.])
+else
+  AC_DEFINE(vfork, fork, [Define as `fork' if `vfork' does not work.])
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+  AC_DEFINE(HAVE_WORKING_FORK, 1, [Define to 1 if `fork' works.])
+fi
+])# AST_FUNC_FORK
+
+
+# _AST_FUNC_FORK
+# -------------
+AC_DEFUN([_AST_FUNC_FORK],
+  [AC_CACHE_CHECK(for working fork, ac_cv_func_fork_works,
+    [AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+	[
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+	])],
+      [ac_cv_func_fork_works=yes],
+      [ac_cv_func_fork_works=no],
+      [ac_cv_func_fork_works=cross])])]
+)# _AST_FUNC_FORK
+
+# AST_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AST_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([AST_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AST_PROG_LD_GNU
+])# AST_PROG_LD
+
+
+# AST_PROG_LD_GNU
+# --------------
+AC_DEFUN([AST_PROG_LD_GNU],
+[AC_REQUIRE([AST_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AST_PROG_LD_GNU
+
+# AST_PROG_EGREP
+# -------------
+m4_ifndef([AST_PROG_EGREP], [AC_DEFUN([AST_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])]) # AST_PROG_EGREP
+
+# AST_PROG_SED
+# -----------
+# Check for a fully functional sed program that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([AST_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+    [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+     dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+     ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     _AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed],
+	[_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED],
+		["$ac_path_SED" -f conftest.sed])])])
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])# AST_PROG_SED
+
+dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+dnl
+dnl @summary figure out how to build C programs using POSIX threads
+dnl
+dnl This macro figures out how to build C programs using POSIX threads.
+dnl It sets the PTHREAD_LIBS output variable to the threads library and
+dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
+dnl C compiler flags that are needed. (The user can also force certain
+dnl compiler flags/libs to be tested by setting these environment
+dnl variables.)
+dnl
+dnl Also sets PTHREAD_CC to any special C compiler that is needed for
+dnl multi-threaded programs (defaults to the value of CC otherwise).
+dnl (This is necessary on AIX to use the special cc_r compiler alias.)
+dnl
+dnl NOTE: You are assumed to not only compile your program with these
+dnl flags, but also link it with them as well. e.g. you should link
+dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
+dnl $LIBS
+dnl
+dnl If you are only building threads programs, you may wish to use
+dnl these variables in your default LIBS, CFLAGS, and CC:
+dnl
+dnl        LIBS="$PTHREAD_LIBS $LIBS"
+dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+dnl        CC="$PTHREAD_CC"
+dnl
+dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
+dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
+dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+dnl
+dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
+dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
+dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
+dnl default action will define HAVE_PTHREAD.
+dnl
+dnl Please let the authors know if this macro fails on any platform, or
+dnl if you have any other suggestions or comments. This macro was based
+dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
+dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
+dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
+dnl We are also grateful for the helpful feedback of numerous users.
+dnl
+dnl @category InstalledPackages
+dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
+dnl @version 2006-05-29
+dnl @license GPLWithACException
+
+AC_DEFUN([ACX_PTHREAD],
+[
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_SAVE
+AC_LANG_C
+acx_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test x"$acx_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case "${host_cpu}-${host_os}" in
+        *solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
+        ;;
+esac
+
+if test x"$acx_pthread_ok" = xno; then
+for flag in $acx_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+		pthread-config)
+		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
+		if test x"$acx_pthread_config" = xno; then continue; fi
+		PTHREAD_CFLAGS="`pthread-config --cflags`"
+		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+		;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_TRY_LINK([#include <pthread.h>],
+                    [pthread_t th; pthread_join(th, 0);
+                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
+                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
+                    [acx_pthread_ok=yes])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($acx_pthread_ok)
+        if test "x$acx_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$acx_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+	AC_MSG_CHECKING([for joinable pthread attribute])
+	attr_name=unknown
+	for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+	    AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
+                        [attr_name=$attr; break])
+	done
+        AC_MSG_RESULT($attr_name)
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+        case "${host_cpu}-${host_os}" in
+            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
+            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+        esac
+        AC_MSG_RESULT(${flag})
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with xlc_r or cc_r
+	if test x"$GCC" != xyes; then
+          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+        else
+          PTHREAD_CC=$CC
+	fi
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$acx_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        acx_pthread_ok=no
+        $2
+fi
+AC_LANG_RESTORE
+])dnl ACX_PTHREAD
diff --git a/src/config.h.in b/src/config.h.in
index cf88ef4a1..db86fe4b1 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -1,5 +1,225 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
 
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 if you have `alloca', as a function or macro. */
 #undef HAVE_ALLOCA
 
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
 #undef HAVE_ALLOCA_H
 
+/* Define this to indicate the ${ATAN2F_DESCRIP} library */
+#undef HAVE_ATAN2F
+
+/* Define to indicate the ${ATAN2F_DESCRIP} library version */
+#undef HAVE_ATAN2F_VERSION
+
+/* Define this to indicate the ${ATANF_DESCRIP} library */
+#undef HAVE_ATANF
+
+/* Define to indicate the ${ATANF_DESCRIP} library version */
+#undef HAVE_ATANF_VERSION
+
+/* Define to 1 if you have the <bstring.h> header file. */
+#undef HAVE_BSTRING_H
+
+/* Define this to indicate the ${COSF_DESCRIP} library */
+#undef HAVE_COSF
+
+/* Define to indicate the ${COSF_DESCRIP} library version */
+#undef HAVE_COSF_VERSION
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define this to indicate the ${EXPF_DESCRIP} library */
+#undef HAVE_EXPF
+
+/* Define to indicate the ${EXPF_DESCRIP} library version */
+#undef HAVE_EXPF_VERSION
+
+/* Define this to indicate the ${FABSF_DESCRIP} library */
+#undef HAVE_FABSF
+
+/* Define to indicate the ${FABSF_DESCRIP} library version */
+#undef HAVE_FABSF_VERSION
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the `tcl84' library (-ltcl84). */
+#undef HAVE_LIBTCL84
+
+/* Define to 1 if you have the `tcl85' library (-ltcl85). */
+#undef HAVE_LIBTCL85
+
+/* Define to 1 if you have the `tcl8.0' library (-ltcl8.0). */
+#undef HAVE_LIBTCL8_0
+
+/* Define to 1 if you have the `tcl8.2' library (-ltcl8.2). */
+#undef HAVE_LIBTCL8_2
+
+/* Define to 1 if you have the `tcl8.3' library (-ltcl8.3). */
+#undef HAVE_LIBTCL8_3
+
+/* Define to 1 if you have the `tcl8.4' library (-ltcl8.4). */
+#undef HAVE_LIBTCL8_4
+
+/* Define to 1 if you have the `tcl8.5' library (-ltcl8.5). */
+#undef HAVE_LIBTCL8_5
+
+/* Define to 1 if you have the `tk84' library (-ltk84). */
+#undef HAVE_LIBTK84
+
+/* Define to 1 if you have the `tk85' library (-ltk85). */
+#undef HAVE_LIBTK85
+
+/* Define to 1 if you have the `tk8.0' library (-ltk8.0). */
+#undef HAVE_LIBTK8_0
+
+/* Define to 1 if you have the `tk8.2' library (-ltk8.2). */
+#undef HAVE_LIBTK8_2
+
+/* Define to 1 if you have the `tk8.3' library (-ltk8.3). */
+#undef HAVE_LIBTK8_3
+
+/* Define to 1 if you have the `tk8.4' library (-ltk8.4). */
+#undef HAVE_LIBTK8_4
+
+/* Define to 1 if you have the `tk8.5' library (-ltk8.5). */
+#undef HAVE_LIBTK8_5
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define this to indicate the ${LOGF_DESCRIP} library */
+#undef HAVE_LOGF
+
+/* Define to indicate the ${LOGF_DESCRIP} library version */
+#undef HAVE_LOGF_VERSION
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define this to indicate the ${POWF_DESCRIP} library */
+#undef HAVE_POWF
+
+/* Define to indicate the ${POWF_DESCRIP} library version */
+#undef HAVE_POWF_VERSION
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define this to indicate the ${SINF_DESCRIP} library */
+#undef HAVE_SINF
+
+/* Define to indicate the ${SINF_DESCRIP} library version */
+#undef HAVE_SINF_VERSION
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define this to indicate the ${SQRTF_DESCRIP} library */
+#undef HAVE_SQRTF
+
+/* Define to indicate the ${SQRTF_DESCRIP} library version */
+#undef HAVE_SQRTF_VERSION
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/src/configure.in b/src/configure.in
index bc5d5f7b8..9dd608734 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -1,6 +1,8 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(d_arithmetic.c)
 
+AC_CONFIG_HEADER(config.h)
+
 AC_SUBST(alsa, yes)
 AC_SUBST(jack, no)
 AC_SUBST(portaudio, no)
@@ -23,6 +25,7 @@ AC_SUBST(OSNUMBER)
 AC_SUBST(EXTERNTARGET)
 AC_SUBST(ASIOSRC)
 AC_SUBST(GUISRC)
+AC_SUBST(PDEXEC)
 
 dnl other defaults
 
@@ -44,10 +47,8 @@ AC_ARG_ENABLE(setuid,   [  --enable-setuid         install as setuid (linux)],
     setuid=$enableval)
 AC_ARG_ENABLE(fftw,     [  --enable-fftw           use FFTW package],
     fftw=$enableval)
-AC_ARG_ENABLE(fat,      [  --disable-fat           build fat binary on Mac OS X], 
+AC_ARG_ENABLE(fat,		[  --disable-fat    build fat binary on Mac OS X], 
     fat=$enableval, fat="yes")
-AC_ARG_ENABLE(tk,       [  --disable-tk            build without tcl/tk-GUI],
-    tk=$enableval)
 
 dnl Checks for programs.
 AC_PROG_CC
@@ -63,7 +64,7 @@ AC_HEADER_TIME
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h sys/time.h unistd.h bstring.h)
+AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h sys/time.h unistd.h bstring.h io.h)
 
 dnl Checks for library functions.
 AC_PROG_GCC_TRADITIONAL
@@ -173,8 +174,13 @@ else
 GUISRC=
 fi
 
+# leave the executable as 'pd' on Mac OS X and Windows, but call it
+# 'pdextended' on GNU/Linux
+PDEXEC=pd
+
 if test `uname -s` = Linux;
 then
+    PDEXEC=pdextended
     dnl Ckecking for ALSA
     echo .................... alsa= $alsa
 dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
@@ -315,6 +321,8 @@ then
         ../portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c  \
         ../portmidi/pm_mac/pmmac.c \
         ../portmidi/pm_mac/pmmacosxcm.c \
+        ../portmidi/pm_mac/finddefault.c \
+        ../portmidi/pm_mac/readbinaryplist.c \
         ../portmidi/pm_common/pmutil.c \
         ../portmidi/pm_common/portmidi.c \
         ../portmidi/porttime/ptmacosx_cf.c "
@@ -347,11 +355,11 @@ then
     OSNUMBER=2
     if test x$jack = "xyes";
     then
-        LDFLAGS=$LDFLAGS" -weak_framework Jack"
+    	LDFLAGS=$LDFLAGS" -weak_framework Jackmp"
     fi
     if test x$jack = "xrun";
     then
-        LDFLAGS=$LDFLAGS" -weak_framework Jack"
+        LDFLAGS=$LDFLAGS" -weak_framework Jackmp"
     fi
 fi
 
@@ -448,5 +456,15 @@ then echo -n
 else mkdir ../bin
 fi
 
+AST_EXT_LIB_CHECK([SINF],   [m], [sinf])
+AST_EXT_LIB_CHECK([COSF],   [m], [cosf])
+AST_EXT_LIB_CHECK([ATANF],  [m], [atanf])
+AST_EXT_LIB_CHECK([ATAN2F], [m], [atan2f])
+AST_EXT_LIB_CHECK([SQRTF],  [m], [sqrtf])
+AST_EXT_LIB_CHECK([LOGF],   [m], [logf])
+AST_EXT_LIB_CHECK([EXPF],   [m], [expf])
+AST_EXT_LIB_CHECK([FABSF],  [m], [fabsf])
+AST_EXT_LIB_CHECK([POWF],   [m], [powf])
+
 AC_OUTPUT(makefile)
 
diff --git a/src/d_delay.c b/src/d_delay.c
index 98cc1149a..d36f349dc 100644
--- a/src/d_delay.c
+++ b/src/d_delay.c
@@ -24,6 +24,7 @@ typedef struct _sigdelwrite
 {
     t_object x_obj;
     t_symbol *x_sym;
+    t_float x_deltime;  /* delay in msec (added by Mathieu Bouchard) */
     t_delwritectl x_cspace;
     int x_sortno;   /* DSP sort number at which this was last put on chain */
     int x_rsortno;  /* DSP sort # for first delread or write in chain */
@@ -34,6 +35,21 @@ typedef struct _sigdelwrite
 #define XTRASAMPS 4
 #define SAMPBLK 4
 
+static void sigdelwrite_updatesr (t_sigdelwrite *x, t_float sr) /* added by Mathieu Bouchard */
+{
+    int nsamps = x->x_deltime * sr * (t_float)(0.001f);
+    if (nsamps < 1) nsamps = 1;
+    nsamps += ((- nsamps) & (SAMPBLK - 1));
+    nsamps += DEFDELVS;
+    if (x->x_cspace.c_n != nsamps) {
+      x->x_cspace.c_vec = (t_sample *)resizebytes(x->x_cspace.c_vec,
+        (x->x_cspace.c_n + XTRASAMPS) * sizeof(t_sample),
+        (         nsamps + XTRASAMPS) * sizeof(t_sample));
+      x->x_cspace.c_n = nsamps;
+      x->x_cspace.c_phase = XTRASAMPS;
+    }
+}
+
     /* routine to check that all delwrites/delreads/vds have same vecsize */
 static void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize)
 {
@@ -54,19 +70,13 @@ static void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize)
 
 static void *sigdelwrite_new(t_symbol *s, t_floatarg msec)
 {
-    int nsamps;
     t_sigdelwrite *x = (t_sigdelwrite *)pd_new(sigdelwrite_class);
     if (!*s->s_name) s = gensym("delwrite~");
     pd_bind(&x->x_obj.ob_pd, s);
     x->x_sym = s;
-    nsamps = msec * sys_getsr() * (t_float)(0.001f);
-    if (nsamps < 1) nsamps = 1;
-    nsamps += ((- nsamps) & (SAMPBLK - 1));
-    nsamps += DEFDELVS;
-    x->x_cspace.c_n = nsamps;
-    x->x_cspace.c_vec =
-        (t_sample *)getbytes((nsamps + XTRASAMPS) * sizeof(t_sample));
-    x->x_cspace.c_phase = XTRASAMPS;
+    x->x_deltime = msec;
+    x->x_cspace.c_n = 0;
+    x->x_cspace.c_vec = getbytes(XTRASAMPS * sizeof(t_sample));
     x->x_sortno = 0;
     x->x_vecsize = 0;
     x->x_f = 0;
@@ -109,6 +119,7 @@ static void sigdelwrite_dsp(t_sigdelwrite *x, t_signal **sp)
     dsp_add(sigdelwrite_perform, 3, sp[0]->s_vec, &x->x_cspace, sp[0]->s_n);
     x->x_sortno = ugen_getsortno();
     sigdelwrite_checkvecsize(x, sp[0]->s_n);
+    sigdelwrite_updatesr(x, sp[0]->s_sr);
 }
 
 static void sigdelwrite_free(t_sigdelwrite *x)
@@ -200,6 +211,7 @@ static void sigdelread_dsp(t_sigdelread *x, t_signal **sp)
     x->x_n = sp[0]->s_n;
     if (delwriter)
     {
+        sigdelwrite_updatesr(delwriter, sp[0]->s_sr);
         sigdelwrite_checkvecsize(delwriter, sp[0]->s_n);
         x->x_zerodel = (delwriter->x_sortno == ugen_getsortno() ?
             0 : delwriter->x_vecsize);
diff --git a/src/d_math.c b/src/d_math.c
index 31c6c6552..10517a354 100644
--- a/src/d_math.c
+++ b/src/d_math.c
@@ -569,6 +569,8 @@ static void *pow_tilde_new(t_symbol *s, int argc, t_atom *argv)
     t_pow_tilde *x = (t_pow_tilde *)pd_new(pow_tilde_class);
     inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
     outlet_new(&x->x_obj, &s_signal);
+    pd_error(x, "A new incompatible [pow~] object was introduced in Pd 0.42.");
+    post("\tFor a backwards-compatible version, use [cyclone/pow~]");
     x->x_f = 0;
     return (x);
 }
diff --git a/src/d_soundfile.c b/src/d_soundfile.c
index 8768fa553..780952c91 100644
--- a/src/d_soundfile.c
+++ b/src/d_soundfile.c
@@ -11,14 +11,21 @@ readsf~ and writesf~ are defined which confine disk operations to a separate
 thread so that they can be used in real time.  The readsf~ and writesf~
 objects use Posix-like threads.  */
 
-#ifndef MSW
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
+#ifndef MSW
 #include <fcntl.h>
 #endif
 #include <pthread.h>
-#ifdef MSW
+
+#ifdef HAVE_IO_H
 #include <io.h>
 #endif
+
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
@@ -400,9 +407,9 @@ int open_soundfile(const char *dirname, const char *filename, int headersize,
     int *p_bytespersamp, int *p_bigendian, int *p_nchannels, long *p_bytelimit,
     long skipframes)
 {
-    char buf[OBUFSIZE], *bufptr;
+    char buf[FILENAME_MAX], *bufptr;
     int fd;
-    fd = open_via_path(dirname, filename, "", buf, &bufptr, MAXPDSTRING, 1);
+    fd = open_via_path(dirname, filename, "", buf, &bufptr, FILENAME_MAX, 1);
     if (fd < 0)
         return (-1);
     else return (open_soundfile_via_fd(fd, headersize, p_bytespersamp,
@@ -416,9 +423,9 @@ int open_soundfile_via_canvas(t_canvas *canvas, const char *filename, int header
     int *p_bytespersamp, int *p_bigendian, int *p_nchannels, long *p_bytelimit,
     long skipframes)
 {
-    char buf[OBUFSIZE], *bufptr;
+    char buf[FILENAME_MAX], *bufptr;
     int fd;
-    fd = canvas_open(canvas, filename, "", buf, &bufptr, MAXPDSTRING, 1);
+    fd = canvas_open(canvas, filename, "", buf, &bufptr, FILENAME_MAX, 1);
     if (fd < 0)
         return (-1);
     else return (open_soundfile_via_fd(fd, headersize, p_bytespersamp,
@@ -738,15 +745,15 @@ static int create_soundfile(t_canvas *canvas, const char *filename,
     int filetype, int nframes, int bytespersamp,
     int bigendian, int nchannels, int swap, t_float samplerate)
 {
-    char filenamebuf[MAXPDSTRING], buf2[MAXPDSTRING];
+    char filenamebuf[FILENAME_MAX], buf2[FILENAME_MAX];
     char headerbuf[WRITEHDRSIZE];
     t_wave *wavehdr = (t_wave *)headerbuf;
     t_nextstep *nexthdr = (t_nextstep *)headerbuf;
     t_aiff *aiffhdr = (t_aiff *)headerbuf;
     int fd, headersize = 0;
     
-    strncpy(filenamebuf, filename, MAXPDSTRING-10);
-    filenamebuf[MAXPDSTRING-10] = 0;
+    strncpy(filenamebuf, filename, FILENAME_MAX-10);
+    filenamebuf[FILENAME_MAX-10] = 0;
 
     if (filetype == FORMAT_NEXT)
     {
@@ -812,7 +819,7 @@ static int create_soundfile(t_canvas *canvas, const char *filename,
         headersize = sizeof(t_wave);
     }
 
-    canvas_makefilename(canvas, filenamebuf, buf2, MAXPDSTRING);
+    canvas_makefilename(canvas, filenamebuf, buf2, FILENAME_MAX);
     sys_bashfilename(buf2, buf2);
     if ((fd = open(buf2, BINCREATE, 0666)) < 0)
         return (-1);
@@ -831,7 +838,7 @@ static void soundfile_finishwrite(void *obj, char *filename, int fd,
     if (itemswritten < nframes) 
     {
         if (nframes < 0x7fffffff)
-            pd_error(obj, "soundfiler_write: %d out of %d bytes written",
+            pd_error(obj, "soundfiler_write: %ld out of %ld bytes written",
                 itemswritten, nframes);
             /* try to fix size fields in header */
         if (filetype == FORMAT_WAVE)
@@ -1261,7 +1268,7 @@ static void soundfiler_read(t_soundfiler *x, t_symbol *s,
         framesinfile = (eofis - poswas) / (channels * bytespersamp);
         if (framesinfile > maxsize)
         {
-            pd_error(x, "soundfiler_read: truncated to %d elements", maxsize);
+            pd_error(x, "soundfiler_read: truncated to %ld elements", maxsize);
             framesinfile = maxsize;
         }
         if (framesinfile > bytelimit / (channels * bytespersamp))
diff --git a/src/d_ugen.c b/src/d_ugen.c
index fe49b7dee..af82e9559 100644
--- a/src/d_ugen.c
+++ b/src/d_ugen.c
@@ -219,6 +219,11 @@ static void block_float(t_block *x, t_floatarg f)
 
 static void block_bang(t_block *x)
 {
+    if (!dsp_chain) 
+    {
+        pd_error(x, "bang to block~ or switch~ with DSP off has no effect");
+        return;
+    }
     if (x->x_switched && !x->x_switchon)
     {
         t_int *ip;
diff --git a/src/g_all_guis.c b/src/g_all_guis.c
index 6f196e343..2adf4fecb 100644
--- a/src/g_all_guis.c
+++ b/src/g_all_guis.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /*  #define GGEE_HSLIDER_COMPATIBLE  */
 
 /*------------------ global varaibles -------------------------*/
@@ -425,8 +428,8 @@ void iemgui_label_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av
     if(glist_isvisible(iemgui->x_glist))
         sys_vgui(".x%lx.c coords %lxLABEL %d %d\n",
                  glist_getcanvas(iemgui->x_glist), x,
-                 iemgui->x_obj.te_xpix+iemgui->x_ldx,
-                 iemgui->x_obj.te_ypix+iemgui->x_ldy);
+                 text_xpix((t_object *)x,iemgui->x_glist)+iemgui->x_ldx,
+                 text_ypix((t_object *)x,iemgui->x_glist)+iemgui->x_ldy);
 }
 
 void iemgui_label_font(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
@@ -446,9 +449,9 @@ void iemgui_label_font(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *a
         f = 4;
     iemgui->x_fontsize = f;
     if(glist_isvisible(iemgui->x_glist))
-        sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s}\n",
+        sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s}\n",
                  glist_getcanvas(iemgui->x_glist), x, iemgui->x_font, 
-                 iemgui->x_fontsize, sys_fontweight);
+				 iemgui->x_fontsize, sys_fontweight);
 }
 
 void iemgui_size(void *x, t_iemgui *iemgui)
@@ -630,6 +633,7 @@ int iemgui_dialog(t_iemgui *iemgui, t_symbol **srl, int argc, t_atom *argv)
         fs = 4;
     iemgui->x_fontsize = fs;
     iemgui_verify_snd_ne_rcv(iemgui);
+    canvas_dirty(iemgui->x_glist, 1);
     return(oldsndrcvable);
 }
 
diff --git a/src/g_array.c b/src/g_array.c
index a73c5ba54..f38c0e941 100644
--- a/src/g_array.c
+++ b/src/g_array.c
@@ -385,6 +385,7 @@ void glist_arraydialog(t_glist *parent, t_symbol *name, t_floatarg size,
         gl = glist_addglist(parent, &s_, 0, 1,
             (size > 1 ? size-1 : size), -1, 0, 0, 0, 0);
     a = graph_array(gl, sharptodollar(name), &s_float, size, flags);
+    canvas_dirty(parent, 1);
 }
 
     /* this is called from the properties dialog window for an existing array */
@@ -453,6 +454,7 @@ void garray_arraydialog(t_garray *x, t_symbol *name, t_floatarg fsize,
 
         garray_setsaveit(x, (saveit != 0));
         garray_redraw(x);
+        canvas_dirty(x->x_glist, 1);
     }
 }
 
@@ -1136,12 +1138,12 @@ int garray_getfloatwords(t_garray *x, int *size, t_word **vec)
     t_array *a = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!a)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return (0);
     }
     else if (elemsize != sizeof(t_word))
     {
-        error("%s: has more than one field", x->x_realname);
+        error("%s: has more than one field", x->x_realname->s_name);
         return (0);
     }
     *size = garray_npoints(x);
@@ -1178,7 +1180,7 @@ static void garray_const(t_garray *x, t_floatarg g)
     int yonset, i, elemsize;
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
     else for (i = 0; i < array->a_n; i++)
         *((t_float *)((char *)array->a_vec
             + elemsize * i) + yonset) = g;
@@ -1194,7 +1196,7 @@ static void garray_dofo(t_garray *x, int npoints, t_float dcval,
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return;
     }
     if (npoints == 0)
@@ -1221,7 +1223,7 @@ static void garray_dofo(t_garray *x, int npoints, t_float dcval,
 
 static void garray_sinesum(t_garray *x, t_symbol *s, int argc, t_atom *argv)
 {    
-    t_float *svec = (t_float *)t_getbytes(sizeof(t_float) * argc);
+    t_float *svec;
     int npoints, i;
     if (argc < 2)
     {
@@ -1244,7 +1246,7 @@ static void garray_sinesum(t_garray *x, t_symbol *s, int argc, t_atom *argv)
 
 static void garray_cosinesum(t_garray *x, t_symbol *s, int argc, t_atom *argv)
 {
-    t_float *svec = (t_float *)t_getbytes(sizeof(t_float) * argc);
+    t_float *svec;
     int npoints, i;
     if (argc < 2)
     {
@@ -1273,7 +1275,7 @@ static void garray_normalize(t_garray *x, t_float f)
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return;
     }
 
@@ -1308,7 +1310,7 @@ static void garray_list(t_garray *x, t_symbol *s, int argc, t_atom *argv)
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return;
     }
     if (argc < 2) return;
@@ -1384,17 +1386,17 @@ static void garray_read(t_garray *x, t_symbol *filename)
 {
     int nelem, filedesc, i;
     FILE *fd;
-    char buf[MAXPDSTRING], *bufptr;
+    char buf[FILENAME_MAX], *bufptr;
     int yonset, elemsize;
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return;
     }
     nelem = array->a_n;
     if ((filedesc = canvas_open(glist_getcanvas(x->x_glist),
-            filename->s_name, "", buf, &bufptr, MAXPDSTRING, 0)) < 0 
+            filename->s_name, "", buf, &bufptr, FILENAME_MAX, 0)) < 0 
                 || !(fd = fdopen(filedesc, "r")))
     {
         error("%s: can't open", filename->s_name);
@@ -1426,7 +1428,7 @@ static void garray_write(t_garray *x, t_symbol *filename)
     t_array *array = garray_getarray_floatonly(x, &yonset, &elemsize);
     if (!array)
     {
-        error("%s: needs floating-point 'y' field", x->x_realname);
+        error("%s: needs floating-point 'y' field", x->x_realname->s_name);
         return;
     }
     canvas_makefilename(glist_getcanvas(x->x_glist), filename->s_name,
diff --git a/src/g_bang.c b/src/g_bang.c
index 1e5d6604f..8dd1127c6 100644
--- a/src/g_bang.c
+++ b/src/g_bang.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 
 /* --------------- bng     gui-bang ------------------------- */
 
@@ -33,6 +36,11 @@ static t_class *bng_class;
 
 void bng_draw_update(t_bng *x, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("bng_draw_update");
+        return;
+    }
     if(glist_isvisible(glist))
     {
         sys_vgui(".x%lx.c itemconfigure %lxBUT -fill #%6.6x\n", glist_getcanvas(glist), x,
@@ -55,12 +63,12 @@ void bng_draw_new(t_bng *x, t_glist *glist)
              xpos + x->x_gui.x_w-1, ypos + x->x_gui.x_h-1,
              x->x_flashed?x->x_gui.x_fcol:x->x_gui.x_bcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xpos+x->x_gui.x_ldx,
              ypos+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
-             x->x_gui.x_lcol, x);
+			 x->x_gui.x_lcol, x);
     if(!x->x_gui.x_fsf.x_snd_able)
         sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %lxOUT%d\n",
              canvas, xpos,
@@ -116,7 +124,7 @@ void bng_draw_config(t_bng* x, t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_canvas.c b/src/g_canvas.c
index fd2df1614..3386ef808 100644
--- a/src/g_canvas.c
+++ b/src/g_canvas.c
@@ -159,7 +159,7 @@ t_canvasenvironment *canvas_getenv(t_canvas *x)
     if (!x) bug("canvas_getenv");
     while (!x->gl_env)
         if (!(x = x->gl_owner))
-            bug("t_canvasenvironment", x);
+            bug("t_canvasenvironment");
     return (x->gl_env);
 }
 
@@ -597,9 +597,15 @@ void canvas_reflecttitle(t_canvas *x)
         strcat(namebuf, ")");
     }
     else namebuf[0] = 0;
+#ifdef __APPLE__
+    sys_vgui("wm attributes .x%lx -modified %d -titlepath {%s/%s}\n",
+        x, x->gl_dirty, canvas_getdir(x)->s_name, x->gl_name->s_name);
+    sys_vgui("wm title .x%lx {%s%s}\n", x, x->gl_name->s_name, namebuf);
+#else
     sys_vgui("wm title .x%lx {%s%c%s - %s}\n", 
         x, x->gl_name->s_name, (x->gl_dirty? '*' : ' '), namebuf,
             canvas_getdir(x)->s_name);
+#endif
 }
 
     /* mark a glist dirty or clean */
@@ -759,14 +765,17 @@ static void canvas_drawlines(t_canvas *x)
 {
     t_linetraverser t;
     t_outconnect *oc;
-    {
+    int issignal;
+    
         linetraverser_start(&t, x);
         while (oc = linetraverser_next(&t))
-            sys_vgui(".x%lx.c create line %d %d %d %d -width %d -tags l%lx\n",
-                    glist_getcanvas(x),
-                        t.tr_lx1, t.tr_ly1, t.tr_lx2, t.tr_ly2, 
-                            (outlet_getsymbol(t.tr_outlet) == &s_signal ? 2:1),
-                                oc);
+    {
+        issignal = (outlet_getsymbol(t.tr_outlet) == &s_signal ? 1 : 0);
+        sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill %s \
+-tags {l%lx all_cords}\n",
+                 glist_getcanvas(x), t.tr_lx1, t.tr_ly1, t.tr_lx2, t.tr_ly2, 
+                 (issignal ? 2:1), (issignal ? "$signal_cord" : "$msg_cord"),
+                 oc);
     }
 }
 
@@ -903,22 +912,52 @@ void canvas_loadbang(t_canvas *x)
     canvas_loadbangabstractions(x);
     canvas_loadbangsubpatches(x);
 }
+/* JMZ:
+ * initbang is emitted after the canvas is done, but before the parent canvas is done
+ * therefore, initbangs cannot reach to the outlets
+ */
+void canvas_initbang(t_canvas *x)
+{
+    t_gobj *y;
+    t_symbol *s = gensym("initbang");
+    /* run "initbang" for all subpatches, but NOT for the child abstractions */
+    for (y = x->gl_list; y; y = y->g_next)
+      if (pd_class(&y->g_pd) == canvas_class)
+        {
+          if (!canvas_isabstraction((t_canvas *)y))
+            canvas_initbang((t_canvas *)y);
+        }
 
-    /* When you ask a canvas its size the result is more than what
-    you gave it to open it; how much bigger apparently depends on the OS. */
+    /* call the initbang()-method for objects that have one */
+    for (y = x->gl_list; y; y = y->g_next)
+      {
+        if ((pd_class(&y->g_pd) != canvas_class) && zgetfn(&y->g_pd, s))
+          {
+            pd_vmess(&y->g_pd, s, "");
+          }
+      }
+}
+/* JMZ:
+ * closebang is emitted before the canvas is destroyed
+ * and BEFORE subpatches/abstractions in this canvas are destroyed
+ */
+void canvas_closebang(t_canvas *x)
+{
+    t_gobj *y;
+    t_symbol *s = gensym("closebang");
 
-#ifdef __unix__
-#define HORIZBORDER 2
-#define VERTBORDER 2
-#else
-#ifdef MACOSX
-#define HORIZBORDER 6
-#define VERTBORDER 6
-#else
-#define HORIZBORDER 4
-#define VERTBORDER 4
-#endif
-#endif
+    /* call the closebang()-method for objects that have one 
+     * but NOT for subpatches/abstractions: these are called separately
+     * from g_graph:glist_delete()
+     */
+    for (y = x->gl_list; y; y = y->g_next)
+      {
+        if ((pd_class(&y->g_pd) != canvas_class) && zgetfn(&y->g_pd, s))
+          {
+            pd_vmess(&y->g_pd, s, "");
+          }
+      }
+}
 
 static void canvas_relocate(t_canvas *x, t_symbol *canvasgeom,
     t_symbol *topgeom)
@@ -932,7 +971,7 @@ static void canvas_relocate(t_canvas *x, t_symbol *canvasgeom,
             we just suppress that here. */
     if (cw > 5 && ch > 5)
         canvas_setbounds(x, txpix, typix,
-            txpix + cw - HORIZBORDER, typix + ch - VERTBORDER);
+            txpix + cw, typix + ch);
 }
 
 void canvas_popabstraction(t_canvas *x)
@@ -1295,6 +1334,7 @@ saved,  we throw early messages to the canvas to set the environment
 before any objects are created in it. */
 
 static t_class *declare_class;
+extern t_class *import_class;
 
 typedef struct _declare
 {
@@ -1330,6 +1370,21 @@ void canvas_savedeclarationsto(t_canvas *x, t_binbuf *b)
             binbuf_addbinbuf(b, ((t_declare *)y)->x_obj.te_binbuf);
             binbuf_addv(b, ";");
         }
+        else if (pd_class(&y->g_pd) == import_class)
+        {
+            int i, argc;
+            t_atom *argv;
+            binbuf_addv(b, "s", gensym("#X"));
+            binbuf_addv(b, "s", gensym("declare"));
+            argc = binbuf_getnatom(((t_object *)y)->te_binbuf) - 1;
+            argv = binbuf_getvec(((t_object *)y)->te_binbuf) + 1;
+            for(i = 0; i < argc; ++i)
+            {
+                binbuf_addv(b, "s", gensym("-lib"));
+                binbuf_add(b, 1, argv + i);
+            }
+            binbuf_addv(b, ";");
+        }
         else if (pd_class(&y->g_pd) == canvas_class)
             canvas_savedeclarationsto((t_canvas *)y, b);
     }
@@ -1362,7 +1417,7 @@ static void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
 #endif
     for (i = 0; i < argc; i++)
     {
-        char strbuf[MAXPDSTRING];
+        char strbuf[FILENAME_MAX];
         char *flag = atom_getsymbolarg(i, argc, argv)->s_name;
         if ((argc > i+1) && !strcmp(flag, "-path"))
         {
@@ -1373,7 +1428,7 @@ static void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
         else if ((argc > i+1) && !strcmp(flag, "-stdpath"))
         {
             canvas_completepath(atom_getsymbolarg(i+1, argc, argv)->s_name,
-                strbuf, MAXPDSTRING);
+                strbuf, FILENAME_MAX);
             e->ce_path = namelist_append(e->ce_path, strbuf, 0);
             i++;
         }
@@ -1385,7 +1440,7 @@ static void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
         else if ((argc > i+1) && !strcmp(flag, "-stdlib"))
         {
             canvas_completepath(atom_getsymbolarg(i+1, argc, argv)->s_name,
-                strbuf, MAXPDSTRING);
+                strbuf, FILENAME_MAX);
             sys_load_lib(0, strbuf);
             i++;
         }
@@ -1411,7 +1466,6 @@ int canvas_open(t_canvas *x, const char *name, const char *ext,
 {
     t_namelist *nl, thislist;
     int fd = -1;
-    char listbuf[MAXPDSTRING];
     t_canvas *y;
 
         /* first check if "name" is absolute (and if so, try to open) */
@@ -1431,19 +1485,19 @@ int canvas_open(t_canvas *x, const char *name, const char *ext,
         dir = (x2 ? canvas_getdir(x2)->s_name : ".");
         for (nl = y->gl_env->ce_path; nl; nl = nl->nl_next)
         {
-            char realname[MAXPDSTRING];
+            char realname[FILENAME_MAX];
             if (sys_isabsolutepath(nl->nl_string))
             {
                 realname[0] = '\0';
             }
             else
             {   /* if not absolute path, append Pd lib dir */
-                strncpy(realname, dir, MAXPDSTRING);
-                realname[MAXPDSTRING-3] = 0;
+                strncpy(realname, dir, FILENAME_MAX);
+                realname[FILENAME_MAX-3] = 0;
                 strcat(realname, "/");
             }
-            strncat(realname, nl->nl_string, MAXPDSTRING-strlen(realname));
-            realname[MAXPDSTRING-1] = 0;
+            strncat(realname, nl->nl_string, FILENAME_MAX-strlen(realname));
+            realname[FILENAME_MAX-1] = 0;
             if ((fd = sys_trytoopenone(realname, name, ext,
                 dirresult, nameresult, size, bin)) >= 0)
                     return (fd);
diff --git a/src/g_editor.c b/src/g_editor.c
index c0a66d821..7545bf78a 100644
--- a/src/g_editor.c
+++ b/src/g_editor.c
@@ -28,6 +28,7 @@ static t_binbuf *copy_binbuf;
 static char *canvas_textcopybuf;
 static int canvas_textcopybufsize;
 static t_glist *glist_finddirty(t_glist *x);
+static int paste_xyoffset = 0; /* a counter of pastes to make x,y offsets */
 
 /* ---------------- generic widget behavior ------------------------- */
 
@@ -124,7 +125,9 @@ void glist_selectline(t_glist *x, t_outconnect *oc, int index1,
         x->gl_editor->e_selectline_index2 = index2;
         x->gl_editor->e_selectline_inno = inno;
         x->gl_editor->e_selectline_tag = oc;
-        sys_vgui(".x%lx.c itemconfigure l%lx -fill blue\n",
+        sys_vgui(".x%lx.c itemconfigure l%lx -fill $select_color\n",
+            x, x->gl_editor->e_selectline_tag);
+        sys_vgui(".x%lx.c raise l%lx\n",
             x, x->gl_editor->e_selectline_tag);
     }    
 }
@@ -133,9 +136,21 @@ void glist_deselectline(t_glist *x)
 {
     if (x->gl_editor)
     {
+        t_linetraverser t;
+        t_outconnect *oc;
         x->gl_editor->e_selectedline = 0;
-        sys_vgui(".x%lx.c itemconfigure l%lx -fill black\n",
-            x, x->gl_editor->e_selectline_tag);
+        linetraverser_start(&t, glist_getcanvas(x));
+        do {
+            oc = linetraverser_next(&t);
+        } while (oc && oc != x->gl_editor->e_selectline_tag);
+        int issignal;
+        if(outlet_getsymbol(t.tr_outlet) == &s_signal)
+            issignal = 1;
+        else
+            issignal = 0;
+        sys_vgui(".x%lx.c itemconfigure l%lx -fill %s\n",
+            x, x->gl_editor->e_selectline_tag,
+            (issignal ? "$signal_cord" : "$msg_cord"));
     }    
 }
 
@@ -713,7 +728,7 @@ static void glist_doreload(t_glist *gl, t_symbol *name, t_symbol *dir,
 {
     t_gobj *g;
     int i, nobj = glist_getindex(gl, 0);  /* number of objects */
-    int hadwindow = gl->gl_havewindow;
+    int hadwindow = (gl->gl_editor != 0);
     for (g = gl->gl_list, i = 0; g && i < nobj; i++)
     {
         if (g != except && pd_class(&g->g_pd) == canvas_class &&
@@ -726,8 +741,10 @@ static void glist_doreload(t_glist *gl, t_symbol *name, t_symbol *dir,
                 replacement will be at the end of the list, so we don't
                 do g = g->g_next in this case. */
             int j = glist_getindex(gl, g);
-            if (!gl->gl_havewindow)
-                canvas_vis(glist_getcanvas(gl), 1);
+            if (!gl->gl_editor)
+                canvas_vis(gl, 1);
+            if (!gl->gl_editor)
+                bug("editor");
             glist_noselect(gl);
             glist_select(gl, g);
             canvas_setundo(gl, canvas_undo_cut,
@@ -744,7 +761,7 @@ static void glist_doreload(t_glist *gl, t_symbol *name, t_symbol *dir,
              g = g->g_next;
         }
     }
-    if (!hadwindow && gl->gl_havewindow)
+    if (!hadwindow && gl->gl_editor)
         canvas_vis(glist_getcanvas(gl), 0);
 }
 
@@ -768,17 +785,13 @@ void canvas_reload(t_symbol *name, t_symbol *dir, t_gobj *except)
 /* ------------------------ event handling ------------------------ */
 
 static char *cursorlist[] = {
-#ifdef MSW
-    "right_ptr",        /* CURSOR_RUNMODE_NOTHING */
-#else
-    "left_ptr",         /* CURSOR_RUNMODE_NOTHING */
-#endif
-    "arrow",            /* CURSOR_RUNMODE_CLICKME */
-    "sb_v_double_arrow", /* CURSOR_RUNMODE_THICKEN */
-    "plus",             /* CURSOR_RUNMODE_ADDPOINT */
-    "hand2",            /* CURSOR_EDITMODE_NOTHING */
-    "circle",           /* CURSOR_EDITMODE_CONNECT */
-    "X_cursor"          /* CURSOR_EDITMODE_DISCONNECT */
+    "$cursor_runmode_nothing",
+    "$cursor_runmode_clickme",
+    "$cursor_runmode_thicken",
+    "$cursor_runmode_addpoint",
+    "$cursor_editmode_nothing",
+    "$cursor_editmode_connect",
+    "$cursor_editmode_disconnect"
 };
 
 void canvas_setcursor(t_canvas *x, unsigned int cursornum)
@@ -917,24 +930,17 @@ void canvas_vis(t_canvas *x, t_floatarg f)
 {
     char buf[30];
     int flag = (f != 0);
-    if (x != glist_getcanvas(x))
-        bug("canvas_vis");
     if (flag)
     {
-        /* post("havewindow %d, isgraph %d, isvisible %d  editor %d",
-            x->gl_havewindow, x->gl_isgraph, glist_isvisible(x),
-                (x->gl_editor != 0)); */
-            /* test if we're already visible and toplevel */
-        if (x->gl_editor)
+        /* If a subpatch/abstraction has GOP/gl_isgraph set, then it will have
+         * a gl_editor already, if its not, it will not have a gl_editor.
+         * canvas_create_editor(x) checks if a gl_editor is already created,
+         * so its ok to run it on a canvas that already has a gl_editor. */
+        if (x->gl_editor && x->gl_havewindow)
         {           /* just put us in front */
-#ifdef MSW
-            canvas_vis(x, 0);
-            canvas_vis(x, 1);
-#else
+            sys_vgui("wm deiconify .x%lx\n", x);  
             sys_vgui("raise .x%lx\n", x);
             sys_vgui("focus .x%lx.c\n", x);
-            sys_vgui("wm deiconify .x%lx\n", x);  
-#endif
         }
         else
         {
@@ -1139,6 +1145,7 @@ static void canvas_donecanvasdialog(t_glist *x,
     }
         /* LATER avoid doing 2 redraws here (possibly one inside setgraph) */
     canvas_setgraph(x, graphme, 0);
+    canvas_dirty(x, 1);
     if (x->gl_havewindow)
         canvas_redraw(x);
     else if (glist_isvisible(x->gl_owner))
@@ -1152,7 +1159,7 @@ static void canvas_donecanvasdialog(t_glist *x,
         "open," or "help." */
 static void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, t_float ypos)
 {
-    char pathbuf[MAXPDSTRING], namebuf[MAXPDSTRING];
+    char pathbuf[FILENAME_MAX], namebuf[FILENAME_MAX];
     t_gobj *y;
     for (y = x->gl_list; y; y = y->g_next)
     {
@@ -1184,7 +1191,7 @@ static void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, t_float
                     t_atom *av = binbuf_getvec(ob->te_binbuf);
                     if (ac < 1)
                         return;
-                    atom_string(av, namebuf, MAXPDSTRING);
+                    atom_string(av, namebuf, FILENAME_MAX);
                     dir = canvas_getdir((t_canvas *)y)->s_name;
                 }
                 else
@@ -1504,6 +1511,7 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
             }
             if (doit)
             {
+                int issignal = obj_issignaloutlet(ob1, closest1);
                 oc = obj_connect(ob1, closest1, ob2, closest2);
                 lx1 = x11 + (noutlet1 > 1 ?
                         ((x12-x11-IOWIDTH) * closest1)/(noutlet1-1) : 0)
@@ -1513,10 +1521,13 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
                         ((x22-x21-IOWIDTH) * closest2)/(ninlet2-1) : 0)
                             + IOMIDDLE;
                 ly2 = y21;
-                sys_vgui(".x%lx.c create line %d %d %d %d -width %d -tags l%lx\n",
+                sys_vgui(".x%lx.c create line %d %d %d %d -fill %s -width %d -tags {l%lx all_cords}\n",
                     glist_getcanvas(x),
                         lx1, ly1, lx2, ly2,
-                            (obj_issignaloutlet(ob1, closest1) ? 2 : 1), oc);
+                    (issignal ? "$signal_cord" : "$msg_cord"),
+                    (issignal ? 2 : 1), 
+                    oc);
+                canvas_dirty(x, 1);
                 canvas_setundo(x, canvas_undo_connect,
                     canvas_undo_set_connect(x, 
                         canvas_getindex(x, &ob1->ob_g), closest1,
@@ -1608,9 +1619,7 @@ void canvas_mouseup(t_canvas *x,
             gobj_activate(x->gl_editor->e_selection->sel_what, x, 1);
         }
     }
-    if (x->gl_editor->e_onmotion != MA_NONE)
-        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x);
-
+    
     x->gl_editor->e_onmotion = MA_NONE;
 }
 
@@ -1634,6 +1643,7 @@ static void canvas_displaceselection(t_canvas *x, int dx, int dy)
     }
     if (resortin) canvas_resortinlets(x);
     if (resortout) canvas_resortoutlets(x);
+    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x);
     if (x->gl_editor->e_selection)
         canvas_dirty(x, 1);
 }
@@ -1662,8 +1672,18 @@ void canvas_key(t_canvas *x, t_symbol *s, int ac, t_atom *av)
     else if (av[1].a_type == A_FLOAT)
     {
         char buf[3];
-        sprintf(buf, "%c", (int)(av[1].a_w.w_float));
-        gotkeysym = gensym(buf);
+        switch((int)(av[1].a_w.w_float))
+        {
+        case 8:  gotkeysym = gensym("BackSpace"); break;
+        case 9:  gotkeysym = gensym("Tab"); break;
+        case 10: gotkeysym = gensym("Return"); break;
+        case 27: gotkeysym = gensym("Escape"); break;
+        case 32: gotkeysym = gensym("Space"); break;
+        case 127:gotkeysym = gensym("Delete"); break;
+        default:
+            sprintf(buf, "%c", (int)(av[1].a_w.w_float));
+            gotkeysym = gensym(buf);
+        }
     }
     else gotkeysym = gensym("?");
     fflag = (av[0].a_type == A_FLOAT ? av[0].a_w.w_float : 0);
@@ -1856,11 +1876,10 @@ void glob_verifyquit(void *dummy, t_floatarg f)
         /* find all root canvases */
     for (g = canvas_list; g; g = g->gl_next)
         if (g2 = glist_finddirty(g))
-    {
-        canvas_vis(g2, 1);
-        sys_vgui(
-"pdtk_check .x%lx {Discard changes to '%s'?} {.x%lx menuclose 3;\n} no\n",
-            canvas_getrootfor(g2), canvas_getrootfor(g2)->gl_name->s_name, g2);
+        {
+            canvas_vis(g2, 1);
+            sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;\n}\n",
+                     canvas_getrootfor(g2), g2);
         return;
     }
     if (f == 0 && sys_perf)
@@ -1886,18 +1905,19 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
         g = glist_finddirty(x);
         if (g)
         {
-            vmess(&g->gl_pd, gensym("menu-open"), "");
-            sys_vgui(
-"pdtk_check .x%lx {Discard changes to '%s'?} {.x%lx menuclose 2;\n} no\n",
-                canvas_getrootfor(g), canvas_getrootfor(g)->gl_name->s_name, g);
+            canvas_vis(g, 1);
+            sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;\n}\n",
+                     canvas_getrootfor(g), g);
             return;
         }
+/*
         else if (sys_perf)
         {
             sys_vgui(
 "pdtk_check .x%lx {Close '%s'?} {.x%lx menuclose 1;\n} yes\n",
                 canvas_getrootfor(x), canvas_getrootfor(x)->gl_name->s_name, x);
         }
+*/
         else pd_free(&x->gl_pd);
     }
     else if (force == 1)
@@ -1911,9 +1931,8 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
         if (g)
         {
             vmess(&g->gl_pd, gensym("menu-open"), "");
-            sys_vgui(
-"pdtk_check .x%lx {Discard changes to '%s'?} {.x%lx menuclose 2;\n} no\n",
-                canvas_getrootfor(x), canvas_getrootfor(x)->gl_name->s_name, g);
+            sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;\n}\n",
+                     canvas_getrootfor(x), g);
             return;
         }
         else pd_free(&x->gl_pd);
@@ -2150,6 +2169,7 @@ static void canvas_copy(t_canvas *x)
         return;
     binbuf_free(copy_binbuf);
     copy_binbuf = canvas_docopy(x);
+    paste_xyoffset = 1;
     if (x->gl_editor->e_textedfor)
     {
         char *buf;
@@ -2182,6 +2202,7 @@ static void canvas_clearline(t_canvas *x)
              x->gl_editor->e_selectline_outno,
              x->gl_editor->e_selectline_index2,
              x->gl_editor->e_selectline_inno);
+        canvas_dirty(x, 1);
         canvas_setundo(x, canvas_undo_disconnect,
             canvas_undo_set_disconnect(x,
                 x->gl_editor->e_selectline_index1,
@@ -2270,6 +2291,7 @@ static void canvas_cut(t_canvas *x)
             canvas_undo_set_cut(x, UCUT_CUT), "cut");
         canvas_copy(x);
         canvas_doclear(x);
+        paste_xyoffset = 0;
         sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x);
     }
 }
@@ -2288,6 +2310,14 @@ static void glist_donewloadbangs(t_glist *x)
     }
 }
 
+static void canvas_paste_xyoffset(t_canvas *x)
+{
+    t_selection *sel;
+    for (sel = x->gl_editor->e_selection; sel; sel = sel->sel_next)
+        gobj_displace(sel->sel_what, x, paste_xyoffset*10, paste_xyoffset*10);
+    paste_xyoffset++;
+}
+
 static void canvas_dopaste(t_canvas *x, t_binbuf *b)
 {
     t_gobj *newgobj, *last, *g2;
@@ -2338,6 +2368,7 @@ static void canvas_paste(t_canvas *x)
         canvas_setundo(x, canvas_undo_paste, canvas_undo_set_paste(x),
             "paste");
         canvas_dopaste(x, copy_binbuf);
+        canvas_paste_xyoffset(x);
     }
 }
 
@@ -2345,14 +2376,11 @@ static void canvas_duplicate(t_canvas *x)
 {
     if (x->gl_editor->e_onmotion == MA_NONE && x->gl_editor->e_selection)
     {
-        t_selection *y;
         canvas_copy(x);
         canvas_setundo(x, canvas_undo_paste, canvas_undo_set_paste(x),
             "duplicate");
         canvas_dopaste(x, copy_binbuf);
-        for (y = x->gl_editor->e_selection; y; y = y->sel_next)
-            gobj_displace(y->sel_what, x,
-                10, 10);
+        canvas_paste_xyoffset(x);
         canvas_dirty(x, 1);
     }
 }
@@ -2440,9 +2468,10 @@ void canvas_connect(t_canvas *x, t_floatarg fwhoout, t_floatarg foutno,
     if (!(oc = obj_connect(objsrc, outno, objsink, inno))) goto bad;
     if (glist_isvisible(x))
     {
-        sys_vgui(".x%lx.c create line %d %d %d %d -width %d -tags l%lx\n",
+        sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill %s -tags l%lx\n",
             glist_getcanvas(x), 0, 0, 0, 0,
-            (obj_issignaloutlet(objsrc, outno) ? 2 : 1),oc);
+            (obj_issignaloutlet(objsrc, outno) ? 2 : 1),
+            (obj_issignaloutlet(objsrc, outno) ? "$signal_cord" : "$msg_cord"), oc);
         canvas_fixlinesfor(x, objsrc);
     }
     return;
@@ -2454,9 +2483,9 @@ bad:
             (sink? class_getname(pd_class(&sink->g_pd)) : "???"));
 }
 
-#define XTOLERANCE 18
-#define YTOLERANCE 17
-#define NHIST 35
+#define XTOLERANCE 4
+#define YTOLERANCE 3
+#define NHIST 15
 
     /* LATER might have to speed this up */
 static void canvas_tidy(t_canvas *x)
@@ -2514,10 +2543,10 @@ static void canvas_tidy(t_canvas *x)
             }
         }
     }
-    for (i = 2, besthist = 0, bestdist = 4, ip = histogram + 1;
-        i < (NHIST-2); i++, ip++)
+    for (i = 1, besthist = 0, bestdist = 4, ip = histogram + 1;
+        i < (NHIST-1); i++, ip++)
     {
-        int hit = ip[-2] + 2* ip[-1] + 3 * ip[0] + 2* ip[1] + ip[2];
+        int hit = ip[-1] + 2 * ip[0] + ip[1];
         if (hit > besthist)
         {
             besthist = hit;
diff --git a/src/g_graph.c b/src/g_graph.c
index cfda6c2ca..61fdf7a73 100644
--- a/src/g_graph.c
+++ b/src/g_graph.c
@@ -62,6 +62,9 @@ int canvas_setdeleting(t_canvas *x, int flag)
     return (ret);
 }
 
+/* JMZ: emit a closebang message */
+void canvas_closebang(t_canvas *x);
+
     /* delete an object from a glist and free it */
 void glist_delete(t_glist *x, t_gobj *y)
 {
@@ -71,7 +74,12 @@ void glist_delete(t_glist *x, t_gobj *y)
     t_canvas *canvas = glist_getcanvas(x);
     int drawcommand = class_isdrawcommand(y->g_pd);
     int wasdeleting;
-    
+
+    if (pd_class(&y->g_pd) == canvas_class) {
+      /* JMZ: send a closebang to the canvas */
+      canvas_closebang((t_canvas *)y);
+    }
+ 
     wasdeleting = canvas_setdeleting(canvas, 1);
     if (x->gl_editor)
     {
@@ -176,8 +184,7 @@ void glist_grab(t_glist *x, t_gobj *y, t_glistmotionfn motionfn,
 
 t_canvas *glist_getcanvas(t_glist *x)
 {
-    while (x->gl_owner && !x->gl_havewindow && x->gl_isgraph &&
-        gobj_shouldvis(&x->gl_gobj, x->gl_owner))
+    while (x->gl_owner && !x->gl_havewindow && x->gl_isgraph)
             x = x->gl_owner;
     return((t_canvas *)x);
 }
@@ -711,6 +718,7 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
  %d %d %d %d %d %d %d %d %d %d -tags %s -fill #c0c0c0\n",
                 glist_getcanvas(x->gl_owner),
                 x1, y1, x1, y2, x2, y2, x2, y1, x1, y1, tag);
+            sys_vgui(".x%lx.c raise all_cords\n", glist_getcanvas(x->gl_owner));
         }
         else
         {
@@ -729,7 +737,7 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
         t_garray *ga;
             /* draw a rectangle around the graph */
         sys_vgui(".x%lx.c create line\
-            %d %d %d %d %d %d %d %d %d %d -tags %s\n",
+            %d %d %d %d %d %d %d %d %d %d -fill $graph_outline -tags %s\n",
             glist_getcanvas(x->gl_owner),
             x1, y1, x1, y2, x2, y2, x2, y1, x1, y1, tag);
         
@@ -741,7 +749,7 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
         {
             i -= sys_fontheight(glist_getfont(x));
             sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor nw\
-             -font {{%s} -%d %s} -tags %s\n",
+             -font {{%s} %d %s} -tags %s\n",
              (long)glist_getcanvas(x),  x1, i, arrayname->s_name, sys_font,
                 sys_hostfontsize(glist_getfont(x)), sys_fontweight, tag);
         }
@@ -823,7 +831,7 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
             /* draw x labels */
         for (i = 0; i < x->gl_nxlabels; i++)
             sys_vgui(".x%lx.c create text\
-        %d %d -text {%s} -font {{%s} -%d %s} -tags %s\n",
+        %d %d -text {%s} -font {{%s} %d %s} -tags %s\n",
                 glist_getcanvas(x),
                 (int)glist_xtopixels(x, atof(x->gl_xlabel[i]->s_name)),
                 (int)glist_ytopixels(x, x->gl_xlabely),
@@ -833,7 +841,7 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
             /* draw y labels */
         for (i = 0; i < x->gl_nylabels; i++)
             sys_vgui(".x%lx.c create text\
-        %d %d -text {%s} -font {{%s} -%d %s} -tags %s\n",
+        %d %d -text {%s} -font {{%s} %d %s} -tags %s\n",
                 glist_getcanvas(x),
                 (int)glist_xtopixels(x, x->gl_ylabelx),
                 (int)glist_ytopixels(x, atof(x->gl_ylabel[i]->s_name)),
@@ -951,9 +959,10 @@ static void graph_select(t_gobj *z, t_glist *glist, int state)
         if (canvas_showtext(x))
             rtext_select(y, state);
         sys_vgui(".x%lx.c itemconfigure %sR -fill %s\n", glist, 
-        rtext_gettag(y), (state? "blue" : "black"));
+                 rtext_gettag(y), (state? "$select_color" : "black"));
         sys_vgui(".x%lx.c itemconfigure graph%lx -fill %s\n",
-            glist_getcanvas(glist), z, (state? "blue" : "black"));
+                 glist_getcanvas(glist), z, 
+                 (state? "$select_color" : "$graph_outline"));
     }
 }
 
diff --git a/src/g_hdial.c b/src/g_hdial.c
index ace2ce666..ddbd81c18 100644
--- a/src/g_hdial.c
+++ b/src/g_hdial.c
@@ -8,6 +8,8 @@
 /* name change to hradio by MSP and changed to
 put out a "float" as in sliders, toggles, etc. */
 
+#include "config.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -18,12 +20,14 @@ put out a "float" as in sliders, toggles, etc. */
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /* ------------- hdl     gui-horicontal dial ---------------------- */
 
 t_widgetbehavior hradio_widgetbehavior;
@@ -33,6 +37,11 @@ static t_class *hradio_class, *hradio_old_class;
 
 void hradio_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("hradio_draw_update");
+        return;
+    }
     t_hradio *x = (t_hradio *)client;
     if(glist_isvisible(glist))
     {
@@ -73,7 +82,7 @@ void hradio_draw_new(t_hradio *x, t_glist *glist)
         x->x_drawn = x->x_on;
     }
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
@@ -141,7 +150,7 @@ void hradio_draw_config(t_hradio* x, t_glist* glist)
     t_canvas *canvas=glist_getcanvas(glist);
     int n=x->x_number, i;
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_hslider.c b/src/g_hslider.c
index 8dc3d0e6b..5205ecbba 100644
--- a/src/g_hslider.c
+++ b/src/g_hslider.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 
 /* ------------ hsl    gui-horicontal  slider ----------------------- */
 
@@ -32,13 +35,17 @@ static t_class *hslider_class;
 
 static void hslider_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("hslider_draw_update");
+        return;
+    }
     t_hslider *x = (t_hslider *)client;
-    t_canvas *canvas=glist_getcanvas(glist);
-    int ypos=text_ypix(&x->x_gui.x_obj, glist);
-
     if (glist_isvisible(glist))
     {
+        t_canvas *canvas=glist_getcanvas(glist);
         int r = text_xpix(&x->x_gui.x_obj, glist) + (x->x_val + 50)/100;
+        int ypos=text_ypix(&x->x_gui.x_obj, glist);
         sys_vgui(".x%lx.c coords %lxKNOB %d %d %d %d\n",
                  canvas, x, r, ypos+1,
                  r, ypos + x->x_gui.x_h);
@@ -76,12 +83,12 @@ static void hslider_draw_new(t_hslider *x, t_glist *glist)
              canvas, r, ypos+1, r,
              ypos + x->x_gui.x_h, x->x_gui.x_fcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xpos+x->x_gui.x_ldx,
              ypos+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
-             x->x_gui.x_lcol, x);
+			 x->x_gui.x_lcol, x);
     if(!x->x_gui.x_fsf.x_snd_able)
         sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %lxOUT%d\n",
              canvas, xpos-3, ypos + x->x_gui.x_h-1,
@@ -137,7 +144,7 @@ static void hslider_draw_config(t_hslider* x,t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_mycanvas.c b/src/g_mycanvas.c
index 1040c11fd..ababf83e4 100644
--- a/src/g_mycanvas.c
+++ b/src/g_mycanvas.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /* ---------- cnv  my gui-canvas for a window ---------------- */
 
 t_widgetbehavior my_canvas_widgetbehavior;
@@ -44,11 +47,11 @@ void my_canvas_draw_new(t_my_canvas *x, t_glist *glist)
              xpos + x->x_gui.x_w, ypos + x->x_gui.x_h,
              x->x_gui.x_bcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
-             x->x_gui.x_lcol, x);
+			 x->x_gui.x_lcol, x);
 }
 
 void my_canvas_draw_move(t_my_canvas *x, t_glist *glist)
@@ -85,9 +88,9 @@ void my_canvas_draw_config(t_my_canvas* x, t_glist* glist)
              x->x_gui.x_bcol, x->x_gui.x_bcol);
     sys_vgui(".x%lx.c itemconfigure %lxBASE -outline #%6.6x\n", canvas, x,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_bcol);
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
-             x->x_gui.x_lcol,
+			 x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
 }
 
diff --git a/src/g_numbox.c b/src/g_numbox.c
index db25e9183..7a413495e 100644
--- a/src/g_numbox.c
+++ b/src/g_numbox.c
@@ -4,6 +4,8 @@
 
 /* my_numbox.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 
+#include "config.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -14,12 +16,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /*------------------ global varaibles -------------------------*/
 
 
@@ -130,6 +134,11 @@ void my_numbox_ftoa(t_my_numbox *x)
 
 static void my_numbox_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("my_numbox_draw_update");
+        return;
+    }
     t_my_numbox *x = (t_my_numbox *)client;
     if (glist_isvisible(glist))
     {
@@ -195,14 +204,14 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
         xpos, ypos + x->x_gui.x_h,
         x->x_gui.x_fcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-        -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+        -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
         canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_lcol, x);
     my_numbox_ftoa(x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-        -font {{%s} -%d %s} -fill #%6.6x -tags %lxNUMBER\n",
+        -font {{%s} %d %s} -fill #%6.6x -tags %lxNUMBER\n",
         canvas, xpos+half+2, ypos+half+d,
         x->x_buf, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
         x->x_gui.x_fcol, x);
@@ -271,11 +280,11 @@ static void my_numbox_draw_config(t_my_numbox* x,t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
-    sys_vgui(".x%lx.c itemconfigure %lxNUMBER -font {{%s} -%d %s} -fill #%6.6x \n",
+    sys_vgui(".x%lx.c itemconfigure %lxNUMBER -font {{%s} %d %s} -fill #%6.6x \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_fcol);
     sys_vgui(".x%lx.c itemconfigure %lxBASE1 -fill #%6.6x\n", canvas,
diff --git a/src/g_readwrite.c b/src/g_readwrite.c
index 97b56c020..7a0753741 100644
--- a/src/g_readwrite.c
+++ b/src/g_readwrite.c
@@ -704,7 +704,11 @@ static void canvas_savetofile(t_canvas *x, t_symbol *filename, t_symbol *dir)
     {
             /* if not an abstraction, reset title bar and directory */ 
         if (!x->gl_owner)
+        {
             canvas_rename(x, filename, dir);
+            /* update window list in case Save As changed the window name */
+            canvas_updatewindowlist(); 
+        }
         post("saved to: %s/%s", dir->s_name, filename->s_name);
         canvas_dirty(x, 0);
         canvas_reload(filename, dir, &x->gl_gobj);
@@ -724,7 +728,8 @@ static void canvas_menusave(t_canvas *x)
     t_canvas *x2 = canvas_getrootfor(x);
     char *name = x2->gl_name->s_name;
     if (*name && strncmp(name, "Untitled", 8)
-            && (strlen(name) < 4 || strcmp(name + strlen(name)-4, ".pat")))
+            && (strlen(name) < 4 || strcmp(name + strlen(name)-4, ".pat")
+                || strcmp(name + strlen(name)-4, ".mxt")))
             canvas_savetofile(x2, x2->gl_name, canvas_getdir(x2));
     else canvas_menusaveas(x2);
 }
diff --git a/src/g_rtext.c b/src/g_rtext.c
index 63a7485bf..ddee9ba49 100644
--- a/src/g_rtext.c
+++ b/src/g_rtext.c
@@ -17,13 +17,13 @@
 
 #define LMARGIN 2
 #define RMARGIN 2
-/* for some reason, it draws text 1 pixel lower on Mac OS X (& linux too?) */
-#ifndef MSW
-#define TMARGIN 2
-#define BMARGIN 2
-#else
+/* for some reason, it draws text 1 pixel lower on Mac OS X */
+#ifdef __APPLE__
 #define TMARGIN 3
 #define BMARGIN 1
+#else
+#define TMARGIN 4
+#define BMARGIN 0
 #endif
 
 #define SEND_FIRST 1
@@ -248,7 +248,7 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp,
             dispx + LMARGIN, dispy + TMARGIN,
             outchars, tempbuf, sys_hostfontsize(font),
             (glist_isselected(x->x_glist,
-                &x->x_glist->gl_gobj)? "blue" : "black"));
+                &x->x_glist->gl_gobj)? "$select_color" : "$text_color"));
     else if (action == SEND_UPDATE)
     {
         sys_vgui("pdtk_text_set .x%lx.c %s {%.*s}\n",
@@ -387,7 +387,7 @@ void rtext_select(t_rtext *x, int state)
     t_glist *glist = x->x_glist;
     t_canvas *canvas = glist_getcanvas(glist);
     sys_vgui(".x%lx.c itemconfigure %s -fill %s\n", canvas, 
-        x->x_tag, (state? "blue" : "black"));
+        x->x_tag, (state? "$select_color" : "$text_color"));
     canvas_editing = canvas;
 }
 
diff --git a/src/g_scalar.c b/src/g_scalar.c
index fe80de44c..85ba887ed 100644
--- a/src/g_scalar.c
+++ b/src/g_scalar.c
@@ -204,7 +204,7 @@ static void scalar_drawselectrect(t_scalar *x, t_glist *glist, int state)
         scalar_getrect(&x->sc_gobj, glist, &x1, &y1, &x2, &y2);
         x1--; x2++; y1--; y2++;
         sys_vgui(".x%lx.c create line %d %d %d %d %d %d %d %d %d %d \
-            -width 0 -fill blue -tags select%lx\n",
+            -width 0 -fill $select_color -tags select%lx\n",
                 glist_getcanvas(glist), x1, y1, x1, y2, x2, y2, x2, y1, x1, y1,
                 x);
     }
diff --git a/src/g_template.c b/src/g_template.c
index f216b1040..cadbc71e7 100644
--- a/src/g_template.c
+++ b/src/g_template.c
@@ -2136,8 +2136,8 @@ static void drawnumber_vis(t_gobj *z, t_glist *glist,
         drawnumber_sprintf(x, buf, &at);
         sys_vgui(".x%lx.c create text %d %d -anchor nw -fill %s -text {%s}",
                 glist_getcanvas(glist), xloc, yloc, colorstring, buf);
-        sys_vgui(" -font {{%s} -%d %s}", sys_font,
-                 sys_hostfontsize(glist_getfont(glist)), sys_fontweight);
+        sys_vgui(" -font {{%s} %d %s}", sys_font,
+				 sys_hostfontsize(glist_getfont(glist)), sys_fontweight);
         sys_vgui(" -tags drawnumber%lx\n", data);
     }
     else sys_vgui(".x%lx.c delete drawnumber%lx\n", glist_getcanvas(glist), data);
diff --git a/src/g_text.c b/src/g_text.c
index f927bf38c..648139f7d 100644
--- a/src/g_text.c
+++ b/src/g_text.c
@@ -325,6 +325,11 @@ static void messresponder_symbol(t_messresponder *x, t_symbol *s)
     outlet_symbol(x->mr_outlet, s);
 }
 
+static void messresponder_blob(t_messresponder *x, t_blob *st)
+{ /* MP 20070107 blob type */
+    outlet_blob(x->mr_outlet, st);
+}
+
 static void messresponder_list(t_messresponder *x, 
     t_symbol *s, int argc, t_atom *argv)
 {
@@ -356,6 +361,13 @@ static void message_symbol(t_message *x, t_symbol *s)
     binbuf_eval(x->m_text.te_binbuf, &x->m_messresponder.mr_pd, 1, &at);
 }
 
+static void message_blob(t_message *x, t_blob *st)
+{
+    t_atom at;
+    SETBLOB(&at, st);
+    binbuf_eval(x->m_text.te_binbuf, &x->m_messresponder.mr_pd, 1, &at);
+}
+
 static void message_list(t_message *x, t_symbol *s, int argc, t_atom *argv)
 {
     binbuf_eval(x->m_text.te_binbuf, &x->m_messresponder.mr_pd, argc, argv);
@@ -675,7 +687,6 @@ static void gatom_key(void *z, t_floatarg f)
             gatom_retext(x, 1);
         return;
     }
-    else if (c == ' ') return;
     else if (c == '\b')
     {
         if (len > 0)
@@ -793,6 +804,7 @@ static void gatom_param(t_gatom *x, t_symbol *sel, int argc, t_atom *argv)
     x->a_symto = symto;
     x->a_expanded_to = canvas_realizedollar(x->a_glist, x->a_symto);
     gobj_vis(&x->a_text.te_g, x->a_glist, 1);
+    canvas_dirty(x->a_glist, 1);
 
     /* glist_retext(x->a_glist, &x->a_text); */
 }
@@ -852,7 +864,7 @@ static void gatom_vis(t_gobj *z, t_glist *glist, int vis)
                 (double)x1, (double)y1,
                 canvas_realizedollar(x->a_glist, x->a_label)->s_name,
                 sys_hostfontsize(glist_getfont(glist)),
-                "black");
+                "$text_color");
         }
         else sys_vgui(".x%lx.c delete %lx.l\n", glist_getcanvas(glist), x);
     }
@@ -986,7 +998,7 @@ static void text_getrect(t_gobj *z, t_glist *glist,
         int font = glist_getfont(glist);
         int fontwidth = sys_fontwidth(font), fontheight = sys_fontheight(font);
         width = (x->te_width > 0 ? x->te_width : 6) * fontwidth + 2;
-        height = fontheight + 1; /* borrowed from TMARGIN, etc, in g_rtext.c */
+        height = fontheight + 3; /* borrowed from TMARGIN, etc, in g_rtext.c */
     }
         /* if we're invisible we don't know our size so we just lie about
         it.  This is called on invisible boxes to establish order of inlets
@@ -1034,10 +1046,15 @@ static void text_select(t_gobj *z, t_glist *glist, int state)
 {
     t_text *x = (t_text *)z;
     t_rtext *y = glist_findrtext(glist, x);
+    char *outline;
     rtext_select(y, state);
+    if (pd_class(&x->te_pd) == text_class)
+        outline = "$dash_outline";
+    else
+        outline = "$box_outline";
     if (glist_isvisible(glist) && gobj_shouldvis(&x->te_g, glist))
-        sys_vgui(".x%lx.c itemconfigure %sR -fill %s\n", glist, 
-            rtext_gettag(y), (state? "blue" : "black"));
+        sys_vgui(".x%lx.c itemconfigure %sR -outline %s\n", glist, 
+                 rtext_gettag(y), (state? "$select_color" : outline));
 }
 
 static void text_activate(t_gobj *z, t_glist *glist, int state)
@@ -1194,11 +1211,7 @@ static t_widgetbehavior gatom_widgetbehavior =
 
 /* -------------------- the "text" class  ------------ */
 
-#ifdef __APPLE__
 #define EXTRAPIX 2
-#else
-#define EXTRAPIX 1
-#endif
 
     /* draw inlets and outlets for a text object or for a graph. */
 void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
@@ -1206,19 +1219,24 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
 {
     int n = obj_noutlets(ob), nplus = (n == 1 ? 1 : n-1), i;
     int width = x2 - x1;
+    int issignal;
     for (i = 0; i < n; i++)
     {
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
-            sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %so%d\n",
-                glist_getcanvas(glist),
-                onset, y2 - 1,
-                onset + IOWIDTH, y2,
+        {
+            issignal = obj_issignaloutlet(ob,i);
+            sys_vgui(".x%lx.c create rectangle %d %d %d %d \
+                      -fill %s -outline %s -tags %so%d\n",
+                glist_getcanvas(glist), onset, y2 - 2, onset + IOWIDTH, y2,
+                (issignal ? "$signal_nlet" : "$msg_nlet"),
+                (issignal ? "$signal_cord" : "$msg_cord"),
                 tag, i);
+        }
         else
             sys_vgui(".x%lx.c coords %so%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
-                onset, y2 - 1,
+                onset, y2 - 2,
                 onset + IOWIDTH, y2);
     }
     n = obj_ninlets(ob);
@@ -1227,11 +1245,15 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
     {
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
-            sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %si%d\n",
-                glist_getcanvas(glist),
-                onset, y1,
-                onset + IOWIDTH, y1 + EXTRAPIX,
+        {
+            issignal = obj_issignalinlet(ob,i);
+            sys_vgui(".x%lx.c create rectangle %d %d %d %d \
+                      -fill %s -outline %s -tags %si%d\n",
+                glist_getcanvas(glist), onset, y1, onset + IOWIDTH, y1 + EXTRAPIX,
+                (issignal ? "$signal_nlet" : "$msg_nlet"),
+                (issignal ? "$signal_cord" : "$msg_cord"),
                 tag, i);
+        }
         else
             sys_vgui(".x%lx.c coords %si%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
@@ -1244,62 +1266,82 @@ void text_drawborder(t_text *x, t_glist *glist,
     char *tag, int width2, int height2, int firsttime)
 {
     t_object *ob;
-    int x1, y1, x2, y2, width, height;
+    int x1, y1, x2, y2, width, height, msg_draw_const, atom_draw_const;
     text_getrect(&x->te_g, glist, &x1, &y1, &x2, &y2);
     width = x2 - x1;
     height = y2 - y1;
     if (x->te_type == T_OBJECT)
     {
-        char *pattern = ((pd_class(&x->te_pd) == text_class) ? "-" : "\"\"");
+        char *pattern; char *outline;
+        if (pd_class(&x->te_pd) == text_class)
+        {
+            pattern = "-";
+            outline = "$dash_outline";
+        }
+        else
+        {
+            pattern = "\"\"";
+            outline = "$box_outline";
+        }
         if (firsttime)
-            sys_vgui(".x%lx.c create line\
- %d %d %d %d %d %d %d %d %d %d -dash %s -tags %sR\n",
+            sys_vgui(".x%lx.c create polygon %d %d %d %d %d %d %d %d %d %d \
+                      -dash %s -outline %s -fill $obj_box_fill -tags %sR\n", 
                 glist_getcanvas(glist),
-                    x1, y1,  x2, y1,  x2, y2,  x1, y2,  x1, y1,  pattern, tag);
+                     x1, y1,  x2, y1,  x2, y2,  x1, y2,  x1, y1,  
+                     pattern, outline, tag);
         else
         {
-            sys_vgui(".x%lx.c coords %sR\
- %d %d %d %d %d %d %d %d %d %d\n",
+            sys_vgui(".x%lx.c coords %sR %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
                     x1, y1,  x2, y1,  x2, y2,  x1, y2,  x1, y1);
-            sys_vgui(".x%lx.c itemconfigure %sR -dash %s\n",
-                glist_getcanvas(glist), tag, pattern);
+/* this seems to be totally extraneous  hans@at.or.at
+             sys_vgui(".x%lx.c itemconfigure %sR -dash %s -outline %s\n", 
+                     glist_getcanvas(glist), tag, pattern, outline); */
         }
     }
     else if (x->te_type == T_MESSAGE)
     {
+        msg_draw_const = ((y2-y1)/4);
+        if (msg_draw_const > 10) msg_draw_const = 10; /* looks bad if too big */
         if (firsttime)
-            sys_vgui(".x%lx.c create line\
- %d %d %d %d %d %d %d %d %d %d %d %d %d %d -tags %sR\n",
+            sys_vgui(".x%lx.c create polygon \
+                     %d %d %d %d %d %d %d %d %d %d %d %d %d %d \
+                     -outline $box_outline -fill $msg_box_fill -tags %sR\n",
                 glist_getcanvas(glist),
-                x1, y1,  x2+4, y1,  x2, y1+4,  x2, y2-4,  x2+4, y2,
+                     x1, y1,  x2+msg_draw_const, y1,  x2, y1+msg_draw_const,  
+                     x2, y2-msg_draw_const,  x2+msg_draw_const, y2,  
                 x1, y2,  x1, y1,
                     tag);
         else
             sys_vgui(".x%lx.c coords %sR\
  %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
-                x1, y1,  x2+4, y1,  x2, y1+4,  x2, y2-4,  x2+4, y2,
-                x1, y2,  x1, y1);
+                x1, y1,  x2+msg_draw_const, y1,  x2, y1+msg_draw_const,
+                x2, y2-msg_draw_const, x2+msg_draw_const, y2,  x1, y2,  x1, y1);
     }
     else if (x->te_type == T_ATOM)
     {
+        atom_draw_const = ((y2-y1)/3);
         if (firsttime)
-            sys_vgui(".x%lx.c create line\
- %d %d %d %d %d %d %d %d %d %d %d %d -tags %sR\n",
+            sys_vgui(".x%lx.c create polygon %d %d %d %d %d %d %d %d %d %d %d %d \
+                     -outline $box_outline -fill $atom_box_fill -tags %sR\n",
                 glist_getcanvas(glist),
-                x1, y1,  x2-4, y1,  x2, y1+4,  x2, y2,  x1, y2,  x1, y1,
+                     x1, y1,  x2-atom_draw_const, y1,  x2, y1+atom_draw_const,  
+                     x2, y2,  x1, y2,  x1, y1, 
                     tag);
         else
             sys_vgui(".x%lx.c coords %sR\
  %d %d %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
-                x1, y1,  x2-4, y1,  x2, y1+4,  x2, y2,  x1, y2,  x1, y1);
+                x1, y1,  x2-atom_draw_const, y1,  x2, y1+atom_draw_const,
+                x2, y2,  x1, y2,  x1, y1);
     }
         /* draw inlets/outlets */
     
     if (ob = pd_checkobject(&x->te_pd))
         glist_drawiofor(glist, ob, firsttime, tag, x1, y1, x2, y2);
+    if (firsttime) /* raise cords over everything else */
+        sys_vgui(".x%lx.c raise all_cords\n", glist_getcanvas(glist));
 }
 
 void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag)
@@ -1385,6 +1427,7 @@ void g_text_setup(void)
     class_addbang(message_class, message_bang);
     class_addfloat(message_class, message_float);
     class_addsymbol(message_class, message_symbol);
+    class_addblob(message_class, message_blob);
     class_addlist(message_class, message_list);
     class_addanything(message_class, message_list);
 
diff --git a/src/g_toggle.c b/src/g_toggle.c
index 830e99cb3..a9d2b0207 100644
--- a/src/g_toggle.c
+++ b/src/g_toggle.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /* --------------- tgl     gui-toggle ------------------------- */
 
 t_widgetbehavior toggle_widgetbehavior;
@@ -31,6 +34,11 @@ static t_class *toggle_class;
 
 void toggle_draw_update(t_toggle *x, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("toggle_draw_update");
+        return;
+    }
     if(glist_isvisible(glist))
     {
         t_canvas *canvas=glist_getcanvas(glist);
@@ -61,7 +69,7 @@ void toggle_draw_new(t_toggle *x, t_glist *glist)
              canvas, xx+w+1, yy + x->x_gui.x_h-w-1, xx + x->x_gui.x_w-w, yy+w, w,
              (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xx+x->x_gui.x_ldx,
              yy+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
@@ -121,7 +129,7 @@ void toggle_draw_config(t_toggle* x, t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_vdial.c b/src/g_vdial.c
index 9f7732f53..f560bff9d 100644
--- a/src/g_vdial.c
+++ b/src/g_vdial.c
@@ -34,6 +34,11 @@ static t_class *vradio_class, *vradio_old_class;
 
 void vradio_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("vradio_draw_update");
+        return;
+    }
     t_hradio *x = (t_hradio *)client;
     if(glist_isvisible(glist))
     {
@@ -75,7 +80,7 @@ void vradio_draw_new(t_vradio *x, t_glist *glist)
         x->x_drawn = x->x_on;
     }
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xx11+x->x_gui.x_ldx, yy11b+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
@@ -141,7 +146,7 @@ void vradio_draw_config(t_vradio* x, t_glist* glist)
     t_canvas *canvas=glist_getcanvas(glist);
     int n=x->x_number, i;
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight, 
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_vslider.c b/src/g_vslider.c
index 87309029e..bac7615fe 100644
--- a/src/g_vslider.c
+++ b/src/g_vslider.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,13 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
 
 /* ------------ vsl gui-vertical  slider ----------------------- */
 
@@ -32,6 +34,11 @@ static t_class *vslider_class;
 
 static void vslider_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("vslider_draw_update");
+        return;
+    }
     t_vslider *x = (t_vslider *)client;
     if (glist_isvisible(glist))
     {
@@ -59,7 +66,7 @@ static void vslider_draw_new(t_vslider *x, t_glist *glist)
              canvas, xpos+1, r,
              xpos + x->x_gui.x_w, r, x->x_gui.x_fcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight, 
@@ -123,7 +130,7 @@ static void vslider_draw_config(t_vslider* x,t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
 
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight, 
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
diff --git a/src/g_vumeter.c b/src/g_vumeter.c
index f0ec30aa0..54ec4d7b4 100644
--- a/src/g_vumeter.c
+++ b/src/g_vumeter.c
@@ -5,6 +5,7 @@
 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -16,12 +17,14 @@
 #include "g_all_guis.h"
 #include <math.h>
 
-#ifdef MSW
-#include <io.h>
-#else
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 /* ----- vu  gui-peak- & rms- vu-meter-display ---------- */
 
 t_widgetbehavior vu_widgetbehavior;
@@ -78,6 +81,11 @@ static void vu_update_peak(t_vu *x, t_glist *glist)
 
 static void vu_draw_update(t_gobj *client, t_glist *glist)
 {
+    if (!glist) /* BUG this function should not receive null glists */
+    {
+        bug("vu_draw_update");
+        return;
+    }
     t_vu *x = (t_vu *)client;
     if (x->x_updaterms)
     {
@@ -116,9 +124,9 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
                  canvas, quad1, yyy, quad3, yyy, x->x_led_size, iemgui_color_hex[led_col], x, i);
         if(((i+2)&3) && (x->x_scale))
             sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-                     -font {{%s} -%d %s} -fill #%6.6x -tags %lxSCALE%d\n",
+                     -font {{%s} %d %s} -fill #%6.6x -tags %lxSCALE%d\n",
                      canvas, end, yyy+k3, iemgui_vu_scale_str[i], 
-                     x->x_gui.x_font, x->x_gui.x_fontsize,
+					 x->x_gui.x_font, x->x_gui.x_fontsize,
                      sys_fontweight, x->x_gui.x_lcol, x, i);
     }
     if(x->x_scale)
@@ -126,9 +134,9 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
         i=IEM_VU_STEPS+1;
         yyy = k4 + k1*(k2-i);
         sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-                 -font {{%s} -%d %s} -fill #%6.6x -tags %lxSCALE%d\n",
+                 -font {{%s} %d %s} -fill #%6.6x -tags %lxSCALE%d\n",
                  canvas, end, yyy+k3, iemgui_vu_scale_str[i], x->x_gui.x_font, 
-                 x->x_gui.x_fontsize, sys_fontweight,
+				 x->x_gui.x_fontsize, sys_fontweight,
                  x->x_gui.x_lcol, x, i);
     }
     sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags %lxRCOVER\n",
@@ -138,7 +146,7 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
              canvas, mid, ypos+10,
              mid, ypos+10, x->x_led_size, x->x_gui.x_bcol, x);
     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-             -font {{%s} -%d %s} -fill #%6.6x -tags %lxLABEL\n",
+             -font {{%s} %d %s} -fill #%6.6x -tags %lxLABEL\n",
              canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
              x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
@@ -277,20 +285,20 @@ static void vu_draw_config(t_vu* x, t_glist* glist)
         sys_vgui(".x%lx.c itemconfigure %lxRLED%d -width %d\n", canvas, x, i,
                  x->x_led_size);
         if(((i+2)&3) && (x->x_scale))
-            sys_vgui(".x%lx.c itemconfigure %lxSCALE%d -text {%s} -font {{%s} -%d %s} -fill #%6.6x\n",
+            sys_vgui(".x%lx.c itemconfigure %lxSCALE%d -text {%s} -font {{%s} %d %s} -fill #%6.6x\n",
                      canvas, x, i, iemgui_vu_scale_str[i], x->x_gui.x_font, 
-                     x->x_gui.x_fontsize, sys_fontweight, 
+					 x->x_gui.x_fontsize, sys_fontweight, 
                      x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol);
     }
     if(x->x_scale)
     {
         i=IEM_VU_STEPS+1;
-        sys_vgui(".x%lx.c itemconfigure %lxSCALE%d -text {%s} -font {{%s} -%d %s} -fill #%6.6x\n",
+        sys_vgui(".x%lx.c itemconfigure %lxSCALE%d -text {%s} -font {{%s} %d %s} -fill #%6.6x\n",
                  canvas, x, i, iemgui_vu_scale_str[i], x->x_gui.x_font, 
-                 x->x_gui.x_fontsize, sys_fontweight,
+				 x->x_gui.x_fontsize, sys_fontweight,
                  x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol);
     }
-    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} -fill #%6.6x -text {%s} \n",
+    sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} %d %s} -fill #%6.6x -text {%s} \n",
              canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
              x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol,
              strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"");
@@ -481,17 +489,17 @@ static void vu_scale(t_vu *x, t_floatarg fscale)
                 yyy = k4 + k1*(k2-i);
                 if((i+2)&3)
                     sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-                             -font {{%s} -%d %s} -fill #%6.6x -tags %lxSCALE%d\n",
+                             -font {{%s} %d %s} -fill #%6.6x -tags %lxSCALE%d\n",
                              canvas, end, yyy+k3, iemgui_vu_scale_str[i], 
-                             x->x_gui.x_font, x->x_gui.x_fontsize,
+							 x->x_gui.x_font, x->x_gui.x_fontsize,
                              sys_fontweight, x->x_gui.x_lcol, x, i);
             }
             i=IEM_VU_STEPS+1;
             yyy = k4 + k1*(k2-i);
             sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-                     -font {{%s} -%d %s} -fill #%6.6x -tags %lxSCALE%d\n",
+                     -font {{%s} %d %s} -fill #%6.6x -tags %lxSCALE%d\n",
                      canvas, end, yyy+k3, iemgui_vu_scale_str[i], 
-                     x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
+					 x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
                      sys_fontweight, x->x_gui.x_lcol, x, i);
         }
     }
diff --git a/src/helpbrowser.tcl b/src/helpbrowser.tcl
new file mode 100644
index 000000000..9ce5f9905
--- /dev/null
+++ b/src/helpbrowser.tcl
@@ -0,0 +1,270 @@
+
+package provide helpbrowser 0.1
+
+namespace eval ::helpbrowser:: {
+    variable libdirlist
+    variable helplist
+    variable reference_count
+    variable reference_paths
+    variable doctypes "*.{pd,pat,mxb,mxt,help,txt,htm,html,pdf}"
+
+    namespace export open_helpbrowser
+}
+
+# TODO remove the doc_ prefix on procs where its not needed
+# TODO rename .help_browser to .helpbrowser
+# TODO enter and up/down/left/right arrow key bindings for nav
+
+################## help browser and support functions #########################
+proc ::helpbrowser::open_helpbrowser {} {
+    if { [winfo exists .help_browser.frame] } {
+        wm deiconify .help_browser
+        raise .help_browser
+    } else {
+        toplevel .help_browser -class HelpBrowser
+        wm group .help_browser .
+        wm transient .help_browser
+        wm title .help_browser [_ "Help Browser"]
+        if {$::pd_nt == 2} {.help_browser configure -menu $::dialog_menubar}
+        bind .help_browser <$::modifier-Key-w> "wm withdraw .help_browser"
+
+        wm resizable .help_browser 0 0
+        frame .help_browser.frame
+        pack .help_browser.frame -side top -fill both
+        build_references
+#        doc_make_listbox .help_browser.frame $::sys_libdir/doc 0
+        make_rootlistbox .help_browser.frame
+    }
+}
+
+# make the root listbox of the help browser using the pre-built lists
+proc ::helpbrowser::make_rootlistbox {base} {
+    variable libdirlist
+    variable helplist
+    # exportselection 0 looks good, but selection gets easily out-of-sync
+	set current_listbox [listbox "[set b $base.root]" -yscrollcommand "$b-scroll set" \
+                             -highlightbackground white -highlightthickness 5 \
+                             -highlightcolor "#D6E5FC" -selectborderwidth 0 \
+                             -height 20 -width 23 -exportselection 0 -bd 0]
+	pack $current_listbox [scrollbar "$b-scroll" -command [list $current_listbox yview]] \
+        -side left -fill both -expand 1
+    foreach item [concat [lsort [concat $libdirlist $helplist]]] {
+		$current_listbox insert end $item
+	}
+	bind $current_listbox <Button-1> \
+        [list ::helpbrowser::root_navigate %W %x %y]
+    bind $current_listbox <Key-Return> \
+        [list ::helpbrowser::root_navigate %W %x %y]
+	bind $current_listbox <Double-ButtonRelease-1> \
+        [list ::helpbrowser::root_doubleclick %W %x %y]
+	bind $current_listbox <$::modifier-Key-o> \
+        [list ::helpbrowser::root_doubleclick %W %x %y]
+}
+
+# navigate into a library/directory from the root
+proc ::helpbrowser::root_navigate {window x y} {
+    variable reference_paths
+    if {[set item [$window get [$window index "@$x,$y"]]] eq {}} {
+        return
+    }
+    set filename $reference_paths($item)
+    if {[file isdirectory $filename]} {
+        make_liblistbox [winfo parent $window] $filename
+    }
+}
+
+# double-click action to open the folder
+proc ::helpbrowser::root_doubleclick {window x y} {
+    variable reference_paths
+    if {[set listname [$window get [$window index "@$x,$y"]]] eq {}} {
+        return
+    }
+    set dir [file dirname $reference_paths($listname)]
+    set filename [file tail $reference_paths($listname)]
+    ::pdwindow::verbose 0 "menu_doc_open $dir $filename"
+    if { [catch {menu_doc_open $dir $filename} fid] } {
+        ::pdwindow::warn "Could not open $dir/$filename\n"
+    }
+}
+
+# make the listbox to show the first level contents of a libdir
+proc ::helpbrowser::make_liblistbox {base dir} {
+    variable doctypes
+    catch { eval destroy [lrange [winfo children $base] 2 end] } errorMessage
+    # exportselection 0 looks good, but selection gets easily out-of-sync
+	set current_listbox [listbox "[set b $base.listbox0]" -yscrollcommand "$b-scroll set" \
+                             -highlightbackground white -highlightthickness 5 \
+                             -highlightcolor "#D6E5FC" -selectborderwidth 0 \
+                             -height 20 -width 23 -exportselection 0 -bd 0]
+	pack $current_listbox [scrollbar "$b-scroll" -command [list $current_listbox yview]] \
+        -side left -fill both -expand 1
+	foreach item [lsort -dictionary [glob -directory $dir -nocomplain -types {d} -- *]] {
+        if {[glob -directory $item -nocomplain -types {f} -- $doctypes] ne "" ||
+            [glob -directory $item -nocomplain -types {d} -- *] ne ""} {
+            $current_listbox insert end "[file tail $item]/"
+        }
+    }
+    foreach item [lsort -dictionary [glob -directory $dir -nocomplain -types {f} -- \
+                                         *-{help,meta}.pd]]  {
+        $current_listbox insert end [file tail $item]
+	}
+    $current_listbox insert end "___________________________"
+    foreach item [lsort -dictionary [glob -directory $dir -nocomplain -types {f} -- \
+                                         *.txt]]  {
+        $current_listbox insert end [file tail $item]
+	}
+	bind $current_listbox <Button-1> \
+        [list ::helpbrowser::dir_navigate $dir 1 %W %x %y]
+	bind $current_listbox <Double-ButtonRelease-1> \
+        [list ::helpbrowser::dir_doubleclick $dir 1 %W %x %y]
+	bind $current_listbox <Key-Return> \
+        [list ::helpbrowser::dir_doubleclick $dir 1 %W %x %y]
+}
+
+proc ::helpbrowser::doc_make_listbox {base dir count} {
+    variable doctypes
+    # check for [file readable]?
+	# requires Tcl 8.5 but probably deals with special chars better:
+	#        destroy {*}[lrange [winfo children $base] [expr {2 * $count}] end]
+	if { [catch { eval destroy [lrange [winfo children $base] \
+									[expr { 2 * $count }] end] } errorMessage] } {
+		::pdwindow::error "doc_make_listbox: error listing $dir\n"
+	}
+    # exportselection 0 looks good, but selection gets easily out-of-sync
+	set current_listbox [listbox "[set b "$base.listbox$count"]-list" \
+                             -yscrollcommand "$b-scroll set" \
+                             -highlightbackground white -highlightthickness 5 \
+                             -highlightcolor "#D6E5FC" -selectborderwidth 0 \
+                             -height 20 -width 23 -exportselection 0 -bd 0]
+	pack $current_listbox [scrollbar "$b-scroll" -command "$current_listbox yview"] \
+        -side left -fill both -expand 1
+	foreach item [lsort -dictionary [glob -directory $dir -nocomplain -types {d} -- *]] {
+		$current_listbox insert end "[file tail $item]/"
+    }
+	foreach item [lsort -dictionary [glob -directory $dir -nocomplain -types {f} -- \
+                                         $doctypes]]  {
+		$current_listbox insert end [file tail $item]
+	}
+	bind $current_listbox <Button-1> \
+        "::helpbrowser::dir_navigate {$dir} $count %W %x %y"
+    bind $current_listbox <Key-Right> \
+        "::helpbrowser::dir_navigate {$dir} $count %W %x %y"
+	bind $current_listbox <Double-ButtonRelease-1> \
+        "::helpbrowser::dir_doubleclick {$dir} $count %W %x %y"
+    bind $current_listbox <Key-Return> \
+        "::helpbrowser::dir_doubleclick {$dir} $count %W %x %y"
+}
+
+# navigate into an actual directory
+proc ::helpbrowser::dir_navigate {dir count window x y} {
+    if {[set newdir [$window get [$window index "@$x,$y"]]] eq {}} {
+        return
+    }
+    set dir_to_open [file join $dir $newdir]
+    if {[file isdirectory $dir_to_open]} {
+        doc_make_listbox [winfo parent $window] $dir_to_open [incr count]
+    }
+}
+
+proc ::helpbrowser::dir_doubleclick {dir count window x y} {
+    if {[set filename [$window get [$window index "@$x,$y"]]] eq {}} {
+        return
+    }
+    if { [catch {menu_doc_open $dir $filename} fid] } {
+        ::pdwindow::error "Could not open $dir/$filename\n"
+    }
+}
+
+proc ::helpbrowser::rightclickmenu {dir count window x y} {
+    if {[set filename [$window get [$window index "@$x,$y"]]] eq {}} {
+        return
+    }
+    if { [catch {menu_doc_open $dir $filename} fid] } {
+        ::pdwindow::error "Could not open $dir/$filename\n"
+    }
+}
+
+#------------------------------------------------------------------------------#
+# build help browser trees
+
+# TODO check file timestamp against timestamp of when tree was built
+
+proc ::helpbrowser::findfiles {basedir pattern} {
+    set basedir [string trimright [file join [file normalize $basedir] { }]]
+    set filelist {}
+
+    # Look in the current directory for matching files, -type {f r}
+    # means ony readable normal files are looked at, -nocomplain stops
+    # an error being thrown if the returned list is empty
+    foreach filename [glob -nocomplain -type {f r} -path $basedir $pattern] {
+        lappend filelist $filename
+    }
+
+    foreach dirName [glob -nocomplain -type {d  r} -path $basedir *] {
+        set subdirlist [findfiles $dirName $pattern]
+        if { [llength $subdirlist] > 0 } {
+            foreach subdirfile $subdirlist {
+                lappend filelist $subdirfile
+            }
+        }
+    }
+    return $filelist
+}
+
+proc ::helpbrowser::add_entry {reflist entry} {
+    variable libdirlist
+    variable helplist
+    variable reference_paths
+    variable reference_count
+    set entryname [file tail $entry]
+    # if we are checking libdirs, then check to see if there is already a
+    # libdir with that name that has been discovered in the path.  If so, dump
+    # a warning. The trailing slash on $entryname is added below when
+    # $entryname is a dir
+    if {$reflist eq "libdirlist" && [lsearch -exact $libdirlist $entryname/] > -1} {
+        ::pdwindow::error "WARNING: duplicate '$entryname' library found!\n"
+        ::pdwindow::error "  '$reference_paths($entryname/)' is active\n"
+        ::pdwindow::error "  '$entry' is duplicate\n"
+        incr reference_count($entryname)
+        append entryname "/ ($reference_count($entryname))"
+    } else {
+        set reference_count($entryname) 1
+        if {[file isdirectory $entry]} {
+            append entryname "/"
+        }
+    }
+    lappend $reflist $entryname
+    set reference_paths($entryname) $entry
+}
+
+proc ::helpbrowser::build_references {} {
+    variable libdirlist {" Pure Data/" " Manuals/" "-----------------------"}
+    variable helplist {}
+    variable reference_count
+    variable reference_paths
+
+    array set reference_count {}
+    array set reference_paths [list \
+                                   " Pure Data/" $::sys_libdir/doc \
+                                   " Manuals/" $::sys_libdir/doc/manuals \
+                                   "-----------------------" "" \
+                                  ]
+    set my_pd_path [concat $::pd_path [list [file join $::sys_libdir extra]]]
+    foreach pathdir $my_pd_path {
+        if { ! [file isdirectory $pathdir]} {continue}
+        # Fix the directory name, this ensures the directory name is in the
+        # native format for the platform and contains a final directory seperator
+        set dir [string trimright [file join [file normalize $pathdir] { }]]
+        ## find the libdirs
+        foreach filename [glob -nocomplain -type d -path $dir "*"] {
+            add_entry libdirlist $filename
+        }
+        ## find the stray help patches
+        foreach filename [glob -nocomplain -type f -path $dir "*-help.pd"] {
+            add_entry helplist $filename
+        }
+    }
+}
+
+
+
diff --git a/src/import.c b/src/import.c
new file mode 100644
index 000000000..d0c848f5f
--- /dev/null
+++ b/src/import.c
@@ -0,0 +1,176 @@
+/*
+ * This object loads libraries and libdirs from within a patch. It is the
+ * first small step towards a patch-specific namespace.  Currently, it just
+ * adds things to the global path.  It is a reimplementation of a similar/same
+ * idea from Guenter Geiger's [using] object.   <hans@at.or.at>
+ *
+ * This object currently depends on the packages/patches/libdir-0.38-4.patch
+ * for sys_load_lib_dir().
+ */
+
+#include "m_pd.h"
+#include "s_stuff.h"
+#include "g_canvas.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* WARNING: KLUDGE!  */
+/*
+ * this struct is not publically defined (its in g_canvas.c) so I need to
+ * include this here.  Its from Pd 0.41-test03 2006-11-19. */
+struct _canvasenvironment
+{
+    t_symbol *ce_dir;      /* directory patch lives in */
+    int ce_argc;           /* number of "$" arguments */
+    t_atom *ce_argv;       /* array of "$" arguments */
+    int ce_dollarzero;     /* value of "$0" */
+    t_namelist *ce_path;   /* search path */
+};
+
+static char *version = "$Revision: 1.2 $";
+
+t_int import_instance_count;
+
+t_namelist *loaded_libs = NULL;
+
+#define DEBUG(x)
+//#define DEBUG(x) x 
+
+/*------------------------------------------------------------------------------
+ *  CLASS DEF
+ */
+t_class *import_class;
+
+typedef struct _import
+{
+    t_object            x_obj;
+    t_canvas            *x_canvas;
+    t_namelist          *x_current;
+    char                x_classpath_root[FILENAME_MAX];
+    t_outlet            *x_data_outlet;
+    t_outlet            *x_status_outlet;
+} t_import;
+
+
+static int load_library(t_import *x, char *library_name)
+{
+    DEBUG(post("load_library"););
+    if (!sys_load_lib(x->x_canvas, library_name)) 
+        return 0;
+    else
+        return 1;
+}
+
+
+static void load_arguments(t_import *x, int argc, t_atom *argv)
+{
+    t_symbol *library_name;
+    
+    while (argc--) {
+        switch (argv->a_type) {
+        case A_FLOAT:
+            pd_error(x, "[import]: floats not supported: '%f'",
+                     atom_getfloat(argv));
+            break;
+        case A_SYMBOL:
+            library_name = atom_getsymbol(argv);
+            if (!load_library(x,library_name->s_name))
+                pd_error(x, "[import]: can't load library in '%s'", 
+                         library_name->s_name);
+            else
+            {
+                loaded_libs = namelist_append(loaded_libs, library_name->s_name, 0);
+                if(sys_verbose)
+                    post("[import] loaded library: '%s'", library_name->s_name);
+            }
+            break;
+        default:
+            pd_error(x, "[import]: Unsupported atom type");
+        }
+        argv++;
+    }
+}
+
+
+static void import_output(t_import* x)
+{
+    DEBUG(post("import_output"););
+    char buffer[MAXPDSTRING];
+
+/* TODO: think about using x->x_current->nl_next so that if [import] is at
+ * the end of its list, and another element gets added to the local
+ * namespace, [import] will output the new element on the next bang. */
+    if(x->x_current)
+    {
+        strncpy(buffer, x->x_current->nl_string, MAXPDSTRING);
+        outlet_symbol( x->x_data_outlet, gensym(buffer));
+        x->x_current = x->x_current->nl_next;
+    }
+    else 
+        outlet_bang(x->x_status_outlet);
+}
+
+
+static void import_rewind(t_import* x) 
+{
+    x->x_current = loaded_libs;
+}
+
+
+static void *import_new(t_symbol *s, int argc, t_atom *argv)
+{
+    t_import *x = (t_import *)pd_new(import_class);
+    t_symbol *currentdir;
+
+    x->x_data_outlet = outlet_new(&x->x_obj, &s_symbol);
+    x->x_status_outlet = outlet_new(&x->x_obj, 0);
+
+    x->x_canvas = canvas_getcurrent();
+    load_arguments(x,argc,argv);
+    import_rewind(x);
+
+    import_instance_count++;
+     
+    return (x);
+}
+
+
+static void import_free(t_import *x)
+{
+    import_instance_count--;
+/* TODO perhaps loaded_libs should be an instance variable */
+    if(import_instance_count == 0)
+    {
+        if(loaded_libs)
+        {
+            namelist_free(loaded_libs);
+            loaded_libs = NULL;
+        }
+    }
+/* TODO: perhaps this should remove any libs that this instance had added to
+ * the namespace */
+}
+
+
+void import_setup(void)
+{
+    import_class = class_new(gensym("import"), (t_newmethod)import_new,
+                             (t_method)import_free,
+                             sizeof(t_import), 
+                             CLASS_DEFAULT, 
+                             A_GIMME, 
+                             0);
+    /* add inlet atom methods */
+    class_addbang(import_class,(t_method) import_output);
+    
+    /* add inlet selector methods */
+    class_addmethod(import_class,(t_method) import_rewind,
+                    gensym("rewind"), 0);
+
+    post("[import] %s",version);  
+    post("\t[import] is still in development, the interface could change!");
+    post("\tcompiled against Pd version %d.%d.%d", PD_MAJOR_VERSION, 
+         PD_MINOR_VERSION, PD_BUGFIX_VERSION);
+}
diff --git a/src/m_atom.c b/src/m_atom.c
index f8859c6f6..d84161c07 100644
--- a/src/m_atom.c
+++ b/src/m_atom.c
@@ -28,6 +28,14 @@ t_symbol *atom_getsymbol(t_atom *a)  /* LATER think about this more carefully */
     else return (&s_float);
 }
 
+t_blob *atom_getblob(t_atom *a)  /* MP 20070108 */
+{
+    static unsigned char c = 0;/* a default blob to avoid null pointers. This should be somewhere else...? */
+    static t_blob st = {1L, &c};
+    if (a->a_type == A_BLOB) return (a->a_w.w_blob);
+    else return (&st);
+}
+
 t_symbol *atom_gensym(t_atom *a)  /* this works  better for graph labels */
 {
     char buf[30];
diff --git a/src/m_binbuf.c b/src/m_binbuf.c
index 05ef18880..71bc12f45 100644
--- a/src/m_binbuf.c
+++ b/src/m_binbuf.c
@@ -2,17 +2,21 @@
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
 
+#include "config.h"
 
 #include <stdlib.h>
 #include "m_pd.h"
 #include "s_stuff.h"
 #include <stdio.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef MSW
+
+#ifdef HAVE_IO_H
 #include <io.h>
 #endif
+
 #include <fcntl.h>
 #include <string.h>
 #include <stdarg.h>
@@ -725,6 +729,10 @@ void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv)
                 if (nargs == 1) pd_float(target, mstack->a_w.w_float);
                 else pd_list(target, 0, nargs, mstack);
                 break;
+            case A_BLOB: /* MP 20070106 blob type */
+                if (nargs == 1) pd_blob(target, mstack->a_w.w_blob);
+                else pd_list(target, 0, nargs, mstack);
+                break;
             }
         }
         msp = mstack;
@@ -740,7 +748,7 @@ broken:
 
 static int binbuf_doopen(char *s, int mode)
 {
-    char namebuf[MAXPDSTRING];
+    char namebuf[FILENAME_MAX];
 #ifdef MSW
     mode |= O_BINARY;
 #endif
@@ -750,7 +758,7 @@ static int binbuf_doopen(char *s, int mode)
 
 static FILE *binbuf_dofopen(char *s, char *mode)
 {
-    char namebuf[MAXPDSTRING];
+    char namebuf[FILENAME_MAX];
     sys_bashfilename(s, namebuf);
     return (fopen(namebuf, mode));
 }
@@ -761,7 +769,7 @@ int binbuf_read(t_binbuf *b, char *filename, char *dirname, int crflag)
     int fd;
     int readret;
     char *buf;
-    char namebuf[MAXPDSTRING];
+    char namebuf[FILENAME_MAX];
     
     namebuf[0] = 0;
     if (*dirname)
@@ -814,9 +822,9 @@ int binbuf_read_via_canvas(t_binbuf *b, char *filename, t_canvas *canvas,
     int crflag)
 {
     int filedesc;
-    char buf[MAXPDSTRING], *bufptr;
+    char buf[FILENAME_MAX], *bufptr;
     if ((filedesc = canvas_open(canvas, filename, "",
-        buf, &bufptr, MAXPDSTRING, 0)) < 0)
+        buf, &bufptr, FILENAME_MAX, 0)) < 0)
     {
         error("%s: can't open", filename);
         return (1);
@@ -832,9 +840,9 @@ int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname,
     int crflag)
 {
     int filedesc;
-    char buf[MAXPDSTRING], *bufptr;
+    char buf[FILENAME_MAX], *bufptr;
     if ((filedesc = open_via_path(
-        dirname, filename, "", buf, &bufptr, MAXPDSTRING, 0)) < 0)
+        dirname, filename, "", buf, &bufptr, FILENAME_MAX, 0)) < 0)
     {
         error("%s: can't open", filename);
         return (1);
@@ -853,7 +861,7 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd);
 int binbuf_write(t_binbuf *x, char *filename, char *dir, int crflag)
 {
     FILE *f = 0;
-    char sbuf[WBUFSIZE], fbuf[MAXPDSTRING], *bp = sbuf, *ep = sbuf + WBUFSIZE;
+    char sbuf[WBUFSIZE], fbuf[FILENAME_MAX], *bp = sbuf, *ep = sbuf + WBUFSIZE;
     t_atom *ap;
     int indx, deleteit = 0;
     int ncolumn = 0;
@@ -862,7 +870,8 @@ int binbuf_write(t_binbuf *x, char *filename, char *dir, int crflag)
     if (*dir)
         strcat(fbuf, dir), strcat(fbuf, "/");
     strcat(fbuf, filename);
-    if (!strcmp(filename + strlen(filename) - 4, ".pat"))
+    if (!strcmp(filename + strlen(filename) - 4, ".pat") ||
+        !strcmp(filename + strlen(filename) - 4, ".mxt"))
     {
         x = binbuf_convert(x, 0);
         deleteit = 1;
@@ -943,14 +952,15 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
     t_binbuf *newb = binbuf_new();
     t_atom *vec = oldb->b_vec;
     t_int n = oldb->b_n, nextindex, stackdepth = 0, stack[MAXSTACK],
-        nobj = 0, i;
+        nobj = 0, i, gotfontsize = 0;
     t_atom outmess[MAXSTACK], *nextmess;
+    t_float fontsize = 10;
     if (!maxtopd)
         binbuf_addv(newb, "ss;", gensym("max"), gensym("v2"));
     for (nextindex = 0; nextindex < n; )
     {
         int endmess, natom;
-        char *first, *second;
+        char *first, *second, *third;
         for (endmess = nextindex; endmess < n && vec[endmess].a_type != A_SEMI;
             endmess++)
                 ;
@@ -1137,11 +1147,49 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                 }
                 else if (!strcmp(second, "user"))
                 {
-                    binbuf_addv(newb, "ssffs;",
-                        gensym("#X"), gensym("obj"),
-                        atom_getfloatarg(3, natom, nextmess),
-                        atom_getfloatarg(4, natom, nextmess),
-                        atom_getsymbolarg(2, natom, nextmess)); 
+                    third = (nextmess+2)->a_w.w_symbol->s_name;
+                    if (!strcmp(third, "hslider"))
+                    {
+                        t_float range = atom_getfloatarg(7, natom, nextmess);
+                        t_float multiplier = atom_getfloatarg(8, natom, nextmess);
+                        t_float offset = atom_getfloatarg(9, natom, nextmess);
+                        binbuf_addv(newb, "ssffsffffffsssfffffffff;",
+                                    gensym("#X"), gensym("obj"),
+                                    atom_getfloatarg(3, natom, nextmess),
+                                    atom_getfloatarg(4, natom, nextmess),
+                                    gensym("hsl"),
+                                    atom_getfloatarg(6, natom, nextmess),
+                                    atom_getfloatarg(5, natom, nextmess),
+                                    offset,
+                                    range + offset,
+                                    0., 0.,
+                                    gensym("empty"), gensym("empty"), gensym("empty"),
+                                    0., -8., 0., 8., -262144., -1., -1., 0., 1.); 
+                   }
+                    else if (!strcmp(third, "uslider"))
+                    {
+                        t_float range = atom_getfloatarg(7, natom, nextmess);
+                        t_float multiplier = atom_getfloatarg(8, natom, nextmess);
+                        t_float offset = atom_getfloatarg(9, natom, nextmess);
+                        binbuf_addv(newb, "ssffsffffffsssfffffffff;",
+                                    gensym("#X"), gensym("obj"),
+                                    atom_getfloatarg(3, natom, nextmess),
+                                    atom_getfloatarg(4, natom, nextmess),
+                                    gensym("vsl"),
+                                    atom_getfloatarg(5, natom, nextmess),
+                                    atom_getfloatarg(6, natom, nextmess),
+                                    offset,
+                                    range + offset,
+                                    0., 0.,
+                                    gensym("empty"), gensym("empty"), gensym("empty"),
+                                    0., -8., 0., 8., -262144., -1., -1., 0., 1.);
+                    }
+                    else
+                        binbuf_addv(newb, "ssffs;",
+                                    gensym("#X"), gensym("obj"),
+                                    atom_getfloatarg(3, natom, nextmess),
+                                    atom_getfloatarg(4, natom, nextmess),
+                                    atom_getsymbolarg(2, natom, nextmess));
                     nobj++;
                 }
                 else if (!strcmp(second, "connect")||
@@ -1170,12 +1218,17 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                     stack[stackdepth] = nobj;
                     stackdepth++;
                     nobj = 0;
+                    if(!gotfontsize) { /* only the first canvas sets the font size */
+                        fontsize = atom_getfloatarg(6, natom, nextmess);
+                        gotfontsize = 1;
+                    }
+                    t_float x = atom_getfloatarg(2, natom, nextmess);
+                    t_float y = atom_getfloatarg(3, natom, nextmess);
                     binbuf_addv(newb, "ssffff;", 
                         gensym("#N"), gensym("vpatcher"),
-                            atom_getfloatarg(2, natom, nextmess),
-                            atom_getfloatarg(3, natom, nextmess),
-                            atom_getfloatarg(4, natom, nextmess),
-                            atom_getfloatarg(5, natom, nextmess));
+                            x, y,
+                            atom_getfloatarg(4, natom, nextmess) + x,
+                            atom_getfloatarg(5, natom, nextmess) + y);
                 }
             }
             if (!strcmp(first, "#X"))
@@ -1184,12 +1237,17 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                     && (ISSYMBOL (&nextmess[4], "pd")))
                 {
                     binbuf_addv(newb, "ss;", gensym("#P"), gensym("pop"));
-                    binbuf_addv(newb, "ssffffss;",
-                        gensym("#P"), gensym("newobj"),
-                        atom_getfloatarg(2, natom, nextmess),
-                        atom_getfloatarg(3, natom, nextmess), 50., 1.,
-                        gensym("patcher"),
-                            atom_getsymbolarg(5, natom, nextmess));
+                    SETSYMBOL(outmess, gensym("#P"));
+                    SETSYMBOL(outmess + 1, gensym("newobj"));
+                    outmess[2] = nextmess[2];
+                    outmess[3] = nextmess[3];
+                    SETFLOAT(outmess + 4, 50.*(natom-5));
+                    SETFLOAT(outmess + 5, fontsize);
+                    SETSYMBOL(outmess + 6, gensym("p"));
+                    for (i = 5; i < natom; i++)
+                        outmess[i+2] = nextmess[i];
+                    SETSEMI(outmess + natom + 2);
+                    binbuf_add(newb, natom + 3, outmess);
                     if (stackdepth) stackdepth--;
                     nobj = stack[stackdepth];
                     nobj++;
@@ -1203,25 +1261,25 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                             gensym("inlet"),
                             atom_getfloatarg(2, natom, nextmess),
                             atom_getfloatarg(3, natom, nextmess),
-                            15.);
+                            10. + fontsize);
                     else if (classname == gensym("inlet~"))
                         binbuf_addv(newb, "ssffff;", gensym("#P"),
                             gensym("inlet"),
                             atom_getfloatarg(2, natom, nextmess),
                             atom_getfloatarg(3, natom, nextmess),
-                            15., 1.);
+                            10. + fontsize, 1.);
                     else if (classname == gensym("outlet"))
                         binbuf_addv(newb, "ssfff;", gensym("#P"),
                             gensym("outlet"),
                             atom_getfloatarg(2, natom, nextmess),
                             atom_getfloatarg(3, natom, nextmess),
-                            15.);
+                            10. + fontsize);
                     else if (classname == gensym("outlet~"))
                         binbuf_addv(newb, "ssffff;", gensym("#P"),
                             gensym("outlet"),
                             atom_getfloatarg(2, natom, nextmess),
                             atom_getfloatarg(3, natom, nextmess),
-                            15., 1.);
+                            10. + fontsize, 1.);
                     else if (classname == gensym("bng"))
                         binbuf_addv(newb, "ssffff;", gensym("#P"),
                             gensym("button"),
@@ -1246,16 +1304,65 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                                     (atom_getfloatarg(6, natom, nextmess) == 1? 1 :
                                          atom_getfloatarg(6, natom, nextmess) - 1),
                             atom_getfloatarg(7, natom, nextmess));
+                    else if (classname == gensym("hsl")) 
+                    {
+                        t_float slmin = atom_getfloatarg(7, natom, nextmess);
+                        t_float slmax = atom_getfloatarg(8, natom, nextmess);
+                        binbuf_addv(newb, "sssffffffff;", gensym("#P"),
+                            gensym("user"),
+                            gensym("hslider"),
+                            atom_getfloatarg(2, natom, nextmess),
+                            atom_getfloatarg(3, natom, nextmess),
+                            atom_getfloatarg(6, natom, nextmess),
+                            atom_getfloatarg(5, natom, nextmess),
+                            slmax - slmin + 1, /* range */
+                            1.,            /* multiplier */
+                            slmin,         /* offset */
+                            0.);
+                    }
+                    else if ( (classname == gensym("trigger")) ||
+                              (classname == gensym("t")) )
+                    {
+                        SETSYMBOL(outmess, gensym("#P"));
+                        SETSYMBOL(outmess + 1, gensym("newex"));
+                        outmess[2] = nextmess[2];
+                        outmess[3] = nextmess[3];
+                        SETFLOAT(outmess + 4, 50.*(natom-4));
+                        SETFLOAT(outmess + 5, fontsize);
+                        outmess[6] = nextmess[4];
+                        t_symbol *arg;
+                        for (i = 5; i < natom; i++) {
+                            arg = atom_getsymbolarg(i, natom, nextmess);
+                            if (arg == gensym("a"))
+                                SETSYMBOL(outmess + i + 2, gensym("l"));
+                            else if (arg == gensym("anything"))
+                                SETSYMBOL(outmess + i + 2, gensym("l"));
+                            else if (arg == gensym("bang"))
+                                SETSYMBOL(outmess + i + 2, gensym("b"));
+                            else if (arg == gensym("float"))
+                                SETSYMBOL(outmess + i + 2, gensym("f"));
+                            else if (arg == gensym("list"))
+                                SETSYMBOL(outmess + i + 2, gensym("l"));
+                            else if (arg == gensym("symbol"))
+                                SETSYMBOL(outmess + i + 2, gensym("s"));
+                            else 
+                                outmess[i+2] = nextmess[i];
+                        }
+                        SETSEMI(outmess + natom + 2);
+                        binbuf_add(newb, natom + 3, outmess);
+                    }
                     else
                     {
                         SETSYMBOL(outmess, gensym("#P"));
                         SETSYMBOL(outmess + 1, gensym("newex"));
                         outmess[2] = nextmess[2];
                         outmess[3] = nextmess[3];
-                        SETFLOAT(outmess + 4, 50);
-                        SETFLOAT(outmess + 5, 1);
+                        SETFLOAT(outmess + 4, 50.*(natom-4));
+                        SETFLOAT(outmess + 5, fontsize);
                         for (i = 4; i < natom; i++)
                             outmess[i+2] = nextmess[i];
+                        if (classname == gensym("osc~"))
+                            SETSYMBOL(outmess + 6, gensym("cycle~"));
                         SETSEMI(outmess + natom + 2);
                         binbuf_add(newb, natom + 3, outmess);
                     }
@@ -1270,8 +1377,8 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                         (strcmp(second, "msg") ? "comment" : "message")));
                     outmess[2] = nextmess[2];
                     outmess[3] = nextmess[3];
-                    SETFLOAT(outmess + 4, 50);
-                    SETFLOAT(outmess + 5, 1);
+                    SETFLOAT(outmess + 4, 50.*(natom-4));
+                    SETFLOAT(outmess + 5, fontsize);
                     for (i = 4; i < natom; i++)
                         outmess[i+2] = nextmess[i];
                     SETSEMI(outmess + natom + 2);
@@ -1280,10 +1387,13 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd)
                 }
                 else if (!strcmp(second, "floatatom"))
                 {
+                    t_float width = atom_getfloatarg(4, natom, nextmess)*fontsize;
+                    if(width<8) width = 150; /* if pd width=0, set it big */
                     binbuf_addv(newb, "ssfff;",
                         gensym("#P"), gensym("flonum"),
                         atom_getfloatarg(2, natom, nextmess),
-                        atom_getfloatarg(3, natom, nextmess), 35);
+                        atom_getfloatarg(3, natom, nextmess),
+                        width);
                     nobj++;
                 }
                 else if (!strcmp(second, "connect"))
@@ -1350,7 +1460,8 @@ void pd_doloadbang(void);
 void binbuf_evalfile(t_symbol *name, t_symbol *dir)
 {
     t_binbuf *b = binbuf_new();
-    int import = !strcmp(name->s_name + strlen(name->s_name) - 4, ".pat");
+    int import = !strcmp(name->s_name + strlen(name->s_name) - 4, ".pat") ||
+        !strcmp(name->s_name + strlen(name->s_name) - 4, ".mxt");
         /* set filename so that new canvases can pick them up */
     int dspstate = canvas_suspend_dsp();
     glob_setfilename(0, name, dir);
diff --git a/src/m_class.c b/src/m_class.c
index cd4fbb1c6..f9d473fa9 100644
--- a/src/m_class.c
+++ b/src/m_class.c
@@ -2,15 +2,19 @@
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
 
+#include "config.h"
+
 #define PD_CLASS_DEF
 #include "m_pd.h"
 #include "m_imp.h"
 #include "s_stuff.h"
 #include <stdlib.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef MSW
+
+#ifdef HAVE_IO_H
 #include <io.h>
 #endif
 
@@ -24,6 +28,7 @@
 
 static t_symbol *class_loadsym;     /* name under which an extern is invoked */
 static void pd_defaultfloat(t_pd *x, t_float f);
+static void pd_defaultblob(t_pd *x, t_blob *st); /* MP20061226 blob type */
 static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 t_pd pd_objectmaker;    /* factory for creating "object" boxes */
 t_pd pd_canvasmaker;    /* factory for creating canvases */
@@ -42,6 +47,11 @@ static void pd_defaultbang(t_pd *x)
     else (*(*x)->c_anymethod)(x, &s_bang, 0, 0);
 }
 
+static void pd_defaultblob(t_pd *x, t_blob *st) /* MP 20061226 blob type */
+{ /* for now just reject it, later convert to symbol/float/list */
+    pd_error(x, "%s: no method for blob so far...", (*x)->c_name->s_name);
+}
+
 static void pd_defaultpointer(t_pd *x, t_gpointer *gp)
 {
     if (*(*x)->c_listmethod != pd_defaultlist)
@@ -208,6 +218,7 @@ t_class *class_new(t_symbol *s, t_newmethod newmethod, t_method freemethod,
     c->c_pointermethod = pd_defaultpointer;
     c->c_floatmethod = pd_defaultfloat;
     c->c_symbolmethod = pd_defaultsymbol;
+    c->c_blobmethod = pd_defaultblob; /* MP 20061226 blob type */
     c->c_listmethod = pd_defaultlist;
     c->c_anymethod = pd_defaultanything;
     c->c_wb = (typeflag == CLASS_PATCHABLE ? &text_widgetbehavior : 0);
@@ -291,6 +302,12 @@ void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
         if (argtype != A_SYMBOL || va_arg(ap, t_atomtype)) goto phooey;
         class_addsymbol(c, fn);
     }
+    else if (sel == &s_blob) /* MP 20070106 blob type */
+    {
+        post("class_addmethod: %p", fn);
+        if (argtype != A_BLOB || va_arg(ap, t_atomtype)) goto phooey;
+        class_addblob(c, fn);
+    }
     else if (sel == &s_list)
     {
         if (argtype != A_GIMME) goto phooey;
@@ -303,6 +320,7 @@ void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
     }
     else
     {
+        /* Pd-extended doesn't use the aliasing automagic
         int i;
         for (i = 0; i < c->c_nmethod; i++)
             if (c->c_methods[i].me_name == sel)
@@ -316,6 +334,7 @@ void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
             else post("warning: old method '%s' for class '%s' renamed '%s'",
                 sel->s_name, c->c_name->s_name, nbuf);
         }
+        */
         c->c_methods = t_resizebytes(c->c_methods,
             c->c_nmethod * sizeof(*c->c_methods),
             (c->c_nmethod + 1) * sizeof(*c->c_methods));
@@ -362,6 +381,11 @@ void class_addsymbol(t_class *c, t_method fn)
     c->c_symbolmethod = (t_symbolmethod)fn;
 }
 
+void class_addblob(t_class *c, t_method fn) /* MP 20061226 blob type */
+{
+    c->c_blobmethod = (t_blobmethod)fn;
+}
+
 void class_addlist(t_class *c, t_method fn)
 {
     c->c_listmethod = (t_listmethod)fn;
@@ -514,7 +538,7 @@ t_symbol *gensym(const char *s)
 
 static t_symbol *addfileextent(t_symbol *s)
 {
-    char namebuf[MAXPDSTRING], *str = s->s_name;
+    char namebuf[FILENAME_MAX], *str = s->s_name;
     int ln = strlen(str);
     if (!strcmp(str + ln - 3, ".pd")) return (s);
     strcpy(namebuf, str);
@@ -525,6 +549,8 @@ static t_symbol *addfileextent(t_symbol *s)
 static int tryingalready;
 
 void canvas_popabstraction(t_canvas *x);
+void canvas_initbang(t_canvas *x);
+
 extern t_pd *newest;
 
 t_symbol* pathsearch(t_symbol *s,char* ext);
@@ -536,7 +562,7 @@ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
 {
     t_pd *current;
     int fd;
-    char dirbuf[MAXPDSTRING], *nameptr;
+    char dirbuf[FILENAME_MAX], *nameptr;
     if (tryingalready) return;
     newest = 0;
     class_loadsym = s;
@@ -550,15 +576,16 @@ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
     class_loadsym = 0;
     current = s__X.s_thing;
     if ((fd = canvas_open(canvas_getcurrent(), s->s_name, ".pd",
-        dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0 ||
+        dirbuf, &nameptr, FILENAME_MAX, 0)) >= 0 ||
             (fd = canvas_open(canvas_getcurrent(), s->s_name, ".pat",
-                dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0)
+                dirbuf, &nameptr, FILENAME_MAX, 0)) >= 0)
     {
         close (fd);
         if (!pd_setloadingabstraction(s))
         {
             canvas_setargs(argc, argv);
             binbuf_evalfile(gensym(nameptr), gensym(dirbuf));
+            canvas_initbang((t_canvas *)(s__X.s_thing));/* JMZ*/
             if (s__X.s_thing != current)
                 canvas_popabstraction((t_canvas *)(s__X.s_thing));
             canvas_setargs(0, 0);
@@ -580,9 +607,10 @@ t_symbol  s__X =        {"#X", 0, 0};
 t_symbol  s_x =         {"x", 0, 0};
 t_symbol  s_y =         {"y", 0, 0};
 t_symbol  s_ =          {"", 0, 0};
+t_symbol  s_blob =    {"blob", 0, 0}; /* MP 20061223 blob type */
 
 static t_symbol *symlist[] = { &s_pointer, &s_float, &s_symbol, &s_bang,
-    &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_};
+    &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_, &s_blob}; /* MP 20061223 added s_blob */
 
 void mess_init(void)
 {
@@ -670,6 +698,13 @@ void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv)
             (*c->c_symbolmethod)(x, &s_);
         return;
     }
+    if (s == &s_blob) /* MP 20061226 blob type */
+    {
+        /*post("pd_typedmess argc = %d\n", argc);*//* MP 20061226 debug */
+        if (argc == 1) (*c->c_blobmethod)(x, argv->a_w.w_blob);
+        else goto badarg;
+        return;
+    }
     for (i = c->c_nmethod, m = c->c_methods; i--; m++)
         if (m->me_name == s)
     {
@@ -714,6 +749,19 @@ void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv)
                 }
                 dp++;
                 break;
+            case A_BLOB:/* MP 20070106 blob type */
+                /*post("pd_typedmess A_BLOB");*/
+                if (!argc) goto badarg;
+                if (argv->a_type == A_BLOB)
+                {
+                    /*post("argv->a_type == A_BLOB, argc = %d, narg= %d", argc, narg);*/
+                    *ap = (t_int)(argv->a_w.w_blob);
+                }
+                argc--;
+                argv++;
+                narg++;
+                ap++;
+                break;
             case A_SYMBOL:
                 if (!argc) goto badarg;
             case A_DEFSYM:
@@ -791,6 +839,10 @@ void pd_vmess(t_pd *x, t_symbol *sel, char *fmt, ...)
         {
         case 'f': SETFLOAT(at, va_arg(ap, double)); break;
         case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break;
+        case 't':
+            SETBLOB(at, va_arg(ap, t_blob *));
+            /*post("pd_vmess: arg[0].a_w.w_blob = %p", arg[0].a_w.w_blob);*/
+            break; /* MP 20061226 blob type */
         case 'i': SETFLOAT(at, va_arg(ap, t_int)); break;       
         case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break;
         default: goto done;
diff --git a/src/m_conf.c b/src/m_conf.c
index c7561920a..87b3a0317 100644
--- a/src/m_conf.c
+++ b/src/m_conf.c
@@ -51,6 +51,8 @@ void d_misc_setup(void);
 void d_osc_setup(void);
 void d_soundfile_setup(void);
 void d_ugen_setup(void);
+/* kludge until there is a declare API for externals, hans@eds.org */
+void import_setup(void);
 
 void conf_init(void)
 {
@@ -98,5 +100,7 @@ void conf_init(void)
     d_osc_setup();
     d_soundfile_setup();
     d_ugen_setup();
+/* kludge until there is a declare API for externals, hans@eds.org */
+    import_setup();
 }
 
diff --git a/src/m_glob.c b/src/m_glob.c
index ca3b5d1af..3a68e1891 100644
--- a/src/m_glob.c
+++ b/src/m_glob.c
@@ -13,7 +13,7 @@ int sys_perf;   /* true if we should query user on close and quit */
 /* These "glob" routines, which implement messages to Pd, are from all
 over.  Some others are prototyped in m_imp.h as well. */
 
-void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
+void glob_setfilename(void *dummy, t_symbol *filesym, t_symbol *dirsym);
 void glob_verifyquit(void *dummy, t_floatarg f);
 void glob_dsp(void *dummy, t_symbol *s, int argc, t_atom *argv);
 void glob_meters(void *dummy, t_floatarg f);
@@ -87,8 +87,8 @@ void glob_init(void)
         CLASS_DEFAULT, A_NULL);
     class_addmethod(glob_pdobject, (t_method)glob_initfromgui, gensym("init"),
         A_GIMME, 0);
-    class_addmethod(glob_pdobject, (t_method)glob_setfilename, gensym("filename"),
-        A_SYMBOL, A_SYMBOL, 0);
+    class_addmethod(glob_pdobject, (t_method)glob_setfilename, 
+        gensym("filename"), A_SYMBOL, A_SYMBOL, 0);
     class_addmethod(glob_pdobject, (t_method)glob_evalfile, gensym("open"),
         A_SYMBOL, A_SYMBOL, 0);
     class_addmethod(glob_pdobject, (t_method)glob_quit, gensym("quit"), 0);
diff --git a/src/m_imp.h b/src/m_imp.h
index d129bdbe6..8e42696bc 100644
--- a/src/m_imp.h
+++ b/src/m_imp.h
@@ -25,6 +25,7 @@ typedef void (*t_bangmethod)(t_pd *x);
 typedef void (*t_pointermethod)(t_pd *x, t_gpointer *gp);
 typedef void (*t_floatmethod)(t_pd *x, t_float f);
 typedef void (*t_symbolmethod)(t_pd *x, t_symbol *s);
+typedef void (*t_blobmethod)(t_pd *x, t_blob *st); /* MP20061226 blob type */
 typedef void (*t_listmethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 typedef void (*t_anymethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 
@@ -41,6 +42,7 @@ struct _class
     t_pointermethod c_pointermethod;
     t_floatmethod c_floatmethod;
     t_symbolmethod c_symbolmethod;
+    t_blobmethod c_blobmethod;  /* MP20061226 blob type */
     t_listmethod c_listmethod;
     t_anymethod c_anymethod;
     struct _widgetbehavior *c_wb;       /* "gobjs" only */
diff --git a/src/m_obj.c b/src/m_obj.c
index df8a2c122..4b1a0f57e 100644
--- a/src/m_obj.c
+++ b/src/m_obj.c
@@ -15,6 +15,7 @@ union inletunion
     t_gpointer *iu_pointerslot;
     t_float *iu_floatslot;
     t_symbol **iu_symslot;
+    t_blob **iu_blobslot; /* MP 20061226 blob type */
     t_float iu_floatsignalvalue;
 };
 
@@ -32,9 +33,10 @@ struct _inlet
 #define i_pointerslot i_un.iu_pointerslot
 #define i_floatslot i_un.iu_floatslot
 #define i_symslot i_un.iu_symslot
+#define i_blobslot i_un.iu_blobslot /* MP 20061226 blob type */
 
 static t_class *inlet_class, *pointerinlet_class, *floatinlet_class,
-    *symbolinlet_class;
+    *symbolinlet_class, *blobinlet_class; /* MP 20061226 added blobinlet_class */
 
 #define ISINLET(pd) ((*(pd) == inlet_class) || \
     (*(pd) == pointerinlet_class) || \
@@ -111,6 +113,26 @@ static void inlet_symbol(t_inlet *x, t_symbol *s)
     else inlet_wrong(x, &s_symbol);
 }
 
+static void inlet_blob(t_inlet *x, t_blob *st) /* MP20061226 blob type */
+{
+    /*post("inlet_blob (%p): st %p", &inlet_blob, st);*/
+    if (x->i_symfrom == &s_blob)
+    {
+        /*post("inlet_blob calling pd_vmess");*/
+        pd_vmess(x->i_dest, x->i_symto, "t", st);
+    }
+    else if (!x->i_symfrom)
+    {
+        /*post("inlet_blob calling pd_blob");*/
+        pd_blob(x->i_dest, st);
+    }
+    else
+    {
+        /*post("inlet_blob calling inlet_wrong");*/
+        inlet_wrong(x, &s_blob);
+    }
+}
+
 static void inlet_list(t_inlet *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom at;
@@ -192,6 +214,23 @@ t_inlet *floatinlet_new(t_object *owner, t_float *fp)
     return (x);
 }
 
+t_inlet *blobinlet_new(t_object *owner, t_blob **stp) /* MP 20061226 blob type */
+{
+    t_inlet *x = (t_inlet *)pd_new(blobinlet_class), *y, *y2;
+    x->i_owner = owner;
+    x->i_dest = 0;
+    x->i_symfrom = &s_blob;
+    x->i_blobslot = stp;
+    x->i_next = 0;
+    if (y = owner->ob_inlet)
+    {
+        while (y2 = y->i_next) y = y2;
+        y->i_next = x;
+    }
+    else owner->ob_inlet = x;
+    return (x);
+}
+
 static void symbolinlet_symbol(t_inlet *x, t_symbol *s)
 {
     *(x->i_symslot) = s;
@@ -244,6 +283,7 @@ void obj_init(void)
     class_addpointer(inlet_class, inlet_pointer);
     class_addfloat(inlet_class, inlet_float);
     class_addsymbol(inlet_class, inlet_symbol);
+    class_addblob(inlet_class, inlet_blob); /* MP 20061226 blob type */
     class_addlist(inlet_class, inlet_list);
     class_addanything(inlet_class, inlet_anything);
 
@@ -369,6 +409,18 @@ void outlet_symbol(t_outlet *x, t_symbol *s)
     --stackcount;
 }
 
+void outlet_blob(t_outlet *x, t_blob *st) /* MP 20061226 blob type */
+{
+    /*post("outlet_blob %p %lu", st, st->s_length);*/
+    t_outconnect *oc;
+    if(++stackcount >= STACKITER)
+        outlet_stackerror(x);
+    else
+        for (oc = x->o_connections; oc; oc = oc->oc_next)
+            pd_blob(oc->oc_to, st);
+    --stackcount;
+}
+
 void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_outconnect *oc;
diff --git a/src/m_pd.c b/src/m_pd.c
index c8bbf23e4..211173369 100644
--- a/src/m_pd.c
+++ b/src/m_pd.c
@@ -284,6 +284,12 @@ void pd_symbol(t_pd *x, t_symbol *s)
     (*(*x)->c_symbolmethod)(x, s);
 }
 
+void pd_blob(t_pd *x, t_blob *st) /* MP20061226 blob type */
+{
+    /*post("pd_blob: st %p length %lu (*x)->c_blobmethod %p", st, st->s_length, (*x)->c_blobmethod);*/
+    (*(*x)->c_blobmethod)(x, st);
+}
+
 void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv)
 {
     (*(*x)->c_listmethod)(x, &s_list, argc, argv);
diff --git a/src/m_pd.h b/src/m_pd.h
index 31d7847fa..43e901e96 100644
--- a/src/m_pd.h
+++ b/src/m_pd.h
@@ -11,7 +11,7 @@ extern "C" {
 #define PD_MAJOR_VERSION 0
 #define PD_MINOR_VERSION 42
 #define PD_BUGFIX_VERSION 5
-#define PD_TEST_VERSION ""
+#define PD_TEST_VERSION "extended"
 
 /* old name for "MSW" flag -- we have to take it for the sake of many old
 "nmakefiles" for externs, which will define NT and not MSW */
@@ -25,8 +25,11 @@ extern "C" {
 #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 */
+/* not using GNU C, __attribute__ means nothing */
+#  define  __attribute__(x)
 #endif /* _MSC_VER */
 
+
     /* the external storage class is "extern" in UNIX; in MSW it's ugly. */
 #ifdef MSW
 #ifdef PD_INTERNAL
@@ -51,7 +54,7 @@ extern "C" {
 #include <stddef.h>     /* just for size_t -- how lame! */
 #endif
 
-#define MAXPDSTRING 1000        /* use this for anything you want */
+#define MAXPDSTRING 1000        /* must be >= FILENAME_MAX */
 #define MAXPDARG 5              /* max number of args we can typecheck today */
 
 /* signed and unsigned integer types the size of a pointer:  */
@@ -106,6 +109,16 @@ typedef struct _gpointer           /* pointer to a gobj in a glist */
     t_gstub *gp_stub;               /* stub which points to glist/array */
 } t_gpointer;
 
+#define PD_BLOBS 1 /* MP20070211 Use this to test for blob capability */
+/* MP20061223 blob type: */
+typedef struct _blob /* pointer to a blob */
+{
+   unsigned long s_length; /* length of blob in bytes */
+   unsigned char *s_data; /* pointer to 1st byte of blob */
+} t_blob;
+/* ...MP20061223 blob type */
+
+
 typedef union word
 {
     t_float w_float;
@@ -114,6 +127,7 @@ typedef union word
     t_array *w_array;
     struct _glist *w_list;
     int w_index;
+    t_blob *w_blob; /* MP20061223 blob type */
 } t_word;
 
 typedef enum
@@ -129,7 +143,8 @@ typedef enum
     A_DOLLAR, 
     A_DOLLSYM,
     A_GIMME,
-    A_CANT
+    A_CANT,
+    A_BLOB /* MP20061223 blob type */
 }  t_atomtype;
 
 #define A_DEFSYMBOL A_DEFSYM    /* better name for this */
@@ -216,6 +231,7 @@ 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_blob;
 EXTERN t_symbol s_bang;
 EXTERN t_symbol s_list;
 EXTERN t_symbol s_anything;
@@ -259,6 +275,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
 #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 SETBLOB(atom, st) ((atom)->a_type = A_BLOB, (atom)->a_w.w_blob = (st)) /* MP 20061226 blob type */
 #define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
     (atom)->a_w.w_index = (n))
 #define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
@@ -267,6 +284,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
 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_blob *atom_getblob(t_atom *a);/* MP 20070108 blob type */
 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);
@@ -330,6 +348,7 @@ 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_blob(t_pd *x, t_blob *st); /* MP 20061226 blob type */
 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))
@@ -354,6 +373,7 @@ 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_blob(t_outlet *x, t_blob *st); /* MP 20061226 blob type */
 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 t_symbol *outlet_getsymbol(t_outlet *x);
@@ -410,6 +430,7 @@ 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_addblob(t_class *c, t_method fn);/* MP 20061226 blob type */
 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);
@@ -439,6 +460,7 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
 #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_addblob(x, y) class_addblob((x), (t_method)(y)) /* MP20061226 blob type */
 #define class_addlist(x, y) class_addlist((x), (t_method)(y))
 #define class_addanything(x, y) class_addanything((x), (t_method)(y))
 #endif
@@ -450,10 +472,10 @@ EXTERN void poststring(const char *s);
 EXTERN void postfloat(t_floatarg f);
 EXTERN void postatom(int argc, t_atom *argv);
 EXTERN void endpost(void);
-EXTERN void error(const char *fmt, ...);
-EXTERN void verbose(int level, const char *fmt, ...);
-EXTERN void bug(const char *fmt, ...);
-EXTERN void pd_error(void *object, const char *fmt, ...);
+EXTERN void error(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+EXTERN void verbose(int level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+EXTERN void bug(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+EXTERN void pd_error(void *object, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
 EXTERN void sys_logerror(const char *object, const char *s);
 EXTERN void sys_unixerror(const char *object);
 EXTERN void sys_ouch(void);
diff --git a/src/m_sched.c b/src/m_sched.c
index 411d19639..a38050ae0 100644
--- a/src/m_sched.c
+++ b/src/m_sched.c
@@ -4,6 +4,8 @@
 
 /*  scheduling stuff  */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "m_imp.h"
 #include "s_stuff.h"
@@ -45,7 +47,7 @@ struct _clock
 
 t_clock *clock_setlist;
 
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
@@ -441,6 +443,8 @@ static void m_pollingscheduler( void)
             /* T.Grill - done */
             sys_unlock();
 #endif
+/* this code causes more issues than it solves on Mac OS X and maybe Windows */
+#ifdef __linux__
                 /* if dacs remain "idle" for 1 sec, they're hung up. */
             if (timeforward != 0)
                 idlecount = 0;
@@ -468,6 +472,7 @@ static void m_pollingscheduler( void)
                     }
                 }
             }
+#endif /* __linux__ */
         }
         else
         {
diff --git a/src/makefile.in b/src/makefile.in
index cba0f7a8f..ce12d470a 100644
--- a/src/makefile.in
+++ b/src/makefile.in
@@ -1,7 +1,14 @@
+# On Mac OS X, this needs to be defined to enable dlopen and weak linking
+# support.  Its safe on other platforms since gcc only checks this env var on
+# Apple's gcc.  <hans@at.or.at>
+ifeq ($(shell uname -s),Darwin)
+export MACOSX_DEPLOYMENT_TARGET = 10.3
+endif
+
 VPATH = ../obj:./
 OBJ_DIR = ../obj
 BIN_DIR = ../bin
-PDEXEC = $(BIN_DIR)/pd
+PDEXEC = $(BIN_DIR)/@PDEXEC@
 EXT= @EXT@
 GUINAME= @GUINAME@
 
@@ -16,13 +23,18 @@ GFLAGS = -DINSTALL_PREFIX=\"$(prefix)\"
 
 # varibles to match packages/Makefile.buildlayout so that they can be easily
 # overridden when building Pd-extended builds. <hans@at.or.at>
-libpddir = $(libdir)/pd
+libpddir = $(libdir)/pd-extended
 pddocdir = $(libpddir)/doc
 libpdbindir = $(libpddir)/bin
 
 CPPFLAGS = @CPPFLAGS@
 MORECFLAGS = @MORECFLAGS@
-GINCLUDE = $(CPPFLAGS) @GUIFLAGS@
+# if on 10.6/Intel, then build GUI as 32-bit
+ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 10)
+  GINCLUDE = -arch i386 $(CPPFLAGS) -framework Tcl -framework Tk
+else
+  GINCLUDE = $(CPPFLAGS) @GUIFLAGS@
+endif
 GLIB = @LIBS@
 
 LDFLAGS = @LDFLAGS@
@@ -42,7 +54,12 @@ ASIOSRC = @ASIOSRC@
 
 ASIOOBJ = $(ASIOSRC:.cpp=.o)
 
-SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
+# these files cause a warning when using auto-vectorization:
+# "warning: dereferencing type-punned pointer will break strict-aliasing rules"
+TYPE_PUNNING_SRC = d_ctl.c d_array.c d_delay.c d_filter.c d_math.c d_osc.c d_soundfile.c
+
+# these are safe for full gcc 4.x optimization
+OPT_SAFE_SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
     g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \
     g_all_guis.c g_bang.c g_hdial.c g_hslider.c g_mycanvas.c g_numbox.c \
     g_toggle.c g_vdial.c g_vslider.c g_vumeter.c \
@@ -50,13 +67,18 @@ SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
     m_conf.c m_glob.c m_sched.c \
     s_main.c s_inter.c s_file.c s_print.c \
     s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \
-    d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \
-    d_math.c d_fft.c d_array.c d_global.c \
-    d_delay.c d_resample.c \
+    d_ugen.c d_arithmetic.c d_dac.c d_misc.c \
+    d_fft.c d_global.c \
+    d_resample.c \
     x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \
-    x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \
+    x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c \
+	import.c \
     $(SYSSRC)
 
+SRC = $(TYPE_PUNNING_SRC) $(OPT_SAFE_SRC)
+
+TYPE_PUNNING_OBJ = $(TYPE_PUNNING_SRC:.c=.o) 
+OPT_SAFE_OBJ = $(OPT_SAFE_SRC:.c=.o) 
 OBJ = $(SRC:.c=.o) 
 
 GSRC =  @GUISRC@
@@ -84,12 +106,15 @@ endif
 .PHONY: pd gui externs all
 
 all: pd $(BIN_DIR)/pd-watchdog gui $(BIN_DIR)/pdsend \
-    $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk externs
+    $(BIN_DIR)/pdreceive externs
 
 bin: pd $(BIN_DIR)/pd-watchdog gui $(BIN_DIR)/pdsend \
-    $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk
+    $(BIN_DIR)/pdreceive
+
+$(OPT_SAFE_OBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(OPT_CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 
 
-$(OBJ) : %.o : %.c
+$(TYPE_PUNNING_OBJ) : %.o : %.c
 	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 
 
 $(GOBJ) : %.o : %.c
@@ -126,13 +151,15 @@ $(PDEXEC): $(OBJ) $(BIN_DIR)
 $(BIN_DIR)/pd-gui: $(GOBJ) $(GSRC)
 	cd ../obj; $(CC) $(INCLUDE) -o $(BIN_DIR)/$(GUINAME) $(GOBJ) $(GLIB)
 
-$(BIN_DIR)/pd.tk: u_main.tk $(BIN_DIR)
-	cp u_main.tk $(BIN_DIR)/pd.tk
-	touch -r makefile.dependencies $(BIN_DIR)
-
+# if on 10.6/Intel, then force build GUI as 32-bit
+ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 10)
+  ARCH_FLAG = -arch i386
+else
+  ARCH_FLAG = 
+endif
 #this is for Max OSX only...
 $(BIN_DIR)/libPdTcl.dylib: $(GOBJ) $(GSRC)
-	cd ../obj && $(CC) $(CFLAGS) -dynamiclib -read_only_relocs warning  \
+	cd ../obj && $(CC) $(ARCH_FLAG) $(CFLAGS) -dynamiclib -read_only_relocs warning  \
 		-o $(BIN_DIR)/libPdTcl.dylib $(GOBJ)  \
 		-F@TCLTK_FRAMEWORKS_PATH@ \
 		-framework Tcl  -framework Tk  -framework System  \
@@ -168,9 +195,13 @@ install:  all
 	install -d $(DESTDIR)$(libpdbindir)
 	install $(BIN_DIR)/$(GUINAME) $(DESTDIR)$(libpdbindir)/$(GUINAME)
 	install $(BIN_DIR)/pd-watchdog $(DESTDIR)$(libpdbindir)/pd-watchdog
-	install -m644 $(BIN_DIR)/pd.tk $(DESTDIR)$(libpdbindir)/pd.tk
+	install -m644 pd.tk $(DESTDIR)$(libpdbindir)/pd.tk
+	install -m644 pkgIndex.tcl $(DESTDIR)$(libpdbindir)/pkgIndex.tcl
+	install -m644 helpbrowser.tcl $(DESTDIR)$(libpdbindir)/helpbrowser.tcl
 	install -d $(DESTDIR)$(bindir)
-	install $(BINARYMODE) $(PDEXEC) $(DESTDIR)$(bindir)/pd
+	install $(BINARYMODE) $(PDEXEC) $(DESTDIR)$(bindir)/@PDEXEC@
+# kludge to allow pd~ to work by default in pd-extended
+	ln -s $(bindir)/pdextended $(DESTDIR)$(libpddir)/pd
 	install -m755 $(BIN_DIR)/pdsend $(DESTDIR)$(bindir)/pdsend
 	install -m755 $(BIN_DIR)/pdreceive $(DESTDIR)$(bindir)/pdreceive 
 	for dir in $(shell ls -1 ../doc | grep -v CVS); do \
@@ -188,24 +219,27 @@ install:  all
 	cat $(ABOUT_FILE).tmp | sed 's|PD_VERSION|Pd version $(PD_VERSION)|' \
 		> $(ABOUT_FILE)
 	rm $(ABOUT_FILE).tmp
-	cp -pr ../extra $(DESTDIR)$(libpddir)/
-	rm -f $(DESTDIR)$(libpddir)/extra/*/*.o
-	install -d $(DESTDIR)$(includedir)
-	install -m644 m_pd.h $(DESTDIR)$(includedir)/m_pd.h
+	rsync -ax --exclude=.git --exclude=.svn ../extra $(DESTDIR)$(libpddir)/
+	install -d $(DESTDIR)$(includedir)/pdextended
+	install -m644 m_pd.h $(DESTDIR)$(includedir)/pdextended/m_pd.h
+	install -m644 m_imp.h $(DESTDIR)$(includedir)/pdextended/m_imp.h
+	install -m644 g_canvas.h $(DESTDIR)$(includedir)/pdextended/g_canvas.h
+	install -m644 s_stuff.h $(DESTDIR)$(includedir)/pdextended/s_stuff.h
+	install -m644 g_all_guis.h $(DESTDIR)$(includedir)/pdextended/g_all_guis.h
 	install -d $(DESTDIR)$(mandir)/man1
-	gzip < ../man/pd.1 >  $(DESTDIR)$(mandir)/man1/pd.1.gz
-	chmod 644 $(DESTDIR)$(mandir)/man1/pd.1.gz
+	gzip < ../man/pd.1 >  $(DESTDIR)$(mandir)/man1/@PDEXEC@.1.gz
+	chmod 644 $(DESTDIR)$(mandir)/man1/@PDEXEC@.1.gz
 	gzip < ../man/pdsend.1 >  $(DESTDIR)$(mandir)/man1/pdsend.1.gz
 	chmod 644 $(DESTDIR)$(mandir)/man1/pdsend.1.gz
 	gzip < ../man/pdreceive.1 >  $(DESTDIR)$(mandir)/man1/pdreceive.1.gz
 	chmod 644 $(DESTDIR)$(mandir)/man1/pdreceive.1.gz
 	@echo "Pd install succeeded."
 
-local-clean:
-	-rm -f ../obj/* $(BIN_DIR)/pd $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
+local-clean:	
+	-rm -f -- $(OBJ)
+	-rm -f ../obj/* $(PDEXEC) $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
 	    $(BIN_DIR)/pdreceive $(BIN_DIR)/pd-watchdog m_stamp.c
-	-rm -f `find ../portaudio -name "*.o"` 
-	-rm -f *~
+	-rm -f -- *~
 	-(cd ../doc/6.externs; rm -f *.pd_linux)
 	-rm -f makefile.dependencies
 	touch makefile.dependencies
@@ -232,10 +266,14 @@ makefile.dependencies: makefile
 
 uninstall:
 	rm -f -r $(DESTDIR)$(libpddir)
-	rm -f $(DESTDIR)$(bindir)/pd
+	rm -f $(DESTDIR)$(bindir)/@PDEXEC@
 	rm -f $(DESTDIR)$(bindir)/pdsend
 	rm -f $(DESTDIR)$(bindir)/pdreceive
 	rm -f $(DESTDIR)$(includedir)/m_pd.h
+	rm -f $(DESTDIR)$(includedir)/m_imp.h
+	rm -f $(DESTDIR)$(includedir)/s_stuff.h
+	rm -f $(DESTDIR)$(includedir)/g_all_guis.h
+	rm -f $(DESTDIR)$(includedir)/g_canvas.
 	rm -f $(DESTDIR)$(mandir)/man1/pd.1.gz
 	rm -f $(DESTDIR)$(mandir)/man1/pdsend.1.gz
 	rm -f $(DESTDIR)$(mandir)/man1/pdreceive.1.gz
@@ -243,6 +281,28 @@ uninstall:
 include makefile.dependencies
 
 
+TAGS: etags
+
+etags:
+	etags *.h $(SRC) $(SYSSRC)
+	etags --append --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" pd.tk *.tcl
+	find /usr/include -type f -name \*.h -exec etags -a '{}' \;
+	make etags_`uname -s`
+
+etags_Darwin:
+	find /System/Library/Frameworks  -type f -name \*.h -exec etags -a '{}' \;
+	find /Library/Frameworks  -type f -name \*.h -exec etags -a '{}' \;
+	find /sw/include -type f -name \*.h -exec etags -a '{}' \;
+
+etags_Linux:
+
+etags_MINGW:
+	find /usr/local/include/ -type f -name \*.h -exec etags -a '{}' \;
+
+
+
+
+
 
 
 
diff --git a/src/makefile.mingw b/src/makefile.mingw
new file mode 100755
index 000000000..78c5834a8
--- /dev/null
+++ b/src/makefile.mingw
@@ -0,0 +1,337 @@
+# how Miller builds Pd on Windows:
+# http://lists.puredata.info/pipermail/pd-dev/2004-10/002981.html
+
+CC = gcc
+CXX = g++
+
+cvs_root_dir = ../..
+pd_src = $(cvs_root_dir)/pd
+DLL_DIR = $(pd_src)/src
+
+BIN_DIR = $(pd_src)/bin
+
+VPATH = $(pd_src)/src
+
+prefix = ..
+exec_prefix = $(prefix)
+includedir = $(prefix)/include
+libdir = $(exec_prefix)/lib
+mandir = $(prefix)/man
+bindir = $(exec_prefix)/bin
+
+GFLAGS = -DINSTALL_PREFIX=\"$(prefix)\"
+
+# varibles to match packages/Makefile.buildlayout so that they can be easily
+# overridden when building Pd-extended builds. <hans@at.or.at>
+libpddir = $(DESTDIR)$(prefix)
+pddocdir = $(libpddir)/doc
+libpdbindir = $(libpddir)/bin
+
+PDEXEC = pd.exe
+PDDLL = pd.dll
+
+DLLWRAP= dllwrap
+
+MORECFLAGS = -O3 -funroll-loops -fomit-frame-pointer 
+
+PADIR = $(pd_src)/portaudio
+ASIODIR = $(pd_src)/asio
+INCPA = -I$(PADIR) -I$(ASIODIR) -I$(PADIR)/include -I$(PADIR)/src/common
+INCLUDE = -I$(pd_src)/src 
+GINCLUDE = -I/usr/local/include $(INCLUDE)
+
+LDFLAGS = 
+LIBS = -lm -lpthreadGC2 -lwsock32 -lwinmm -lole32 -ltcl85 -ltk85
+
+OPT_CFLAGS = 
+
+WARN_CFLAGS = -Wall -W -Wstrict-prototypes -Wno-unused \
+    -Wno-unused-parameter -Wno-parentheses -Wno-switch
+ARCH_CFLAGS = -DPD -DPD_INTERNAL -DMSW -DNT -DPA_NO_DS -DUSEAPI_MMIO -DPA_NO_WASAPI \
+	-DUSEAPI_PORTAUDIO -DPA19 -DPA_LITTLE_ENDIAN -mms-bitfields
+
+CFLAGS += $(ARCH_CFLAGS) $(WARN_CFLAGS) $(OPT_CFLAGS) $(MORECFLAGS)
+
+STRIP = strip --strip-unneeded -R .note -R .comment
+
+# the sources
+
+PASRC = s_audio_pa.c s_audio_pablio.c s_audio_paring.c \
+	s_audio_mmio.c s_midi_mmio.c \
+	$(PADIR)/src/common/pa_stream.c \
+        $(PADIR)/src/common/pa_trace.c \
+        $(PADIR)/src/common/pa_skeleton.c \
+        $(PADIR)/src/common/pa_process.c \
+        $(PADIR)/src/common/pa_front.c \
+        $(PADIR)/src/common/pa_dither.c \
+        $(PADIR)/src/common/pa_cpuload.c \
+        $(PADIR)/src/common/pa_converters.c \
+        $(PADIR)/src/common/pa_allocation.c \
+        $(PADIR)/src/common/pa_ringbuffer.c \
+        $(PADIR)/src/os/win/pa_win_hostapis.c \
+        $(PADIR)/src/os/win/pa_win_util.c \
+        $(PADIR)/src/os/win/pa_win_waveformat.c \
+        $(PADIR)/src/hostapi/wmme/pa_win_wmme.c
+
+ASIOSRC = $(PADIR)/src/hostapi/asio/iasiothiscallresolver.cpp \
+	$(PADIR)/src/hostapi/asio/pa_asio.cpp $(ASIODIR)/asio.cpp \
+	$(ASIODIR)/asiodrivers.cpp $(ASIODIR)/asiolist.cpp
+#VSRC =  s_audio_vst.c
+
+PMDIR = ../portmidi
+PMINCLUDE = -I$(PMDIR)/pm_common -I$(PMDIR)/pm_win -I$(PMDIR)/porttime -DNEWBUFFER
+PMSRC = $(PMDIR)/pm_common/portmidi.c \
+        $(PMDIR)/pm_common/pmutil.c \
+        $(PMDIR)/porttime/porttime.c \
+        $(PMDIR)/porttime/ptwinmm.c \
+        $(PMDIR)/pm_win/pmwin.c \
+        $(PMDIR)/pm_win/pmwinmm.c
+
+PMOBJ =  $(PMSRC:.c=.o)
+
+GSRC = t_tkcmd.c
+
+HEADERS = g_all_guis.h m_imp.h t_tk.h g_canvas.h m_pd.h s_stuff.h \
+	$(wildcard ../portaudio/common/*.h) s_audio_paring.h s_audio_pablio.h
+
+SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
+    g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \
+    g_all_guis.c g_bang.c g_hdial.c g_mycanvas.c g_numbox.c g_toggle.c \
+    g_hslider.c g_vumeter.c m_pd.c m_class.c m_obj.c m_atom.c m_memory.c \
+    m_binbuf.c m_conf.c m_glob.c m_sched.c s_main.c s_inter.c s_file.c \
+    s_print.c s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \
+    d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \
+    d_math.c d_fft.c d_fft_mayer.c d_fftroutine.c d_array.c d_global.c \
+    d_delay.c d_resample.c x_arithmetic.c x_connective.c x_interface.c \
+    x_midi.c x_misc.c x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c \
+    x_list.c d_soundfile.c g_vslider.c g_vdial.c import.c
+
+SRSRC = u_pdsend.c u_pdreceive.c
+
+OBJ = $(SRC:.c=.o) 
+GOBJ = $(GSRC:.c=.o)
+SROBJ = $(SRSRC:.c=.o) 
+PAOBJ = $(PASRC:.c=.o)
+ASIOOBJ = $(ASIOSRC:.cpp=.o)
+#VOBJ = $(VSRC:.c=.o)
+OBJC = $(OBJ) $(PAOBJ) $(ASIOOBJ) $(PMOBJ)
+
+
+# get version from m_pd.h to use in doc/1.manual/1.introduction.txt
+PD_MAJOR_VERSION := $(shell grep PD_MAJOR_VERSION m_pd.h | \
+	sed 's|^.define *PD_MAJOR_VERSION *\([0-9]*\).*|\1|' )
+PD_MINOR_VERSION := $(shell grep PD_MINOR_VERSION m_pd.h | \
+	sed 's|^.define *PD_MINOR_VERSION *\([0-9]*\).*|\1|' )
+PD_BUGFIX_VERSION := $(shell grep PD_BUGFIX_VERSION m_pd.h | \
+	sed 's|^.define *PD_BUGFIX_VERSION *\([0-9]*\).*|\1|' )
+PD_TEST_VERSION := $(shell grep PD_TEST_VERSION m_pd.h | \
+	sed 's|^.define *PD_TEST_VERSION *"\(.*\)".*|\1|' )
+PD_VERSION := $(PD_MAJOR_VERSION).$(PD_MINOR_VERSION).$(PD_BUGFIX_VERSION)
+ifneq ($(PD_TEST_VERSION),)
+	PD_VERSION := $(PD_VERSION)-$(PD_TEST_VERSION)
+endif
+
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+.PHONY: all install clean externs testbin
+
+all: config.h pdtcl.dll $(PDDLL) $(PDEXEC) pdsend.exe pdreceive.exe pd.com externs
+
+config.h: config.h.in
+	cp config.h.in config.h
+
+$(OBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $*.o $*.c 
+
+$(GOBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(GINCLUDE) -c -o $*.o $*.c 
+
+$(SROBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $*.o $*.c 
+
+$(PAOBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(INCPA) -c -o $*.o $*.c 
+
+$(ASIOOBJ) : %.o : %.cpp
+	$(CXX) $(CFLAGS) $(INCPA) -c -o $*.o $*.cpp
+
+$(PMOBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(PMINCLUDE) -c -o $*.o $*.c 
+
+$(VOBJ) : %.o : %.c
+	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $*.o $*.c 
+
+pdsend.exe: u_pdsend.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -o pdsend.exe u_pdsend.o $(LIBS)
+	$(STRIP) pdsend.exe
+
+pdreceive.exe: u_pdreceive.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -o pdreceive.exe u_pdreceive.o $(LIBS)
+	$(STRIP) pdreceive.exe
+
+$(PDEXEC): s_entry.o pd.res
+	$(CC) $(LDFLAGS) -mwindows -o $(PDEXEC) s_entry.o pd.res $(LIBS) -L. -lpd
+	$(STRIP) -s $(PDEXEC)
+
+pd.com: s_entry.o
+	$(CC) $(LDFLAGS) -o pd.com s_entry.o $(LIBS) -L. -lpd
+	$(STRIP) -s pd.com
+
+$(PDDLL): $(OBJC)
+	$(CXX) -shared $(LDFLAGS) -o $(PDDLL) $(OBJC) $(LIBS) \
+		-Wl,--export-all-symbols -Wl,--out-implib=pd.a -Wl,--output-def=pddll.def
+	$(STRIP) $(PDDLL)
+
+pdtcl.dll: t_tkcmd.o
+	$(DLLWRAP) --export-all-symbols --output-def=pdtcl.def \
+		--output-lib=pdtcl.a --dllname=pdtcl.dll t_tkcmd.o $(LIBS)
+	$(STRIP) pdtcl.dll
+
+pd.res: pd.rc
+	windres pd.rc -O coff -o pd.res
+
+#vstschedlib.dll: $(VOBJ)
+#	$(DLLWRAP) --export-all-symbols --output-def vst.def \
+#	--output-lib=vst.a --dllname=vstschedlib.dll s_audio_vst.o pd.a $(LIBS)
+
+# for making objects included with Pd, [expr] is whacky, so its built
+# separately, and pd~ doesn't build on Windows yet
+EXTERNALS_SRC := $(wildcard $(pd_src)/extra/[a-df-oq-z]*/*.c)
+EXPR_SRC = vexp.c vexp_fun.c vexp_if.c
+EXPR_OBJ =  $(patsubst %.c, $(pd_src)/extra/expr~/%.o, $(EXPR_SRC))
+expr_src = $(pd_src)/extra/expr~
+
+externs: $(EXTERNALS_SRC:.c=.dll) $(expr_src)/expr.dll $(expr_src)/expr~.dll \
+	$(expr_src)/fexpr~.dll
+
+
+$(expr_src)/expr.dll: $(EXPR_OBJ)
+	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -s -shared --enable-auto-import \
+		-o $(expr_src)/expr.dll $(EXPR_OBJ) $(LIBS) -L$(DLL_DIR) -lpd
+$(expr_src)/expr~.dll: $(EXPR_OBJ)
+	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -s -shared --enable-auto-import \
+		-o $(expr_src)/expr~.dll $(EXPR_OBJ) $(LIBS) -L$(DLL_DIR) -lpd
+$(expr_src)/fexpr~.dll: $(EXPR_OBJ)
+	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -s -shared --enable-auto-import \
+		-o $(expr_src)/fexpr~.dll $(EXPR_OBJ) $(LIBS) -L$(DLL_DIR) -lpd
+
+%.o: %.c
+	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+
+%.dll: %.o
+	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -s -shared --enable-auto-import \
+		-o $*.dll $*.o $(LIBS) -L$(DLL_DIR) -lpd
+#	$(STRIP) $*.dll
+
+# kludge to put stuff into the pd/bin dir for testing
+testbin: $(PDEXEC) $(PDDLL) pd.com
+	echo "Copying files to $(BIN_DIR)"
+	install -d $(BIN_DIR)
+	install -p pd.tk $(BIN_DIR)
+	install -p helpbrowser.tcl $(BIN_DIR)
+	install -p pkgIndex.tcl $(BIN_DIR)
+	install -p $(PDDLL) $(BIN_DIR)
+	install -p pd.ico $(BIN_DIR)
+	install -p pd.com $(BIN_DIR)
+	install -p $(PDEXEC) $(BIN_DIR)
+
+ABOUT_FILE=$(pddocdir)/1.manual/1.introduction.txt
+install:  all
+# the real install
+	install -d $(DESTDIR)$(bindir)
+	install -p pdtcl.dll $(DESTDIR)$(bindir)/pdtcl.dll
+	install -p pd.tk $(DESTDIR)$(bindir)/pd.tk
+	install -p helpbrowser.tcl $(DESTDIR)$(bindir)/helpbrowser.tcl
+	install -p pkgIndex.tcl $(DESTDIR)$(bindir)/pkgIndex.tcl
+	install -p $(PDEXEC) $(DESTDIR)$(bindir)/$(PDEXEC)
+	install -p pd.com $(DESTDIR)$(bindir)/pd.com
+	install -p pd.dll $(DESTDIR)$(bindir)/pd.dll
+	install -p pddll.def $(DESTDIR)$(bindir)/pddll.def
+	install -p pd.a $(DESTDIR)$(bindir)/pd.lib
+	install -p pd.ico $(DESTDIR)$(bindir)/pd.ico
+	install -p pdsend.exe $(DESTDIR)$(bindir)/pdsend.exe
+	install -p pdreceive.exe $(DESTDIR)$(bindir)/pdreceive.exe
+	install -d $(DESTDIR)$(includedir)/pdextended
+	install -p m_pd.h $(DESTDIR)$(includedir)/pdextended/m_pd.h
+	install -p m_imp.h $(DESTDIR)$(includedir)/pdextended/m_imp.h
+	install -p g_canvas.h $(DESTDIR)$(includedir)/pdextended/g_canvas.h
+	install -p s_stuff.h $(DESTDIR)$(includedir)/pdextended/s_stuff.h
+	install -p g_all_guis.h $(DESTDIR)$(includedir)/pdextended/g_all_guis.h
+# since Pd-vanilla on Mac OS X doesn't have an 'include/pd' folder,
+# Pd-extended will mimic Pd-vanilla's include/pd until Pd-vanilla gets one
+	cp -pr $(DESTDIR)$(includedir)/pdextended $(DESTDIR)$(includedir)/pd
+	install -p m_pd.h $(DESTDIR)$(includedir)
+	for dir in $(shell ls -1 ../doc | grep -v CVS); do \
+		echo "installing $$dir"; \
+		install -d $(pddocdir)/$$dir ; \
+		install -p ../doc/$$dir/*.* $(pddocdir)/$$dir ; \
+	done
+	for dir in $(shell ls -1 ../doc/7.stuff | grep -v CVS); do \
+		echo "installing 7.stuff/$$dir"; \
+		install -d $(pddocdir)/7.stuff/$$dir ; \
+		install -p ../doc/7.stuff/$$dir/*.* $(pddocdir)/7.stuff/$$dir ; \
+	done
+	mv $(ABOUT_FILE) $(ABOUT_FILE).tmp
+	cat $(ABOUT_FILE).tmp | sed 's|PD_VERSION|Pd version $(PD_VERSION)|' \
+		> $(ABOUT_FILE)
+	rm $(ABOUT_FILE).tmp
+	install -d $(libpddir)/extra
+	install -p $(pd_src)/extra/*/*.dll $(libpddir)/extra
+	install -p $(pd_src)/extra/*.pd $(libpddir)/extra
+	install -d $(pddocdir)/5.reference
+	install -p ../extra/*/*.pd $(pddocdir)/5.reference
+	install -p ../extra/*-help.pd $(pddocdir)/5.reference
+	install -d $(DESTDIR)$(includedir)
+	install -p m_pd.h $(DESTDIR)$(includedir)/m_pd.h
+	install -p s_stuff.h $(DESTDIR)$(includedir)/s_stuff.h
+	@echo "Pd install succeeded."
+
+
+clean:
+	-rm -f -- $(BIN_DIR)/*.*
+	-rm -f -- $(PDEXEC) pdsend.exe pdreceive.exe pd.com
+	-rm -f -- $(PDDLL) pdtcl.dll pdtcl.a pdtcl.def
+	-rm -f -- $(OBJ) $(GOBJ) $(SROBJ) $(PAOBJ) $(ASIOOBJ) $(PMOBJ)
+	-rm -f -- $(pd_src)/extra/*/*.dll $(pd_src)/extra/*/*.o
+	-rm -f makefile.dependencies
+
+distclean: clean
+	rm -rf -- config.cache config.log config.status makefile tags \
+	     autom4te-*.cache
+
+tags: $(SRC) $(GSRC); ctags *.[ch]
+
+depend: makefile.dependencies
+
+makefile.dependencies: config.h $(SRC) $(GSRC) $(PASRC) $(HEADERS)
+	$(CC) $(INCLUDE) $(INCPA) $(CFLAGS) -M $(SRC) $(GSRC) $(PASRC) $(HEADERS) \
+		> makefile.dependencies
+
+uninstall:
+	-rm $(prefix)/bin/pd*.exe
+	-rm $(prefix)/bin/pd*.com
+	-rm $(prefix)/bin/pd*.dll
+	-rm $(prefix)/bin/*.tk
+
+
+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)"
+
+
+include makefile.dependencies
diff --git a/src/makefile.nt b/src/makefile.nt
deleted file mode 100644
index cda842f2b..000000000
--- a/src/makefile.nt
+++ /dev/null
@@ -1,184 +0,0 @@
-# Makefile for PD on MSW
-
-all: pd gui ..\bin\pd.tk ..\bin\pdsend.exe ..\bin\pdreceive.exe
-
-
-VCSDK = "C:\Program Files\Microsoft SDKs\Windows\v6.0A"
-VC9 = "C:\Program Files\Microsoft Visual Studio 9.0\VC"
-#VC="\Program Files\DevStudio\Vc"
-INCLUDE = -I.\ -I..\Tcl\include -I\DXSDK\include -I$(VC9)\Include \
- -I$(VCSDK)\Include
-
-LDIR = $(VCSDK)\lib
-LD2 = $(VC9)\lib
-
-LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:libc \
-    /NODEFAULTLIB:uuid $(LDIR)\kernel32.lib \
-    $(LDIR)\wsock32.lib $(LDIR)\winmm.lib $(LDIR)\advapi32.lib \
-    $(LDIR)\setupapi.lib ..\bin\pthreadVC.lib \
-    $(LD2)\libcmt.lib $(LD2)\oldnames.lib
-
-GLIB =  $(LIB) ..\bin\tcl84.lib ..\bin\tk84.lib
-CFLAGS = /nologo /W3 /DMSW /DNT /DPD /DPD_INTERNAL /DWIN32 /DWINDOWS /Ox \
-	-DPA_LITTLE_ENDIAN -DUSEAPI_MMIO -DUSEAPI_PORTAUDIO -D__i386__ -DPA19 \
-        -D_CRT_SECURE_NO_WARNINGS
-LFLAGS = /nologo
-
-SYSSRC = s_audio_pa.c s_audio_pablio.c s_audio_paring.c \
-    s_audio_mmio.c s_midi_pm.c
-
-SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
-    g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \
-    g_all_guis.c g_bang.c g_hdial.c g_hslider.c g_mycanvas.c g_numbox.c \
-    g_toggle.c g_vdial.c g_vslider.c g_vumeter.c \
-    m_pd.c m_class.c m_obj.c m_atom.c m_memory.c m_binbuf.c \
-    m_conf.c m_glob.c m_sched.c \
-    s_main.c s_inter.c s_file.c s_print.c \
-    s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \
-    d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \
-    d_math.c d_fft.c d_fft_mayer.c d_fftroutine.c d_array.c d_global.c \
-    d_delay.c d_resample.c \
-    x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \
-    x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \
-    $(SYSSRC)
-
-PADIR = ..\portaudio
-INCPA = -I$(PADIR)\include -I$(PADIR)\src\common -I..\lib\asio
-PASRC = $(PADIR)\src
-SRCPA = $(PASRC)/common/pa_stream.c \
-        $(PASRC)/common/pa_trace.c \
-        $(PASRC)/common/pa_skeleton.c \
-        $(PASRC)/common/pa_process.c \
-        $(PASRC)/common/pa_front.c \
-        $(PASRC)/common/pa_dither.c \
-        $(PASRC)/common/pa_cpuload.c \
-        $(PASRC)/common/pa_converters.c \
-        $(PASRC)/common/pa_allocation.c \
-        $(PASRC)/os/win/pa_win_hostapis.c \
-        $(PASRC)/os/win/pa_win_util.c \
-        $(PASRC)/hostapi/wmme/pa_win_wmme.c 
-
-SRCASIO = $(PADIR)/pa_asio/pa_asio.cpp 
-
-ASIOLIB = $(LDIR)\user32.lib $(LDIR)\gdi32.lib $(LDIR)\winspool.lib \
-$(LDIR)\comdlg32.lib $(LDIR)\advapi32.lib $(LDIR)\shell32.lib \
-$(LDIR)\ole32.lib $(LDIR)\oleaut32.lib $(LDIR)\uuid.lib \
-$(LDIR)\odbc32.lib $(LDIR)\odbccp32.lib ..\lib\asio\asiolib.lib
-
-
-PAOBJ = pa_stream.obj pa_trace.obj pa_skeleton.obj pa_process.obj \
-	pa_front.obj pa_dither.obj pa_cpuload.obj pa_converters.obj \
-	pa_allocation.obj pa_win_hostapis.obj pa_win_util.obj pa_asio.obj \
-	pa_win_wmme.obj 
-#       pa_win_wdmks.obj
-
-PMDIR = ..\portmidi
-INCPM = -I$(PMDIR)\pm_common -I$(PMDIR)\pm_win -I$(PMDIR)\porttime -DNEWBUFFER
-SRCPM = $(PADIR)/pm_common/portmidi.c \
-        $(PMDIR)/pm_common/pmutil.c \
-        $(PMDIR)/porttime/porttime.c \
-        $(PMDIR)/porttime/ptwinmm.c \
-        $(PMDIR)/pm_win/pmwin.c \
-        $(PMDIR)/pm_win/pmwinmm.c
-
-PMOBJ = portmidi.obj pmutil.obj porttime.obj ptwinmm.obj pmwin.obj pmwinmm.obj
-
-OBJC = $(SRC:.c=.obj) $(PAOBJ) $(PMOBJ)
-
-GSRC =  t_main.c t_tkcmd.c
-
-GOBJ = $(GSRC:.c=.obj)
-.PHONY: pd gui
-
-ALLCF = $(CFLAGS)  $(INCLUDE) $(INCASIO) $(INCPA) $(INCPM) /D_WINDOWS \
-    /DPA_NO_DS
-
-.c.obj:
-	cl /c $(ALLCF) /Tc$*.c
-
-pd: ..\bin\pd.exe ..\bin\pd.com
-
-gui: ..\bin\pdtcl.dll
-
-..\bin\pd.exe: s_entry.obj ..\bin\pd.lib
-	link $(LFLAGS) /OUT:..\bin\pd.exe /INCREMENTAL:NO s_entry.obj \
-	    ..\bin\pd.lib $(LIB) $(ASIOLIB)
-
-..\bin\pd.dll ..\bin\pd.lib: $(OBJC) $(OBJASIO)
-	link /DLL /OUT:..\bin\pd.dll /EXPORT:sys_main $(LFLAGS) $(OBJC) \
-	    $(OBJASIO) $(LIB) $(ASIOLIB)
-
-..\bin\pdtcl.dll: t_tkcmd.obj
-	link $(LFLAGS) /dll /export:Pdtcl_Init /out:..\bin\pdtcl.dll \
-	    t_tkcmd.obj $(GLIB)
-
-..\bin\pd.tk: u_main.tk; copy u_main.tk ..\bin\pd.tk
-
-..\bin\pdsend.exe: u_pdsend.obj
-	link $(LFLAGS) /out:..\bin\pdsend.exe /INCREMENTAL:NO u_pdsend.obj \
-	    $(LIB)
-
-..\bin\pdreceive.exe: u_pdreceive.obj
-	link $(LFLAGS) /out:..\bin\pdreceive.exe /INCREMENTAL:NO \
-	    u_pdreceive.obj $(LIB)
-
-s_entry_com.obj: s_entry.c
-	copy s_entry.c s_entry_com.c
-	cl /c -DCOMMANDVERSION s_entry_com.c 
-	del s_entry_com.c
-
-..\bin\pd.com: s_entry_com.obj ..\bin\pd.lib
-	link $(LFLAGS) /out:..\bin\pd.com /INCREMENTAL:NO s_entry_com.obj \
-	    ..\bin\pd.lib $(LIB) $(ASIOLIB)
-
-# explicit rules to compile portaudio sources:
-pa_stream.obj: $(PASRC)\common\pa_stream.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_stream.c
-pa_trace.obj: $(PASRC)\common\pa_trace.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_trace.c
-pa_skeleton.obj: $(PASRC)\common\pa_skeleton.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_skeleton.c
-pa_process.obj: $(PASRC)\common\pa_process.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_process.c
-pa_front.obj: $(PASRC)\common\pa_front.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_front.c
-pa_dither.obj: $(PASRC)\common\pa_dither.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_dither.c
-pa_cpuload.obj: $(PASRC)\common\pa_cpuload.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_cpuload.c
-pa_converters.obj: $(PASRC)\common\pa_converters.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_converters.c
-pa_allocation.obj: $(PASRC)\common\pa_allocation.c
-	cl /c $(ALLCF) $(PASRC)\common\pa_allocation.c
-
-pa_win_hostapis.obj: $(PASRC)\os\win\pa_win_hostapis.c
-	cl /c $(ALLCF) $(PASRC)\os\win\pa_win_hostapis.c
-pa_win_util.obj: $(PASRC)\os\win\pa_win_util.c
-	cl /c $(ALLCF) $(PASRC)\os\win\pa_win_util.c
-pa_win_wmme.obj: $(PASRC)\hostapi\wmme\pa_win_wmme.c
-	cl /c $(ALLCF) $(PASRC)\hostapi\wmme\pa_win_wmme.c
-pa_win_wdmks.obj: $(PADIR)\pa_win_wdmks\pa_win_wdmks.c
-	cl /c $(ALLCF) \
-	-DWINVER=0x400 -DKSAUDIO_SPEAKER_DIRECTOUT \
-	$(PADIR)\pa_win_wdmks\pa_win_wdmks.c
-pa_asio.obj: $(PASRC)\hostapi\asio\pa_asio.cpp
-	cl /c $(ALLCF) $(PASRC)\hostapi\asio\pa_asio.cpp
-
-portmidi.obj: $(PMDIR)\pm_common\portmidi.c
-	cl /c $(ALLCF) $(PMDIR)\pm_common\portmidi.c
-pmutil.obj: $(PMDIR)\pm_common\pmutil.c
-	cl /c $(ALLCF) $(PMDIR)\pm_common\pmutil.c
-pmwin.obj: $(PMDIR)\pm_win\pmwin.c
-	cl /c $(ALLCF) $(PMDIR)\pm_win\pmwin.c
-pmwinmm.obj: $(PMDIR)\pm_win\pmwinmm.c
-	cl /c $(ALLCF) $(PMDIR)\pm_win\pmwinmm.c
-porttime.obj: $(PMDIR)\porttime\porttime.c
-	cl /c $(ALLCF) $(PMDIR)\porttime\porttime.c
-ptwinmm.obj: $(PMDIR)\porttime\ptwinmm.c
-	cl /c $(ALLCF) $(PMDIR)\porttime\ptwinmm.c
-
-# the following should also clean up "bin" but it doesn't because "bin" holds
-# precious stuff from elsewhere.
-clean:
-	del *.obj
-
diff --git a/src/notes.txt b/src/notes.txt
index 0cf0ee618..6c98ca0ae 100644
--- a/src/notes.txt
+++ b/src/notes.txt
@@ -1,6 +1,10 @@
 
 ---------------- dolist --------------------
 
+doc:
+exp~, abs~ fixes
+pd~ -ninsig 0 bug fixed
+
 compile on various versions of linux
 windows:
   modal dialogs confuse watchdog
diff --git a/src/pd.ico b/src/pd.ico
new file mode 100755
index 0000000000000000000000000000000000000000..2da5c243623c9ea56b6faca91b5e687d2c4f62fb
GIT binary patch
literal 25214
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

literal 0
HcmV?d00001

diff --git a/src/pd.rc b/src/pd.rc
new file mode 100644
index 000000000..a51d94621
--- /dev/null
+++ b/src/pd.rc
@@ -0,0 +1,25 @@
+id ICON "pd.ico"
+1 VERSIONINFO
+FILEVERSION     0,43,0,0
+PRODUCTVERSION  0,43,0,0
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    BEGIN
+      VALUE "CompanyName", "puredata.info"
+      VALUE "FileDescription", "Pure Data Application"
+      VALUE "FileVersion", "0.43"
+      VALUE "InternalName", "pd.exe"
+      VALUE "LegalCopyright", "Miller Puckette, et al."
+      VALUE "OriginalFilename", "pd.exe"
+      VALUE "ProductName", "Pure Data"
+      VALUE "ProductVersion", "0.43"
+    END
+  END
+
+  BLOCK "VarFileInfo"
+  BEGIN
+    VALUE "Translation", 0x409, 1200
+  END
+END
diff --git a/src/u_main.tk b/src/pd.tk
similarity index 60%
rename from src/u_main.tk
rename to src/pd.tk
index 8834d232c..e8cb0b2a3 100644
--- a/src/u_main.tk
+++ b/src/pd.tk
@@ -14,38 +14,160 @@
 # set pd_nt (bad name) 0 for unix, 1 for microsoft, and 2 for Mac OSX.
 if { $tcl_platform(platform) == "windows" }  {
     set pd_nt 1
-    set defaultFontFamily {Bitstream Vera Sans Mono}
-    set defaultFontWeight normal
-    font create menuFont -family Tahoma -size -11
+    set ctrl_key "Control"
+    # fonts
+    set defaultFontFamily {DejaVu Sans Mono}
+    font create menuFont -family Tahoma -size 11
+    option add *Menu.font menuFont startupFile
+    option add *HelpBrowser*font menuFont startupFile
+    option add *DialogWindow*font menuFont startupFile
+    option add *PdWindow*font menuFont startupFile
+    # mouse cursors
+    set cursor_runmode_nothing "arrow"
+    set cursor_runmode_clickme "right_ptr"
+    set cursor_runmode_thicken "sb_v_double_arrow"
+    set cursor_runmode_addpoint "plus"
+    set cursor_editmode_nothing "hand2"
+    set cursor_editmode_connect "circle"
+    set cursor_editmode_disconnect "X_cursor"
+	# set file types that open/save recognize
+	set filetypes {
+		{{Pd Files}         {.pd}  }
+		{{Max Patch Files}  {.pat} }
+		{{Max Text Files}   {.mxt} }
+		{{Max Binary Files} {.mxb} }
+		{{Max Help Files}   {.help} }
+	}
+	# use CommonProgramFiles by default instead because its a lot easier to
+	# find. Microsoft seems to have carefully hidden the AppData folder from
+	# all but the most determined users.
+	#set externalsdir "$::env(AppData)/Pd"
+	set externalsdir "$::env(CommonProgramFiles)/Pd"
 } elseif { $tcl_platform(os) == "Darwin" } {  
     set pd_nt 2
+	set ctrl_key "Mod1"
+    # fonts
     set defaultFontFamily Monaco
-    set defaultFontWeight normal
+    # mouse cursors
+    set cursor_runmode_nothing "arrow"
+    set cursor_runmode_clickme "center_ptr"
+    set cursor_runmode_thicken "sb_v_double_arrow"
+    set cursor_runmode_addpoint "plus"
+    set cursor_editmode_nothing "hand2"
+    set cursor_editmode_connect "circle"
+    set cursor_editmode_disconnect "X_cursor"
+	# set file types that open/save recognize
+	set filetypes {
+		{{Pd Files}                {.pd}  }
+		{{Max Patch Files (.pat)}  {.pat} }
+		{{Max Text Files (.mxt)}   {.mxt} }
+		{{Max Binary Files (.mxb)} {.mxb} }
+		{{Max Help Files (.help)}  {.help} }
+	}
+	set externalsdir "$::env(HOME)/Library/Pd"
 } else { 
     set pd_nt 0
-    set defaultFontFamily Courier
-    set defaultFontWeight bold
+    set ctrl_key "Control"
+    # fonts
+    set defaultFontFamily {DejaVu Sans Mono}
+    # mouse cursors
+    set cursor_runmode_nothing "left_ptr"
+    set cursor_runmode_clickme "right_ptr"
+    set cursor_runmode_thicken "sb_v_double_arrow"
+    set cursor_runmode_addpoint "plus"
+    set cursor_editmode_nothing "hand2"
+    set cursor_editmode_connect "circle"
+    set cursor_editmode_disconnect "X_cursor"
+	# set file types that open/save recognize
+	set filetypes {
+		{{pd files}         {.pd}  }
+		{{max patch files}  {.pat} }
+		{{max text files}   {.mxt} }
+		{{max binary files} {.mxb} }
+		{{max help files}   {.help} }
+	}
+	set externalsdir "$::env(HOME)/pd-externals"
 }        
 
+# make sure the user folder for installing externals exists
+catch {
+	if { ! [file exists $externalsdir] && [file exists [file dirname $externalsdir]] } {
+		puts stderr "Creating folder for user-installed externals: \n\t$externalsdir"
+		file mkdir $externalsdir
+	}
+}
+
+
+# namespace for general-purpose functions
+proc pdtk_encode { listdata } {
+    set outlist {}
+    foreach this_path $listdata {
+        if {0==[string match "" $this_path]} {
+            lappend outlist [pdtk_encodedialog $this_path]
+        }
+    }
+    return $outlist
+}
+
+
+# args is a list of length 1 or 2,
+# specifying optional additional x, y offsets for the window
+proc center_window { w args } {
+    set offx 0
+    set offy 0
+
+    if { [llength $args] >= 2 } {
+        set offx [lindex $args 0]
+        set offy [lindex $args 1]
+    }
+
+    set x [expr [winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \
+        - [winfo vrootx [winfo parent $w]] + $offx]
+    set y [expr [winfo screenheight $w]/2 - [winfo reqheight $w]/2 \
+        - [winfo vrooty [winfo parent $w]] + $offy]
+    wm geom $w +$x+$y
+}
+
+
 # start Pd-extended font hacks -----------------------------
 
 # Pd-0.39.2-extended hacks to make font/box sizes the same across platform
-# puts stderr "tk scaling is [tk scaling]"
-# tk scaling 1
+puts stderr "tk scaling is [tk scaling]"
+tk scaling 1
 
+# for some reason, the fonts are bigger in Tcl/Tk 8.5 than 8.4
+if {$pd_nt != 1 && $::tcl_version eq "8.5"} {
+	set console_font_size 9
+} else { 
+	set console_font_size 12
+}
 # this font is for the Pd Window console text
-font create console_font -family $defaultFontFamily -size -12 \
-    -weight $defaultFontWeight
+font create console_font -family $defaultFontFamily -weight normal \
+	-size $console_font_size
 # this font is for text in Pd windows
-font create text_font -family {Times} -size -14 -weight normal
+font create text_font -family {Times} -size 14 -weight normal
 # for text in Properties Panels and other panes
-font create highlight_font -family $defaultFontFamily -size -14 -weight bold
+font create highlight_font -family $defaultFontFamily -size 14 -weight bold
 
 # end Pd-extended font hacks -----------------------------
 
+# begin hack to hide hidden files/folder in tk browser on unix ----------
+if {$pd_nt == 0} {
+    # load the dialog once, otherwise setting the vars will not work
+    catch {tk_getOpenFile -with-invalid-argument} 
+
+    # change the environment variables
+    namespace eval ::tk::dialog::file {
+    variable showHiddenBtn 1
+    variable showHiddenVar 0
+    }
+}
+# end hidden files/folder hack ------------------
 
 # Tearoff is set to true by default:
-set pd_tearoff 1
+set pd_tearoff 0
+# turn off tearoff menus globally
+#option add *tearOff 0
 
 # jsarlo
 set pd_array_listview_pagesize 1000
@@ -54,27 +176,42 @@ set pd_array_listview_entry(0) 0
 set pd_array_listview_page(0) 0
 # end jsarlo
 
+# color scheme
+set canvas_fill "white"
+set text_color "#000"
+set select_color "#00f"
+set dash_outline "#f00"
+set dash_fill "#f7f7f7"
+set box_outline "#ccc"
+set graph_outline "#777"
+set atom_box_fill "#eee"
+set msg_box_fill "#f8f8f6"
+set obj_box_fill "#f6f8f8"
+set signal_cord_highlight "#58a"
+set signal_cord "#808095"
+set signal_nlet $signal_cord
+set msg_cord_highlight "#474"
+set msg_cord "#565"
+set msg_nlet "white"
+set mixed_nlet "#88aaff"
+
 if {$pd_nt == 1} {
     global pd_guidir
-    global pd_tearoff
     set pd_gui2 [string range $argv0 0 [expr [string last \\ $argv0 ] - 1]]
     regsub -all \\\\ $pd_gui2 / pd_gui3
-    set pd_guidir $pd_gui3/..
+    set pd_guidir [file normalize $pd_gui3/..]
     load $pd_guidir/bin/pdtcl.dll
-    set pd_tearoff 1
 }
 
 if {$pd_nt == 2} {
-# turn on James Tittle II's fast drawing
+    # turn on James Tittle II's fast drawing
     set tk::mac::useCGDrawing 1
-# anti-alias all lines that need it
-    set tk::mac::CGAntialiasLimit 2
+    # anti-alias all lines that need it
+    set tk::mac::CGAntialiasLimit 0
     global pd_guidir
-    global pd_tearoff
     set pd_gui2 [string range $argv0 0 [expr [string last / $argv0 ] - 1]]
-    set pd_guidir $pd_gui2/..
+    set pd_guidir [file normalize $pd_gui2/..]
     load $pd_guidir/bin/libPdTcl.dylib
-    set pd_tearoff 0
     global pd_macready
     set pd_macready 0
     global pd_macdropped
@@ -87,14 +224,19 @@ if {$pd_nt == 2} {
         global pd_macready pd_macdropped
         foreach file $args {
             if {$pd_macready != 0} {
-                pd [concat pd open [pdtk_enquote [file tail $file]] \
-                    [pdtk_enquote  [file dirname $file]] \;]
-                    menu_doc_open [file dirname $file] [file tail $file]
+                . configure -cursor watch
+                .printout.text configure -cursor watch
+                menu_doc_open [file dirname $file] [file tail $file]
             } else {
                 set pd_macdropped $args
             }
         }
     }
+	# intercept kAEQuitApplication from Cmd-Q
+	proc ::tk::mac::Quit {} {
+		puts stderr "::tk::mac::Quit"
+		menu_quit
+	}
 }
 
 # hack so you can easily test-run this script in linux... define pd_guidir
@@ -112,27 +254,48 @@ set pd_deffont {courier 12 bold}
 
 set help_top_directory $pd_guidir/doc
 
-# it's unfortunate but we seem to have to turn off global bindings
-# for Text objects to get control-s and control-t to do what we want for
-# "text" dialogs below.  Also we have to get rid of tab's changing the focus.
+#==============================================================================#
+# pd-gui-rewrite-0.43 help browser backport
+
+# Pd's packages are stored in the same directory as the main script (pd-gui.tcl)
+set auto_path [linsert $auto_path 0 [file dirname [info script]]]
+# the pd-gui-rewrite-0.43 help browser is backported to Pd-extended 0.42
+package require helpbrowser
+package require msgcat
 
-bind all <Key-Tab> ""
-bind all <<PrevWindow>> ""
-bind Text <Control-t> {}
-bind Text <Control-s> {}
-# puts stderr [bind all]
+# official GNU gettext msgcat shortcut
+proc _ {s} {return [::msgcat::mc $s]}
+
+namespace eval ::pdwindow:: {
+    proc verbose {level postme} {puts stderr "$level: $postme"}
+    proc error {postme} {puts stderr $postme; pdtk_post $postme}
+    proc warn {postme} {::pdwindow::error $postme}
+}
+
+set ::dialog_menubar .mbar
+set ::modifier $ctrl_key
+set ::sys_libdir $pd_guidir
+switch $pd_nt {
+    0 {set ::pd_path [list ~/pd-externals /usr/local/lib/pd-externals]}
+    1 {set ::pd_path [list [file normalize $::env(AppData)/Pd] \
+                          [file normalize $::env(CommonProgramFiles)/Pd]]}
+    2 {set ::pd_path [list ~/Library/Pd /Library/Pd]}
+}
+#==============================================================================#
 
 ################## set up main window #########################
 # the menus are instantiated here for the main window
 # for the patch windows, they are created by pdtk_canvas_new
 menu .mbar
 
-frame .controls
-pack .controls -side top -fill x
 menu .mbar.file -tearoff $pd_tearoff
-.mbar add cascade -label "File" -menu .mbar.file
+.mbar add cascade -label File -menu .mbar.file
+menu .mbar.edit -tearoff $pd_tearoff
+.mbar add cascade -label Edit -menu .mbar.edit
+menu .mbar.put -tearoff $pd_tearoff
+.mbar add cascade -label Put -menu .mbar.put
 menu .mbar.find -tearoff $pd_tearoff
-.mbar add cascade -label "Find" -menu .mbar.find
+.mbar add cascade -label Find -menu .mbar.find
 menu .mbar.windows -postcommand [concat pdtk_fixwindowmenu] -tearoff $pd_tearoff
 menu .mbar.audio -tearoff $pd_tearoff
 if {$pd_nt != 2} {
@@ -143,7 +306,7 @@ if {$pd_nt != 2} {
 } else {
     menu .mbar.apple -tearoff 0
     .mbar add cascade -label "Apple" -menu .mbar.apple 
-# arrange menus according to Apple HIG
+    # arrange menus according to Apple HIG
     .mbar add cascade -label "Media" -menu .mbar.audio
     .mbar add cascade -label "Window" -menu .mbar.windows
     menu .mbar.help -tearoff $pd_tearoff
@@ -153,17 +316,36 @@ if {$pd_nt != 2} {
 # fix menu font size on Windows with tk scaling = 1
 if {$pd_nt == 1} {
     .mbar.file configure -font menuFont
+    .mbar.edit configure -font menuFont
     .mbar.find configure -font menuFont
     .mbar.windows configure -font menuFont
     .mbar.audio configure -font menuFont
     .mbar.help configure -font menuFont
 }
 
+proc showhide_printouttext {state} {
+    if {$state} {
+        . configure -width 587 -height 458
+        pack .printout -side bottom -fill both -expand 1
+    } else {
+        . configure -width 390 -height 90
+        pack forget .printout
+    }
+}
+
 set ctrls_audio_on 0
 set ctrls_meter_on 0
 set ctrls_inlevel 0
 set ctrls_outlevel 0
+set show_text_window 0
 
+# tmp kludge to fix small fonts on windows, irrelevant in 0.43/gui-rewrite
+if {$pd_nt == 1} {
+    frame .controls -class PdWindow
+} else {
+    frame .controls
+}
+pack .controls -side top -fill x
 frame .controls.switches
 checkbutton .controls.switches.audiobutton -text {compute audio} \
     -variable ctrls_audio_on \
@@ -173,8 +355,14 @@ checkbutton .controls.switches.meterbutton -text {peak meters} \
     -variable ctrls_meter_on \
     -command {pd [concat pd meters $ctrls_meter_on \;]}
 
+checkbutton .controls.switches.console -text "console" \
+    -variable show_console \
+    -command {showhide_printouttext $show_console}
+# the console is open by default
+.controls.switches.console select  
+
 pack .controls.switches.audiobutton .controls.switches.meterbutton \
-     -side top -anchor w
+    .controls.switches.console -side top -anchor w
 
 frame .controls.inout
 frame .controls.inout.in
@@ -182,25 +370,23 @@ label .controls.inout.in.label -text IN
 entry .controls.inout.in.level -textvariable ctrls_inlevel -width 3
 button .controls.inout.in.clip -text {CLIP} -state disabled
 pack .controls.inout.in.label .controls.inout.in.level \
-      .controls.inout.in.clip -side top -pady 2
+    .controls.inout.in.clip -side top -pady 2
 
 frame .controls.inout.out
 label .controls.inout.out.label -text OUT
 entry .controls.inout.out.level -textvariable ctrls_outlevel -width 3
 button .controls.inout.out.clip -text {CLIP} -state disabled
 pack .controls.inout.out.label .controls.inout.out.level \
-      .controls.inout.out.clip -side top -pady 2
+    .controls.inout.out.clip -side top -pady 2
 
 button .controls.dio -text "DIO\nerrors" \
     -command {pd [concat pd audiostatus \;]}
-button .controls.clear -text "clear\nprintout" \
-    -command {.printout.text delete 0.0 end}
 
 pack .controls.inout.in .controls.inout.out -side left -padx 6
 pack .controls.inout -side left -padx 14
-pack .controls.switches -side left
-pack .controls.dio -side left -padx 20
-pack .controls.clear -side right -padx 6
+pack .controls.switches -side right
+pack .controls.dio -side right -padx 20
+
 
 frame .printout
 text .printout.text -relief raised -bd 2 -font console_font \
@@ -217,28 +403,57 @@ proc pdtk_post {stuff} {
 }
 
 proc pdtk_standardkeybindings {id} {
-    global pd_nt
-    bind $id <Control-Key> {pdtk_pd_ctrlkey %W %K 0}
-    bind $id <Control-Shift-Key> {pdtk_pd_ctrlkey %W %K 1}
-    if {$pd_nt == 2} {
-        bind $id <Mod1-Key> {pdtk_canvas_ctrlkey %W %K 0}
-        bind $id <Mod1-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
-    }
+    global pd_nt ctrl_key
+    bind $id <$ctrl_key-Key> {pdtk_canvas_ctrlkey %W %K 0}
+    bind $id <$ctrl_key-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
+}
+
+proc pdtk_panelkeybindings {id panelname} {
+    global pd_nt ctrl_key
+    pdtk_standardkeybindings $id
+    bind $id <KeyPress-Escape> [format "%s_cancel %s" $panelname $id]
+    bind $id <KeyPress-Return> [format "%s_ok %s" $panelname $id]
+    bind $id <$ctrl_key-Key-w> [format "%s_cancel %s" $panelname $id]
 }
 
 pdtk_standardkeybindings .
+# hacks to add standard key bindings to the Pd window
+bind . <$ctrl_key-Key-a> {.printout.text tag add sel 1.0 end}
+bind . <$ctrl_key-Key-x> {tk_textCut .printout.text}
+bind . <$ctrl_key-Key-c> {tk_textCopy .printout.text}
+bind . <$ctrl_key-Key-v> {tk_textPaste .printout.text}
+# beep if someone presses these keys in the Pd window
+bind . <$ctrl_key-Key-w> {bell}
+bind . <$ctrl_key-Key-e> {bell}
+bind . <$ctrl_key-Key-s> {bell}
+bind . <$ctrl_key-Shift-Key-S> {bell}
+# kludge to add window control bindings to the Pd Window
+if {$pd_nt == 2} {
+	bind . <Mod1-quoteleft>  {menu_raisenextwindow}
+} else {
+	bind . <Control-Next>    {menu_raisenextwindow}
+	#bind . <Control-Prior>   {menu_raisepreviouswindow} ;# needs Tcl/Tk 8.5
+}
 
-wm title . "Pd"
-. configure -menu .mbar -width 200 -height 150
+
+wm title . "Pd-extended"
+# initial location of Pd window (+x+y)
+wm geometry . +20+70
+wm minsize . 390 90
+. configure -menu .mbar -width 587 -height 458
 
 # Intercept closing the main pd window: MP 20060413:
 wm protocol . WM_DELETE_WINDOW menu_quit
 
+
 ############### set up global variables ################################
 
 set untitled_number 1
-set untitled_directory [pwd]
-set saveas_client doggy
+if {$pd_nt == 2} {
+    set untitled_directory $::env(HOME)
+} else {
+    set untitled_directory [pwd]
+}
 set pd_opendir $untitled_directory
 set pd_savedir $untitled_directory
 set pd_undoaction no
@@ -283,21 +498,61 @@ proc pdtk_ping {} {
 ##### routine to ask user if OK and, if so, send a message on to Pd ######
 proc pdtk_check {canvas x message default} {
     global pd_nt
+	raise $canvas
     if {$pd_nt == 1} {
         set answer [tk_messageBox -message $x -type yesno -default $default \
             -icon question]
     } else {
         set answer [tk_messageBox -message $x -type yesno -default $default \
             -parent $canvas -icon question]
-    }    
+    }
     if {! [string compare $answer yes]}  {pd $message}
 }
 
+##### ask user Save? Discard? Cancel?, and if so, send a message on to Pd ######
+proc pdtk_canvas_menuclose {window reply} {
+	global pd_nt
+	raise $window
+	set filename [wm title $window]
+	set message [format {Do you want to save the changes you made in "%s"?} $filename]
+	set answer [tk_messageBox -message $message -type yesnocancel -default "yes" \
+					-parent $window -icon question]
+	switch -- $answer {
+		yes { 
+			pd [concat $window menusave \;]
+                        if {[regexp {Untitled-[0-9]+} $filename]} {
+                        # wait until pdtk_canvas_saveas finishes and writes to
+                        # this var, otherwise the close command will be sent
+                        # immediately and the file won't get saved
+                            vwait ::untitled_directory
+                        }
+			pd $reply
+		}
+		no {pd $reply}
+		cancel {}
+	}
+}
+
 set menu_windowlist {} 
 
 proc pdtk_fixwindowmenu {} {
-    global menu_windowlist
+    global menu_windowlist pd_nt
     .mbar.windows delete 0 end
+	if {$pd_nt == 2} {
+		.mbar.windows add command -label {Minimize} -command {menu_minimize .} \
+			-accelerator [accel_munge "Ctrl+m"]
+		.mbar.windows add command -label {Zoom} -command {menu_zoom .}
+	} else {
+		.mbar.windows add command -label "Next Window" -command {menu_raisenextwindow} \
+			-accelerator "Ctrl+PageDown"
+		#.mbar.windows add command -label "Previous Window" -command {menu_raisepreviouswindow} \
+		#	-accelerator "Ctrl+PageUp"
+	}
+	.mbar.windows add separator
+    .mbar.windows add command -label {parent window} -state disabled
+    .mbar.windows add command -label {Pd window} -command menu_raise_console \
+		-accelerator [accel_munge "Ctrl+r"] -state disabled
+	.mbar.windows add separator
     foreach i $menu_windowlist {
         .mbar.windows add command -label [lindex $i 0] \
             -command [concat menu_domenuwindow [lindex $i 1]]
@@ -328,7 +583,9 @@ proc accel_munge {acc} {
 proc menu_new {} {
     global untitled_number
     global untitled_directory
-    pd [concat pd filename Untitled-$untitled_number $untitled_directory \;]
+    if { ! [file isdirectory $untitled_directory]} {set untitled_directory $::env(HOME)}
+    pd [concat pd filename Untitled-$untitled_number \
+			[pdtk_enquote $untitled_directory] \;]
     pd {
         #N canvas;
         #X pop 1;
@@ -338,21 +595,49 @@ proc menu_new {} {
 
 ################## the "Open" menu command #########################
 
-proc menu_open {parent} {
-    global pd_opendir
-    set filename [tk_getOpenFile -defaultextension .pd -parent $parent\
-        -filetypes { {{pd files} {.pd}} {{max files} {.pat}}} \
-        -initialdir $pd_opendir]
-    if {$filename != ""} {open_file $filename}
+proc menu_open {} {
+    global pd_opendir filetypes
+    if { ! [file isdirectory $pd_opendir]} {set pd_opendir $::env(HOME)}
+    set files [tk_getOpenFile -defaultextension .pd \
+					  -multiple true \
+                      -filetypes $filetypes -initialdir $pd_opendir]
+    if {$files != ""} {
+		foreach filename $files {
+			open_file $filename
+		}
+	}
 }
 
 proc open_file {filename} {
-    global pd_opendir
-    set directory [string range $filename 0 [expr [string last / $filename] - 1]]
-    set pd_opendir $directory
-    set basename [string range $filename [expr [string last / $filename] + 1] end]
-    if {[string last .pd $filename] >= 0} {
+    global pd_opendir pd_guidir pd_nt
+	set directory [file dirname $filename]
+	set basename [file tail $filename]
+    if {[regexp -nocase -- "\.(pat|mxb|help)$" $basename]} {
+		puts stderr "converting $filename"
+		if {$pd_nt == 0} { 
+			# on GNU/Linux, cyclist is installed into /usr/bin usually
+			set cyclist "/usr/bin/cyclist" 
+		} else {
+			set cyclist "$pd_guidir/bin/cyclist"
+		}
+		puts stderr "$cyclist '$filename'"
+		# convert Max binary to text .pat
+		set binport [open "| \"$cyclist\" \"$filename\""]
+		set convertedtext [read $binport]
+		if { ! [catch {close $binport} err]} {
+			if {! [file writable $directory]} {	set directory "/tmp" }
+			set basename "$basename.pat"
+			set textpatfile [open "$directory/$basename" w]
+			puts $textpatfile $convertedtext
+			close $textpatfile
+			puts stderr "converted Max binary to text format: $directory/$basename"
+		}
+	}
+    if {[regexp -nocase -- "\.(pd|pat|mxt)$" $basename]} {
+        . configure -cursor watch
+        .printout.text configure -cursor watch
         pd "pd open [pdtk_enquote $basename] [pdtk_enquote $directory] ;"
+        set pd_opendir $directory
     }
 }
 
@@ -365,26 +650,68 @@ catch {
 
 ################## the "Message" menu command #########################
 proc menu_send {} {
-    toplevel .sendpanel
+    global pd_nt ctrl_key
+    destroy .sendpanel
+    toplevel .sendpanel -class DialogWindow
+    pdtk_standardkeybindings .sendpanel
     entry .sendpanel.entry -textvariable send_textvariable
     pack .sendpanel.entry -side bottom -fill both -ipadx 100
     .sendpanel.entry select from 0
     .sendpanel.entry select adjust end
+    bind .sendpanel <$ctrl_key-Key-w> {destroy .sendpanel}
+    bind .sendpanel <KeyPress-Escape> {destroy .sendpanel}
     bind .sendpanel.entry <KeyPress-Return> {
         pd [concat $send_textvariable \;]
     }
-    pdtk_standardkeybindings .sendpanel.entry
     focus .sendpanel.entry
 }
 
+
+################## menu commands for Mac OS X #########################
+
+proc menu_minimize {window} {
+	if {$window eq ""} { #Pd Window
+		wm iconify [winfo toplevel .printout]
+	} else {
+		wm iconify [winfo toplevel $window]
+	}
+}
+
+proc menu_zoom {window} {
+	wm state $window zoomed
+}
+
+proc menu_raisenextwindow {} {
+	raise [lindex [wm stackorder .] 0]
+}
+
+# lreverse came along in Tcl 8.5
+#proc menu_raisepreviouswindow {} {
+#	raise [lindex [lreverse [wm stackorder .]] 0]
+#}
+
+################## menu commands for console #########################
+
+proc menu_raise_console {} {
+	set pd_window .
+	set top_window [lindex [wm stackorder $pd_window] end]
+	if {$pd_window eq $top_window} {
+		lower $pd_window
+	} else {
+		wm deiconify $pd_window
+		raise $pd_window
+	}
+}
+
+proc menu_toggle_console {} {.controls.switches.console invoke}
+
+proc menu_clear_console {} {.printout.text delete 0.0 end}
+
 ################## the "Quit" menu command #########################
 proc menu_really_quit {} {pd {pd quit;}}
 
 proc menu_quit {} {pd {pd verifyquit;}}
 
-######### the "Pd" menu command, which puts the Pd window on top ########
-proc menu_pop_pd {} {raise .}
-
 ######### the "audio" menu command  ###############
 proc menu_audio {flag} {pd [concat pd dsp $flag \;]}
 
@@ -400,6 +727,7 @@ proc menu_opentext {filename} {
     global doc_number
     global pd_guidir
     global pd_myversion
+	global ctrl_key
     set name [format ".help%d" $doc_number]
     toplevel $name
     text $name.text -relief raised -bd 2 -font text_font \
@@ -407,6 +735,7 @@ proc menu_opentext {filename} {
     scrollbar $name.scroll -command "$name.text yview"
     pack $name.scroll -side right -fill y
     pack $name.text -side left -fill both -expand 1
+    bind $name <$ctrl_key-Key-w> [concat destroy $name]
     
     set f [open $filename]
     while {![eof $f]} {
@@ -426,216 +755,396 @@ proc menu_openhtml {filename} {
     if {$pd_nt == 0} {
         foreach candidate \
             { gnome-open xdg-open sensible-browser iceweasel firefox mozilla \
-              galeon konqueror netscape lynx } {
-                  set browser [lindex [auto_execok $candidate] 0]
-                  if {[string length $browser]} {
-                         puts stderr [format "%s %s" $browser $filename]
-                         exec -- sh -c [format "%s %s" $browser $filename] &
-                         break
-                     }
-                 }
+                  galeon konqueror netscape lynx } {
+                      set browser [lindex [auto_execok $candidate] 0]
+                      if {[string length $browser]} {
+                          exec -- sh -c [format "%s '%s'" $browser $filename] &
+                          break
+                      }
+                  }
     } elseif {$pd_nt == 2} {
-        puts stderr [format "open %s" $filename]
-            exec sh -c [format "open %s" $filename]
+        exec sh -c [format "open '%s'" $filename]
     } else {
         exec rundll32 url.dll,FileProtocolHandler \
-            [format "file://%s" $filename] &
+            [format "%s" $filename] &
     }
 }
 
-proc menu_doc_open {subdir basename} {
+proc menu_openpdpedia {} {
+	set top_window [lindex [wm stackorder .] end]
+	set window_title [wm title $top_window]
+	set helpfile [regsub -- {(.*)-help.*} $window_title {\1}]
+	if {$helpfile eq $window_title} {
+		menu_openhtml "http://wiki.puredata.info/"
+	} else {
+		menu_openhtml "http://wiki.puredata.info/en/$helpfile"
+	}
+}
+
+proc menu_doc_open {dir basename} {
     global pd_guidir
- 
-    set dirname $pd_guidir/$subdir
+    
+    if {[file pathtype $dir] eq "relative"} {
+        set dirname "$pd_guidir/$dir"
+    } else {
+        set dirname $dir
+    }
 
-    if {[regexp ".*\.(txt|c)$" $basename]} {
+    if {[file isdirectory [file join $dirname $basename]]} {
+        menu_openhtml $dirname/$basename
+    } elseif {[regexp -nocase -- ".*\.(txt|c)$" $basename]} {
         menu_opentext $dirname/$basename
-    } elseif {[regexp ".*\.html?$" $basename]} {
-                  menu_openhtml $dirname/$basename
+    } elseif {[regexp -nocase -- ".*\.(htm|html|pdf)$" $basename]} {
+        menu_openhtml $dirname/$basename
     } else {
+        set fullpath [file normalize [file join $dirname $basename]]
+        set dirname [file dirname $fullpath]
+        set basename [file tail $fullpath]
         pd [concat pd open [pdtk_enquote $basename] \
                 [pdtk_enquote $dirname] \;]
     }
 }
 
-
-################## help browser and support functions #########################
-proc menu_doc_browser {dir} {
-        global .mbar
-        if {![file isdirectory $dir]} {
-                puts stderr "menu_doc_browser non-directory $dir\n"
-        }
-        if { [winfo exists .help_browser.frame] } {
-                raise .help_browser
-        } else {
-                toplevel .help_browser -menu .mbar
-                wm title .help_browser "Pd Documentation Browser"
-                frame .help_browser.frame
-                pack .help_browser.frame -side top -fill both
-                doc_make_listbox .help_browser.frame $dir 0
-         }
-    }
-
-proc doc_make_listbox {base dir count} {
-        # check for [file readable]?
-        #if { [info tclversion] >= 8.5 } {
-                # requires Tcl 8.5 but probably deals with special chars better
-#               destroy {expand}[lrange [winfo children $base] [expr {2 * $count}] end]
-        #} else {
-                if { [catch { eval destroy [lrange [winfo children $base] \
-                                                                                [expr { 2 * $count }] end] } \
-                                  errorMessage] } {
-                        puts stderr "doc_make_listbox: error listing $dir\n"
-                }
-        #}
-        # exportselection 0 looks good, but selection gets easily out-of-sync
-        set current_listbox [listbox "[set b "$base.listbox$count"]-list" -yscrollcommand \
-                                                         [list "$b-scroll" set] -height 20 -exportselection 0]
-        pack $current_listbox [scrollbar "$b-scroll" -command [list $current_listbox yview]] \
-                -side left -expand 1 -fill y -anchor w
-        foreach item [concat [lsort -dictionary [glob -directory $dir -nocomplain -types {d} -- *]] \
-                                          [lsort -dictionary [glob -directory $dir -nocomplain -types {f} -- *]]]  {
-                $current_listbox insert end "[file tail $item][expr {[file isdirectory $item] ? {/} : {}}]"
-        }
-        bind $current_listbox <Button-1> [list doc_navigate $dir $count %W %x %y]
-        bind $current_listbox <Double-Button-1> [list doc_double_button $dir $count %W %x %y]
-}
-
-proc doc_navigate {dir count width x y} {
-        if {[set newdir [$width get [$width index "@$x,$y"]]] eq {}} {
-                return
-        }
-        set dir_to_open [file join $dir $newdir]
-        if {[file isdirectory $dir_to_open]} {
-                doc_make_listbox [winfo parent $width] $dir_to_open [incr count]
-        }
-}
-
-proc doc_double_button {dir count width x y} {
-        global pd_guidir
-        if {[set newdir [$width get [$width index "@$x,$y"]]] eq {}} {
-                return
-        }
-        set dir_to_open [file join $dir $newdir]
-        if {[file isdirectory $dir_to_open]} {
-                 doc_navigate $dir $count $width $x $y
-        } else {
-                regsub -- $pd_guidir [file dirname $dir_to_open] "" subdir
-                set file [file tail $dir_to_open]
-                if { [catch {menu_doc_open $subdir $file} fid] } {
-                        puts stderr "Could not open $pd_guidir/$subdir/$file\n"
-                }
-                return; 
-        }
-}
-
 ############# routine to add media, help, and apple menu items ###############
 
 proc menu_addstd {mbar} {
     global pd_apilist pd_midiapilist pd_nt pd_tearoff
-#          the "Audio" menu
+    #          the "Audio" menu
     $mbar.audio add command -label {audio ON} -accelerator [accel_munge "Ctrl+/"] \
         -command {menu_audio 1} 
     $mbar.audio add command -label {audio OFF} -accelerator [accel_munge "Ctrl+."] \
         -command {menu_audio 0} 
+    $mbar.audio add separator
     for {set x 0} {$x<[llength $pd_apilist]} {incr x} {
         $mbar.audio add radiobutton -label [lindex [lindex $pd_apilist $x] 0] \
             -command {menu_audio 0} -variable pd_whichapi \
-                -value [lindex [lindex $pd_apilist $x] 1]\
-                -command {pd [concat pd audio-setapi $pd_whichapi \;]}
+            -value [lindex [lindex $pd_apilist $x] 1]\
+            -command {pd [concat pd audio-setapi $pd_whichapi \;]}
     }
     for {set x 0} {$x<[llength $pd_midiapilist]} {incr x} {
         $mbar.audio add radiobutton -label [lindex [lindex $pd_midiapilist $x] 0] \
             -command {menu_midi 0} -variable pd_whichmidiapi \
-                -value [lindex [lindex $pd_midiapilist $x] 1]\
-                -command {pd [concat pd midi-setapi $pd_whichmidiapi \;]}
-    }
-         if {$pd_nt != 2} {
-    $mbar.audio add command -label {Audio settings...} \
-        -command {pd pd audio-properties \;}
-    $mbar.audio add command -label {MIDI settings...} \
-        -command {pd pd midi-properties \;}
-         }
-         
+            -value [lindex [lindex $pd_midiapilist $x] 1]\
+            -command {pd [concat pd midi-setapi $pd_whichmidiapi \;]}
+    }
+    if {$pd_nt != 2} {
+        $mbar.audio add separator
+        $mbar.audio add command -label {Audio settings...} \
+            -command {pd pd audio-properties \;}
+        $mbar.audio add command -label {MIDI settings...} \
+            -command {pd pd midi-properties \;}
+    }
+    $mbar.audio add separator
     $mbar.audio add command -label {Test Audio and MIDI} \
         -command {menu_doc_open doc/7.stuff/tools testtone.pd} 
     $mbar.audio add command -label {Load Meter} \
         -command {menu_doc_open doc/7.stuff/tools load-meter.pd} 
 
-#       the MacOS X app menu
-
-# The menu on the main menubar named $whatever.apple while be treated
-# as a special menu on MacOS X.  Tcl/Tk assigns the $whatever.apple menu
-# to the app-specific menu in MacOS X that is named after the app,
-# so in our case, the Pd menu.  <hans@at.or.at>
-# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
-         if {$pd_nt == 2} {
-                  $mbar.apple add command -label "About Pd..." -command \
-                                {menu_doc_open doc/1.manual 1.introduction.txt} 
-                  menu $mbar.apple.preferences -tearoff 0
-                  $mbar.apple add cascade -label "Preferences" -menu $mbar.apple.preferences
-                  $mbar.apple.preferences add command -label "Path..." \
-                                -command {pd pd start-path-dialog \;}
-                  $mbar.apple.preferences add command -label "Startup..." \
-                                -command {pd pd start-startup-dialog \;}
-                  $mbar.apple.preferences add command -label "Audio Settings..." \
-                                -command {pd pd audio-properties \;}
-                  $mbar.apple.preferences add command -label "MIDI settings..." \
-                                -command {pd pd midi-properties \;}
-         }
-
-
-        # the "Help" menu
+    #       the MacOS X app menu
+
+    # The menu on the main menubar named $whatever.apple while be treated
+    # as a special menu on MacOS X.  Tcl/Tk assigns the $whatever.apple menu
+    # to the app-specific menu in MacOS X that is named after the app,
+    # so in our case, the Pd menu.  <hans@at.or.at>
+    # See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
+    if {$pd_nt == 2} {
+        $mbar.apple add command -label "About Pd..." -command \
+            {menu_doc_open doc/5.reference about.pd} 
+        menu $mbar.apple.preferences -tearoff 0
+        $mbar.apple add cascade -label "Preferences" -menu $mbar.apple.preferences
+        $mbar.apple.preferences add command -label "Path..." \
+            -command {pd pd start-path-dialog \;}
+        $mbar.apple.preferences add command -label "Startup..." \
+            -command {pd pd start-startup-dialog \;}
+        $mbar.apple.preferences add command -label "Audio Settings..." \
+            -command {pd pd audio-properties \;}
+        $mbar.apple.preferences add command -label "MIDI settings..." \
+            -command {pd pd midi-properties \;}
+    }
+
+
+    # the "Help" menu
     if {$pd_nt != 2} {
         $mbar.help add command -label {About Pd} \
-            -command {menu_doc_open doc/1.manual 1.introduction.txt} 
+            -command {menu_doc_open doc/5.reference about.pd}
     }
     $mbar.help add command -label {Html ...} \
         -command {menu_doc_open doc/1.manual index.htm} 
     $mbar.help add command -label {Browser ...} \
-        -command {menu_doc_browser $help_top_directory} 
+        -accelerator [accel_munge "Ctrl+b"] \
+        -command {::helpbrowser::open_helpbrowser}
+    $mbar.help add separator
+    $mbar.help add command -label {puredata.info} \
+        -command {menu_openhtml http://puredata.info} 
+    $mbar.help add command -label {Pdpedia} \
+        -command {menu_openpdpedia} 
+    $mbar.help add command -label {FAQ} \
+        -command {menu_openhtml http://puredata.info/docs/faq} 
+    $mbar.help add separator
+    $mbar.help add command -label {mailing lists} \
+        -command {menu_openhtml http://puredata.info/community/lists} 
+    $mbar.help add command -label {forums} \
+        -command {menu_openhtml http://puredata.hurleur.com/} 
+    $mbar.help add command -label {IRC chat} \
+        -command {menu_openhtml irc://irc.freenode.net/dataflow} 
+    $mbar.help add separator
+	$mbar.help add command -label {report bug} -command \
+		{menu_openhtml {http://sourceforge.net/tracker/?func=add&group_id=55736&atid=478070}} 
 }
 
 #################### the "File" menu for the Pd window ##############
 
 .mbar.file add command -label New -command {menu_new} \
     -accelerator [accel_munge "Ctrl+n"]
-.mbar.file add command -label Open -command {menu_open .} \
+.mbar.file add command -label Open -command {menu_open} \
     -accelerator [accel_munge "Ctrl+o"]
 .mbar.file add  separator
-.mbar.file add command -label Message -command {menu_send} \
-    -accelerator [accel_munge "Ctrl+m"]
-# On MacOS X, these are in the standard HIG locations
-# i.e. the Preferences menu under "Pd"
+.mbar.file add command -label Close -accelerator [accel_munge "Ctrl+w"] \
+	-state disabled
+.mbar.file add command -label Save -accelerator [accel_munge "Ctrl+s"] \
+	-state disabled
+.mbar.file add command -label "Save as..." -accelerator [accel_munge "Ctrl+S"] \
+	-state disabled
+.mbar.file add  separator
 if {$pd_nt != 2} {
-.mbar.file add command -label Path... \
-    -command {pd pd start-path-dialog \;}
-.mbar.file add command -label Startup... \
-    -command {pd pd start-startup-dialog \;}
+	.mbar.file add command -label "Message..." -command {menu_send} \
+		-accelerator [accel_munge "Ctrl+m"]
+	# On MacOS X, follow the standard Human Interface Guidelines
+	# i.e. the Preferences menu under "Pd"
+	.mbar.file add  separator
+    .mbar.file add command -label Path... \
+        -command {pd pd start-path-dialog \;}
+    .mbar.file add command -label Startup... \
+        -command {pd pd start-startup-dialog \;}
+} else { # Mac OS X
+	# Cmd-m is minimize window on Mac OS X, so remove binding
+	.mbar.file add command -label "Message..." -command {menu_send}
+	.mbar.file add  separator
+	.mbar.file add command -label "Make app from patch..." -state disabled
+	.mbar.file add command -label "Make app from folder..." -state disabled
 }
 .mbar.file add  separator
+.mbar.file add command -label "Print..." -accelerator [accel_munge "Ctrl+p"] \
+	-state disabled
+if {$pd_nt != 2} {
+# Mac OS X doesn't put Quit on the File menu
+.mbar.file add  separator
 .mbar.file add command -label Quit -command {menu_quit} \
     -accelerator [accel_munge "Ctrl+q"]
+}
+
+#################### the "Edit" menu for the Pd window ##############
+# this is mostly a placeholder
+.mbar.edit add command -label Undo -accelerator [accel_munge "Ctrl+z"] \
+    -state disabled
+.mbar.edit add command -label Redo -accelerator [accel_munge "Ctrl+Z"] \
+    -state disabled
+.mbar.edit add separator
+# this should apply to .printout.text
+.mbar.edit add command -label Cut  -accelerator [accel_munge "Ctrl+x"] \
+    -command {tk_textCut .printout.text}
+# this should apply to .printout.text
+.mbar.edit add command -label Copy -accelerator [accel_munge "Ctrl+c"] \
+    -command {tk_textCopy .printout.text}
+.mbar.edit add command -label Paste -accelerator [accel_munge "Ctrl+v"] \
+    -command {tk_textPaste .printout.text}
+.mbar.edit add command -label Duplicate -accelerator [accel_munge "Ctrl+d"] \
+    -state disabled
+# this should apply to .printout.text
+.mbar.edit add command -label {Select all} -accelerator [accel_munge "Ctrl+a"]\
+    -command {.printout.text tag add sel 1.0 end}
+.mbar.edit add command -label {Reselect} \
+        -accelerator "Ctrl+Enter" -state disabled
+.mbar.edit add separator
+if {$pd_nt == 2} { # no key command for Mac OS X
+	.mbar.edit add command -label {Text Editor} -state disabled
+} else {
+	.mbar.edit add command -label {Text Editor} -accelerator "Ctrl+t" \
+	-state disabled
+}
+.mbar.edit add command -label Font -state disabled
+.mbar.edit add command -label {Tidy Up} -state disabled
+.mbar.edit add command -label "Toggle console" \
+	-accelerator [accel_munge "Shift+Ctrl+r"] -command menu_toggle_console
+.mbar.edit add command -label "Clear console" \
+    -accelerator [accel_munge "Shift+Ctrl+l"] -command menu_clear_console
+.mbar.edit add separator
+# this should apply to .printout.text
+.mbar.edit add command -label {Find...} -accelerator [accel_munge "Ctrl+f"] \
+    -state disabled
+# this should apply to .printout.text
+.mbar.edit add command -label {Find Again} -accelerator [accel_munge "Ctrl+g"] \
+    -state disabled
+.mbar.edit add command -label {Find last error}
+.mbar.edit add separator
+.mbar.edit add command -label {Edit mode} -accelerator [accel_munge "Ctrl+e"] \
+    -state disabled
 
 #################### the "Find" menu for the Pd window ##############
+
+.mbar.find add command -label Find -accelerator [accel_munge "Ctrl+f"] \
+    -state disabled
+.mbar.find add command -label {Find Again} -accelerator [accel_munge "Ctrl+g"] \
+    -state disabled
 .mbar.find add command -label {Find last error} -command {menu_finderror} 
 
+
+#######  functions for embedding a patch into a standalone Mac OS X app #######
+
+proc makeapp_promptreplace {appdir} {
+	if {[file exists $appdir]} {
+		set answer [tk_messageBox -message [concat overwrite $appdir "?"] \
+						-type yesno -icon question]
+		return [string equal $answer "yes"]
+	} else {
+		return 1
+	}
+}
+
+proc makeapp_createapp {appdir} {
+	global pd_guidir
+	set pdapp_contents [file normalize "$pd_guidir/.."]
+	pdtk_post "Copying:$pdapp_contents\n  -->\t$appdir/\n"
+	catch {
+		exec -- chmod -R u+w $appdir
+		file delete -force -- $appdir
+	}
+	file mkdir $appdir
+	file copy -- $pdapp_contents "$appdir/"
+	file rename -force -- $appdir/Contents/org.puredata.pdextended.default.plist \
+		$appdir/Contents/org.puredata.pdextended.plist
+}
+
+proc makeapp_makeinfoplist {appdir} {
+	regexp {.*/(.+)\.app} $appdir -> appname
+	pdtk_post "Setting up $appdir/Contents/Info.plist\n"
+	set info_plist [open "$appdir/Contents/Info.plist" r]
+	set info_plist_contents [read $info_plist]
+	regsub -- {CFBundleName</key>.*?<string>Pd-.*extended.*<} $info_plist_contents \
+		"CFBundleName</key>\n\t<string>$appname<" info_plist_contents
+	set cfbundleversion [clock format [clock seconds] -format %Y.%m.%d]
+	regsub -- {CFBundleVersion</key>.*?<string>.*?<} $info_plist_contents \
+		"CFBundleVersion</key>\n\t<string>$cfbundleversion<" info_plist_contents
+	regsub -- {org.puredata.pd.wish} $info_plist_contents \
+		"org.puredata.pd.app.$appname" info_plist_contents
+	regsub -- {<key>CFBundleDocumentTypes.+?</array>.+?</array>} \
+		$info_plist_contents {} info_plist_contents
+	regsub -- {<key>UTExportedTypeDeclarations.+</array>} $info_plist_contents \
+		{} info_plist_contents
+	close $info_plist
+	set info_plist [open "$appdir/Contents/Info.plist" w]
+	puts $info_plist $info_plist_contents
+	close $info_plist		
+}
+
+proc makeapp_copycurrentpatch {appdir patch patchname isdir} {
+	set extradir "$appdir/Contents/Resources/extra"
+	file attributes $extradir -permissions u+w
+	file mkdir "$extradir/app-auto-load"
+	if {$isdir} {
+		pdtk_post [format "Copying:%s\n  -->\t$extradir/\n" \
+					   [file dirname $patch]]
+		set patchdir [file normalize [file dirname $patch]]
+		foreach file [glob -directory "$patchdir" -- * .*] {
+			if {"$file"!="$appdir" && "$file"!="$patchdir/." && "$file"!="$patchdir/.."} {
+				file copy -- $file "$extradir/app-auto-load/"
+			}
+		}
+	} else {
+		set embedded_patch "$extradir/app-auto-load/$patchname.pd"
+		pdtk_post "Copying:$patch\n  -->\t$embedded_patch\n"
+		file copy -- $patch $embedded_patch
+	}
+}
+
+proc makeapp_getpatchname {top_window} {
+	set top_window_path [wm attributes $top_window -titlepath]
+	if {$top_window_path != ""} {
+		return $top_window_path
+	} else {
+		return ""
+	}
+}
+
+proc makeapp_embedprefs {appdir patch_to_open} {
+	pdtk_post "Setting up $appdir/Contents/org.puredata.pdextended.plist\n"
+	set plist [open "$appdir/Contents/org.puredata.pdextended.plist" r]
+	set new_plist [read $plist]
+	close $plist
+	regsub -- {flags</key>.*?<string>.*?<} $new_plist \
+		"flags</key>\n\t<string>-open hcs/embed.pd -open $patch_to_open<" new_plist
+	set plist [open "$appdir/Contents/org.puredata.pdextended.plist" w]
+	puts $plist $new_plist
+	close $plist		
+}
+
+proc makeapp_busypanel {appdir} {
+	toplevel .makeapp
+	wm title .makeapp "Making App"
+	wm attributes .makeapp -topmost 1
+	wm resizable .makeapp 0 0
+	label .makeapp.label -text "Making App... in $appdir..."
+	pack .makeapp.label -side top -fill both -ipadx 200 -ipady 100
+}
+
 ###########  functions for menu functions on document windows ########
 
+proc menu_makeapp {isdir} {
+	set top_window [lindex [wm stackorder .] end]
+	menu_windowparent $top_window
+	set patch [makeapp_getpatchname $top_window]
+	if {$patch == ""} {
+		pdtk_post \
+			"No patch found! Select an open parent patch with the mouse, then try again.\n"
+		return
+	}
+	# TODO set -parent to patch being turned into app
+	pdtk_post "Select name for app to build...\n"
+	set appdir [tk_getSaveFile -filetypes { {{Mac OS X Application} {.app}} } \
+				   -parent $top_window -defaultextension .app \
+				   -title "Save application to..."]
+	if {$appdir != ""} {
+		if {![string match "*.app" $appdir]} {
+			set appdir "$appdir.app"
+#			pdtk_post "Adding .app extension: $appdir\n"
+		}
+		if {[makeapp_promptreplace $appdir]} {
+			makeapp_busypanel $appdir
+			makeapp_createapp $appdir
+			.makeapp.label configure -text "Configuring Info.plist..."
+			makeapp_makeinfoplist $appdir
+			.makeapp.label configure -text "Setting patch name..."
+			regexp {.*/(.*?)\.pd} $patch -> patchname
+			.makeapp.label configure -text "Copying current patch..."
+			makeapp_copycurrentpatch $appdir $patch $patchname $isdir
+			.makeapp.label configure -text "Setting embedded preferences..."
+			makeapp_embedprefs $appdir "app-auto-load/$patchname.pd"
+			pdtk_post "$appdir is complete!\n"
+			destroy .makeapp
+		}
+	}
+}
+
 proc menu_save {name} {
+    if {$name eq ""} {bell;return}
+    if {[winfo toplevel $name] eq "."} {bell;return}
     pdtk_canvas_checkgeometry $name
     pd [concat $name menusave \;]
 }
 
 proc menu_saveas {name} {
+    if {$name eq ""} {bell;return}
+    if {[winfo toplevel $name] eq "."} {bell;return}
     pdtk_canvas_checkgeometry $name
     pd [concat $name menusaveas \;]
 }
 
 proc menu_print {name} {
+    if {$name eq ""} {bell;return}
+    if {[winfo toplevel $name] eq "."} {bell;return}
     set filename [tk_getSaveFile -initialfile pd.ps \
-       -defaultextension .ps \
-       -filetypes { {{postscript} {.ps}} }]
+                      -defaultextension .ps \
+                      -filetypes { {{postscript} {.ps}} }]
 
     if {$filename != ""} {
         $name.c postscript -file $filename 
@@ -779,7 +1288,7 @@ proc menu_fixeditmenu {name} {
     global pd_undoaction
     global pd_redoaction
     global pd_undocanvas
-#    puts stderr [concat menu_fixeditmenu $name $pd_undocanvas $pd_undoaction]
+    #    puts stderr [concat menu_fixeditmenu $name $pd_undocanvas $pd_undoaction]
     if {$name == $pd_undocanvas && $pd_undoaction != "no"} {
         $name.m.edit entryconfigure "Undo*" -state normal \
             -label [concat "Undo " $pd_undoaction]
@@ -799,12 +1308,12 @@ proc pdtk_undomenu {name undoaction redoaction} {
     global pd_undoaction
     global pd_redoaction
     global pd_undocanvas
-#    puts stderr [concat pdtk_undomenu $name $undoaction $redoaction]
+    #    puts stderr [concat pdtk_undomenu $name $undoaction $redoaction]
     set pd_undocanvas $name
     set pd_undoaction $undoaction
     set pd_redoaction $redoaction
     if {$name != "nobody"} {
-#    unpleasant way of avoiding a more unpleasant bug situation --atl 2002.11.25
+        #    unpleasant way of avoiding a more unpleasant bug situation --atl 2002.11.25
         menu_fixeditmenu $name
     }
 }
@@ -826,14 +1335,17 @@ proc menu_domenuwindow {i} {
 }
 
 proc menu_fixwindowmenu {name} {
-    global menu_windowlist
-    global pd_tearoff
+    global menu_windowlist pd_tearoff pd_nt
     $name.m.windows add command
-    if $pd_tearoff {
-        $name.m.windows delete 4 end
-    } else {
-        $name.m.windows delete 3 end
-    }
+	if {$pd_nt == 2} {
+		$name.m.windows delete 6 end
+	} else {
+		if $pd_tearoff {
+			$name.m.windows delete 4 end
+		} else {
+			$name.m.windows delete 3 end
+		}
+	}
     foreach i $menu_windowlist {
         $name.m.windows add command -label [lindex $i 0] \
             -command [concat menu_domenuwindow [lindex $i 1]]
@@ -847,7 +1359,7 @@ set find_string ""
 set find_count 1
 set find_wholeword 1
 
-proc find_apply {name} {
+proc find_ok {name} {
     global find_string find_canvas find_wholeword
     pd [concat $find_canvas find [pdtk_encodedialog $find_string] \
         $find_wholeword \;]
@@ -866,54 +1378,37 @@ proc menu_findobject {canvas} {
 
     set find_canvas $canvas
     
-    toplevel $name
+    toplevel $name -class DialogWindow
+	wm geometry $name =400x125+150+100
+	wm resizable $name 0 0
+	catch {wm attributes $name -topmost 1}
 
-    label $name.label -text {find...}
-    pack $name.label -side top
+    pdtk_panelkeybindings $name "find"
 
-    entry $name.entry -textvariable find_string
-    pack $name.entry -side top
+	entry $name.entry -width 54 -font 18 -textvariable find_string \
+		-highlightthickness 2 -highlightcolor blue -relief sunken
+    focus $name.entry
+    pack $name.entry -side top -padx 10 -pady 10
     checkbutton $name.wholeword -variable find_wholeword \
         -text {whole word} -anchor e
-    pack $name.wholeword -side bottom
+    pack $name.wholeword -side left -padx 30
 
-    frame $name.buttonframe
-    pack $name.buttonframe -side bottom -fill x -pady 2m
-    button $name.buttonframe.cancel -text {Cancel}\
-        -command "find_cancel $name"
-    button $name.buttonframe.ok -text {OK}\
-        -command "find_apply $name"
-    pack $name.buttonframe.cancel -side left -expand 1
-    pack $name.buttonframe.ok -side left -expand 1
-    
-    $name.entry select from 0
-    $name.entry select adjust end
-    bind $name.entry <KeyPress-Return> [ concat find_apply $name]
-    pdtk_standardkeybindings $name.entry
-    focus $name.entry
+    button $name.close -text "Close" -command "find_cancel $name" -width 9
+    button $name.button -text "Find" -command "find_ok $name" -width 9 -default active
+	pack $name.button $name.close -side right -padx 10 -pady 15
 }
 
 
 ############# pdtk_canvas_new -- create a new canvas ###############
 proc pdtk_canvas_new {name width height geometry editable} {
-    global pd_opendir
     global pd_tearoff
     global pd_nt
     global tcl_version
+	global canvas_fill
 
     toplevel $name -menu $name.m
-        # if we're a mac, refuse to make window so big you can't get to
-        # the resizing control
-    if {$pd_nt == 2} {
-        if {$width > [winfo screenwidth $name] - 80} {
-            set width [expr [winfo screenwidth $name] - 80]
-        }
-        if {$height > [winfo screenheight $name] - 80} {
-            set height [expr [winfo screenheight $name] - 80]
-        }
-    }
-    
-# slide offscreen windows into view
+    wm group $name .
+    # slide offscreen windows into view
     if {$tcl_version >= 8.4} {
         set geometry [split $geometry +]
         set i 1
@@ -926,10 +1421,14 @@ proc pdtk_canvas_new {name width height geometry editable} {
             }
             incr i
         }
+        if { $pd_nt == 2 && [lindex $geometry 2] < 22 } {
+            lset geometry 2 22
+        }
         set geometry [join $geometry +] 
-   }
-   wm geometry $name $geometry
-   canvas $name.c -width $width -height $height -background white \
+    }
+    wm geometry $name $geometry
+    canvas $name.c -width $width -height $height -background $canvas_fill \
+		-highlightthickness 0 \
         -yscrollcommand "$name.scrollvert set" \
         -xscrollcommand "$name.scrollhort set" \
         -scrollregion [concat 0 0 $width $height] 
@@ -938,16 +1437,16 @@ proc pdtk_canvas_new {name width height geometry editable} {
     scrollbar $name.scrollhort -command "$name.c xview" \
         -orient horizontal
 
-    pack $name.scrollhort -side bottom -fill x
-    pack $name.scrollvert -side right -fill y
+#    pack $name.scrollhort -side bottom -fill x
+#    pack $name.scrollvert -side right -fill y
     pack $name.c -side left -expand 1 -fill both
-    wm minsize $name 1 1
+    wm minsize $name 50 20
     wm geometry $name $geometry
-# the file menu
-
-# The menus are instantiated here for the patch windows.
-# For the main window, they are created on load, at the 
-# top of this file.
+    # the file menu
+	
+    # The menus are instantiated here for the patch windows.
+    # For the main window, they are created on load, at the 
+    # top of this file.
     menu $name.m
     menu $name.m.file -tearoff $pd_tearoff
     $name.m add cascade -label File -menu $name.m.file
@@ -955,23 +1454,9 @@ proc pdtk_canvas_new {name width height geometry editable} {
     $name.m.file add command -label New -command {menu_new} \
         -accelerator [accel_munge "Ctrl+n"]
 
-    $name.m.file add command -label Open -command [concat menu_open $name] \
+    $name.m.file add command -label Open -command {menu_open} \
         -accelerator [accel_munge "Ctrl+o"]
 
-    $name.m.file add  separator
-    $name.m.file add command -label Message -command {menu_send} \
-        -accelerator [accel_munge "Ctrl+m"]
-
-         # arrange menus according to Apple HIG
-         # these are now part of Preferences...
-         if {$pd_nt != 2 } {
-    $name.m.file add command -label Path... \
-        -command {pd pd start-path-dialog \;} 
-
-    $name.m.file add command -label Startup... \
-        -command {pd pd start-startup-dialog \;} 
-         }
-
     $name.m.file add  separator
     $name.m.file add command -label Close \
         -command [concat menu_close $name] \
@@ -983,16 +1468,37 @@ proc pdtk_canvas_new {name width height geometry editable} {
     $name.m.file add command -label "Save as..." \
         -command [concat menu_saveas $name] \
         -accelerator [accel_munge "Ctrl+S"]
+    $name.m.file add  separator
 
-    $name.m.file add command -label Print -command [concat menu_print $name] \
-        -accelerator [accel_munge "Ctrl+p"]
-
+    # arrange menus according to Apple HIG
+    if {$pd_nt != 2 } {
+		$name.m.file add command -label "Message..." -command {menu_send} \
+			-accelerator [accel_munge "Ctrl+m"]
+		# these are now part of Preferences... on Mac OS X
+        $name.m.file add command -label Path... \
+            -command {pd pd start-path-dialog \;} 
+        $name.m.file add command -label Startup... \
+            -command {pd pd start-startup-dialog \;} 
+    } else { 
+		# Cmd-m is minimize window on Mac OS X		
+		$name.m.file add command -label "Message..." -command {menu_send}
+		$name.m.file add  separator
+		$name.m.file add command -label "Make app from patch..." \
+			-command {menu_makeapp 0}
+		$name.m.file add command -label "Make app from folder..." \
+			-command {menu_makeapp 1}
+	}
     $name.m.file add separator
-
-    $name.m.file add command -label Quit -command {menu_quit} \
-        -accelerator [accel_munge "Ctrl+q"]
-
-# the edit menu
+    $name.m.file add command -label "Print..." -command [concat menu_print $name] \
+        -accelerator [accel_munge "Ctrl+p"]
+	if {$pd_nt != 2} {
+		# Mac OS X doesn't put Quit on the File menu
+		$name.m.file add separator
+		$name.m.file add command -label Quit -command {menu_quit} \
+			-accelerator [accel_munge "Ctrl+q"]
+	}
+
+    # the edit menu
     menu $name.m.edit -postcommand [concat menu_fixeditmenu $name] -tearoff $pd_tearoff
     $name.m add cascade -label Edit -menu $name.m.edit
     
@@ -1027,10 +1533,14 @@ proc pdtk_canvas_new {name width height geometry editable} {
         -accelerator "Ctrl+Enter"
 
     $name.m.edit add separator
-
-    $name.m.edit add command -label {Text Editor} \
-        -command [concat menu_texteditor $name] \
-        -accelerator [accel_munge "Ctrl+t"]
+	if {$pd_nt == 2} { # no key command on Mac OS X, conflicts with standard
+		$name.m.edit add command -label {Text Editor} \
+			-command [concat menu_texteditor $name]
+	} else {
+		$name.m.edit add command -label {Text Editor} \
+			-accelerator [accel_munge "Ctrl+t"] \
+			-command [concat menu_texteditor $name]
+	}
 
     $name.m.edit add command -label Font \
         -command [concat menu_font $name] 
@@ -1038,23 +1548,31 @@ proc pdtk_canvas_new {name width height geometry editable} {
     $name.m.edit add command -label {Tidy Up} \
         -command [concat menu_tidyup $name]
 
+    $name.m.edit add command -label "Toggle console" \
+        -accelerator [accel_munge "Shift+Ctrl+r"] \
+        -command [concat .controls.switches.console invoke]
+
+    $name.m.edit add command -label "Clear console" \
+        -accelerator [accel_munge "Shift+Ctrl+l"] \
+        -command [concat menu_clear_console]
+
     $name.m.edit add separator
     
-# Apple, Microsoft, and others put find functions in the Edit menu.
+    # Apple, Microsoft, and others put find functions in the Edit menu.
     $name.m.edit add command -label {Find...} \
-                  -accelerator [accel_munge "Ctrl+f"] \
-                  -command [concat menu_findobject $name] 
+        -accelerator [accel_munge "Ctrl+f"] \
+        -command [concat menu_findobject $name] 
     $name.m.edit add command -label {Find Again} \
-                  -accelerator [accel_munge "Ctrl+g"] \
-                  -command [concat menu_findagain $name] 
+        -accelerator [accel_munge "Ctrl+g"] \
+        -command [concat menu_findagain $name] 
     $name.m.edit add command -label {Find last error} \
-                  -command [concat menu_finderror] 
+        -command [concat menu_finderror] 
 
     $name.m.edit add separator
 
-############iemlib##################
-# instead of "red = #BC3C60" we take "grey85", so there is no difference,
-# if widget is selected or not.
+    ############iemlib##################
+    # instead of "red = #BC3C60" we take "grey85", so there is no difference,
+    # if widget is selected or not.
 
     $name.m.edit add checkbutton -label "Edit mode" \
         -indicatoron true -selectcolor grey85 \
@@ -1062,13 +1580,14 @@ proc pdtk_canvas_new {name width height geometry editable} {
         -accelerator [accel_munge "Ctrl+e"]     
 
     if { $editable == 0 } {
-            $name.m.edit entryconfigure "Edit mode" -indicatoron false }
+        $name.m.edit entryconfigure "Edit mode" -indicatoron false 
+    }
 
-        
-############iemlib##################
+    
+    ############iemlib##################
 
 
-# the put menu
+    # the put menu
     menu $name.m.put -tearoff $pd_tearoff
     $name.m add cascade -label Put -menu $name.m.put
 
@@ -1093,8 +1612,8 @@ proc pdtk_canvas_new {name width height geometry editable} {
         -accelerator [accel_munge "Ctrl+5"]
 
     $name.m.put add separator
-        
-############iemlib##################
+    
+    ############iemlib##################
 
     $name.m.put add command -label Bang \
         -command [concat menu_bng $name 0] \
@@ -1132,22 +1651,22 @@ proc pdtk_canvas_new {name width height geometry editable} {
         -command [concat menu_mycnv $name 0] \
         -accelerator [accel_munge "Shift+Ctrl+c"]
 
-############iemlib##################
+    ############iemlib##################
     
     $name.m.put add separator
-        
+    
     $name.m.put add command -label Graph \
         -command [concat menu_graph $name] 
 
     $name.m.put add command -label Array \
         -command [concat menu_array $name] 
 
-# the find menu
-# Apple, Microsoft, and others put find functions in the Edit menu.
-# But in order to move these items to the Edit menu, the Find menu
-# handling needs to be dealt with, including this line in g_canvas.c:
-#         sys_vgui(".mbar.find delete %d\n", i);
-# <hans@at.or.at>
+    # the find menu
+    # Apple, Microsoft, and others put find functions in the Edit menu.
+    # But in order to move these items to the Edit menu, the Find menu
+    # handling needs to be dealt with, including this line in g_canvas.c:
+    #         sys_vgui(".mbar.find delete %d\n", i);
+    # <hans@at.or.at>
     menu $name.m.find -tearoff $pd_tearoff
     $name.m add cascade -label Find -menu $name.m.find
 
@@ -1160,16 +1679,28 @@ proc pdtk_canvas_new {name width height geometry editable} {
     $name.m.find add command -label {Find last error} \
         -command [concat menu_finderror] 
     
-# the window menu
+    # the window menu
     menu $name.m.windows -postcommand [concat menu_fixwindowmenu $name] \
         -tearoff $pd_tearoff
 
+	if {$pd_nt == 2} {
+		$name.m.windows add command -label {Minimize} \
+			-command "menu_minimize $name" -accelerator [accel_munge "Ctrl+m"]
+		$name.m.windows add command -label {Zoom} -command "menu_zoom $name"
+	} else {
+		$name.m.windows add command -label "Next Window" -command {menu_raisenextwindow} \
+			-accelerator "Ctrl+PageDown"
+		#$name.m.windows add command -label "Previous Window" -command {menu_raisepreviouswindow} \
+		#	-accelerator "Ctrl+PageUp"
+	}
+	$name.m.windows add separator
     $name.m.windows add command -label {parent window}\
         -command [concat menu_windowparent $name] 
-    $name.m.windows add command -label {Pd window} -command menu_pop_pd
+    $name.m.windows add command -label {Pd window} -command menu_raise_console \
+		-accelerator [accel_munge "Ctrl+r"]
     $name.m.windows add separator
 
-# the audio menu
+    # the audio menu
     menu $name.m.audio -tearoff $pd_tearoff
 
     if {$pd_nt != 2} {
@@ -1178,19 +1709,19 @@ proc pdtk_canvas_new {name width height geometry editable} {
     } else {
         $name.m add cascade -label Media -menu $name.m.audio
         $name.m add cascade -label Window -menu $name.m.windows
-# the MacOS X app menu
-                  menu $name.m.apple -tearoff $pd_tearoff
-                  $name.m add cascade -label "Apple" -menu $name.m.apple 
+        # the MacOS X app menu
+        menu $name.m.apple -tearoff $pd_tearoff
+        $name.m add cascade -label "Apple" -menu $name.m.apple 
     }
 
-# the help menu
+    # the help menu
 
     menu $name.m.help -tearoff $pd_tearoff
     $name.m add cascade -label Help -menu $name.m.help
 
     menu_addstd $name.m
 
-# the popup menu
+    # the popup menu
     menu $name.popup -tearoff false
     $name.popup add command -label {Properties} \
         -command [concat popup_action $name 0] 
@@ -1199,29 +1730,30 @@ proc pdtk_canvas_new {name width height geometry editable} {
     $name.popup add command -label {Help} \
         -command [concat popup_action $name 2] 
 
-# fix menu font size on Windows with tk scaling = 1
-if {$pd_nt == 1} {
-    $name.m.file configure -font menuFont
-    $name.m.edit configure -font menuFont
-    $name.m.find configure -font menuFont
-    $name.m.put configure -font menuFont
-    $name.m.windows configure -font menuFont
-    $name.m.audio configure -font menuFont
-    $name.m.help configure -font menuFont
-    $name.popup configure -font menuFont
-}
+    # fix menu font size on Windows with tk scaling = 1
+    if {$pd_nt == 1} {
+        $name.m.file configure -font menuFont
+        $name.m.edit configure -font menuFont
+        $name.m.find configure -font menuFont
+        $name.m.put configure -font menuFont
+        $name.m.windows configure -font menuFont
+        $name.m.audio configure -font menuFont
+        $name.m.help configure -font menuFont
+        $name.popup configure -font menuFont
+    }
 
-# WM protocol
+    # WM protocol
     wm protocol $name WM_DELETE_WINDOW [concat menu_close $name]
 
-# bindings.
-# this is idiotic -- how do you just sense what mod keys are down and
-# pass them on? I can't find it anywhere.
-# Here we encode shift as 1, control 2, alt 4, in agreement
-# with definitions in g_canvas.c.  The third button gets "8" but we don't
-# bother with modifiers there.
-# We don't handle multiple clicks yet.
+    # bindings.
+    # this is idiotic -- how do you just sense what mod keys are down and
+    # pass them on? I can't find it anywhere.
+    # Here we encode shift as 1, control 2, alt 4, in agreement
+    # with definitions in g_canvas.c.  The third button gets "8" but we don't
+    # bother with modifiers there.
+    # We don't handle multiple clicks yet.
 
+    bind $name.c <Configure> { pdtk_canvas_getscroll %W }
     bind $name.c <Button> {pdtk_canvas_click %W %x %y %b 0}
     bind $name.c <Shift-Button> {pdtk_canvas_click %W %x %y %b 1}
     bind $name.c <Control-Shift-Button> {pdtk_canvas_click %W %x %y %b 3}
@@ -1241,33 +1773,38 @@ if {$pd_nt == 1} {
             {pdtk_canvas_click %W %x %y %b 7}
     }
     global pd_nt
-# button 2 is the right button on Mac; on other platforms it's button 3.
+    # button 2 is the right button on Mac; on other platforms it's button 3.
     if {$pd_nt == 2} {
-        bind $name.c <Button-2> {pdtk_canvas_click %W %x %y %b 8}
-        bind $name.c <Control-Button> {pdtk_canvas_click %W %x %y %b 8}
+        bind $name.c <Button-2> {pdtk_canvas_rightclick %W %x %y %b}
+        bind $name.c <Control-Button> {pdtk_canvas_rightclick %W %x %y %b}
     } else {
-        bind $name.c <Button-3> {pdtk_canvas_click %W %x %y %b 8}
+        bind $name.c <Button-3> {pdtk_canvas_rightclick %W %x %y %b}
         bind $name.c <Control-Button> {pdtk_canvas_click %W %x %y %b 2}
     }
-#on linux, button 2 "pastes" from the X windows clipboard
+    #on linux, button 2 "pastes" from the X windows clipboard
     if {$pd_nt == 0} {
         bind $name.c <Button-2> {\
-            pdtk_canvas_click %W %x %y %b 0;\
-             pdtk_canvas_mouseup %W %x %y %b;\
-             pdtk_pastetext}
+                                     pdtk_canvas_click %W %x %y %b 0;\
+                                     pdtk_canvas_mouseup %W %x %y %b;\
+                                     pdtk_pastetext}
     }
 
     bind $name.c <ButtonRelease> {pdtk_canvas_mouseup %W %x %y %b}
     bind $name.c <Control-Key> {pdtk_canvas_ctrlkey %W %K 0}
     bind $name.c <Control-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
-#    bind $name.c <Mod1-Key> {puts stderr [concat mod1 %W %K %A]}
+    #    bind $name.c <Mod1-Key> {puts stderr [concat mod1 %W %K %A]}
     if {$pd_nt == 2} {
         bind $name.c <Mod1-Key> {pdtk_canvas_ctrlkey %W %K 0}
         bind $name.c <Mod1-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
-    }
-    bind $name.c <Key> {pdtk_canvas_key %W %K %A 0}
-    bind $name.c <Shift-Key> {pdtk_canvas_key %W %K %A 1}
-    bind $name.c <KeyRelease> {pdtk_canvas_keyup %W %K %A}
+        bind $name.c <Mod1-BackSpace> {pdtk_canvas_sendkey %W 1 %K %A 0}
+        bind $name.c <Mod1-quoteleft> {menu_raisenextwindow}
+    } else {
+        bind $name.c <Control-Next>   {menu_raisenextwindow}
+        #bind $name.c <Control-Prior>  {menu_raisepreviouswindow} ;# needs Tcl/Tk 8.5
+	}
+    bind $name.c <Key> {pdtk_canvas_sendkey %W 1 %K %A 0}
+    bind $name.c <Shift-Key> {pdtk_canvas_sendkey %W 1 %K %A 1}
+    bind $name.c <KeyRelease> {pdtk_canvas_sendkey %W 0 %K %A 0}
     bind $name.c <Motion> {pdtk_canvas_motion %W %x %y 0}
     bind $name.c <Control-Motion> {pdtk_canvas_motion %W %x %y 2}
     if {$pd_nt == 2} {
@@ -1296,8 +1833,8 @@ if {$pd_nt == 1} {
             "pdtk_canvas_makeobjs $name %D %x %y"
     }
 
-#    puts stderr "all done"
-#   after 1 [concat raise $name]
+    #    puts stderr "all done"
+    #   after 1 [concat raise $name]
     global pdtk_canvas_mouseup_name
     set pdtk_canvas_mouseup_name ""
 }
@@ -1311,7 +1848,7 @@ proc pdtk_array_listview_setpage {arrayName page} {
 proc pdtk_array_listview_changepage {arrayName np} {
     global pd_array_listview_page
     pdtk_array_listview_setpage \
-      $arrayName [expr $pd_array_listview_page($arrayName) + $np]
+        $arrayName [expr $pd_array_listview_page($arrayName) + $np]
     pdtk_array_listview_fillpage $arrayName
 }
 
@@ -1320,15 +1857,15 @@ proc pdtk_array_listview_fillpage {arrayName} {
     global pd_array_listview_id
     set windowName [format ".%sArrayWindow" $arrayName]
     set topItem [expr [lindex [$windowName.lb yview] 0] * \
-                 [$windowName.lb size]]
-   
+                     [$windowName.lb size]]
+    
     if {[winfo exists $windowName]} {
-      set cmd "$pd_array_listview_id($arrayName) \
+        set cmd "$pd_array_listview_id($arrayName) \
                arrayviewlistfillpage \
                $pd_array_listview_page($arrayName) \
                $topItem"
-   
-      pd [concat $cmd \;]
+        
+        pd [concat $cmd \;]
     }
 }
 
@@ -1336,42 +1873,43 @@ proc pdtk_array_listview_new {id arrayName page} {
     global pd_nt
     global pd_array_listview_page
     global pd_array_listview_id
-     global fontname fontweight
+    global fontname fontweight
     set pd_array_listview_page($arrayName) $page
     set pd_array_listview_id($arrayName) $id
     set windowName [format ".%sArrayWindow" $arrayName]
     if [winfo exists $windowName] then [destroy $windowName]
-    toplevel $windowName
+    toplevel $windowName -class DialogWindow
+    wm group $windowName .
     wm protocol $windowName WM_DELETE_WINDOW \
-      "pdtk_array_listview_close $id $arrayName"
+        "pdtk_array_listview_close $id $arrayName"
     wm title $windowName [concat $arrayName "(list view)"]
     # FIXME
     set font 12
     set $windowName.lb [listbox $windowName.lb -height 20 -width 25\
-                        -selectmode extended \
-                        -relief solid -background white -borderwidth 1 \
-                        -font [format {{%s} %d %s} $fontname $font $fontweight]\
-                        -yscrollcommand "$windowName.lb.sb set"]
+                            -selectmode extended \
+                            -relief solid -background white -borderwidth 1 \
+                            -font [format {{%s} %d %s} $fontname $font $fontweight]\
+                            -yscrollcommand "$windowName.lb.sb set"]
     set $windowName.lb.sb [scrollbar $windowName.lb.sb \
-                           -command "$windowName.lb yview" -orient vertical]
+                               -command "$windowName.lb yview" -orient vertical]
     place configure $windowName.lb.sb -relheight 1 -relx 0.9 -relwidth 0.1
     pack $windowName.lb -expand 1 -fill both
     bind $windowName.lb <Double-ButtonPress-1> \
-         "pdtk_array_listview_edit $arrayName $page $font"
+        "pdtk_array_listview_edit $arrayName $page $font"
     # handle copy/paste
     if {$pd_nt == 0} {
-      selection handle $windowName.lb \
+        selection handle $windowName.lb \
             "pdtk_array_listview_lbselection $arrayName"
     } else {
-      if {$pd_nt == 1} {
-        bind $windowName.lb <ButtonPress-3> \
-           "pdtk_array_listview_popup $arrayName"
-      } 
+        if {$pd_nt == 1} {
+            bind $windowName.lb <ButtonPress-3> \
+                "pdtk_array_listview_popup $arrayName"
+        } 
     }
     set $windowName.prevBtn [button $windowName.prevBtn -text "<-" \
-        -command "pdtk_array_listview_changepage $arrayName -1"]
+                                 -command "pdtk_array_listview_changepage $arrayName -1"]
     set $windowName.nextBtn [button $windowName.nextBtn -text "->" \
-        -command "pdtk_array_listview_changepage $arrayName 1"]
+                                 -command "pdtk_array_listview_changepage $arrayName 1"]
     pack $windowName.prevBtn -side left -ipadx 20 -pady 10 -anchor s
     pack $windowName.nextBtn -side right -ipadx 20 -pady 10 -anchor s
     focus $windowName
@@ -1382,16 +1920,16 @@ proc pdtk_array_listview_lbselection {arrayName off size} {
     set itemNums [$windowName.lb curselection]
     set cbString ""
     for {set i 0} {$i < [expr [llength $itemNums] - 1]} {incr i} {
-      set listItem [$windowName.lb get [lindex $itemNums $i]]
-      append cbString [string range $listItem \
-                        [expr [string first ") " $listItem] + 2] \
-                        end]
-      append cbString "\n"
+        set listItem [$windowName.lb get [lindex $itemNums $i]]
+        append cbString [string range $listItem \
+                             [expr [string first ") " $listItem] + 2] \
+                             end]
+        append cbString "\n"
     }
     set listItem [$windowName.lb get [lindex $itemNums $i]]
     append cbString [string range $listItem \
-                      [expr [string first ") " $listItem] + 2] \
-                      end]
+                         [expr [string first ") " $listItem] + 2] \
+                         end]
     set last $cbString
 }
 
@@ -1407,7 +1945,7 @@ proc pdtk_array_listview_popup {arrayName} {
         -command "pdtk_array_listview_paste $arrayName; \
                   destroy $windowName.popup"
     tk_popup $windowName.popup [winfo pointerx $windowName] \
-             [winfo pointery $windowName] 0
+        [winfo pointery $windowName] 0
 }
 
 proc pdtk_array_listview_copy {arrayName} {
@@ -1415,16 +1953,16 @@ proc pdtk_array_listview_copy {arrayName} {
     set itemNums [$windowName.lb curselection]
     set cbString ""
     for {set i 0} {$i < [expr [llength $itemNums] - 1]} {incr i} {
-      set listItem [$windowName.lb get [lindex $itemNums $i]]
-      append cbString [string range $listItem \
-                        [expr [string first ") " $listItem] + 2] \
-                        end]
-      append cbString "\n"
+        set listItem [$windowName.lb get [lindex $itemNums $i]]
+        append cbString [string range $listItem \
+                             [expr [string first ") " $listItem] + 2] \
+                             end]
+        append cbString "\n"
     }
     set listItem [$windowName.lb get [lindex $itemNums $i]]
     append cbString [string range $listItem \
-                      [expr [string first ") " $listItem] + 2] \
-                      end]
+                         [expr [string first ") " $listItem] + 2] \
+                         end]
     clipboard clear
     clipboard append $cbString
 }
@@ -1439,40 +1977,40 @@ proc pdtk_array_listview_paste {arrayName} {
     set itemString [split $cbString $splitChars]
     set flag 1
     for {set i 0; set counter 0} {$i < [llength $itemString]} {incr i} {
-      if {[lindex $itemString $i] != {}} {
-        pd [concat $arrayName [expr $itemNum + \
-           [expr $counter + \
-           [expr $pd_array_listview_pagesize \
-                 * $pd_array_listview_page($arrayName)]]] \
-           [lindex $itemString $i] \;]
-        incr counter
-        set flag 0
-      }
+        if {[lindex $itemString $i] != {}} {
+            pd [concat $arrayName [expr $itemNum + \
+                                       [expr $counter + \
+                                            [expr $pd_array_listview_pagesize \
+                                                 * $pd_array_listview_page($arrayName)]]] \
+                    [lindex $itemString $i] \;]
+            incr counter
+            set flag 0
+        }
     }
 }
 
 proc pdtk_array_listview_edit {arrayName page font} {
     global pd_array_listview_entry
     global pd_nt
-     global fontname fontweight
+    global fontname fontweight
     set lbName [format ".%sArrayWindow.lb" $arrayName]
     if {[winfo exists $lbName.entry]} {
-      pdtk_array_listview_update_entry \
-        $arrayName $pd_array_listview_entry($arrayName)
-      unset pd_array_listview_entry($arrayName)
+        pdtk_array_listview_update_entry \
+            $arrayName $pd_array_listview_entry($arrayName)
+        unset pd_array_listview_entry($arrayName)
     }
     set itemNum [$lbName index active]
     set pd_array_listview_entry($arrayName) $itemNum
     set bbox [$lbName bbox $itemNum]
     set y [expr [lindex $bbox 1] - 4]
     set $lbName.entry [entry $lbName.entry \
-                       -font [format {{%s} %d %s} $fontname $font $fontweight]]
+                           -font [format {{%s} %d %s} $fontname $font $fontweight]]
     $lbName.entry insert 0 []
     place configure $lbName.entry -relx 0 -y $y -relwidth 1
     lower $lbName.entry
     focus $lbName.entry
     bind $lbName.entry <Return> \
-         "pdtk_array_listview_update_entry $arrayName $itemNum;"
+        "pdtk_array_listview_update_entry $arrayName $itemNum;"
 }
 
 proc pdtk_array_listview_update_entry {arrayName itemNum} {
@@ -1483,15 +2021,15 @@ proc pdtk_array_listview_update_entry {arrayName itemNum} {
     set itemString [split [$lbName.entry get] $splitChars]
     set flag 1
     for {set i 0; set counter 0} {$i < [llength $itemString]} {incr i} {
-      if {[lindex $itemString $i] != {}} {
-        pd [concat $arrayName [expr $itemNum + \
-           [expr $counter + \
-           [expr $pd_array_listview_pagesize \
-                 * $pd_array_listview_page($arrayName)]]] \
-           [lindex $itemString $i] \;]
-        incr counter
-        set flag 0
-      }
+        if {[lindex $itemString $i] != {}} {
+            pd [concat $arrayName [expr $itemNum + \
+                                       [expr $counter + \
+                                            [expr $pd_array_listview_pagesize \
+                                                 * $pd_array_listview_page($arrayName)]]] \
+                    [lindex $itemString $i] \;]
+            incr counter
+            set flag 0
+        }
     }
     pdtk_array_listview_fillpage $arrayName
     destroy $lbName.entry
@@ -1514,6 +2052,19 @@ proc pdtk_array_listview_close {id arrayName} {
 #get the name of the toplevel window for a canvas; this is also
 #the name of the canvas object in Pd.
 
+proc pdtk_canvas_autoscrollbars {name x y} {
+    set size [$name bbox all]
+    set x2 [lindex $size 2]
+    set y2 [lindex $size 3]
+    set rootname [winfo parent $name]
+    if {$x > $x2} {pack forget $rootname.scrollhort}
+    if {$y > $y2} {pack forget $rootname.scrollvert}
+    if {$x < $x2} {pack $rootname.scrollhort -side bottom \
+                       -fill x -before $rootname.c}
+    if {$y < $y2} {pack $rootname.scrollvert -side right \
+                       -fill y -before $rootname.c}
+}
+
 proc canvastosym {name} {
     string range $name 0 [expr [string length $name] - 3]
 }
@@ -1529,35 +2080,42 @@ proc pdtk_canvas_checkgeometry {topname} {
     global pdtk_lastcanvasconfiguration
     global pdtk_lastcanvasconfiguration2
     if {$topname != $pdtk_lastcanvasconfigured || \
-        $boo != $pdtk_lastcanvasconfiguration || \
-        $boo2 != $pdtk_lastcanvasconfiguration2} {
-            set pdtk_lastcanvasconfigured $topname
-            set pdtk_lastcanvasconfiguration $boo
-            set pdtk_lastcanvasconfiguration2 $boo2
-            pd $topname relocate $boo $boo2 \;
+            $boo != $pdtk_lastcanvasconfiguration || \
+            $boo2 != $pdtk_lastcanvasconfiguration2} {
+        set pdtk_lastcanvasconfigured $topname
+        set pdtk_lastcanvasconfiguration $boo
+        set pdtk_lastcanvasconfiguration2 $boo2
+        pd $topname relocate $boo $boo2 \;
     }
 }
 
-proc pdtk_canvas_click {name x y b f} {
-    global pd_nt
-    if {$pd_nt == 0} {focus $name}
+proc pdtk_canvas_sendclick {name x y b f} {
     pd [canvastosym $name] mouse [$name canvasx $x] [$name canvasy $y] $b $f \;
 }
 
+proc pdtk_canvas_click {name x y b f} {
+    focus $name
+    pdtk_canvas_sendclick $name $x $y $b $f
+}
+
+proc pdtk_canvas_rightclick {name x y b} { 
+    pdtk_canvas_sendclick $name $x $y $b 8
+}
+
 proc pdtk_canvas_shiftclick {name x y b} {
-    pd [canvastosym $name] mouse [$name canvasx $x] [$name canvasy $y] $b 1 \;
+    pdtk_canvas_sendclick $name $x $y $b 1
 }
 
 proc pdtk_canvas_ctrlclick {name x y b} {
-    pd [canvastosym $name] mouse [$name canvasx $x] [$name canvasy $y] $b 2 \;
+    pdtk_canvas_sendclick $name $x $y $b 2
 }
 
 proc pdtk_canvas_altclick {name x y b} {
-    pd [canvastosym $name] mouse [$name canvasx $x] [$name canvasy $y] $b 3 \;
+    pdtk_canvas_sendclick $name $x $y $b 3
 }
 
 proc pdtk_canvas_dblclick {name x y b} {
-    pd [canvastosym $name] mouse [$name canvasx $x] [$name canvasy $y] $b 4 \;
+    pdtk_canvas_sendclick $name $x $y $b 4
 }
 
 set pdtk_canvas_mouseup_name 0
@@ -1568,7 +2126,7 @@ set pdtk_canvas_mouseup_ymaxval 0
 
 proc pdtk_canvas_mouseup {name x y b} {
     pd [concat [canvastosym $name] mouseup [$name canvasx $x] \
-        [$name canvasy $y] $b \;]
+            [$name canvasy $y] $b \;]
 }
 
 proc pdtk_canvas_getscroll {name} {
@@ -1578,6 +2136,12 @@ proc pdtk_canvas_getscroll {name} {
     global pdtk_canvas_mouseup_yminval
     global pdtk_canvas_mouseup_ymaxval
 
+    #<matju> there's a bug in Tk that messes with window size while changing the cursor. trigger it seldom.
+    if {[. cget -cursor] != "$::cursor_runmode_nothing"} {. configure -cursor $::cursor_runmode_nothing}
+    .printout.text configure -cursor xterm
+
+    # kludge since this gets called sometimes after a canvas is destroyed
+    if {! [winfo exists $name]} {return}
     set size [$name bbox all]
     if {$size != ""} {
         set xminval 0
@@ -1594,68 +2158,71 @@ proc pdtk_canvas_getscroll {name} {
 
         if {$x2 > 100} {set xmaxval $x2}
         if {$y2 > 100} {set ymaxval $y2}
+
+        set parentname [winfo parent $name]
+        set winwidth [winfo width $parentname]
+        set winheight [winfo height $parentname]
+        set canvaswidth [ expr {abs($xminval)+$xmaxval} ]
+        set canvasheight [ expr {abs($yminval)+$ymaxval} ]
+
+        if {$winwidth > $canvaswidth} {pack forget $parentname.scrollhort}
+        if {$winheight > $canvasheight} {pack forget $parentname.scrollvert}
+        if {$winwidth < $canvaswidth} {pack $parentname.scrollhort -fill x \
+                                           -side bottom -before $parentname.c}
+        if {$winheight < $canvasheight} {pack $parentname.scrollvert -fill y \
+                                             -side right -before $parentname.c}
         
         if {$pdtk_canvas_mouseup_name != $name || \
-            $pdtk_canvas_mouseup_xminval != $xminval || \
-            $pdtk_canvas_mouseup_xmaxval != $xmaxval || \
-            $pdtk_canvas_mouseup_yminval != $yminval || \
-            $pdtk_canvas_mouseup_ymaxval != $ymaxval } {
+                $pdtk_canvas_mouseup_xminval != $xminval || \
+                $pdtk_canvas_mouseup_xmaxval != $xmaxval || \
+                $pdtk_canvas_mouseup_yminval != $yminval || \
+                $pdtk_canvas_mouseup_ymaxval != $ymaxval } {
             
-                set newsize "$xminval $yminval $xmaxval $ymaxval"
-                $name configure -scrollregion $newsize
-                set pdtk_canvas_mouseup_name $name
-                set pdtk_canvas_mouseup_xminval $xminval
-                set pdtk_canvas_mouseup_xmaxval $xmaxval
-                set pdtk_canvas_mouseup_yminval $yminval
-                set pdtk_canvas_mouseup_ymaxval $ymaxval
+            set newsize "$xminval $yminval $xmaxval $ymaxval"
+            $name configure -scrollregion $newsize
+            set pdtk_canvas_mouseup_name $name
+            set pdtk_canvas_mouseup_xminval $xminval
+            set pdtk_canvas_mouseup_xmaxval $xmaxval
+            set pdtk_canvas_mouseup_yminval $yminval
+            set pdtk_canvas_mouseup_ymaxval $ymaxval
         }
 
     }
     pdtk_canvas_checkgeometry [canvastosym $name]
 }
 
-proc pdtk_canvas_key {name key iso shift} {
-#    puts stderr [concat down key= $key iso= $iso]
-#    .controls.switches.meterbutton configure -text $key
-#  HACK for MAC OSX -- backspace seems different; I don't understand why.
-#  invesigate this LATER...
+proc pdtk_canvas_sendkey {name state key iso shift} {
     global pd_nt
-    if {$pd_nt == 2} {
-        if {$key == "BackSpace"} {
-            set key 8
-            set keynum 8
-        }
-        if {$key == "Delete"} {
-            set key 8
-            set keynum 8
-        }
-    }
-    if {$key == "KP_Delete"} {
-        set key 127
-        set keynum 127
+	if {$key == "BackSpace"} {
+		set iso ""
+		set key 8
+	} elseif {$key == "Tab"} {
+       set iso ""
+		set key 9
+	} elseif {$key == "Return"} {
+        set iso ""
+		set key 10
+	} elseif {$key == "Escape"} {
+        set iso ""
+		set key 27
+	} elseif {$key == "Space"} {
+        set iso ""
+		set key 32
+	} elseif {$key == "Delete" || $key == "KP_Delete"} {
+        set iso ""
+		set key 127
     }
     if {$iso != ""} {
-        scan $iso %c keynum 
-        pd [canvastosym $name] key 1 $keynum $shift\;
-    } else {
-        pd [canvastosym $name] key 1 $key $shift\;
-    }
-}
-
-proc pdtk_canvas_keyup {name key iso} {
-#    puts stderr [concat up key= $key iso= $iso]
-    if {$iso != ""} {
-        scan $iso %c keynum 
-        pd [canvastosym $name] key 0 $keynum 0 \;
-    } else {
-        pd [canvastosym $name] key 0 $key 0 \;
+        scan $iso %c key
     }
+	pd [canvastosym $name] key $state $key $shift \;
 }
 
 proc pdtk_canvas_ctrlkey {name key shift} {
-# first get rid of ".c" suffix; we'll refer to the toplevel instead
+    global pd_nt
+    # first get rid of ".c" suffix; we'll refer to the toplevel instead
     set topname [string trimright $name .c]
-#   puts stderr [concat ctrl-key $key $topname]
+    #   puts stderr [concat ctrl-key $key $topname]
 
     if {$key == "1"} {menu_object $topname 1}
     if {$key == "2"} {menu_message $topname 1}
@@ -1679,22 +2246,33 @@ proc pdtk_canvas_ctrlkey {name key shift} {
         if {$key == "d" || $key == "D"} {menu_vradio $topname 1}
         if {$key == "u" || $key == "U"} {menu_vumeter $topname 1}
         if {$key == "c" || $key == "C"} {menu_mycnv $topname 1}
+        if {$key == "l" || $key == "L"} {menu_clear_console}
+        if {$key == "r" || $key == "R"} {menu_toggle_console}
     } else {
         if {$key == "e" || $key == "E"} {menu_editmode $topname}
         if {$key == "q" || $key == "Q"} {menu_quit}
         if {$key == "s" || $key == "S"} {menu_save $topname}
         if {$key == "z" || $key == "Z"} {menu_undo $topname}
+        if {$key == "b" || $key == "B"} {::helpbrowser::open_helpbrowser}
         if {$key == "n" || $key == "N"} {menu_new}
-        if {$key == "o" || $key == "O"} {menu_open $topname}
-        if {$key == "m" || $key == "M"} {menu_send}
+        if {$key == "o" || $key == "O"} {menu_open}
         if {$key == "w" || $key == "W"} {menu_close $topname}
         if {$key == "p" || $key == "P"} {menu_print $topname}
+        if {$key == "r" || $key == "R"} {menu_raise_console}
         if {$key == "x" || $key == "X"} {menu_cut $topname}
         if {$key == "c" || $key == "C"} {menu_copy $topname}
         if {$key == "v" || $key == "V"} {menu_paste $topname}
         if {$key == "d" || $key == "D"} {menu_duplicate $topname}
         if {$key == "a" || $key == "A"} {menu_selectall $topname}
-        if {$key == "t" || $key == "T"} {menu_texteditor $topname}
+        if {$pd_nt == 2} { 
+			# by default, Cmd-T opens the font panel on Mac OS X
+            if {$key == "t" || $key == "T"} {menu_font $topname}
+			if {$key == "m" || $key == "M"} {menu_minimize $topname}
+        } else {
+            if {$key == "t" || $key == "T"} {menu_texteditor $topname}
+			# minimize window on Mac OS X
+			if {$key == "m" || $key == "M"} {menu_send}
+        }
         if {$key == "f" || $key == "F"} {menu_findobject $topname}
         if {$key == "g" || $key == "G"} {menu_findagain $topname}
     }
@@ -1705,7 +2283,7 @@ proc pdtk_canvas_scroll {canvas xy distance} {
 }
 
 proc pdtk_canvas_motion {name x y mods} {
-#    puts stderr [concat [canvastosym $name] $name $x $y]
+    #    puts stderr [concat [canvastosym $name] $name $x $y]
     pd [canvastosym $name] motion [$name canvasx $x] [$name canvasy $y] $mods \;
 }
 
@@ -1713,12 +2291,12 @@ proc pdtk_canvas_motion {name x y mods} {
 # invisible (arg is "").  Invisibility means the Window Manager has minimized
 # us.  We don't get a final "unmap" event when we destroy the window.
 proc pdtk_canvas_map {name} {
-#   puts stderr [concat map $name]
+    #   puts stderr [concat map $name]
     pd [canvastosym $name] map 1 \;
 }
 
 proc pdtk_canvas_unmap {name} {
-#   puts stderr [concat unmap $name]
+    #   puts stderr [concat unmap $name]
     pd [canvastosym $name] map 0 \;
 }
 
@@ -1737,80 +2315,98 @@ set saveas_dir nowhere
 ############ pdtk_canvas_saveas -- run a saveas dialog ##############
 
 proc pdtk_canvas_saveas {name initfile initdir} {
-    global pd_nt
-    set filename [tk_getSaveFile -initialfile $initfile \
-       -initialdir $initdir  -defaultextension .pd -parent $name.c \
-        -filetypes { {{pd files} {.pd}} {{max files} {.pat}} }]
+    global pd_nt filetypes untitled_directory
+    if { ! [file isdirectory $initdir]} {set initdir $::env(HOME)}
+    set filename [tk_getSaveFile -initialfile $initfile -initialdir $initdir \
+					  -defaultextension .pd -filetypes $filetypes]
 
     if {$filename != ""} {
-# yes, we need the extent even if we're on a mac.
+        # yes, we need the extent even if we're on a mac.
         if {$pd_nt == 2} {
-          if {[string last .pd $filename] < 0 && \
-            [string last .PD $filename] < 0 && \
-            [string last .pat $filename] < 0 && \
-            [string last .PAT $filename] < 0} {
+            if {[string last .pd $filename] < 0 && \
+                    [string last .PD $filename] < 0 && \
+                    [string last .pat $filename] < 0 && \
+                    [string last .PAT $filename] < 0} {
                 set filename $filename.pd
                 if {[file exists $filename]} {
-                        set answer [tk_messageBox \
-                        \-message [concat overwrite $filename "?"] \
-                         \-type yesno \-icon question]
-                        if {! [string compare $answer no]} {return}
+                    set answer [tk_messageBox \
+                                    \-message [concat overwrite $filename "?"] \
+                                    \-type yesno \-icon question]
+                    if {! [string compare $answer no]} {return}
                 }
-          }
+            }
         }
 
         set directory [string range $filename 0 \
-            [expr [string last / $filename ] - 1]]
+                           [expr [string last / $filename ] - 1]]
         set basename [string range $filename \
-            [expr [string last / $filename ] + 1] end]
+                          [expr [string last / $filename ] + 1] end]
         pd [concat $name savetofile [pdtk_enquote $basename] \
-             [pdtk_enquote $directory] \;]
-#       pd [concat $name savetofile $basename $directory \;]
+                [pdtk_enquote $directory] \;]
+        #       pd [concat $name savetofile $basename $directory \;]
+        set untitled_directory $directory
     }
 }
 
 ############ pdtk_canvas_dofont -- run a font and resize dialog #########
 
 set fontsize 0
+set dofont_fontsize 0
 set stretchval 0
 set whichstretch 0
 
-proc dofont_apply {name} {
-    global fontsize
+proc dofont_apply {name myfontsize} {
     global stretchval
     global whichstretch
-    set cmd [concat $name font $fontsize $stretchval $whichstretch \;]
-#    puts stderr $cmd
+    set cmd [concat $name font $myfontsize $stretchval $whichstretch \;]
+    #    puts stderr $cmd
+    pd $cmd
+}
+
+proc dofont_close {name} {
+    set cmd [concat $name cancel \;]
+    #    puts stderr $cmd
     pd $cmd
 }
 
 proc dofont_cancel {name} {
+    global fontsize
+    dofont_apply $name $fontsize
     set cmd [concat $name cancel \;]
-#    puts stderr $cmd
+    #    puts stderr $cmd
     pd $cmd
 }
 
+proc dofont_ok {name} {
+    global fontsize dofont_fontsize
+    set fontsize $dofont_fontsize
+    dofont_apply $name $fontsize
+    dofont_close $name
+}
+
 proc pdtk_canvas_dofont {name initsize} {
-    
-    global fontsize
+    global fontsize dofont_fontsize
     set fontsize $initsize
-    
+    set dofont_fontsize $initsize
+
     global stretchval
     set stretchval 100
     
     global whichstretch
     set whichstretch 1
     
-    toplevel $name
+    toplevel $name -class DialogWindow
     wm title $name  {FONT BOMB}
     wm protocol $name WM_DELETE_WINDOW [concat dofont_cancel $name]
 
+    pdtk_panelkeybindings $name dofont
+    
     frame $name.buttonframe
     pack $name.buttonframe -side bottom -fill x -pady 2m
     button $name.buttonframe.cancel -text {Cancel}\
         -command "dofont_cancel $name"
-    button $name.buttonframe.ok -text {Do it}\
-        -command "dofont_apply $name"
+    button $name.buttonframe.ok -text {OK}\
+        -command "dofont_ok $name"
     pack $name.buttonframe.cancel -side left -expand 1
     pack $name.buttonframe.ok -side left -expand 1
     
@@ -1820,12 +2416,18 @@ proc pdtk_canvas_dofont {name initsize} {
     label $name.radiof.label -text {Font Size:}
     pack $name.radiof.label -side top
 
-    radiobutton $name.radiof.radio8 -value 8 -variable fontsize -text "8"
-    radiobutton $name.radiof.radio10 -value 10 -variable fontsize -text "10"
-    radiobutton $name.radiof.radio12 -value 12 -variable fontsize -text "12"
-    radiobutton $name.radiof.radio16 -value 16 -variable fontsize -text "16"
-    radiobutton $name.radiof.radio24 -value 24 -variable fontsize -text "24"
-    radiobutton $name.radiof.radio36 -value 36 -variable fontsize -text "36"
+    radiobutton $name.radiof.radio8 -value 8 -variable dofont_fontsize -text "8" \
+        -command [concat dofont_apply $name 8]
+    radiobutton $name.radiof.radio10 -value 10 -variable dofont_fontsize -text "10" \
+        -command [concat dofont_apply $name 10]
+    radiobutton $name.radiof.radio12 -value 12 -variable dofont_fontsize -text "12" \
+        -command [concat dofont_apply $name 12]
+    radiobutton $name.radiof.radio16 -value 16 -variable dofont_fontsize -text "16" \
+        -command [concat dofont_apply $name 16]
+    radiobutton $name.radiof.radio24 -value 24 -variable dofont_fontsize -text "24" \
+        -command [concat dofont_apply $name 24]
+    radiobutton $name.radiof.radio36 -value 36 -variable dofont_fontsize -text "36" \
+        -command [concat dofont_apply $name 36]
     pack $name.radiof.radio8 -side top -anchor w
     pack $name.radiof.radio10 -side top -anchor w
     pack $name.radiof.radio12 -side top -anchor w
@@ -1833,6 +2435,9 @@ proc pdtk_canvas_dofont {name initsize} {
     pack $name.radiof.radio24 -side top -anchor w
     pack $name.radiof.radio36 -side top -anchor w
 
+    set current_radiobutton [format "$name.radiof.radio%d" $initsize]
+    $current_radiobutton select
+
     frame $name.stretchf
     pack $name.stretchf -side left
     
@@ -1869,14 +2474,14 @@ proc pdtk_canvas_dofont {name initsize} {
 proc gatom_escape {sym} {
     if {[string length $sym] == 0} {
         set ret "-"
-#       puts stderr [concat escape1 $sym $ret]
+        #       puts stderr [concat escape1 $sym $ret]
     } else {
         if {[string equal -length 1 $sym "-"]} {
-        set ret [string replace $sym 0 0 "--"]
-#       puts stderr [concat escape $sym $ret]
+            set ret [string replace $sym 0 0 "--"]
+            #       puts stderr [concat escape $sym $ret]
         } else {
             set ret [string map {"$" "#"} $sym]
-#            puts stderr [concat unescape $sym $ret]
+            #            puts stderr [concat unescape $sym $ret]
         }
     }
     pdtk_unspace $ret
@@ -1885,14 +2490,14 @@ proc gatom_escape {sym} {
 proc gatom_unescape {sym} {
     if {[string equal -length 1 $sym "-"]} {
         set ret [string replace $sym 0 0 ""]
-#       puts stderr [concat unescape $sym $ret]
+        #       puts stderr [concat unescape $sym $ret]
     } else {
         set ret [string map {"#" "$"} $sym]
-#        puts stderr [concat unescape $sym $ret]
+        #        puts stderr [concat unescape $sym $ret]
     }
     concat $ret
 }
-        
+
 proc dogatom_apply {id} {
     set vid [string trimleft $id .]
 
@@ -1911,25 +2516,25 @@ proc dogatom_apply {id} {
     set var_gatomsymto [concat gatomsymto_$vid]
     global $var_gatomsymto
 
-#    set cmd [concat $id param $gatomwidth $gatomlo $gatomhi \;]
+    #    set cmd [concat $id param $gatomwidth $gatomlo $gatomhi \;]
     
     set cmd [concat $id param \
-        [eval concat $$var_gatomwidth] \
-        [eval concat $$var_gatomlo] \
-        [eval concat $$var_gatomhi] \
-        [eval gatom_escape $$var_gatomlabel] \
-        [eval concat $$var_gatomwherelabel] \
-        [eval gatom_escape $$var_gatomsymfrom] \
-        [eval gatom_escape $$var_gatomsymto] \
-        \;]
-
-#    puts stderr $cmd
+                 [eval concat $$var_gatomwidth] \
+                 [eval concat $$var_gatomlo] \
+                 [eval concat $$var_gatomhi] \
+                 [eval gatom_escape $$var_gatomlabel] \
+                 [eval concat $$var_gatomwherelabel] \
+                 [eval gatom_escape $$var_gatomsymfrom] \
+                 [eval gatom_escape $$var_gatomsymto] \
+                 \;]
+
+    #    puts stderr $cmd
     pd $cmd
 }
 
 proc dogatom_cancel {name} {
     set cmd [concat $name cancel \;]
-#    puts stderr $cmd
+    #    puts stderr $cmd
     pd $cmd
 }
 
@@ -1939,7 +2544,7 @@ proc dogatom_ok {name} {
 }
 
 proc pdtk_gatom_dialog {id initwidth initlo inithi \
-    wherelabel label symfrom symto} {
+                            wherelabel label symfrom symto} {
 
     set vid [string trimleft $id .]
 
@@ -1968,11 +2573,13 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
     set $var_gatomsymfrom [gatom_unescape $symfrom]
     set $var_gatomsymto [gatom_unescape $symto]
 
-    toplevel $id
+    toplevel $id -class DialogWindow
     wm title $id "atom box properties"
     wm resizable $id 0 0
     wm protocol $id WM_DELETE_WINDOW [concat dogatom_cancel $id]
 
+    pdtk_panelkeybindings $id "dogatom"
+
     frame $id.params -height 7
     pack $id.params -side top
     label $id.params.entryname -text "width"
@@ -1980,8 +2587,8 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
     pack $id.params.entryname $id.params.entry -side left
 
     labelframe $id.limits -text "limits" -padx 15 -pady 4 -borderwidth 1 \
-          -font highlight_font
-     pack $id.limits -side top -fill x
+        -font highlight_font
+    pack $id.limits -side top -fill x
     frame $id.limits.lower
     pack $id.limits.lower -side left
     label $id.limits.lower.entryname -text "lower"
@@ -1993,14 +2600,14 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
     label $id.limits.upper.entryname -text "upper"
     entry $id.limits.upper.entry -textvariable $var_gatomhi -width 8
     pack  $id.limits.upper.spacer $id.limits.upper.entryname \
-          $id.limits.upper.entry -side left
+        $id.limits.upper.entry -side left
 
     frame $id.spacer1 -height 7
     pack $id.spacer1 -side top
 
     labelframe $id.label -text "label" -padx 5 -pady 4 -borderwidth 1 \
-          -font highlight_font
-     pack $id.label -side top -fill x
+        -font highlight_font
+    pack $id.label -side top -fill x
     frame $id.label.name
     pack $id.label.name -side top
     entry $id.label.name.entry -textvariable $var_gatomlabel -width 33
@@ -2028,8 +2635,8 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
     pack $id.spacer2 -side top
 
     labelframe $id.s_r -text "messages" -padx 5 -pady 4 -borderwidth 1 \
-          -font highlight_font
-     pack $id.s_r -side top -fill x
+        -font highlight_font
+    pack $id.s_r -side top -fill x
     frame $id.s_r.paramsymto
     pack $id.s_r.paramsymto -side top -anchor e
     label $id.s_r.paramsymto.entryname -text "send symbol"
@@ -2041,7 +2648,7 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
     label $id.s_r.paramsymfrom.entryname -text "receive symbol"
     entry $id.s_r.paramsymfrom.entry -textvariable $var_gatomsymfrom -width 21
     pack $id.s_r.paramsymfrom.entry $id.s_r.paramsymfrom.entryname -side right
-        
+    
     frame $id.buttonframe -pady 5
     pack $id.buttonframe -side top -fill x -pady 2m
     button $id.buttonframe.cancel -text {Cancel}\
@@ -2054,12 +2661,6 @@ proc pdtk_gatom_dialog {id initwidth initlo inithi \
         -command "dogatom_ok $id"
     pack $id.buttonframe.ok -side left -expand 1
 
-    bind $id.limits.upper.entry <KeyPress-Return> [concat dogatom_ok $id]
-    bind $id.limits.lower.entry <KeyPress-Return> [concat dogatom_ok $id]
-    bind $id.params.entry <KeyPress-Return> [concat dogatom_ok $id]
-    pdtk_standardkeybindings $id.limits.upper.entry
-    pdtk_standardkeybindings $id.limits.lower.entry
-    pdtk_standardkeybindings $id.params.entry
     $id.params.entry select from 0
     $id.params.entry select adjust end
     focus $id.params.entry
@@ -2072,21 +2673,34 @@ set popup_ypix 0
 
 proc popup_action {name action} {
     global popup_xpix popup_ypix
-    set cmd [concat $name done-popup $action $popup_xpix $popup_ypix \;]
-#    puts stderr $cmd
-    pd $cmd
+	set cmd [concat $name done-popup $action $popup_xpix $popup_ypix \;]
+	#    puts stderr $cmd
+	pd $cmd
 }
 
-proc pdtk_canvas_popup {name xpix ypix canprop canopen} {
-    global popup_xpix popup_ypix
-    set popup_xpix $xpix
-    set popup_ypix $ypix
-    if {$canprop == 0} {$name.popup entryconfigure 0 -state disabled}
-    if {$canprop == 1} {$name.popup entryconfigure 0 -state active}
-    if {$canopen == 0} {$name.popup entryconfigure 1 -state disabled}
-    if {$canopen == 1} {$name.popup entryconfigure 1 -state active}
-    tk_popup $name.popup [expr $xpix + [winfo rootx $name.c]] \
-         [expr $ypix + [winfo rooty $name.c]] 0
+proc pdtk_canvas_popup {mytoplevel xcanvas ycanvas hasproperties hasopen} {
+    set ::popup_xpix $xcanvas
+    set ::popup_ypix $ycanvas
+    if {$hasproperties} {
+        $mytoplevel.popup entryconfigure "Properties" -state normal
+    } else {
+        $mytoplevel.popup entryconfigure "Properties" -state disabled
+    }
+    if {$hasopen} {
+        $mytoplevel.popup entryconfigure "Open" -state normal
+    } else {
+        $mytoplevel.popup entryconfigure "Open" -state disabled
+    }
+    set tkcanvas $mytoplevel.c
+    set scrollregion [$tkcanvas cget -scrollregion]
+    # get the canvas location that is currently the top left corner in the window
+    set left_xview_pix [expr [lindex [$tkcanvas xview] 0] * [lindex $scrollregion 2]]
+    set top_yview_pix [expr [lindex [$tkcanvas yview] 0] * [lindex $scrollregion 3]]
+    # take the mouse clicks in canvas coords, add the root of the canvas
+    # window, and subtract the area that is obscured by scrolling
+    set xpopup [expr int($xcanvas + [winfo rootx $tkcanvas] - $left_xview_pix)]
+    set ypopup [expr int($ycanvas + [winfo rooty $tkcanvas] - $top_yview_pix)]
+    tk_popup $mytoplevel.popup $xpopup $ypopup 0
 }
 
 
@@ -2186,7 +2800,7 @@ proc iemgui_verify_rng {id} {
         if {[eval concat $$var_iemgui_max_rng] == 0.0 && [eval concat $$var_iemgui_min_rng] == 0.0} {
             set $var_iemgui_max_rng 1.0
             $id.rng.max_ent configure -textvariable $var_iemgui_max_rng
-            }
+        }
         if {[eval concat $$var_iemgui_max_rng] > 0} {
             if {[eval concat $$var_iemgui_min_rng] <= 0} {
                 set $var_iemgui_min_rng [expr [eval concat $$var_iemgui_max_rng] * 0.01]
@@ -2226,23 +2840,23 @@ proc iemgui_set_col_example {id} {
     global $var_iemgui_lcol
     
     $id.colors.sections.lb_bk configure \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
-       -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]]
+        -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+        -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+        -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
+        -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]]
     
     if { [eval concat $$var_iemgui_fcol] >= 0 } {
-       $id.colors.sections.fr_bk configure \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
-       -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]]
+        $id.colors.sections.fr_bk configure \
+            -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
+            -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]]
     } else {
-       $id.colors.sections.fr_bk configure \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]]}
+        $id.colors.sections.fr_bk configure \
+            -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]]}
 }
 
 proc iemgui_preset_col {id presetcol} {
@@ -2279,22 +2893,22 @@ proc iemgui_choose_col_bkfrlb {id} {
         set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC]
         set helpstring [tk_chooseColor -title "Background-Color" -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_bcol]]]
         if { $helpstring != "" } {
-              set $var_iemgui_bcol [string replace $helpstring 0 0 "0x"]
-              set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC] }
+            set $var_iemgui_bcol [string replace $helpstring 0 0 "0x"]
+            set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC] }
     }
     if {[eval concat $$var_iemgui_l2_f1_b0] == 1} {
         set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC]
         set helpstring [tk_chooseColor -title "Front-Color" -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_fcol]]]
         if { $helpstring != "" } {
-              set $var_iemgui_fcol [string replace $helpstring 0 0 "0x"]
-              set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC] }
+            set $var_iemgui_fcol [string replace $helpstring 0 0 "0x"]
+            set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC] }
     }
     if {[eval concat $$var_iemgui_l2_f1_b0] == 2} {
         set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC]
         set helpstring [tk_chooseColor -title "Label-Color" -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_lcol]]]
         if { $helpstring != "" } {
-              set $var_iemgui_lcol [string replace $helpstring 0 0 "0x"]
-              set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC] }
+            set $var_iemgui_lcol [string replace $helpstring 0 0 "0x"]
+            set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC] }
     }
     iemgui_set_col_example $id
 }
@@ -2308,7 +2922,7 @@ proc iemgui_lilo {id} {
     global $var_iemgui_lilo0
     set var_iemgui_lilo1 [concat iemgui_lilo1_$vid]
     global $var_iemgui_lilo1
-   
+    
     iemgui_sched_rng $id
 
     if {[eval concat $$var_iemgui_lin0_log1] == 0} {
@@ -2327,22 +2941,22 @@ proc iemgui_toggle_font {id gn_f} {
 
     set var_iemgui_gn_f [concat iemgui_gn_f_$vid]
     global $var_iemgui_gn_f
-     global fontname fontweight
+    global fontname fontweight
     
     set $var_iemgui_gn_f $gn_f
 
-     switch -- $gn_f {
-          0 { set current_font $fontname}
-          1 { set current_font "Helvetica" }
-          2 { set current_font "Times" }
-     }
-     set current_font_spec "{$current_font} 12 $fontweight"
+    switch -- $gn_f {
+        0 { set current_font $fontname}
+        1 { set current_font "Helvetica" }
+        2 { set current_font "Times" }
+    }
+    set current_font_spec "{$current_font} 12 $fontweight"
 
-     $id.label.fontpopup_label configure -text $current_font \
-          -font $current_font_spec
-     $id.label.name_entry configure -font $current_font_spec
-     $id.colors.sections.fr_bk configure -font $current_font_spec
-     $id.colors.sections.lb_bk configure -font $current_font_spec
+    $id.label.fontpopup_label configure -text $current_font \
+        -font $current_font_spec
+    $id.label.name_entry configure -font $current_font_spec
+    $id.colors.sections.fr_bk configure -font $current_font_spec
+    $id.colors.sections.lb_bk configure -font $current_font_spec
 }
 
 proc iemgui_lb {id} {
@@ -2433,40 +3047,44 @@ proc iemgui_apply {id} {
     if {[eval concat $$var_iemgui_snd] == ""} {set hhhsnd "empty"} else {set hhhsnd [eval concat $$var_iemgui_snd]}
     if {[eval concat $$var_iemgui_rcv] == ""} {set hhhrcv "empty"} else {set hhhrcv [eval concat $$var_iemgui_rcv]}
     if {[eval concat $$var_iemgui_gui_nam] == ""} {set hhhgui_nam "empty"
-        } else {
-    set hhhgui_nam [eval concat $$var_iemgui_gui_nam]}
+    } else {
+        set hhhgui_nam [eval concat $$var_iemgui_gui_nam]}
 
     if {[string index $hhhsnd 0] == "$"} {
-       set hhhsnd [string replace $hhhsnd 0 0 #] }
+        set hhhsnd [string replace $hhhsnd 0 0 #] }
     if {[string index $hhhrcv 0] == "$"} {
-       set hhhrcv [string replace $hhhrcv 0 0 #] }
+        set hhhrcv [string replace $hhhrcv 0 0 #] }
     if {[string index $hhhgui_nam 0] == "$"} {
-       set hhhgui_nam [string replace $hhhgui_nam 0 0 #] }
+        set hhhgui_nam [string replace $hhhgui_nam 0 0 #] }
     
     set hhhsnd [pdtk_unspace $hhhsnd]
     set hhhrcv [pdtk_unspace $hhhrcv]
     set hhhgui_nam [pdtk_unspace $hhhgui_nam]
-    
+
+# make sure the offset boxes have a value
+    if {[eval concat $$var_iemgui_gn_dx] eq ""} {set $var_iemgui_gn_dx 0}
+    if {[eval concat $$var_iemgui_gn_dy] eq ""} {set $var_iemgui_gn_dy 0}
+
     pd [concat $id dialog \
-        [eval concat $$var_iemgui_wdt] \
-        [eval concat $$var_iemgui_hgt] \
-        [eval concat $$var_iemgui_min_rng] \
-        [eval concat $$var_iemgui_max_rng] \
-        [eval concat $$var_iemgui_lin0_log1] \
-        [eval concat $$var_iemgui_loadbang] \
-        [eval concat $$var_iemgui_num] \
-        $hhhsnd \
-        $hhhrcv \
-        $hhhgui_nam \
-        [eval concat $$var_iemgui_gn_dx] \
-        [eval concat $$var_iemgui_gn_dy] \
-        [eval concat $$var_iemgui_gn_f] \
-        [eval concat $$var_iemgui_gn_fs] \
-        [eval concat $$var_iemgui_bcol] \
-        [eval concat $$var_iemgui_fcol] \
-        [eval concat $$var_iemgui_lcol] \
-        [eval concat $$var_iemgui_steady] \
-        \;]
+            [eval concat $$var_iemgui_wdt] \
+            [eval concat $$var_iemgui_hgt] \
+            [eval concat $$var_iemgui_min_rng] \
+            [eval concat $$var_iemgui_max_rng] \
+            [eval concat $$var_iemgui_lin0_log1] \
+            [eval concat $$var_iemgui_loadbang] \
+            [eval concat $$var_iemgui_num] \
+            $hhhsnd \
+            $hhhrcv \
+            $hhhgui_nam \
+            [eval concat $$var_iemgui_gn_dx] \
+            [eval concat $$var_iemgui_gn_dy] \
+            [eval concat $$var_iemgui_gn_f] \
+            [eval concat $$var_iemgui_gn_fs] \
+            [eval concat $$var_iemgui_bcol] \
+            [eval concat $$var_iemgui_fcol] \
+            [eval concat $$var_iemgui_lcol] \
+            [eval concat $$var_iemgui_steady] \
+            \;]
 }
 
 proc iemgui_cancel {id} {pd [concat $id cancel \;]}
@@ -2477,19 +3095,18 @@ proc iemgui_ok {id} {
 }
 
 proc pdtk_iemgui_dialog {id mainheader \
-        dim_header wdt min_wdt wdt_label hgt min_hgt hgt_label \
-        rng_header min_rng min_rng_label max_rng max_rng_label rng_sched \
-        lin0_log1 lilo0_label lilo1_label loadbang steady num_label num \
-        snd rcv \
-        gui_name \
-        gn_dx gn_dy \
-        gn_f gn_fs \
-        bcol fcol lcol} {
+                             dim_header wdt min_wdt wdt_label hgt min_hgt hgt_label \
+                             rng_header min_rng min_rng_label max_rng max_rng_label rng_sched \
+                             lin0_log1 lilo0_label lilo1_label loadbang steady num_label num \
+                             snd rcv \
+                             gui_name \
+                             gn_dx gn_dy \
+                             gn_f gn_fs \
+                             bcol fcol lcol} {
 
     set vid [string trimleft $id .]
-
-     global pd_nt
-     global fontname fontweight
+    global pd_nt
+    global fontname fontweight
 
     set var_iemgui_wdt [concat iemgui_wdt_$vid]
     global $var_iemgui_wdt
@@ -2554,18 +3171,18 @@ proc pdtk_iemgui_dialog {id mainheader \
     set $var_iemgui_num $num
     set $var_iemgui_steady $steady
     if {$snd == "empty"} {set $var_iemgui_snd [format ""]
-        } else {set $var_iemgui_snd [format "%s" $snd]}
+    } else {set $var_iemgui_snd [format "%s" $snd]}
     if {$rcv == "empty"} {set $var_iemgui_rcv [format ""]
-        } else {set $var_iemgui_rcv [format "%s" $rcv]}
+    } else {set $var_iemgui_rcv [format "%s" $rcv]}
     if {$gui_name == "empty"} {set $var_iemgui_gui_nam [format ""]
-        } else {set $var_iemgui_gui_nam [format "%s" $gui_name]}
+    } else {set $var_iemgui_gui_nam [format "%s" $gui_name]}
     
     if {[string index [eval concat $$var_iemgui_snd] 0] == "#"} {
-       set $var_iemgui_snd [string replace [eval concat $$var_iemgui_snd] 0 0 $] }
+        set $var_iemgui_snd [string replace [eval concat $$var_iemgui_snd] 0 0 $] }
     if {[string index [eval concat $$var_iemgui_rcv] 0] == "#"} {
-       set $var_iemgui_rcv [string replace [eval concat $$var_iemgui_rcv] 0 0 $] }
+        set $var_iemgui_rcv [string replace [eval concat $$var_iemgui_rcv] 0 0 $] }
     if {[string index [eval concat $$var_iemgui_gui_nam] 0] == "#"} {
-       set $var_iemgui_gui_nam [string replace [eval concat $$var_iemgui_gui_nam] 0 0 $] }
+        set $var_iemgui_gui_nam [string replace [eval concat $$var_iemgui_gui_nam] 0 0 $] }
     set $var_iemgui_gn_dx $gn_dx
     set $var_iemgui_gn_dy $gn_dy
     set $var_iemgui_gn_f $gn_f
@@ -2577,11 +3194,13 @@ proc pdtk_iemgui_dialog {id mainheader \
     
     set $var_iemgui_l2_f1_b0 0
 
-    toplevel $id
+    toplevel $id -class DialogWindow
     wm title $id [format "%s Properties" $mainheader]
     wm resizable $id 0 0
     wm protocol $id WM_DELETE_WINDOW [concat iemgui_cancel $id]
     
+    pdtk_panelkeybindings $id "iemgui"
+
     frame $id.dim
     pack $id.dim -side top
     label $id.dim.head -text $dim_header
@@ -2609,7 +3228,7 @@ proc pdtk_iemgui_dialog {id mainheader \
             pack $id.rng.min_lab $id.rng.min_ent -side left}
         if { $max_rng_label != "empty" } {
             pack $id.rng.dummy1 \
-            $id.rng.max_lab $id.rng.max_ent -side left} }
+                $id.rng.max_lab $id.rng.max_ent -side left} }
     
     if { [eval concat $$var_iemgui_lin0_log1] >= 0 || [eval concat $$var_iemgui_loadbang] >= 0 || [eval concat $$var_iemgui_num] > 0 || [eval concat $$var_iemgui_steady] >= 0 } {
         label $id.space1 -text ""
@@ -2642,12 +3261,12 @@ proc pdtk_iemgui_dialog {id mainheader \
     if {[eval concat $$var_iemgui_steady] >= 0} {
         pack $id.para.dummy3 $id.para.stdy_jmp -side left -expand 1}
 
-     frame $id.spacer0 -height 4
-     pack $id.spacer0 -side top
+    frame $id.spacer0 -height 4
+    pack $id.spacer0 -side top
     
-     labelframe $id.s_r -borderwidth 1 -pady 4 -text "messages" \
+    labelframe $id.s_r -borderwidth 1 -pady 4 -text "messages" \
         -font highlight_font
-     pack $id.s_r -side top -fill x -ipadx 5
+    pack $id.s_r -side top -fill x -ipadx 5
     frame $id.s_r.send
     pack $id.s_r.send -side top
     label $id.s_r.send.lab -text "   send-symbol:" -width 12  -justify right
@@ -2662,21 +3281,21 @@ proc pdtk_iemgui_dialog {id mainheader \
     if { $rcv != "norcvno" } {
         pack $id.s_r.receive.lab $id.s_r.receive.ent -side left}
     
-# get the current font name from the int given from C-space (gn_f)
-     set current_font $fontname
+    # get the current font name from the int given from C-space (gn_f)
+    set current_font $fontname
     if {[eval concat $$var_iemgui_gn_f] == 1} \
-          { set current_font "Helvetica" }
+        { set current_font "Helvetica" }
     if {[eval concat $$var_iemgui_gn_f] == 2} \
-          { set current_font "Times" }
+        { set current_font "Times" }
 
-     frame $id.spacer1 -height 7
-     pack $id.spacer1 -side top
+    frame $id.spacer1 -height 7
+    pack $id.spacer1 -side top
     
-     labelframe $id.label -borderwidth 1 -text "label" -pady 4 \
-          -font highlight_font
-     pack $id.label -side top -fill x
+    labelframe $id.label -borderwidth 1 -text "label" -pady 4 \
+        -font highlight_font
+    pack $id.label -side top -fill x
     entry $id.label.name_entry -textvariable $var_iemgui_gui_nam -width 30 \
-          -font [list $current_font 12 $fontweight]
+        -font [list $current_font 12 $fontweight]
     pack $id.label.name_entry -side top -expand yes -fill both -padx 5
     
     frame $id.label.xy -padx 27 -pady 1
@@ -2687,33 +3306,33 @@ proc pdtk_iemgui_dialog {id mainheader \
     label $id.label.xy.y_lab -text "y offset" -width 6
     entry $id.label.xy.y_entry -textvariable $var_iemgui_gn_dy -width 5
     pack $id.label.xy.x_lab $id.label.xy.x_entry $id.label.xy.dummy1 \
-         $id.label.xy.y_lab $id.label.xy.y_entry -side left -anchor e
+        $id.label.xy.y_lab $id.label.xy.y_entry -side left -anchor e
     
-     label $id.label.fontpopup_label -text $current_font \
-          -relief groove -font [list $current_font 12 $fontweight] -padx 5
+    label $id.label.fontpopup_label -text $current_font \
+        -relief groove -font [list $current_font 12 $fontweight] -padx 5
     pack $id.label.fontpopup_label -side left -anchor w -expand yes -fill x
     label $id.label.fontsize_label -text "size" -width 4
     entry $id.label.fontsize_entry -textvariable $var_iemgui_gn_fs -width 5
-     pack $id.label.fontsize_entry $id.label.fontsize_label \
-          -side right -anchor e -padx 5 -pady 5
-     menu $id.popup
-     $id.popup add command \
-          -label $fontname \
-          -font [format {{%s} 12 %s} $fontname $fontweight] \
-          -command "iemgui_toggle_font $id 0" 
-     $id.popup add command \
-          -label "Helvetica" \
-          -font [format {Helvetica 12 %s} $fontweight] \
-          -command "iemgui_toggle_font $id 1" 
-     $id.popup add command \
-          -label "Times" \
-          -font [format {Times 12 %s} $fontweight] \
-          -command "iemgui_toggle_font $id 2" 
-     bind $id.label.fontpopup_label <Button> \
-          [list tk_popup $id.popup %X %Y]
-
-     frame $id.spacer2 -height 7
-     pack $id.spacer2 -side top
+    pack $id.label.fontsize_entry $id.label.fontsize_label \
+        -side right -anchor e -padx 5 -pady 5
+    menu $id.popup
+    $id.popup add command \
+        -label $fontname \
+        -font [format {{%s} 12 %s} $fontname $fontweight] \
+        -command "iemgui_toggle_font $id 0" 
+    $id.popup add command \
+        -label "Helvetica" \
+        -font [format {Helvetica 12 %s} $fontweight] \
+        -command "iemgui_toggle_font $id 1" 
+    $id.popup add command \
+        -label "Times" \
+        -font [format {Times 12 %s} $fontweight] \
+        -command "iemgui_toggle_font $id 2" 
+    bind $id.label.fontpopup_label <Button> \
+        [list tk_popup $id.popup %X %Y]
+
+    frame $id.spacer2 -height 7
+    pack $id.spacer2 -side top
     
     labelframe $id.colors -borderwidth 1 -text "colors" -font highlight_font
     pack $id.colors -fill x -ipadx 5 -ipady 4
@@ -2721,146 +3340,121 @@ proc pdtk_iemgui_dialog {id mainheader \
     frame $id.colors.select
     pack $id.colors.select -side top
     radiobutton $id.colors.select.radio0 -value 0 -variable \
-          $var_iemgui_l2_f1_b0 -text "background" -width 10 -justify left
+        $var_iemgui_l2_f1_b0 -text "background" -width 10 -justify left
     radiobutton $id.colors.select.radio1 -value 1 -variable \
-          $var_iemgui_l2_f1_b0 -text "front" -width 5 -justify left
+        $var_iemgui_l2_f1_b0 -text "front" -width 5 -justify left
     radiobutton $id.colors.select.radio2 -value 2 -variable \
-          $var_iemgui_l2_f1_b0 -text "label" -width 5 -justify left
+        $var_iemgui_l2_f1_b0 -text "label" -width 5 -justify left
     if { [eval concat $$var_iemgui_fcol] >= 0 } {
-          pack $id.colors.select.radio0 $id.colors.select.radio1 \
-                $id.colors.select.radio2 -side left
-     } else {
-          pack $id.colors.select.radio0 $id.colors.select.radio2 -side left \
-     }
+        pack $id.colors.select.radio0 $id.colors.select.radio1 \
+            $id.colors.select.radio2 -side left
+    } else {
+        pack $id.colors.select.radio0 $id.colors.select.radio2 -side left \
+        }
     
     frame $id.colors.sections
     pack $id.colors.sections -side top
     button $id.colors.sections.but -text "compose color" -width 12 \
-             -command "iemgui_choose_col_bkfrlb $id"
+        -command "iemgui_choose_col_bkfrlb $id"
     pack $id.colors.sections.but -side left -anchor w -padx 10 -pady 5 \
-          -expand yes -fill x
+        -expand yes -fill x
     if { [eval concat $$var_iemgui_fcol] >= 0 } {
-          label $id.colors.sections.fr_bk -text "o=||=o" -width 6 \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
-       -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
-       -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
+        label $id.colors.sections.fr_bk -text "o=||=o" -width 6 \
+            -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
+            -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \
+            -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
     } else {
-          label $id.colors.sections.fr_bk -text "o=||=o" -width 6 \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
-     }
-     label $id.colors.sections.lb_bk -text "testlabel" -width 9 \
-       -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
-       -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
-         -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
-          -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
+        label $id.colors.sections.fr_bk -text "o=||=o" -width 6 \
+            -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+            -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
+    }
+    label $id.colors.sections.lb_bk -text "testlabel" -width 9 \
+        -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+        -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \
+        -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
+        -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \
+        -font [list $current_font 12 $fontweight] -padx 2 -pady 2 -relief ridge
     pack $id.colors.sections.lb_bk $id.colors.sections.fr_bk \
-          -side right -anchor e -expand yes -fill both -pady 7
+        -side right -anchor e -expand yes -fill both -pady 7
 
-# color scheme by Mary Ann Benedetto http://piR2.org
+    # color scheme by Mary Ann Benedetto http://piR2.org
     frame $id.colors.r1
     pack $id.colors.r1 -side top
     foreach i { 0 1 2 3 4 5 6 7 8 9} \
-          hexcol { 0xFFFFFF 0xDFDFDF 0xBBBBBB 0xFFC7C6 0xFFE3C6 \
-                            0xFEFFC6 0xC6FFC7 0xc6FEFF 0xC7C6FF 0xE3C6FF } \
-          {
-                label $id.colors.r1.c$i -background [format "#%6.6x" $hexcol] \
-                     -activebackground [format "#%6.6x" $hexcol] -relief ridge \
-                     -padx 7 -pady 0
-                bind $id.colors.r1.c$i <Button> [format "iemgui_preset_col %s %d" $id $hexcol] 
-          }
+        hexcol { 0xFFFFFF 0xDFDFDF 0xBBBBBB 0xFFC7C6 0xFFE3C6 \
+                     0xFEFFC6 0xC6FFC7 0xc6FEFF 0xC7C6FF 0xE3C6FF } \
+        {
+            label $id.colors.r1.c$i -background [format "#%6.6x" $hexcol] \
+                -activebackground [format "#%6.6x" $hexcol] -relief ridge \
+                -padx 7 -pady 0
+            bind $id.colors.r1.c$i <Button> [format "iemgui_preset_col %s %d" $id $hexcol] 
+        }
     pack $id.colors.r1.c0 $id.colors.r1.c1 $id.colors.r1.c2 $id.colors.r1.c3 \
-          $id.colors.r1.c4 $id.colors.r1.c5 $id.colors.r1.c6 $id.colors.r1.c7 \
-          $id.colors.r1.c8 $id.colors.r1.c9 -side left
+        $id.colors.r1.c4 $id.colors.r1.c5 $id.colors.r1.c6 $id.colors.r1.c7 \
+        $id.colors.r1.c8 $id.colors.r1.c9 -side left
     
     frame $id.colors.r2
     pack $id.colors.r2 -side top
     foreach i { 0 1 2 3 4 5 6 7 8 9 } \
-          hexcol { 0x9F9F9F 0x7C7C7C 0x606060 0xFF0400 0xFF8300 \
-                            0xFAFF00 0x00FF04 0x00FAFF 0x0400FF 0x9C00FF } \
-          {
-                label $id.colors.r2.c$i -background [format "#%6.6x" $hexcol] \
-                     -activebackground [format "#%6.6x" $hexcol] -relief ridge \
-                     -padx 7 -pady 0
-                bind  $id.colors.r2.c$i <Button> \
-                     [format "iemgui_preset_col %s %d" $id $hexcol] 
-          }
+        hexcol { 0x9F9F9F 0x7C7C7C 0x606060 0xFF0400 0xFF8300 \
+                     0xFAFF00 0x00FF04 0x00FAFF 0x0400FF 0x9C00FF } \
+        {
+            label $id.colors.r2.c$i -background [format "#%6.6x" $hexcol] \
+                -activebackground [format "#%6.6x" $hexcol] -relief ridge \
+                -padx 7 -pady 0
+            bind  $id.colors.r2.c$i <Button> \
+                [format "iemgui_preset_col %s %d" $id $hexcol] 
+        }
     pack $id.colors.r2.c0 $id.colors.r2.c1 $id.colors.r2.c2 $id.colors.r2.c3 \
-          $id.colors.r2.c4 $id.colors.r2.c5 $id.colors.r2.c6 $id.colors.r2.c7 \
-          $id.colors.r2.c8 $id.colors.r2.c9 -side left
+        $id.colors.r2.c4 $id.colors.r2.c5 $id.colors.r2.c6 $id.colors.r2.c7 \
+        $id.colors.r2.c8 $id.colors.r2.c9 -side left
     
     frame $id.colors.r3
     pack $id.colors.r3 -side top
     foreach i { 0 1 2 3 4 5 6 7 8 9 } \
-          hexcol { 0x404040 0x202020 0x000000 0x551312 0x553512 \
-                            0x535512 0x0F4710 0x0E4345 0x131255 0x2F004D } \
-          {
-                label $id.colors.r3.c$i -background [format "#%6.6x" $hexcol] \
-                     -activebackground [format "#%6.6x" $hexcol] -relief ridge \
-                     -padx 7 -pady 0
-                bind  $id.colors.r3.c$i <Button> \
-                     [format "iemgui_preset_col %s %d" $id $hexcol] 
-          }
+        hexcol { 0x404040 0x202020 0x000000 0x551312 0x553512 \
+                     0x535512 0x0F4710 0x0E4345 0x131255 0x2F004D } \
+        {
+            label $id.colors.r3.c$i -background [format "#%6.6x" $hexcol] \
+                -activebackground [format "#%6.6x" $hexcol] -relief ridge \
+                -padx 7 -pady 0
+            bind  $id.colors.r3.c$i <Button> \
+                [format "iemgui_preset_col %s %d" $id $hexcol] 
+        }
     pack $id.colors.r3.c0 $id.colors.r3.c1 $id.colors.r3.c2 $id.colors.r3.c3 \
-          $id.colors.r3.c4 $id.colors.r3.c5 $id.colors.r3.c6 $id.colors.r3.c7 \
-          $id.colors.r3.c8 $id.colors.r3.c9 -side left
+        $id.colors.r3.c4 $id.colors.r3.c5 $id.colors.r3.c6 $id.colors.r3.c7 \
+        $id.colors.r3.c8 $id.colors.r3.c9 -side left
     
     frame $id.cao -pady 10
     pack $id.cao -side top
     button $id.cao.cancel -text {Cancel} -width 6 \
         -command "iemgui_cancel $id"
     label $id.cao.dummy1 -text "" -width 3
-     button $id.cao.apply -text {Apply} -width 6 -command "iemgui_apply $id"
+    button $id.cao.apply -text {Apply} -width 6 -command "iemgui_apply $id"
     label $id.cao.dummy2 -text "" -width 3
     button $id.cao.ok -text {OK} -width 6 \
         -command "iemgui_ok $id"
     
     pack $id.cao.cancel $id.cao.dummy1 -side left
-     pack $id.cao.apply $id.cao.dummy2 -side left
+    pack $id.cao.apply $id.cao.dummy2 -side left
     pack $id.cao.ok -side left
 
-    if {[info tclversion] < 8.4} {
-        bind $id <Key-Tab> {tkTabToWindow [tk_focusNext %W]}
-        bind $id <<PrevWindow>> {tkTabToWindow [tk_focusPrev %W]}
-    } else {
-        bind $id <Key-Tab> {tk::TabToWindow [tk_focusNext %W]}
-        bind $id <<PrevWindow>> {tk::TabToWindow [tk_focusPrev %W]}
-    }
+ #   if {[info tclversion] < 8.4} {
+ #       bind $id <Key-Tab> {tkTabToWindow [tk_focusNext %W]}
+ #       bind $id <<PrevWindow>> {tkTabToWindow [tk_focusPrev %W]}
+ #   } else {
+ #       bind $id <Key-Tab> {tk::TabToWindow [tk_focusNext %W]}
+ #       bind $id <<PrevWindow>> {tk::TabToWindow [tk_focusPrev %W]}
+ #   }
     
-    bind $id.dim.w_ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.dim.h_ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.rng.min_ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.rng.max_ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.para.num_ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.s_r.send.ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.s_r.receive.ent <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.label.name_entry <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.label.xy.x_entry <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.label.xy.y_entry <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.label.fontsize_entry <KeyPress-Return> [concat iemgui_ok $id]
-    bind $id.cao.ok <KeyPress-Return> [concat iemgui_ok $id]
-    pdtk_standardkeybindings $id.dim.w_ent
-    pdtk_standardkeybindings $id.dim.h_ent
-    pdtk_standardkeybindings $id.rng.min_ent
-    pdtk_standardkeybindings $id.rng.max_ent
-    pdtk_standardkeybindings $id.para.num_ent
-    pdtk_standardkeybindings $id.s_r.send.ent
-    pdtk_standardkeybindings $id.s_r.receive.ent
-    pdtk_standardkeybindings $id.label.name_entry
-    pdtk_standardkeybindings $id.label.xy.x_entry
-    pdtk_standardkeybindings $id.label.xy.y_entry
-    pdtk_standardkeybindings $id.label.fontsize_entry
-    pdtk_standardkeybindings $id.cao.ok
-    
-    $id.dim.w_ent select from 0
-    $id.dim.w_ent select adjust end
-    focus $id.dim.w_ent
+#    $id.dim.w_ent select from 0
+#    $id.dim.w_ent select adjust end
+#    focus $id.dim.w_ent
 }
 # end of change "iemlib"
 
@@ -2868,9 +3462,9 @@ proc pdtk_iemgui_dialog {id mainheader \
 # see comments above (pdtk_gatom_dialog) about variable name handling 
 
 proc array_apply {id} {
-# strip "." from the TK id to make a variable name suffix 
+    # strip "." from the TK id to make a variable name suffix 
     set vid [string trimleft $id .]
-# for each variable, make a local variable to hold its name...
+    # for each variable, make a local variable to hold its name...
     set var_array_name [concat array_name_$vid]
     global $var_array_name
     set var_array_n [concat array_n_$vid]
@@ -2883,16 +3477,16 @@ proc array_apply {id} {
     global $var_array_otherflag
     set mofo [eval concat $$var_array_name]
     if {[string index $mofo 0] == "$"} {
-       set mofo [string replace $mofo 0 0 #] }
+        set mofo [string replace $mofo 0 0 #] }
 
     set saveit [eval concat $$var_array_saveit]
     set drawasrects [eval concat $$var_array_drawasrects]
 
     pd [concat $id arraydialog $mofo \
-        [eval concat $$var_array_n] \
-        [expr $saveit + 2 * $drawasrects] \
-        [eval concat $$var_array_otherflag] \
-        \;]
+            [eval concat $$var_array_n] \
+            [expr $saveit + 2 * $drawasrects] \
+            [eval concat $$var_array_otherflag] \
+            \;]
 }
 
 # jsarlo
@@ -2931,11 +3525,13 @@ proc pdtk_array_dialog {id name n flags newone} {
     set $var_array_drawasrects [expr ( $flags & 2 ) != 0]
     set $var_array_otherflag 0
 
-    toplevel $id
+    toplevel $id -class DialogWindow
     wm title $id {array}
     wm resizable $id 0 0
     wm protocol $id WM_DELETE_WINDOW [concat array_cancel $id]
 
+    pdtk_panelkeybindings $id "array"
+
     frame $id.name
     pack $id.name -side top
     label $id.name.label -text "name"
@@ -3002,10 +3598,6 @@ proc pdtk_array_dialog {id name n flags newone} {
     if {$newone == 0} {pack $id.buttonframe.apply -side left -expand 1}
     pack $id.buttonframe.ok -side left -expand 1
     
-    bind $id.name.entry <KeyPress-Return> [concat array_ok $id]
-    bind $id.n.entry <KeyPress-Return> [concat array_ok $id]
-    pdtk_standardkeybindings $id.name.entry
-    pdtk_standardkeybindings $id.n.entry
     $id.name.entry select from 0
     $id.name.entry select adjust end
     focus $id.name.entry
@@ -3015,9 +3607,9 @@ proc pdtk_array_dialog {id name n flags newone} {
 # see comments above (pdtk_gatom_dialog) about variable name handling 
 
 proc canvas_apply {id} {
-# strip "." from the TK id to make a variable name suffix 
+    # strip "." from the TK id to make a variable name suffix 
     set vid [string trimleft $id .]
-# for each variable, make a local variable to hold its name...
+    # for each variable, make a local variable to hold its name...
 
     set var_canvas_xscale [concat canvas_xscale_$vid]
     global $var_canvas_xscale
@@ -3045,18 +3637,18 @@ proc canvas_apply {id} {
     global $var_canvas_ymargin
 
     pd [concat $id donecanvasdialog \
-        [eval concat $$var_canvas_xscale] \
-        [eval concat $$var_canvas_yscale] \
-        [expr [eval concat $$var_canvas_graphme]+2*[eval concat $$var_canvas_hidetext]] \
-        [eval concat $$var_canvas_x1] \
-        [eval concat $$var_canvas_y1] \
-        [eval concat $$var_canvas_x2] \
-        [eval concat $$var_canvas_y2] \
-        [eval concat $$var_canvas_xpix] \
-        [eval concat $$var_canvas_ypix] \
-        [eval concat $$var_canvas_xmargin] \
-        [eval concat $$var_canvas_ymargin] \
-        \;]
+            [eval concat $$var_canvas_xscale] \
+            [eval concat $$var_canvas_yscale] \
+            [expr [eval concat $$var_canvas_graphme]+2*[eval concat $$var_canvas_hidetext]] \
+            [eval concat $$var_canvas_x1] \
+            [eval concat $$var_canvas_y1] \
+            [eval concat $$var_canvas_x2] \
+            [eval concat $$var_canvas_y2] \
+            [eval concat $$var_canvas_xpix] \
+            [eval concat $$var_canvas_ypix] \
+            [eval concat $$var_canvas_xmargin] \
+            [eval concat $$var_canvas_ymargin] \
+            \;]
 }
 
 proc canvas_cancel {id} {
@@ -3071,7 +3663,7 @@ proc canvas_ok {id} {
 
 proc canvas_checkcommand {id} {
     set vid [string trimleft $id .]
-#    puts stderr [concat canvas_checkcommand $id $vid]
+    #    puts stderr [concat canvas_checkcommand $id $vid]
 
     set var_canvas_xscale [concat canvas_xscale_$vid]
     global $var_canvas_xscale
@@ -3115,11 +3707,11 @@ proc canvas_checkcommand {id} {
         set x2 [eval concat $$var_canvas_x2]
         set y2 [eval concat $$var_canvas_y2]
         if { [eval concat $$var_canvas_x1] == 0 && \
-             [eval concat $$var_canvas_y1] == 0 && \
-             [eval concat $$var_canvas_x2] == 0 && \
-             [eval concat $$var_canvas_y2] == 0 } {
-                set $var_canvas_x2 1
-                set $var_canvas_y2 1
+                 [eval concat $$var_canvas_y1] == 0 && \
+                 [eval concat $$var_canvas_x2] == 0 && \
+                 [eval concat $$var_canvas_y2] == 0 } {
+            set $var_canvas_x2 1
+            set $var_canvas_y2 1
         }
         if { [eval concat $$var_canvas_xpix] == 0 } {
             set $var_canvas_xpix 85
@@ -3151,7 +3743,7 @@ proc canvas_checkcommand {id} {
 }
 
 proc pdtk_canvas_dialog {id xscale yscale graphme x1 y1 x2 y2 \
-    xpix ypix xmargin ymargin} {
+                             xpix ypix xmargin ymargin} {
     set vid [string trimleft $id .]
 
     set var_canvas_xscale [concat canvas_xscale_$vid]
@@ -3192,10 +3784,12 @@ proc pdtk_canvas_dialog {id xscale yscale graphme x1 y1 x2 y2 \
     set $var_canvas_xmargin $xmargin
     set $var_canvas_ymargin $ymargin
 
-    toplevel $id
+    toplevel $id -class DialogWindow
     wm title $id {canvas}
     wm protocol $id WM_DELETE_WINDOW [concat canvas_cancel $id]
 
+    pdtk_panelkeybindings $id "canvas"
+
     label $id.toplabel -text "Canvas Properties"
     pack $id.toplabel -side top
     
@@ -3265,10 +3859,6 @@ proc pdtk_canvas_dialog {id xscale yscale graphme x1 y1 x2 y2 \
     pack $id.buttonframe.apply -side left -expand 1
     pack $id.buttonframe.ok -side left -expand 1
 
-    bind $id.xscale.entry <KeyPress-Return> [concat canvas_ok $id]
-    bind $id.yscale.entry <KeyPress-Return> [concat canvas_ok $id]
-    pdtk_standardkeybindings $id.xscale.entry
-    pdtk_standardkeybindings $id.yscale.entry
     $id.xscale.entry select from 0
     $id.xscale.entry select adjust end
     focus $id.xscale.entry
@@ -3277,23 +3867,23 @@ proc pdtk_canvas_dialog {id xscale yscale graphme x1 y1 x2 y2 \
 
 ############ pdtk_data_dialog -- run a data dialog #########
 proc dodata_send {name} {
-#    puts stderr [$name.text get 0.0 end]
+    #    puts stderr [$name.text get 0.0 end]
 
     for {set i 1} {[$name.text compare [concat $i.0 + 3 chars] < end]} \
-            {incr i 1} {
-#       puts stderr [concat it's [$name.text get $i.0 [expr $i + 1].0]]
-        set cmd [concat $name data [$name.text get $i.0 [expr $i + 1].0] \;]
-#       puts stderr $cmd
-        pd $cmd
-    }
+        {incr i 1} {
+            #       puts stderr [concat it's [$name.text get $i.0 [expr $i + 1].0]]
+            set cmd [concat $name data [$name.text get $i.0 [expr $i + 1].0] \;]
+            #       puts stderr $cmd
+            pd $cmd
+        }
     set cmd [concat $name end \;]
-#    puts stderr $cmd
+    #    puts stderr $cmd
     pd $cmd
 }
 
 proc dodata_cancel {name} {
     set cmd [concat $name cancel \;]
-#    puts stderr $cmd
+    #    puts stderr $cmd
     pd $cmd
 }
 
@@ -3304,10 +3894,14 @@ proc dodata_ok {name} {
 
 proc pdtk_data_dialog {name stuff} {
     global pd_deffont
-    toplevel $name
+    toplevel $name -class DialogWindow
     wm title $name {Atom}
     wm protocol $name WM_DELETE_WINDOW [concat dodata_cancel $name]
 
+    pdtk_panelkeybindings $name "dodata"
+    bind $name <Control-t> [concat dodata_ok $name]
+    bind $name <Control-s> [concat dodata_send $name]
+
     frame $name.buttonframe
     pack $name.buttonframe -side bottom -fill x -pady 2m
     button $name.buttonframe.send -text {Send (Ctrl s)}\
@@ -3324,8 +3918,6 @@ proc pdtk_data_dialog {name stuff} {
     pack $name.text -side left -fill both -expand 1
     $name.text insert end $stuff
     focus $name.text
-    bind $name.text <Control-t> [concat dodata_ok $name]
-    bind $name.text <Control-s> [concat dodata_send $name]
 }
 
 ############ check or uncheck the "edit" menu item ##############
@@ -3341,48 +3933,67 @@ proc pdtk_canvas_editval {name value} {
 
 ############ pdtk_text_new -- create a new text object #2###########
 proc pdtk_text_new {canvasname myname x y text font color} {
-#    if {$font < 13} {set fontname [format -*-courier-bold----%d-* $font]}
-#    if {$font >= 13} {set fontname [format -*-courier-----%d-* $font]}
-
-        global pd_fontlist 
-        switch -- $font {
-                8  { set typeface [lindex $pd_fontlist 0] }
-                9  { set typeface [lindex $pd_fontlist 1] }
-                10 { set typeface [lindex $pd_fontlist 2] }
-                12 { set typeface [lindex $pd_fontlist 3] }
-                14 { set typeface [lindex $pd_fontlist 4] }
-                16 { set typeface [lindex $pd_fontlist 5] }
-                18 { set typeface [lindex $pd_fontlist 6] }
-                24 { set typeface [lindex $pd_fontlist 7] }
-                30 { set typeface [lindex $pd_fontlist 8] }
-                36 { set typeface [lindex $pd_fontlist 9] }
-        }
+    #    if {$font < 13} {set fontname [format -*-courier-bold----%d-* $font]}
+    #    if {$font >= 13} {set fontname [format -*-courier-----%d-* $font]}
+
+    global pd_fontlist pd_nt
+    switch -- $font {
+        8  { set typeface [lindex $pd_fontlist 0] }
+        9  { set typeface [lindex $pd_fontlist 1] }
+        10 { set typeface [lindex $pd_fontlist 2] }
+        12 { set typeface [lindex $pd_fontlist 3] }
+        14 { set typeface [lindex $pd_fontlist 4] }
+        16 { set typeface [lindex $pd_fontlist 5] }
+        18 { set typeface [lindex $pd_fontlist 6] }
+        24 { set typeface [lindex $pd_fontlist 7] }
+        30 { set typeface [lindex $pd_fontlist 8] }
+        36 { set typeface [lindex $pd_fontlist 9] }
+    }
 
-    $canvasname create text $x $y \
-        -font $typeface \
-        -tags $myname -text $text -fill $color  -anchor nw 
-#    pd [concat $myname size [$canvasname bbox $myname] \;]
+    $canvasname create text $x $y -font $typeface \
+        -tags $myname -text $text -fill $color -anchor nw 
+	$canvasname bind $myname <Home> [concat $canvasname icursor $myname 0]
+	$canvasname bind $myname <End> [concat $canvasname icursor $myname end]
+	if {$pd_nt == 2} { # emacs bindings for Mac OS X
+		$canvasname bind $myname <Control-a> \
+			[concat $canvasname icursor $myname 0]
+		$canvasname bind $myname <Control-e> \
+			[concat $canvasname icursor $myname end]
+	}
+    #    pd [concat $myname size [$canvasname bbox $myname] \;]
 }
 
 ################ pdtk_text_set -- change the text ##################
 proc pdtk_text_set {canvasname myname text} {
     $canvasname itemconfig $myname -text $text
-#    pd [concat $myname size [$canvasname bbox $myname] \;]
+    #    pd [concat $myname size [$canvasname bbox $myname] \;]
 }
 
 ############### event binding procedures for Pd window ################
 
 proc pdtk_pd_ctrlkey {name key shift} {
-#    puts stderr [concat key $key shift $shift]
-#    .dummy itemconfig goo -text [concat ---> control-key event $key];
-    if {$key == "n" || $key == "N"} {menu_new}
-    if {$key == "o" || $key == "O"} {menu_open .}
-    if {$key == "m" || $key == "M"} {menu_send}
-    if {$key == "q" || $key == "Q"} {
-        if {$shift == 1} {menu_really_quit} else    {menu_quit}
-    }
-    if {$key == "slash"} {menu_audio 1}
-    if {$key == "period"} {menu_audio 0}
+	global pd_nt
+    #    puts stderr [concat key $key shift $shift]
+    #    .dummy itemconfig goo -text [concat ---> control-key event $key];
+    if {$shift == 1} {
+        if {$key == "l" || $key == "L"} {menu_clear_console}
+        if {$key == "q" || $key == "Q"} {menu_really_quit}
+        if {$key == "r" || $key == "R"} {menu_toggle_console}
+    } else {
+        if {$key == "b" || $key == "B"} {::helpbrowser::open_helpbrowser}
+        if {$key == "n" || $key == "N"} {menu_new}
+        if {$key == "o" || $key == "O"} {menu_open}
+        if {$key == "q" || $key == "Q"} {menu_quit}
+        if {$key == "r" || $key == "R"} {menu_raise_console}
+        if {$pd_nt != 2} {
+            # Cmd-m is minimize window on Mac OS X
+            if {$key == "m" || $key == "M"} {menu_send}
+		} else {
+            if {$key == "m" || $key == "M"} {menu_minimize}
+		}
+        if {$key == "slash"} {menu_audio 1}
+        if {$key == "period"} {menu_audio 0}
+	}
 }
 
 ######### startup function.  ##############
@@ -3391,34 +4002,43 @@ proc pdtk_pd_ctrlkey {name key shift} {
 # seven "useful" font sizes.
 
 # tb: user defined typefaces
-proc pdtk_pd_startup {version apilist midiapilist fontname_from_pd \
-        fontweight_from_pd} {
-#    puts stderr [concat $version $apilist $fontname]
+proc pdtk_pd_startup {version apilist midiapilist fontname_from_pd fontweight_from_pd} {
+    #    puts stderr [concat $version $apilist $fontname]
     global pd_myversion pd_apilist pd_midiapilist pd_nt
     set pd_myversion $version
     set pd_apilist $apilist
     set pd_midiapilist $midiapilist
-     global fontname fontweight
-     set fontname $fontname_from_pd
-     set fontweight $fontweight_from_pd
+    global fontname fontweight
+    set fontname $fontname_from_pd
+    set fontweight $fontweight_from_pd
     global pd_fontlist
     set pd_fontlist {}
+	
+	# on Mac OS X, lower the Pd window to the background so patches open on top
+	if {$pd_nt == 2} { lower . }
+	# on Windows, raise the Pd window so that it has focused when launched
+	if {$pd_nt == 1} { raise . }
 
     set fontlist ""
-    foreach i {8 9 10 12 14 16 18 24 30 36} {
-       set font [format {{%s} %d %s} $fontname_from_pd -$i $fontweight_from_pd]
-       set pd_fontlist [linsert $pd_fontlist 100000 $font] 
-       set width0 [font measure  $font x]
-       set height0 [lindex [font metrics $font] 5]
-       set fontlist [concat $fontlist $i [font measure  $font x] \
-           [lindex [font metrics $font] 5]]
+	if {$pd_nt != 1 && $::tcl_version eq "8.5"} {
+		set sizelist "5 6 8 9 10 12 14 16 19 25"
+	} else {
+		set sizelist "8 9 10 12 14 16 18 24 30 36"
+	}
+    foreach i $sizelist {
+        set font [format {{%s} %d %s} $fontname_from_pd $i $fontweight_from_pd]
+        set pd_fontlist [linsert $pd_fontlist 100000 $font] 
+        set width0 [font measure  $font x]
+        set height0 [lindex [font metrics $font] 5]
+        set fontlist [concat $fontlist $i [font measure  $font x] \
+                          [lindex [font metrics $font] 5]]
     }
 
     set tclpatch [info patchlevel]
     if {$tclpatch == "8.3.0" || \
-        $tclpatch == "8.3.1" || \
-        $tclpatch == "8.3.2" || \
-        $tclpatch == "8.3.3" } {
+            $tclpatch == "8.3.1" || \
+            $tclpatch == "8.3.2" || \
+            $tclpatch == "8.3.3" } {
         set oldtclversion 1
     } else {
         set oldtclversion 0
@@ -3434,9 +4054,9 @@ proc pdtk_pd_startup {version apilist midiapilist fontname_from_pd \
         global pd_macdropped pd_macready
         set pd_macready 1
         foreach file $pd_macdropped {
-            pd [concat pd open [pdtk_enquote [file tail $file]] \
-                [pdtk_enquote  [file dirname $file]] \;]
-                menu_doc_open [file dirname $file] [file tail $file]
+            . configure -cursor watch
+            .printout.text configure -cursor watch
+            menu_doc_open [file dirname $file] [file tail $file]
         }
     }
 }
@@ -3445,11 +4065,11 @@ proc pdtk_pd_startup {version apilist midiapilist fontname_from_pd \
 proc pdtk_pd_dsp {value} {
     global ctrls_audio_on
     if {$value == "ON"} {set ctrls_audio_on 1} else {set ctrls_audio_on 0}
-#    puts stderr [concat its $ctrls_audio_on]
+    #    puts stderr [concat its $ctrls_audio_on]
 }
 
 proc pdtk_pd_meters {indb outdb inclip outclip} {
-#    puts stderr [concat meters $indb $outdb $inclip $outclip]
+    #    puts stderr [concat meters $indb $outdb $inclip $outclip]
     global ctrls_inlevel ctrls_outlevel
     set ctrls_inlevel $indb
     if {$inclip == 1} {
@@ -3502,9 +4122,13 @@ proc pdtk_pd_texteditor {stuff} {
     set name [format ".text%d" $edit_number]
     set edit_number [expr $edit_number + 1]
 
-    toplevel $name
+    toplevel $name -class DialogWindow
     wm title $name {TEXT}
 
+    pdtk_standardkeybindings $name
+    bind $name <Control-t> {texteditor_ok %W}
+    bind $name <Control-s> {texteditor_send %W}
+
     frame $name.buttons
     pack $name.buttons -side bottom -fill x -pady 2m
     button $name.buttons.send -text {Send (Ctrl s)}\
@@ -3521,8 +4145,6 @@ proc pdtk_pd_texteditor {stuff} {
     pack $name.text -side left -fill both -expand 1
     $name.text insert end $stuff
     focus $name.text
-    bind $name.text <Control-t> {texteditor_ok %W}
-    bind $name.text <Control-s> {texteditor_send %W}
 }
 
 #  paste text into a text box
@@ -3721,10 +4343,13 @@ proc pdtk_audio_dialog {id indev1 indev2 indev3 indev4 \
     set audio_sr $sr
     set audio_advance $advance
     set audio_callback $callback
-    toplevel $id
+    toplevel $id -class DialogWindow
+    wm group $id .
     wm title $id {audio}
     wm protocol $id WM_DELETE_WINDOW [concat audio_cancel $id]
 
+    pdtk_panelkeybindings $id "audio"
+
     frame $id.buttonframe
     pack $id.buttonframe -side bottom -fill x -pady 2m
     button $id.buttonframe.cancel -text {Cancel}\
@@ -3886,17 +4511,9 @@ proc pdtk_audio_dialog {id indev1 indev2 indev3 indev4 \
             -command  {pd pd audio-properties 1 \;}
         pack $id.longbutton.b
     }
-    bind $id.srf.x1 <KeyPress-Return> [concat audio_ok $id]
-    bind $id.srf.x2 <KeyPress-Return> [concat audio_ok $id]
-    bind $id.in1f.x2 <KeyPress-Return> [concat audio_ok $id]
-    bind $id.out1f.x2 <KeyPress-Return> [concat audio_ok $id]
     $id.srf.x1 select from 0
     $id.srf.x1 select adjust end
     focus $id.srf.x1
-    pdtk_standardkeybindings $id.srf.x1
-    pdtk_standardkeybindings $id.srf.x2
-    pdtk_standardkeybindings $id.in1f.x2
-    pdtk_standardkeybindings $id.out1f.x2
 }
 
 ####################### midi dialog ##################
@@ -3975,10 +4592,12 @@ proc pdtk_midi_dialog {id indev1 indev2 indev3 indev4 \
     set midi_alsain [llength $midi_indevlist]
     set midi_alsaout [llength $midi_outdevlist]
 
-    toplevel $id
+    toplevel $id -class DialogWindow
     wm title $id {midi}
     wm protocol $id WM_DELETE_WINDOW [concat midi_cancel $id]
 
+    pdtk_panelkeybindings $id "midi"
+
     frame $id.buttonframe
     pack $id.buttonframe -side bottom -fill x -pady 2m
     button $id.buttonframe.cancel -text {Cancel}\
@@ -4110,9 +4729,12 @@ proc pdtk_alsa_midi_dialog {id indev1 indev2 indev3 indev4 \
     set midi_alsaout [llength $midi_outdevlist]
     
     toplevel $id
+    wm group $id .
     wm title $id {midi}
     wm protocol $id WM_DELETE_WINDOW [concat midi_cancel $id]
 
+    pdtk_panelkeybindings $id "midi"
+
     frame $id.buttonframe
     pack $id.buttonframe -side bottom -fill x -pady 2m
     button $id.buttonframe.cancel -text {Cancel}\
@@ -4235,255 +4857,414 @@ proc pdtk_alsa_midi_dialog {id indev1 indev2 indev3 indev4 \
     }
 }
 
-############ pdtk_path_dialog -- dialog window for search path #########
 
-proc path_apply {id} {
-    global pd_extrapath pd_verbose
-    global pd_path_count
-    set pd_path {}
+############ namespace ScrollBox -- utility scrollbar with default bindings #########
+# This ScrollBox is used in the Path and Startup dialogs to edit lists of options
 
-    for {set x 0} {$x < $pd_path_count} {incr x} {
-        global pd_path$x
-        set this_path [set pd_path$x]
-        if {0==[string match "" $this_path]} {
-            lappend pd_path [pdtk_encodedialog $this_path]
+namespace eval ScrollBox {
+    # This variable keeps track of the last list element we clicked on,
+    # used to implement drag-drop reordering of list items
+    variable lastIdx 0
+
+    proc get_curidx { id } {
+        set idx [$id.listbox.box index active]
+        if {$idx < 0 || \
+            $idx == [$id.listbox.box index end]} {
+            return [expr {[$id.listbox.box index end] + 1}]
         }
+        return [expr $idx]
     }
 
-    pd [concat pd path-dialog $pd_extrapath $pd_verbose $pd_path \;]
-}
-
-proc path_cancel {id} {
-    pd [concat $id cancel \;]
-}
+    proc insert_item { id idx name } {
+        if {$name != ""} {
+            $id.listbox.box insert $idx $name
+            set activeIdx [expr {[$id.listbox.box index active] + 1}]
+            $id.listbox.box see $activeIdx
+            $id.listbox.box activate $activeIdx
+            $id.listbox.box selection clear 0 end
+            $id.listbox.box selection set active
+            focus $id.listbox.box
+        }
+    }
 
-proc path_ok {id} {
-    path_apply $id
-    path_cancel $id
-}
+    proc add_item { id add_method } {
+        set dir [$add_method]
+        insert_item $id [expr {[get_curidx $id] + 1}] $dir
+    }
 
-proc pdtk_path_dialog {id extrapath verbose} {
-    global pd_extrapath pd_verbose
-    global pd_path
-    global pd_path_count
+    proc edit_item { id edit_method } {
+        set idx [expr {[get_curidx $id]}]
+        set initialValue [$id.listbox.box get $idx]
+        if {$initialValue != ""} {
+            set dir [$edit_method $initialValue]
 
-    set pd_path_count [expr [llength $pd_path] + 2]
-    if { $pd_path_count < 10 } { set pd_path_count 10 }
+            if {$dir != ""} {
+                $id.listbox.box delete $idx
+                insert_item $id $idx $dir
+            }
+            $id.listbox.box activate $idx
+            $id.listbox.box selection clear 0 end
+            $id.listbox.box selection set active
+            focus $id.listbox.box
+        }
+    }
 
-    for {set x 0} {$x < $pd_path_count} {incr x} {
-        global pd_path$x
-        set pd_path$x [lindex $pd_path $x]
+    proc delete_item { id } {
+        set cursel [$id.listbox.box curselection]
+        foreach idx $cursel {
+            $id.listbox.box delete $idx
+        }
     }
 
-    set pd_extrapath $extrapath
-    set pd_verbose $verbose
-    toplevel $id
-    wm title $id {PD search path for patches and other files}
-    wm protocol $id WM_DELETE_WINDOW [concat path_cancel $id]
+    # Double-clicking on the listbox should edit the current item,
+    # or add a new one if there is no current
+    proc dbl_click { id edit_method add_method x y } {
+        if { $x == "" || $y == "" } {
+            return
+        }
 
-    frame $id.buttonframe
-    pack $id.buttonframe -side bottom -fill x -pady 2m
-    button $id.buttonframe.cancel -text {Cancel}\
-        -command "path_cancel $id"
-    button $id.buttonframe.apply -text {Apply}\
-        -command "path_apply $id"
-    button $id.buttonframe.ok -text {OK}\
-        -command "path_ok $id"
-    pack $id.buttonframe.cancel -side left -expand 1
-    pack $id.buttonframe.apply -side left -expand 1
-    pack $id.buttonframe.ok -side left -expand 1
-    
-    frame $id.extraframe
-    pack $id.extraframe -side bottom -fill x -pady 2m
-    checkbutton $id.extraframe.extra -text {use standard extensions} \
-        -variable pd_extrapath -anchor w 
-    checkbutton $id.extraframe.verbose -text {verbose} \
-        -variable pd_verbose -anchor w 
-    button $id.extraframe.save -text {Save all settings}\
-        -command "path_apply $id \; pd pd save-preferences \\;"
-    pack $id.extraframe.extra $id.extraframe.verbose $id.extraframe.save \
-        -side left -expand 1
+        set curBB [$id.listbox.box bbox @$x,$y]
+
+        # listbox bbox returns an array of 4 items in the order:
+        # left, top, width, height
+        set height [lindex $curBB 3]
+        set top [lindex $curBB 1]
+        if { $height == "" || $top == "" } {
+            # If for some reason we didn't get valid bbox info,
+            # we want to default to adding a new item
+            set height 0
+            set top 0
+            set y 1
+        }
+
+        set bottom [expr {$height + $top}]
 
-    for {set x 0} {$x < $pd_path_count} {incr x} {
-        entry $id.f$x -textvariable pd_path$x -width 80
-        bind $id.f$x <KeyPress-Return> [concat path_ok $id]
-        pdtk_standardkeybindings $id.f$x
-        pack $id.f$x -side top
+        if {$y > $bottom} {
+            add_item $id $add_method
+        } else {
+            edit_item $id $edit_method
+        }
     }
 
-    focus $id.f0
-}
+    proc click { id x y } {
+        # record the index of the current element being
+        # clicked on
+        set ::lastIdx [$id.listbox.box index @$x,$y]
 
-proc pd_set {var value} {
-        global $var
-        set $var $value
-}
+        focus $id.listbox.box
+    }
 
-########## pdtk_startup_dialog -- dialog window for startup options #########
+    # For drag-and-drop reordering, recall the last-clicked index
+    # and move it to the position of the item currently under the mouse
+    proc release { id x y } {
+        set curIdx [$id.listbox.box index @$x,$y]
 
-proc startup_apply {id} {
-    global pd_nort pd_flags
-    global pd_startup_count
+        if { $curIdx != $::lastIdx } {
+            # clear any current selection
+            $id.listbox.box selection clear 0 end
 
-    set pd_startup {}
-    for {set x 0} {$x < $pd_startup_count} {incr x} {
-        global pd_startup$x
-        set this_startup [set pd_startup$x]
-        if {0==[string match "" $this_startup]} {lappend pd_startup [pdtk_encodedialog $this_startup]}
+            set oldIdx $::lastIdx
+            set newIdx [expr {$curIdx+1}]
+            set selIdx $curIdx
+
+            if { $curIdx < $::lastIdx } {
+                set oldIdx [expr {$::lastIdx + 1}]
+                set newIdx $curIdx
+                set selIdx $newIdx
+            }
+
+            $id.listbox.box insert $newIdx [$id.listbox.box get $::lastIdx]
+            $id.listbox.box delete $oldIdx
+            $id.listbox.box activate $newIdx
+            $id.listbox.box selection set $selIdx
+        }
     }
 
-    pd [concat pd startup-dialog $pd_nort [pdtk_encodedialog $pd_flags] $pd_startup \;]
-}
+    # Make a ScrollBox widget in a given window and set of data.
+    #
+    # id - the parent window for the scrollbox
+    # listdata - array of data to populate the scrollbox
+    # add_method - method to be called when we add a new item
+    # edit_method - method to be called when we edit an existing item
+    proc make { id listdata add_method edit_method } {
+        global pd_nt
+        frame $id.listbox
+        listbox $id.listbox.box \
+            -selectmode browse -activestyle dotbox \
+            -yscrollcommand [list "$id.listbox.scrollbar" set]
+
+        # Create a scrollbar and keep it in sync with the current
+        # listbox view
+        pack $id.listbox.box [scrollbar "$id.listbox.scrollbar" \
+                -command [list $id.listbox.box yview]] \
+                -side left -fill y -anchor w 
+
+        # Populate the listbox widget
+        foreach item $listdata {
+            $id.listbox.box insert end $item
+        }
 
-proc startup_cancel {id} {
-    pd [concat $id cancel \;]
+        # Standard listbox key/mouse bindings
+        event add <<Delete>> <Delete>
+        if { $pd_nt == 2 } { event add <<Delete>> <BackSpace> }
+
+        bind $id.listbox.box <ButtonPress> "ScrollBox::click $id %x %y"
+        bind $id.listbox.box <Double-1> "ScrollBox::dbl_click $id $edit_method $add_method %x %y"
+        bind $id.listbox.box <ButtonRelease> "ScrollBox::release $id %x %y"
+        bind $id.listbox.box <Return> "ScrollBox::edit_item $id $edit_method"
+        bind $id.listbox.box <<Delete>> "ScrollBox::delete_item $id"
+
+        # <Configure> is called when the user modifies the window
+        # We use it to capture resize events, to make sure the
+        # currently selected item in the listbox is always visible
+        bind $id <Configure> "$id.listbox.box see active"
+
+        # The listbox should expand to fill its containing window
+        # the "-fill" option specifies which direction (x, y or both) to fill, while
+        # the "-expand" option (false by default) specifies whether the widget
+        # should fill
+        pack $id.listbox.box -side left -fill both -expand 1
+        pack $id.listbox -side top -pady 2m -padx 2m -fill both -expand 1
+
+        # All widget interactions can be performed without buttons, but
+        # we still need a "New..." button since the currently visible window
+        # might be full (even though the user can still expand it)
+        frame $id.actions 
+        pack $id.actions -side top -padx 2m -fill x 
+        button $id.actions.add_path -text {New...} \
+            -command "ScrollBox::add_item $id $add_method"
+        button $id.actions.edit_path -text {Edit...} \
+            -command "ScrollBox::edit_item $id $edit_method"
+        button $id.actions.delete_path -text {Delete} \
+            -command "ScrollBox::delete_item $id"
+
+        pack $id.actions.delete_path -side right -pady 2m
+        pack $id.actions.edit_path -side right -pady 2m
+        pack $id.actions.add_path -side right -pady 2m
+
+        $id.listbox.box activate end
+        $id.listbox.box selection set end
+        focus $id.listbox.box
+    }
 }
 
-proc startup_ok {id} {
-    startup_apply $id
-    startup_cancel $id
-}
 
-proc pdtk_startup_dialog {id nort flags} {
-    global pd_nort pd_nt pd_flags
-    global pd_startup
-    global pd_startup_count
 
-    set pd_startup_count [expr [llength $pd_startup] + 2]
-    if { $pd_startup_count < 10 } { set pd_startup_count 10 }
+############ namespace dlg_ScrollBoxWindow -- scrollbox window with default bindings #########
+## This is the base dialog behind the Path and Startup dialogs
+## This namespace specifies everything the two dialogs have in common,
+## with arguments specifying the differences
+##
+## By default, this creates a dialog centered on the viewing area of the screen
+## with cancel, apply, and OK buttons
+## which contains a ScrollBox widget populated with the given data
+namespace eval dlg_ScrollBoxWindow {
+    proc get_listdata { id } {
+        return [$id.listbox.box get 0 end]
+    }
 
-    for {set x 0} {$x < $pd_startup_count} {incr x} {
-        global pd_startup$x
-        set pd_startup$x [lindex $pd_startup $x]
+    proc do_apply { id commit_method listdata } {
+        $commit_method [pdtk_encode $listdata]
+        pd "pd save-preferences \;"
     }
 
-    set pd_nort $nort
-    set pd_flags $flags
-    toplevel $id
-    wm title $id {Pd binaries to load (on next startup)}
-    wm protocol $id WM_DELETE_WINDOW [concat startup_cancel $id]
+    # Cancel button action
+    proc cancel { id } {
+        pd [concat $id cancel \;]
+    }
 
-    frame $id.buttonframe
-    pack $id.buttonframe -side bottom -fill x -pady 2m
-    button $id.buttonframe.cancel -text {Cancel}\
-        -command "startup_cancel $id"
-    button $id.buttonframe.apply -text {Apply}\
-        -command "startup_apply $id"
-    button $id.buttonframe.ok -text {OK}\
-        -command "startup_ok $id"
-    pack $id.buttonframe.cancel -side left -expand 1
-    pack $id.buttonframe.apply -side left -expand 1
-    pack $id.buttonframe.ok -side left -expand 1
-    
-    frame $id.flags
-    pack $id.flags -side bottom
-    label $id.flags.entryname -text {startup flags}
-    entry $id.flags.entry -textvariable pd_flags -width 80
-    bind $id.flags.entry <KeyPress-Return> [concat startup_ok $id]
-    pdtk_standardkeybindings $id.flags.entry
-    pack $id.flags.entryname $id.flags.entry -side left
-
-    frame $id.nortframe
-    pack $id.nortframe -side bottom -fill x -pady 2m
-    if {$pd_nt != 1} {
-        checkbutton $id.nortframe.nort -text {defeat real-time scheduling} \
-            -variable pd_nort -anchor w
-    }
-    button $id.nortframe.save -text {Save all settings}\
-        -command "startup_apply $id \; pd pd save-preferences \\;"
-    if {$pd_nt != 1} {
-        pack $id.nortframe.nort $id.nortframe.save -side left -expand 1
-    } else {
-        pack $id.nortframe.save -side left -expand 1
+    # Apply button action
+    proc apply { id commit_method } {
+        do_apply $id $commit_method [get_listdata $id]
+    }
+
+    # OK button action
+    # The "commit" action can take a second or more,
+    # long enough to be noticeable, so we only write
+    # the changes after closing the dialog
+    proc ok { id commit_method } {
+        set listdata [get_listdata $id]
+        cancel $id
+        do_apply $id $commit_method $listdata
     }
 
+    # "Constructor" function for building the window
+    # id -- the window id to use
+    # listdata -- the data used to populate the scrollbox
+    # add_method -- a reference to a proc to be called when the user adds a new item
+    # edit_method -- same as above, for editing and existing item
+    # commit_method -- same as above, to commit during the "apply" action
+    # title -- top-level title for the dialog
+    # width, height -- initial width and height dimensions for the window, also minimum size
+    proc make { id listdata add_method edit_method commit_method title width height } {
+        toplevel $id -class DialogWindow
+        wm title $id $title
+        wm protocol $id WM_DELETE_WINDOW [concat dlg_ScrollBoxWindow::cancel $id]
+
+        # Enforce a minimum size for the window
+        wm minsize $id $width $height
+
+        # Set the current dimensions of the window
+        wm geometry $id "${width}x${height}"
+		
+        # Center the window on the screen
+        after idle "center_window $id"
+
+        # Add the scrollbox widget
+        ScrollBox::make $id $listdata $add_method $edit_method
+
+        # Use two frames for the buttons, since we want them both
+        # bottom and right
+        frame $id.nb
+        pack $id.nb -side bottom -fill x -pady 2m
+
+        frame $id.nb.buttonframe
+        pack $id.nb.buttonframe -side right -padx 2m
+
+        button $id.nb.buttonframe.cancel -text {Cancel}\
+            -command "dlg_ScrollBoxWindow::cancel $id"
+        button $id.nb.buttonframe.apply -text {Apply}\
+            -command "dlg_ScrollBoxWindow::apply $id $commit_method"
+        button $id.nb.buttonframe.ok -text {OK}\
+            -command "dlg_ScrollBoxWindow::ok $id $commit_method"
+
+        pack $id.nb.buttonframe.cancel -side left -expand 1 -padx 2m
+        pack $id.nb.buttonframe.apply -side left -expand 1 -padx 2m
+        pack $id.nb.buttonframe.ok -side left -expand 1 -padx 2m
+   }
+}
 
 
-    for {set x 0} {$x < $pd_startup_count} {incr x} {
-        entry $id.f$x -textvariable pd_startup$x -width 80
-        bind $id.f$x <KeyPress-Return> [concat startup_ok $id]
-        pdtk_standardkeybindings $id.f$x
-        pack $id.f$x -side top
+############ pdtk_path_dialog -- dialog window for search path #########
+namespace eval dlg_Path {
+    proc choosePath { curValue title } {
+        if {! [file exist $curValue] } {set curValue "~"}
+        return [tk_chooseDirectory -initialdir $curValue -title $title]
     }
 
-    focus $id.f0
-}
+    proc add {} {
+        return [dlg_Path::choosePath "" {Add a new path}]
+    }
 
-########## data-driven dialog -- convert others to this someday? ##########
+    proc edit { curValue } {
+        return [dlg_Path::choosePath $curValue "Edit existing path \[$curValue\]"]
+    }
 
-proc ddd_apply {id} {
-    set vid [string trimleft $id .]
-    set var_count [concat ddd_count_$vid]
-    global $var_count
-    set count [eval concat $$var_count]
-    set values {}
+    proc commit { new_path } {
+        global pd_extrapath pd_verbose
+        global pd_path
+        set pd_path $new_path
 
-    for {set x 0} {$x < $count} {incr x} {
-        set varname [concat ddd_var_$vid$x]
-        global $varname
-        lappend values [eval concat $$varname]
+        pd [concat pd path-dialog $pd_extrapath $pd_verbose $pd_path \;]
     }
-    set cmd [concat $id done $values \;]
 
-#    puts stderr $cmd
-    pd $cmd
+    proc init { id extrapath verbose } {
+        global pd_extrapath pd_verbose
+        global pd_path
+
+        set pd_extrapath $extrapath
+        set pd_verbose $verbose
+
+        dlg_ScrollBoxWindow::make $id $pd_path \
+            dlg_Path::add dlg_Path::edit dlg_Path::commit \
+            {PD search path for patches and other files} \
+            400 300 
+
+        frame $id.extraframe
+        pack $id.extraframe -side bottom -pady 2m
+        checkbutton $id.extraframe.extra -text {use standard extensions} \
+            -variable pd_extrapath -anchor w 
+        checkbutton $id.extraframe.verbose -text {verbose} \
+            -variable pd_verbose -anchor w 
+        pack $id.extraframe.extra $id.extraframe.verbose \
+            -side left -expand 1
+    }
 }
 
-proc ddd_cancel {id} {
-    set cmd [concat $id cancel \;]
-#    puts stderr $cmd
-    pd $cmd
+proc pdtk_path_dialog { id extrapath verbose } {
+    dlg_Path::init $id $extrapath $verbose
 }
 
-proc ddd_ok {id} {
-    ddd_apply $id
-    ddd_cancel $id
-}
 
-proc ddd_dialog {id dialogname} {
-    global ddd_fields
-    set vid [string trimleft $id .]
-    set count [llength $ddd_fields]
+########## pdtk_startup_dialog -- dialog window for startup options #########
+namespace eval dlg_Startup {
+    # Create a simple modal window with an entry widget
+    # for editing/adding a startup command 
+    # (the next-best-thing to in-place editing)
+    proc chooseCommand { prompt initialValue } {
+        global cmd
+        set cmd $initialValue
+
+        toplevel .inputBox
+        wm title .inputBox $prompt
+        wm minsize .inputBox 450 30
+        wm resizable .inputBox 1 0
+        wm geom .inputBox "450x30"
+        after idle { center_window .inputBox 10 50 }
+
+        button .inputBox.cmdOK -text "OK" -command { destroy .inputBox }
+
+        entry .inputBox.txtInput -width 50 -textvariable cmd 
+        pdtk_standardkeybindings .inputBox.txtInput
+        bind .inputBox.txtInput <KeyPress-Return> { destroy .inputBox }
+        bind .inputBox.txtInput <KeyPress-Escape> { destroy .inputBox }
+        pack .inputBox.txtInput -side left -expand 1 -fill x -padx 2m
+        pack .inputBox.cmdOK -side left 
+
+        focus .inputBox.txtInput
+
+        grab .inputBox
+        raise .inputBox
+        wm transient .inputBox
+        tkwait window .inputBox
+
+        return $cmd
+    }
 
-    set var_count [concat ddd_count_$vid]
-    global $var_count
-    set $var_count $count
+    proc add {} {
+        return [chooseCommand {Add new startup command} ""]
+    }
 
-    toplevel $id
-    label $id.label -text $dialogname
-    pack $id.label -side top
-    wm title $id "Pd dialog"
-    wm resizable $id 0 0
-    wm protocol $id WM_DELETE_WINDOW [concat ddd_cancel $id]
-
-    for {set x 0} {$x < $count} {incr x} {
-        set varname [concat ddd_var_$vid$x]
-        global $varname
-        set fieldname [lindex $ddd_fields $x 0]
-        set $varname [lindex $ddd_fields $x 1]
-        frame $id.frame$x
-        pack $id.frame$x -side top -anchor e
-        label $id.frame$x.label -text $fieldname
-        entry $id.frame$x.entry -textvariable $varname -width 20
-        bind $id.frame$x.entry <KeyPress-Return> [concat ddd_ok $id]
-        pdtk_standardkeybindings $id.frame$x.entry
-        pack $id.frame$x.entry $id.frame$x.label -side right
+    proc edit { curValue } {
+        return [chooseCommand {Edit startup command} $curValue]
     }
-            
-    frame $id.buttonframe -pady 5
-    pack $id.buttonframe -side top -fill x -pady 2
-    button $id.buttonframe.cancel -text {Cancel}\
-        -command "ddd_cancel $id"
-    button $id.buttonframe.apply -text {Apply}\
-        -command "ddd_apply $id"
-    button $id.buttonframe.ok -text {OK}\
-        -command "ddd_ok $id"
-    pack $id.buttonframe.cancel $id.buttonframe.apply \
-        $id.buttonframe.ok -side left -expand 1
 
-#    $id.params.entry select from 0
-#    $id.params.entry select adjust end
-#    focus $id.params.entry
+    proc commit { new_startup } {
+        global pd_nort pd_flags
+        global pd_startup
+        set pd_startup $new_startup
+
+        pd [concat pd startup-dialog $pd_nort [pdtk_encodedialog $pd_flags] $pd_startup \;]
+    }
+
+    proc init { id nort flags } {
+        global pd_nort pd_nt pd_flags
+        global pd_startup
+
+        set pd_nort $nort
+        set pd_flags $flags
+
+        dlg_ScrollBoxWindow::make $id $pd_startup \
+            dlg_Startup::add dlg_Startup::edit dlg_Startup::commit \
+            {PD binaries to load (on next startup)} \
+            400 300
+
+        label $id.entryname -text {startup flags:}
+        entry $id.entry -textvariable pd_flags -width 60
+        pdtk_standardkeybindings $id.entry
+        pack $id.entryname $id.entry -side left
+        pack $id.entry -side right -padx 2m -fill x -expand 1
+
+        frame $id.nortframe
+        pack $id.nortframe -side bottom -fill x -pady 2m
+        if {$pd_nt != 1} {
+            checkbutton $id.nortframe.nort -text {defeat real-time scheduling} \
+                -variable pd_nort -anchor w
+        }
+   }
 }
 
+proc pdtk_startup_dialog {id nort flags} {
+    dlg_Startup::init $id $nort $flags
+}
 
diff --git a/src/pkgIndex.tcl b/src/pkgIndex.tcl
new file mode 100644
index 000000000..13d4f4f77
--- /dev/null
+++ b/src/pkgIndex.tcl
@@ -0,0 +1,3 @@
+# Tcl package index file, version 1.1
+
+package ifneeded helpbrowser 0.1 [list source [file join $dir helpbrowser.tcl]]
diff --git a/src/s_audio.c b/src/s_audio.c
index 81438bbed..67555ac25 100644
--- a/src/s_audio.c
+++ b/src/s_audio.c
@@ -6,11 +6,14 @@
     audio settings from argparse routine and from dialog window. 
 */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include <stdio.h>
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+/* XXX Hack!!! These should be checked for independently of unistd.h ... */
 #include <sys/time.h>
 #include <sys/resource.h>
 #endif
diff --git a/src/s_audio_alsa.c b/src/s_audio_alsa.c
index a5034c8dc..328fff0c9 100644
--- a/src/s_audio_alsa.c
+++ b/src/s_audio_alsa.c
@@ -469,7 +469,7 @@ int alsa_send_dacs(void)
                 ((char *)(alsa_snd_buf))[3*j+1] = ((s>>8) & 255);
                 ((char *)(alsa_snd_buf))[3*j+2] = ((s>>16) & 255);
 #else
-                fprintf(stderr("big endian 24-bit not supported");
+                fprintf(stderr, "big endian 24-bit not supported");
 #endif
             }
             for (; i < thisdevchans; i++, ch++)
@@ -581,7 +581,7 @@ int alsa_send_dacs(void)
                         * (1./ INT32_MAX);
             }
 #else
-                fprintf(stderr("big endian 24-bit not supported");
+                fprintf(stderr, "big endian 24-bit not supported");
 #endif
         }
         else
diff --git a/src/s_audio_jack.c b/src/s_audio_jack.c
index 990a7a8cc..a9e6fa7f9 100644
--- a/src/s_audio_jack.c
+++ b/src/s_audio_jack.c
@@ -100,11 +100,13 @@ jack_srate (jack_nframes_t srate, void *arg)
 static void
 jack_shutdown (void *arg)
 {
-        /* Ignore for now */
-  //    exit (1);
+  verbose(1, "JACK-server shut down");
+  sys_close_audio();
+  jack_client = NULL;
 }
 
 static int jack_xrun(void* arg) {
+  verbose(1, "JACK-server xrun");
   jack_dio_error = 1;
   return 0;
 }
@@ -196,7 +198,7 @@ static int jack_connect_ports(char* client)
   if (jack_ports) 
     for (i=0;jack_ports[i] != NULL && i < sys_inchannels;i++)      
       if (jack_connect (jack_client, jack_ports[i], jack_port_name (input_port[i]))) 
-        fprintf (stderr, "cannot connect input ports %s -> %s\n", jack_ports[i],jack_port_name (input_port[i]));
+        error("JACK: cannot connect input ports %s -> %s", jack_ports[i],jack_port_name (input_port[i]));
       
   
   
@@ -205,7 +207,7 @@ static int jack_connect_ports(char* client)
   if (jack_ports) 
     for (i=0;jack_ports[i] != NULL && i < sys_outchannels;i++)      
       if (jack_connect (jack_client, jack_port_name (output_port[i]), jack_ports[i])) 
-        fprintf (stderr, "cannot connect output ports %s -> %s\n", jack_port_name (output_port[i]),jack_ports[i]);
+        error("JACK: cannot connect output ports %s -> %s", jack_port_name (output_port[i]),jack_ports[i]);
   
   
   
@@ -214,7 +216,8 @@ static int jack_connect_ports(char* client)
 }
 
 
-void pd_jack_error_callback(const char *desc) {
+static void pd_jack_error_callback(const char *desc) {
+  error("JACK error: %s", desc);
   return;
 }
 
@@ -228,28 +231,49 @@ jack_open_audio(int inchans, int outchans, int rate)
         int client_iterator = 0;
         int new_jack = 0;
         int srate;
+        jack_status_t status;
+
+        if(NULL==jack_client_new) {
+            fprintf(stderr,"JACK framework not available\n");
+            return 1;
+        }
 
         jack_dio_error = 0;
         
         if ((inchans == 0) && (outchans == 0)) return 0;
 
         if (outchans > NUM_JACK_PORTS) {
-                fprintf(stderr,"%d output ports not supported, setting to %d\n",outchans, NUM_JACK_PORTS);
+                error("JACK: %d output ports not supported, setting to %d",outchans, NUM_JACK_PORTS);
                 outchans = NUM_JACK_PORTS;
         }
 
         if (inchans > NUM_JACK_PORTS) {
-                fprintf(stderr,"%d input ports not supported, setting to %d\n",inchans, NUM_JACK_PORTS);
+                error("JACK: %d input ports not supported, setting to %d",inchans, NUM_JACK_PORTS);
                 inchans = NUM_JACK_PORTS;
         }
 
-        /* try to become a client of the JACK server (we allow two pd's)*/
+        /* try to become a client of the JACK server */
+        /* if no JACK server exists, start a default one (jack_client_open() does that for us... */
         if (!jack_client) {
           do {
             sprintf(port_name,"pure_data_%d",client_iterator);
             client_iterator++;
-          } while (((jack_client = jack_client_new (port_name)) == 0) && client_iterator < 2);
-        
+            /* do not try to start the jack-server...seems to make problems... */
+            jack_client = jack_client_open (port_name, JackNoStartServer, &status, NULL);
+            if (status & JackServerFailed) {
+              error("JACK: unable to connect to JACK server");
+              jack_client=NULL;
+              break;
+            }
+          } while (status & JackNameNotUnique);
+
+          if(status) {
+            if (status & JackServerStarted) {
+              post("JACK: started JACK server?");
+            } else {
+              post("JACK: jack returned status %d", status);
+            }
+          }
           
           if (!jack_client) { // jack spits out enough messages already, do not warn
             sys_inchannels = sys_outchannels = 0;
@@ -305,11 +329,21 @@ jack_open_audio(int inchans, int outchans, int rate)
         for (j = 0; j < inchans; j++) {
                 sprintf(port_name, "input%d", j);
                 if (!input_port[j]) input_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
+                if (!input_port[j]) {
+                  error("JACK: can only register %d input ports (instead of requested %d)", j, inchans);
+                  sys_inchannels = inchans = j;
+                  break;
+                }
         }
 
         for (j = 0; j < outchans; j++) {
                 sprintf(port_name, "output%d", j);
                 if (!output_port[j]) output_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
+                if (!output_port[j]) {
+                  error("JACK: can only register %d output ports (instead of requested %d)", j, outchans);
+                  sys_outchannels = outchans = j;
+                  break;
+                }
         } 
         outport_count = outchans;
 
@@ -317,7 +351,7 @@ jack_open_audio(int inchans, int outchans, int rate)
  
         if (new_jack) {
           if (jack_activate (jack_client)) {
-            fprintf (stderr, "cannot activate client\n");
+            error("JACK: cannot activate client");
             sys_inchannels = sys_outchannels = 0;
             return 1;
           }
@@ -399,7 +433,7 @@ void jack_getdevs(char *indevlist, int *nindevs,
 
 void jack_listdevs( void)
 {
-    post("device listing not implemented for jack yet\n");
+    error("device listing not implemented for jack yet");
 }
 
 #endif /* JACK */
diff --git a/src/s_file.c b/src/s_file.c
index fe266b371..67747ac58 100644
--- a/src/s_file.c
+++ b/src/s_file.c
@@ -6,24 +6,32 @@
  * this file implements a mechanism for storing and retrieving preferences.
  * Should later be renamed "preferences.c" or something.
  *
- * In unix this is handled by the "~/.pdsettings" file, in windows by
+ * In unix this is handled by the "~/.pdextended" file, in windows by
  * the registry, and in MacOS by the Preferences system.
  */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <errno.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+/* XXX Hack!  This should be done with a cleaner check. */
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
-#include <unistd.h>
 #endif
+
 #ifdef MSW
 #include <windows.h>
 #include <tchar.h>
@@ -43,23 +51,24 @@ static int sys_prefbufsize;
 
 static void sys_initloadpreferences( void)
 {
-    char filenamebuf[MAXPDSTRING], *homedir = getenv("HOME");
+    char filenamebuf[FILENAME_MAX], *homedir = getenv("HOME");
     int fd, length;
-    char user_prefs_file[MAXPDSTRING]; /* user prefs file */
+	char user_prefs_file[FILENAME_MAX]; /* user prefs file */
         /* default prefs embedded in the package */
-    char default_prefs_file[MAXPDSTRING];
+	char default_prefs_file[FILENAME_MAX];
     struct stat statbuf;
 
-    snprintf(default_prefs_file, MAXPDSTRING, "%s/default.pdsettings", 
-        sys_libdir->s_name);
+	snprintf(default_prefs_file, FILENAME_MAX, "%s/default.pdextended", 
+			 sys_libdir->s_name);
     if (homedir)
-        snprintf(user_prefs_file, MAXPDSTRING, "%s/.pdsettings", homedir);
-    if (stat(user_prefs_file, &statbuf) == 0) 
-        strncpy(filenamebuf, user_prefs_file, MAXPDSTRING);
-    else if (stat(default_prefs_file, &statbuf) == 0)
-        strncpy(filenamebuf, default_prefs_file, MAXPDSTRING);
-    else return;
-    filenamebuf[MAXPDSTRING-1] = 0;
+		snprintf(user_prefs_file, FILENAME_MAX, "%s/.pdextended", homedir);
+	if (stat(user_prefs_file, &statbuf) == 0) 
+		strncpy(filenamebuf, user_prefs_file, FILENAME_MAX);
+	else if (stat(default_prefs_file, &statbuf) == 0)
+		strncpy(filenamebuf, default_prefs_file, FILENAME_MAX);
+	else
+        return;
+    filenamebuf[FILENAME_MAX-1] = 0;
     if ((fd = open(filenamebuf, 0)) < 0)
     {
         if (sys_verbose)
@@ -128,17 +137,17 @@ static FILE *sys_prefsavefp;
 
 static void sys_initsavepreferences( void)
 {
-    char filenamebuf[MAXPDSTRING], errbuf[MAXPDSTRING],
+    char filenamebuf[FILENAME_MAX], errbuf[FILENAME_MAX],
         *homedir = getenv("HOME");
     FILE *fp;
 
     if (!homedir)
         return;
-    snprintf(filenamebuf, MAXPDSTRING, "%s/.pdsettings", homedir);
-    filenamebuf[MAXPDSTRING-1] = 0;
+    snprintf(filenamebuf, FILENAME_MAX, "%s/.pdextended", homedir);
+    filenamebuf[FILENAME_MAX-1] = 0;
     if ((sys_prefsavefp = fopen(filenamebuf, "w")) == NULL)
     {
-        snprintf(errbuf, MAXPDSTRING, "%s: %s",filenamebuf, strerror(errno));
+        snprintf(errbuf, FILENAME_MAX, "%s: %s",filenamebuf, strerror(errno));
         pd_error(0, errbuf);
     }
 }
@@ -172,7 +181,7 @@ static int sys_getpreference(const char *key, char *value, int size)
     HKEY hkey;
     DWORD bigsize = size;
     LONG err = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-        "Software\\Pd", 0,  KEY_QUERY_VALUE, &hkey);
+        "Software\\Pd-extended", 0,  KEY_QUERY_VALUE, &hkey);
     if (err != ERROR_SUCCESS)
     {
         return (0);
@@ -199,14 +208,14 @@ static void sys_putpreference(const char *key, const char *value)
 {
     HKEY hkey;
     LONG err = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
-        "Software\\Pd", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE,
+        "Software\\Pd-extended", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE,
         NULL, &hkey, NULL);
     if (err != ERROR_SUCCESS)
     {
         post("unable to create registry entry: %s\n", key);
         return;
     }
-    err = RegSetValueEx(hkey, key, 0, REG_SZ, value, strlen(value)+1);
+    err = RegSetValueEx(hkey, key, 0, REG_EXPAND_SZ, value, strlen(value)+1);
     if (err != ERROR_SUCCESS)
         post("unable to set registry entry: %s\n", key);
     RegCloseKey(hkey);
@@ -220,6 +229,9 @@ static void sys_donesavepreferences( void)
 
 #ifdef __APPLE__
 
+// prefs file that is currently the one to save to
+static char current_prefs[FILENAME_MAX] = "org.puredata.pdextended"; 
+
 static void sys_initloadpreferences( void)
 {
 }
@@ -228,21 +240,38 @@ static int sys_getpreference(const char *key, char *value, int size)
 {
     char cmdbuf[256];
     int nread = 0, nleft = size;
-    char embedded_prefs[MAXPDSTRING];
-    char user_prefs[MAXPDSTRING];
-    char *homedir = getenv("HOME");
+	char default_prefs[FILENAME_MAX]; // default prefs embedded in the package
+	char embedded_prefs[FILENAME_MAX]; // overrides others for standalone app
+	char embedded_prefs_file[FILENAME_MAX];
+	char user_prefs_file[FILENAME_MAX];
+	char *homedir = getenv("HOME");
     struct stat statbuf;
-   /* the 'defaults' command expects the filename without .plist at the
-        end */
-    snprintf(embedded_prefs, MAXPDSTRING, "%s/../org.puredata.pd",
-        sys_libdir->s_name);
-    snprintf(user_prefs, MAXPDSTRING,
-        "%s/Library/Preferences/org.puredata.pd.plist", homedir);
-    if (stat(user_prefs, &statbuf) == 0)
-        snprintf(cmdbuf, 256, "defaults read org.puredata.pd %s 2> /dev/null\n",
-            key);
-    else snprintf(cmdbuf, 256, "defaults read %s %s 2> /dev/null\n",
-            embedded_prefs, key);
+	/* the 'defaults' command expects the filename without .plist at the end */
+	snprintf(default_prefs, FILENAME_MAX, "%s/../org.puredata.pdextended.default", 
+			 sys_libdir->s_name);
+	snprintf(embedded_prefs, FILENAME_MAX, "%s/../org.puredata.pdextended", 
+			 sys_libdir->s_name);
+	snprintf(embedded_prefs_file, FILENAME_MAX, "%s.plist", embedded_prefs);
+	snprintf(user_prefs_file, FILENAME_MAX, 
+			 "%s/Library/Preferences/org.puredata.pdextended.plist", homedir);
+	if (stat(embedded_prefs_file, &statbuf) == 0) 
+	{
+		snprintf(cmdbuf, FILENAME_MAX + 20, 
+				 "defaults read '%s' %s 2> /dev/null\n", embedded_prefs, key);
+        strncpy(current_prefs, embedded_prefs, FILENAME_MAX);
+	}
+	else if (stat(user_prefs_file, &statbuf) == 0) 
+	{
+		snprintf(cmdbuf, FILENAME_MAX + 20, 
+				 "defaults read org.puredata.pdextended %s 2> /dev/null\n", key);
+        strcpy(current_prefs, "org.puredata.pdextended");
+	}
+	else 
+	{
+		snprintf(cmdbuf, FILENAME_MAX + 20, 
+				 "defaults read '%s' %s 2> /dev/null\n", default_prefs, key);
+        strcpy(current_prefs, "org.puredata.pdextended");
+	}
     FILE *fp = popen(cmdbuf, "r");
     while (nread < size)
     {
@@ -274,7 +303,8 @@ static void sys_putpreference(const char *key, const char *value)
 {
     char cmdbuf[MAXPDSTRING];
     snprintf(cmdbuf, MAXPDSTRING, 
-        "defaults write org.puredata.pd %s \"%s\" 2> /dev/null\n", key, value);
+             "defaults write '%s' %s \"%s\" 2> /dev/null\n",
+             current_prefs, key, value);
     system(cmdbuf);
 }
 
diff --git a/src/s_inter.c b/src/s_inter.c
index c67076f33..8eba03780 100644
--- a/src/s_inter.c
+++ b/src/s_inter.c
@@ -5,12 +5,18 @@
 /* Pd side of the Pd/Pd-gui interface.  Also, some system interface routines
 that didn't really belong anywhere. */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include "m_imp.h"
 #include "g_canvas.h"   /* for GUI queueing stuff */
-#ifndef MSW
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
+#ifndef _WIN32
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
@@ -20,11 +26,16 @@ that didn't really belong anywhere. */
 #include <sys/mman.h>
 #include <sys/resource.h>
 #endif
+
 #ifdef HAVE_BSTRING_H
 #include <bstring.h>
 #endif
-#ifdef _WIN32
+
+#ifdef HAVE_IO_H
 #include <io.h>
+#endif 
+
+#ifdef _WIN32
 #include <fcntl.h>
 #include <process.h>
 #include <winsock.h>
@@ -47,6 +58,7 @@ typedef int socklen_t;
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <pthread.h>
+#include <glob.h>
 #else
 #include <stdlib.h>
 #endif
@@ -59,7 +71,7 @@ typedef int socklen_t;
 #endif
 
 #ifndef WISHAPP
-#define WISHAPP "wish84.exe"
+#define WISHAPP "wish85.exe"
 #endif
 
 #ifdef __linux__
@@ -206,7 +218,7 @@ void sys_microsleep(int microsec)
     sys_domicrosleep(microsec, 1);
 }
 
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
 typedef void (*sighandler_t)(int);
 
 static void sys_signal(int signo, sighandler_t sigfun)
@@ -554,7 +566,7 @@ void socketreceiver_read(t_socketreceiver *x, int fd)
 
 void sys_closesocket(int fd)
 {
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     close(fd);
 #endif
 #ifdef MSW
@@ -872,7 +884,7 @@ int sys_startgui(const char *guidir)
     short version = MAKEWORD(2, 0);
     WSADATA nobby;
 #endif
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     int stdinpipe[2];
 #endif
     /* create an empty FD poll list */
@@ -880,7 +892,7 @@ int sys_startgui(const char *guidir)
     sys_nfdpoll = 0;
     inbinbuf = binbuf_new();
 
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     signal(SIGHUP, sys_huphandler);
     signal(SIGINT, sys_exithandler);
     signal(SIGQUIT, sys_exithandler);
@@ -910,7 +922,7 @@ int sys_startgui(const char *guidir)
         if (GetCurrentDirectory(MAXPDSTRING, cmdbuf) == 0)
             strcpy(cmdbuf, ".");
 #endif
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
         if (!getcwd(cmdbuf, MAXPDSTRING))
             strcpy(cmdbuf, ".");
         
@@ -1019,63 +1031,51 @@ int sys_startgui(const char *guidir)
         if (sys_verbose) fprintf(stderr, "port %d\n", portno);
 
 
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
         if (!sys_guicmd)
         {
 #ifdef __APPLE__
-            char *homedir = getenv("HOME"), filename[250];
+            int i;
             struct stat statbuf;
-                /* first look for Wish bundled with and renamed "Pd" */
-            sprintf(filename, "%s/../../MacOS/Pd", guidir);
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            if (!homedir || strlen(homedir) > 150)
-                goto nohomedir;
-                /* Look for Wish in user's Applications.  Might or might
-                not be names "Wish Shell", and might or might not be
-                in "Utilities" subdir. */
-            sprintf(filename,
-                "%s/Applications/Utilities/Wish shell.app/Contents/MacOS/Wish Shell",
-                    homedir);
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            sprintf(filename,
-                "%s/Applications/Utilities/Wish.app/Contents/MacOS/Wish",
-                    homedir);
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            sprintf(filename,
-                "%s/Applications/Wish shell.app/Contents/MacOS/Wish Shell",
-                    homedir);
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            sprintf(filename,
-                "%s/Applications/Wish.app/Contents/MacOS/Wish",
-                    homedir);
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-        nohomedir:
-                /* Perform the same search among system applications. */
-            strcpy(filename, 
-                "/usr/bin/wish");
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            strcpy(filename, 
-                "/Applications/Utilities/Wish Shell.app/Contents/MacOS/Wish Shell");
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            strcpy(filename, 
-                "/Applications/Utilities/Wish.app/Contents/MacOS/Wish");
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            strcpy(filename, 
-                "/Applications/Wish Shell.app/Contents/MacOS/Wish Shell");
-            if (stat(filename, &statbuf) >= 0)
-                goto foundit;
-            strcpy(filename, 
-                "/Applications/Wish.app/Contents/MacOS/Wish");
-        foundit:
-            sprintf(cmdbuf, "\"%s\" %s/pd.tk %d\n", filename, guidir, portno);
+            glob_t glob_buffer;
+            char *homedir = getenv("HOME");
+            char embed_glob[FILENAME_MAX];
+            char embed_filename[FILENAME_MAX], home_filename[FILENAME_MAX];
+            char *wish_paths[10] = {
+                "(did not find an embedded wish)",
+                "(did not find a home directory)",
+                "/Applications/Utilities/Wish.app/Contents/MacOS/Wish",
+                "/Applications/Utilities/Wish Shell.app/Contents/MacOS/Wish Shell",
+                "/Applications/Wish.app/Contents/MacOS/Wish",
+                "/Applications/Wish Shell.app/Contents/MacOS/Wish Shell",
+                "/usr/local/bin/wish8.4",
+                "/sw/bin/wish8.4"
+                "/opt/bin/wish8.4"
+                "/usr/bin/wish8.4"
+                "/usr/local/bin/wish8.4",
+                "/usr/local/bin/wish",
+                "/usr/bin/wish"
+            };
+            /* this glob is needed so the Wish executable can have the same
+             * filename as the Pd.app, i.e. 'Pd-0.42-3.app' should have a Wish
+             * executable called 'Pd-0.42-3.app/Contents/MacOS/Pd-0.42-3' */
+            sprintf(embed_glob, "%s/../../MacOS/Pd*", guidir);
+            glob_buffer.gl_matchc = 1; /* we only need one match */
+            glob(embed_glob, GLOB_LIMIT, NULL, &glob_buffer);
+            if (glob_buffer.gl_pathc > 0) {
+                strcpy(embed_filename, glob_buffer.gl_pathv[0]);
+                wish_paths[0] = embed_filename;
+            }
+            sprintf(home_filename,
+                    "%s/Applications/Wish.app/Contents/MacOS/Wish",homedir);
+            wish_paths[1] = home_filename;
+            for(i=0;i<10;i++) {
+                if (sys_verbose)
+                    fprintf(stderr, "Trying Wish at \"%s\"\n", wish_paths[i]);
+                if (stat(wish_paths[i], &statbuf) >= 0)
+                    break;
+            }
+            sprintf(cmdbuf,"\"%s\" %s/pd.tk %d\n",wish_paths[i],guidir,portno);
 #else
             sprintf(cmdbuf,
                 "TCL_LIBRARY=\"%s/tcl/library\" TK_LIBRARY=\"%s/tk/library\" \
@@ -1119,7 +1119,7 @@ int sys_startgui(const char *guidir)
             perror("pd: exec");
             _exit(1);
        }
-#endif /* UNISTD */
+#endif /* HAVE_UNISTD_H */
 
 #ifdef MSW
             /* in MSW land "guipath" is unused; we just do everything from
diff --git a/src/s_loader.c b/src/s_loader.c
index 6cc497c4b..e250998b9 100644
--- a/src/s_loader.c
+++ b/src/s_loader.c
@@ -88,7 +88,7 @@ void class_set_extern_dir(t_symbol *s);
 
 static int sys_do_load_lib(t_canvas *canvas, char *objectname)
 {
-    char symname[MAXPDSTRING], filename[MAXPDSTRING], dirbuf[MAXPDSTRING],
+    char symname[MAXPDSTRING], filename[FILENAME_MAX], dirbuf[FILENAME_MAX],
         *classname, *nameptr, altsymname[MAXPDSTRING];
     void *dlobj;
     t_xxx makeout = NULL;
@@ -139,23 +139,23 @@ static int sys_do_load_lib(t_canvas *canvas, char *objectname)
 #endif
         /* try looking in the path for (objectname).(sys_dllextent) ... */
     if ((fd = canvas_open(canvas, objectname, sys_dllextent,
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+        dirbuf, &nameptr, FILENAME_MAX, 1)) >= 0)
             goto gotone;
         /* same, with the more generic sys_dllextent2 */
     if ((fd = canvas_open(canvas, objectname, sys_dllextent2,
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+        dirbuf, &nameptr, FILENAME_MAX, 1)) >= 0)
             goto gotone;
         /* next try (objectname)/(classname).(sys_dllextent) ... */
-    strncpy(filename, objectname, MAXPDSTRING);
+    strncpy(filename, objectname, FILENAME_MAX);
     filename[MAXPDSTRING-2] = 0;
     strcat(filename, "/");
-    strncat(filename, classname, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
+    strncat(filename, classname, FILENAME_MAX-strlen(filename));
+    filename[FILENAME_MAX-1] = 0;
     if ((fd = canvas_open(canvas, filename, sys_dllextent,
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+        dirbuf, &nameptr, FILENAME_MAX, 1)) >= 0)
             goto gotone;
     if ((fd = canvas_open(canvas, filename, sys_dllextent2,
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+        dirbuf, &nameptr, FILENAME_MAX, 1)) >= 0)
             goto gotone;
     return (0);
 gotone:
@@ -163,11 +163,11 @@ gotone:
     class_set_extern_dir(gensym(dirbuf));
 
         /* rebuild the absolute pathname */
-    strncpy(filename, dirbuf, MAXPDSTRING);
-    filename[MAXPDSTRING-2] = 0;
+    strncpy(filename, dirbuf, FILENAME_MAX);
+    filename[FILENAME_MAX-2] = 0;
     strcat(filename, "/");
-    strncat(filename, nameptr, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
+    strncat(filename, nameptr, FILENAME_MAX-strlen(filename));
+    filename[FILENAME_MAX-1] = 0;
 
 #ifdef DL_OPEN
     dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
@@ -203,7 +203,6 @@ gotone:
     return (1);
 }
 
-
 /* linked list of loaders */
 typedef struct loader_queue {
     loader_t loader;
diff --git a/src/s_main.c b/src/s_main.c
index a246e38af..ba1690175 100644
--- a/src/s_main.c
+++ b/src/s_main.c
@@ -26,8 +26,8 @@
 #endif
 
 char *pd_version;
-char pd_compiletime[] = __TIME__;
-char pd_compiledate[] = __DATE__;
+static const char pd_compiletime[] = __TIME__;
+static const char pd_compiledate[] = __DATE__;
 
 void pd_init(void);
 int sys_argparse(int argc, char **argv);
@@ -62,13 +62,12 @@ int sys_nmidiin = -1;
 int sys_midiindevlist[MAXMIDIINDEV] = {1};
 int sys_midioutdevlist[MAXMIDIOUTDEV] = {1};
 
-char sys_font[100] = 
-#ifdef MSW
-    "Courier";
+#ifdef __APPLE__
+char sys_font[] = "Monaco"; /* tb: font name */
 #else
-    "Courier";
+char sys_font[] = "DejaVu Sans Mono"; /* tb: font name */
 #endif
-char sys_fontweight[] = "bold  "; /* currently only used for iemguis */
+char sys_fontweight[] = "normal"; /* currently only used for iemguis */
 static int sys_main_srate;
 static int sys_main_advance;
 static int sys_main_callback;
@@ -81,7 +80,7 @@ int sys_extraflags;
 char sys_extraflagsstring[MAXPDSTRING];
 int sys_run_scheduler(const char *externalschedlibname,
     const char *sys_extraflagsstring);
-int sys_noautopatch;    /* temporary hack to defeat new 0.42 editing */
+int sys_noautopatch = 1;    /* temporary hack to defeat new 0.42 editing */
 
     /* here the "-1" counts signify that the corresponding vector hasn't been
     specified in command line arguments; sys_set_audio_settings will detect it
@@ -120,8 +119,8 @@ typedef struct _fontinfo
     in the six fonts.  */
 
 static t_fontinfo sys_fontlist[] = {
-    {8, 6, 10, 0, 0, 0}, {10, 7, 13, 0, 0, 0}, {12, 9, 16, 0, 0, 0},
-    {16, 10, 20, 0, 0, 0}, {24, 15, 25, 0, 0, 0}, {36, 25, 45, 0, 0, 0}};
+    {8, 5, 11, 8, 5, 11}, {10, 6, 13, 10, 6, 13}, {12, 7, 16, 12, 7, 16},
+    {16, 10, 19, 16, 10, 19}, {24, 14, 29, 24, 14, 29}, {36, 23, 44, 36, 23, 44}};
 #define NFONT (sizeof(sys_fontlist)/sizeof(*sys_fontlist))
 
 /* here are the actual font size structs on msp's systems:
@@ -172,17 +171,13 @@ int sys_fontheight(int fontsize)
 }
 
 int sys_defaultfont;
-#ifdef MSW
-#define DEFAULTFONT 12
-#else
 #define DEFAULTFONT 10
-#endif
 
 static void openit(const char *dirname, const char *filename)
 {
-    char dirbuf[MAXPDSTRING], *nameptr;
+    char dirbuf[FILENAME_MAX], *nameptr;
     int fd = open_via_path(dirname, filename, "", dirbuf, &nameptr,
-        MAXPDSTRING, 0);
+        FILENAME_MAX, 0);
     if (fd >= 0)
     {
         close (fd);
@@ -220,11 +215,6 @@ void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv)
                 atom_getintarg(3 * j + 3, argc, argv) <= wantwidth)
                     best = j;
         }
-            /* best is now the host font index for the desired font index i. */
-        sys_fontlist[i].fi_hostfontsize =
-            atom_getintarg(3 * best + 2, argc, argv);
-        sys_fontlist[i].fi_width = atom_getintarg(3 * best + 3, argc, argv);
-        sys_fontlist[i].fi_height = atom_getintarg(3 * best + 4, argc, argv);
     }
 #if 0
     for (i = 0; i < 6; i++)
@@ -262,10 +252,11 @@ static void sys_afterargparse(void);
 static void pd_makeversion(void)
 {
     char foo[100];
-    sprintf(foo,  "Pd version %d.%d-%d%s\n",PD_MAJOR_VERSION,
-        PD_MINOR_VERSION,PD_BUGFIX_VERSION,PD_TEST_VERSION);
-    pd_version = malloc(strlen(foo)+1);
-    strcpy(pd_version, foo);
+
+    snprintf(foo, sizeof(foo), "Pd version %d.%d-%d%s\n", PD_MAJOR_VERSION,
+        PD_MINOR_VERSION, PD_BUGFIX_VERSION, PD_TEST_VERSION);	
+
+    pd_version = strdup(foo);
 }
 
 /* this is called from main() in s_entry.c */
@@ -379,7 +370,7 @@ static char *(usagemessage[]) = {
 "-open <file>     -- open file(s) on startup\n",
 "-lib <file>      -- load object library(s)\n",
 "-font-size <n>     -- specify default font size in points\n",
-"-font-face <name>  -- specify default font\n",
+"-font-face <name>  -- specify default font (default: Bitstream Vera Sans Mono)\n",
 "-font-weight <name>-- specify default font weight (normal or bold)\n",
 "-verbose         -- extra printout on startup and when searching for files\n",
 "-version         -- don't run Pd; just print out which version it is \n",
@@ -399,7 +390,7 @@ static char *(usagemessage[]) = {
 "-schedlib <file> -- plug in external scheduler\n",
 "-extraflags <s>  -- string argument to send schedlib\n",
 "-batch           -- run off-line as a batch process\n",
-"-noautopatch     -- defeat auto-patching new from selected objects\n",
+"-autopatch       -- enable auto-patching new from selected objects\n",
 };
 
 static void sys_parsedevlist(int *np, int *vecp, int max, char *str)
@@ -439,7 +430,7 @@ static int sys_getmultidevchannels(int n, int *devlist)
     INSTALL_PREFIX.  In MSW, we don't try to use INSTALL_PREFIX. */
 void sys_findprogdir(char *progname)
 {
-    char sbuf[MAXPDSTRING], sbuf2[MAXPDSTRING], *sp;
+    char sbuf[FILENAME_MAX], sbuf2[FILENAME_MAX], *sp;
     char *lastslash; 
 #ifdef UNISTD
     struct stat statbuf;
@@ -448,12 +439,12 @@ void sys_findprogdir(char *progname)
     /* find out by what string Pd was invoked; put answer in "sbuf". */
 #ifdef MSW
     GetModuleFileName(NULL, sbuf2, sizeof(sbuf2));
-    sbuf2[MAXPDSTRING-1] = 0;
+    sbuf2[FILENAME_MAX-1] = 0;
     sys_unbashfilename(sbuf2, sbuf);
 #endif /* MSW */
 #ifdef UNISTD
-    strncpy(sbuf, progname, MAXPDSTRING);
-    sbuf[MAXPDSTRING-1] = 0;
+    strncpy(sbuf, progname, FILENAME_MAX);
+    sbuf[FILENAME_MAX-1] = 0;
 #endif
     lastslash = strrchr(sbuf, '/');
     if (lastslash)
@@ -487,9 +478,9 @@ void sys_findprogdir(char *progname)
             .../doc
         and in "complicated" unix installations, it's:
             .../bin/pd
-            .../lib/pd/bin/pd-gui
-            .../lib/pd/doc
-        To decide which, we stat .../lib/pd; if that exists, we assume it's
+            .../lib/pd-extended/bin/pd-gui
+            .../lib/pd-extended/doc
+        To decide which, we stat .../lib/pd-extended; if that exists, we assume it's
         the complicated layout.  In MSW, it's the "simple" layout, but
         the gui program is straight wish80:
             .../bin/pd
@@ -500,28 +491,29 @@ void sys_findprogdir(char *progname)
     sys_libdir = gensym(sbuf2);
     sys_guidir = &s_;   /* in MSW the guipath just depends on the libdir */
 #else
-    strncpy(sbuf, sbuf2, MAXPDSTRING-30);
-    sbuf[MAXPDSTRING-30] = 0;
-    strcat(sbuf, "/lib/pd");
-    if (stat(sbuf, &statbuf) >= 0)
+    realpath(sbuf2, sbuf);
+    strncpy(sbuf2, sbuf, FILENAME_MAX-30);
+    sbuf[FILENAME_MAX-30] = 0;
+    strcat(sbuf2, "/lib/pd-extended");
+    if (stat(sbuf2, &statbuf) >= 0)
     {
             /* complicated layout: lib dir is the one we just stat-ed above */
-        sys_libdir = gensym(sbuf);
-            /* gui lives in .../lib/pd/bin */
-        strncpy(sbuf, sbuf2, MAXPDSTRING-30);
-        sbuf[MAXPDSTRING-30] = 0;
-        strcat(sbuf, "/lib/pd/bin");
-        sys_guidir = gensym(sbuf);
+        sys_libdir = gensym(sbuf2);
+            /* gui lives in .../lib/pd-extended/bin */
+        strncpy(sbuf2, sbuf, FILENAME_MAX-30);
+        sbuf[FILENAME_MAX-30] = 0;
+        strcat(sbuf2, "/lib/pd-extended/bin");
+        sys_guidir = gensym(sbuf2);
     }
     else
     {
             /* simple layout: lib dir is the parent */
-        sys_libdir = gensym(sbuf2);
+        sys_libdir = gensym(sbuf);
             /* gui lives in .../bin */
-        strncpy(sbuf, sbuf2, MAXPDSTRING-30);
-        sbuf[MAXPDSTRING-30] = 0;
-        strcat(sbuf, "/bin");
-        sys_guidir = gensym(sbuf);
+        strncpy(sbuf2, sbuf, FILENAME_MAX-30);
+        sbuf[FILENAME_MAX-30] = 0;
+        strcat(sbuf2, "/bin");
+        sys_guidir = gensym(sbuf2);
     }
 #endif
 }
@@ -839,6 +831,11 @@ int sys_argparse(int argc, char **argv)
             sys_noautopatch = 1;
             argc--; argv++;
         }
+        else if (!strcmp(*argv, "-autopatch"))
+        {
+            sys_noautopatch = 0;
+            argc--; argv++;
+        }
 #ifdef UNISTD
         else if (!strcmp(*argv, "-rt") || !strcmp(*argv, "-realtime"))
         {
diff --git a/src/s_midi.c b/src/s_midi.c
index 67e5e4c7f..2994d26ca 100644
--- a/src/s_midi.c
+++ b/src/s_midi.c
@@ -4,16 +4,25 @@
 
 /* Clock functions (which should move, but where?) and MIDI queueing */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include "m_imp.h"
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+/* XXX Hack!  This should be done with a cleaner check. */
 #include <sys/time.h>
+#endif
+
 #ifdef HAVE_BSTRING_H
 #include <bstring.h>
 #endif
-#endif
+
 #ifdef MSW
 #include <winsock.h>
 #include <sys/types.h>
diff --git a/src/s_midi_alsa.c b/src/s_midi_alsa.c
index dcc500065..8fb0c4a24 100644
--- a/src/s_midi_alsa.c
+++ b/src/s_midi_alsa.c
@@ -5,10 +5,14 @@
 
 /* MIDI I/O for Linux using ALSA */
 
+#include "config.h"
+
 #include <stdio.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
diff --git a/src/s_midi_oss.c b/src/s_midi_oss.c
index 5c11bae32..361bb0ad3 100644
--- a/src/s_midi_oss.c
+++ b/src/s_midi_oss.c
@@ -5,8 +5,10 @@
 
 /* MIDI I/O for Linux using OSS */
 
+#include "config.h"
+
 #include <stdio.h>
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <stdlib.h>
diff --git a/src/s_midi_pm.c b/src/s_midi_pm.c
index 831f3f060..b13057083 100644
--- a/src/s_midi_pm.c
+++ b/src/s_midi_pm.c
@@ -7,10 +7,12 @@
 
 */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include <stdio.h>
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <sys/time.h>
 #include <sys/resource.h>
diff --git a/src/s_path.c b/src/s_path.c
index d74aa0f66..f25aef59a 100644
--- a/src/s_path.c
+++ b/src/s_path.c
@@ -20,6 +20,7 @@
 #endif
 #ifdef MSW
 #include <io.h>
+#include <windows.h>
 #endif
 
 #include <string.h>
@@ -69,6 +70,31 @@ void sys_unbashfilename(const char *from, char *to)
     *to = 0;
 }
 
+/* expand env vars and ~ at the beginning of a path and make a copy to return */
+static void sys_expandpath(const char *from, char *to)
+{
+    if ((strlen(from) == 1 && from[0] == '~') || (strncmp(from,"~/", 2) == 0))
+    {
+#ifdef MSW
+        const char *home = getenv("USERPROFILE");
+#else
+        const char *home = getenv("HOME");
+#endif
+        if(home) 
+        {
+            strncpy(to, home, FILENAME_MAX - 1);
+            strncat(to, from + 1, FILENAME_MAX - strlen(from) - 2);
+        }
+    }
+    else
+        strncpy(to, from, FILENAME_MAX - 1);
+#ifdef MSW
+    char buf[FILENAME_MAX];
+    ExpandEnvironmentStrings(to, buf, FILENAME_MAX - 2);
+    strncpy(to, buf, FILENAME_MAX - 1);
+#endif    
+}
+
 /* test if path is absolute or relative, based on leading /, env vars, ~, etc */
 int sys_isabsolutepath(const char *dir)
 {
@@ -193,8 +219,29 @@ int sys_usestdpath = 1;
 
 void sys_setextrapath(const char *p)
 {
+    char pathbuf[FILENAME_MAX];
     namelist_free(pd_extrapath);
-    pd_extrapath = namelist_append(0, p, 0);
+    /* add standard place for users to install stuff first */
+#ifdef __gnu_linux__
+    sys_expandpath("~/pd-externals", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    pd_extrapath = namelist_append(pd_extrapath, "/usr/local/lib/pd-externals", 0);
+#endif
+
+#ifdef __APPLE__
+    sys_expandpath("~/Library/Pd", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    pd_extrapath = namelist_append(pd_extrapath, "/Library/Pd", 0);
+#endif
+
+#ifdef _WIN32
+    sys_expandpath("%ProgramFiles%/Common Files/Pd", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    sys_expandpath("%UserProfile%/Application Data/Pd", pathbuf);
+    pd_extrapath = namelist_append(pd_extrapath, pathbuf, 0);
+#endif
+    /* add built-in "extra" path last so its checked last */
+    pd_extrapath = namelist_append(pd_extrapath, p, 0);
 }
 
 #ifdef MSW
@@ -214,9 +261,11 @@ int sys_trytoopenone(const char *dir, const char *name, const char* ext,
     char *dirresult, char **nameresult, unsigned int size, int bin)
 {
     int fd;
+    char buf[FILENAME_MAX];
     if (strlen(dir) + strlen(name) + strlen(ext) + 4 > size)
         return (-1);
-    strcpy(dirresult, dir);
+    sys_expandpath(dir, buf);
+    strcpy(dirresult, buf);
     if (*dirresult && dirresult[strlen(dirresult)-1] != '/')
         strcat(dirresult, "/");
     strcat(dirresult, name);
@@ -270,13 +319,13 @@ int sys_open_absolute(const char *name, const char* ext,
 {
     if (sys_isabsolutepath(name))
     {
-        char dirbuf[MAXPDSTRING], *z = strrchr(name, '/');
+        char dirbuf[FILENAME_MAX], *z = strrchr(name, '/');
         int dirlen;
         if (!z)
             return (0);
         dirlen = z - name;
-        if (dirlen > MAXPDSTRING-1) 
-            dirlen = MAXPDSTRING-1;
+        if (dirlen > FILENAME_MAX-1) 
+            dirlen = FILENAME_MAX-1;
         strncpy(dirbuf, name, dirlen);
         dirbuf[dirlen] = 0;
         *fdp = sys_trytoopenone(dirbuf, name+(dirlen+1), ext,
@@ -319,11 +368,12 @@ static int do_open_via_path(const char *dir, const char *name,
             dirresult, nameresult, size, bin)) >= 0)
                 return (fd);
 
-        /* next look in "extra" */
-    if (sys_usestdpath &&
-        (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext,
-            dirresult, nameresult, size, bin)) >= 0)
-                return (fd);
+        /* next look in built-in paths like "extra" */
+    if (sys_usestdpath)
+        for (nl = pd_extrapath; nl; nl = nl->nl_next)
+            if ((fd = sys_trytoopenone(nl->nl_string, name, ext,
+                dirresult, nameresult, size, bin)) >= 0)
+                    return (fd);
 
     *dirresult = 0;
     *nameresult = dirresult;
@@ -343,35 +393,40 @@ int open_via_path(const char *dir, const char *name, const char *ext,
     search attempts. */
 void open_via_helppath(const char *name, const char *dir)
 {
-    char realname[MAXPDSTRING], dirbuf[MAXPDSTRING], *basename;
+    char realname[FILENAME_MAX], propername[FILENAME_MAX], dirbuf[FILENAME_MAX];
+    char *basename;
         /* make up a silly "dir" if none is supplied */
     const char *usedir = (*dir ? dir : "./");
     int fd;
 
         /* 1. "objectname-help.pd" */
-    strncpy(realname, name, MAXPDSTRING-10);
-    realname[MAXPDSTRING-10] = 0;
+    strncpy(realname, name, FILENAME_MAX-10);
+    realname[FILENAME_MAX-10] = 0;
     if (strlen(realname) > 3 && !strcmp(realname+strlen(realname)-3, ".pd"))
         realname[strlen(realname)-3] = 0;
     strcat(realname, "-help.pd");
+    strncpy(propername, realname, FILENAME_MAX);
     if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename, 
-        MAXPDSTRING, 0, sys_helppath)) >= 0)
+        FILENAME_MAX, 0, sys_helppath)) >= 0)
             goto gotone;
 
         /* 2. "help-objectname.pd" */
     strcpy(realname, "help-");
-    strncat(realname, name, MAXPDSTRING-10);
-    realname[MAXPDSTRING-1] = 0;
+    strncat(realname, name, FILENAME_MAX-10);
+    realname[FILENAME_MAX-1] = 0;
     if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename, 
-        MAXPDSTRING, 0, sys_helppath)) >= 0)
-            goto gotone;
+        FILENAME_MAX, 0, sys_helppath)) >= 0)
+            goto gotone_deprecated;
 
         /* 3. "objectname.pd" */
     if ((fd = do_open_via_path(dir, name, "", dirbuf, &basename, 
-        MAXPDSTRING, 0, sys_helppath)) >= 0)
-            goto gotone;
+        FILENAME_MAX, 0, sys_helppath)) >= 0)
+            goto gotone_deprecated;
     post("sorry, couldn't find help patch for \"%s\"", name);
     return;
+gotone_deprecated:
+    error("'%s' is a deprecated name format for a help patch.\n\tPlease rename to '%s'!",
+          basename, propername);
 gotone:
     close (fd);
     glob_evalfile(0, gensym((char*)basename), gensym(dirbuf));
@@ -396,7 +451,7 @@ int sys_rcfile(void)
     int rcargc;
     char* rcargv[NUMARGS];
     char* buffer;
-    char  fname[MAXPDSTRING], buf[1000], *home = getenv("HOME");
+    char  fname[FILENAME_MAX], buf[1000], *home = getenv("HOME");
     int retval = 1; /* that's what we will return at the end; for now, let's think it'll be an error */
  
     /* initialize rc-arg-array so we can safely clean up at the end */
@@ -408,7 +463,7 @@ int sys_rcfile(void)
     
     *fname = '\0'; 
 
-    strncat(fname, home? home : ".", MAXPDSTRING-10);
+    strncat(fname, home? home : ".", FILENAME_MAX-10);
     strcat(fname, "/");
 
     strcat(fname, STARTUPNAME);
diff --git a/src/s_print.c b/src/s_print.c
index 3aacd188b..8a6ede435 100644
--- a/src/s_print.c
+++ b/src/s_print.c
@@ -203,4 +203,5 @@ void sys_ouch(void)
 {
     if (*errobject) error("%s: %s", errobject, errstring);
     else error("%s", errstring);
+    sys_gui("bell\n");
 }
diff --git a/src/s_stuff.h b/src/s_stuff.h
index 0fb2497eb..8c77f850b 100644
--- a/src/s_stuff.h
+++ b/src/s_stuff.h
@@ -52,7 +52,6 @@ extern t_symbol *sys_libdir;    /* library directory for auxilliary files */
 extern t_symbol *sys_guidir;    /* directory holding pd_gui, u_pdsend, etc */
 
 /* s_loader.c */
-
 typedef int (*loader_t)(t_canvas *canvas, char *classname); /* callback type */
 EXTERN int sys_load_lib(t_canvas *canvas, char *filename);
 EXTERN void sys_register_loader(loader_t loader);
@@ -208,11 +207,15 @@ void sys_setvirtualalarm( void);
 #define DEFMIDIDEV 0
 
 #define DEFAULTSRATE 44100
-#ifdef MSW
-#define DEFAULTADVANCE 70
-#else
+#ifdef _WIN32
+#define DEFAULTADVANCE 100
+#endif
+#ifdef __linux__
 #define DEFAULTADVANCE 50
 #endif
+#ifdef __APPLE__
+#define DEFAULTADVANCE 20
+#endif
 
 typedef void (*t_audiocallback)(void);
 
diff --git a/src/t_tkcmd.c b/src/t_tkcmd.c
index b8cac71ef..3b0fa86d2 100644
--- a/src/t_tkcmd.c
+++ b/src/t_tkcmd.c
@@ -2,6 +2,8 @@
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
 
+#include "config.h"
+
 #ifndef MSW     /* in unix this only works first; in MSW it only works last. */
 #include "tk.h"
 #endif
@@ -13,8 +15,11 @@
 #include <stdarg.h>
 #include <sys/types.h>
 
-#ifndef MSW
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
+#ifndef MSW
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
@@ -26,9 +31,13 @@
 #include <errno.h>
 #include <fcntl.h>
 #endif
+
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
 #ifdef MSW
 #include <winsock.h>
-#include <io.h>
 #endif
 
 /* These pragmas are only used for MSVC, not MinGW or Cygwin <hans@at.or.at> */
@@ -371,7 +380,7 @@ static void pd_startfromgui( void)
     if (lastchar)
         snprintf(pdbuf, lastchar - arg0 + 1, "%s", arg0);
     else strcpy(pdbuf, ".");
-    strcat(pdbuf, "/../bin/pd");
+    strcat(pdbuf, "/../bin/pdextended");
 #ifdef DEBUGCONNECT     
     fprintf(stderr, "pdbuf is %s\n", pdbuf);
 #endif
@@ -419,7 +428,7 @@ static void pd_startfromgui( void)
         fflush(debugfd);
 #endif
 
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     sprintf(cmdbuf, "\"%s\" -guiport %d\n", pdbuf, portno);
     childpid = fork();
     if (childpid < 0)
@@ -438,7 +447,7 @@ static void pd_startfromgui( void)
         perror("pd: exec");
         _exit(1);
     }
-#endif /* UNISTD */
+#endif /* HAVE_UNISTD_H */
 
 #ifdef MSW       
 
@@ -500,10 +509,14 @@ static char *pdgui_path;
 
 static int pdCmd(ClientData cd, Tcl_Interp *interp, int argc,  char **argv)
 {
+    Tcl_DString dstring; /* used to convert the Tcl string to the OS encoding */
+    char *dstring_char;
     if (argc == 2)
     {
         int n = strlen(argv[1]);
-        if (send(sockfd, argv[1], n, 0) < n)
+        /* NULL as first arg means use the current system encoding */
+        dstring_char = Tcl_UtfToExternalDString(NULL, argv[1], -1, &dstring);
+        if (send(sockfd, dstring_char, n, 0) < n)
         {
             perror("stdout");
             tcl_mess("exit\n");
@@ -518,18 +531,22 @@ static int pdCmd(ClientData cd, Tcl_Interp *interp, int argc,  char **argv)
         {
             if (strlen(argv[i]) + strlen(buf) + 2 > MAXWRITE)
             {
-                interp->result = "pd: arg list too long";
+                Tcl_SetObjResult(interp, 
+                                 Tcl_NewStringObj("pd: arg list too long", -1));
                 return (TCL_ERROR);     
             }
             if (i > 1) strcat(buf, " ");
             strcat(buf, argv[i]);
         }
-        if (send(sockfd, buf, strlen(buf), 0) < 0)
+        /* NULL as first arg means use the current system encoding */
+        dstring_char = Tcl_UtfToExternalDString(NULL, buf, -1, &dstring);
+        if (send(sockfd, dstring_char, strlen(dstring_char), 0) < 0)
         {
             perror("stdout");
             tcl_mess("exit\n");
         }
     }
+    Tcl_DStringFree(&dstring);
     return (TCL_OK);
 }
 
@@ -538,10 +555,13 @@ static int pdCmd(ClientData cd, Tcl_Interp *interp, int argc,  char **argv)
 void tcl_mess(char *s)
 {
     int result;
-    result = Tcl_Eval(tk_pdinterp,  s);
+    Tcl_Obj *messageObjPtr = Tcl_NewStringObj(s,-1);
+    Tcl_IncrRefCount(messageObjPtr);
+    result = Tcl_EvalObjEx(tk_pdinterp, messageObjPtr, TCL_EVAL_GLOBAL);
+    Tcl_DecrRefCount(messageObjPtr);
     if (result != TCL_OK)
     {
-        if (*tk_pdinterp->result) printf("%s\n",  tk_pdinterp->result);
+        if (tk_pdinterp) printf("%s\n",  Tcl_GetStringResult(tk_pdinterp));
     }
 }
 
@@ -655,7 +675,7 @@ int Pdtcl_Init(Tcl_Interp *interp)
 #endif
     tk_pdinterp = interp;
     pdgui_startup(interp);
-    interp->result = "loaded pdtcl_init";
+    Tcl_SetObjResult (interp, Tcl_NewStringObj ("loaded pdtcl_init", -1));
 
     return (TCL_OK);
 }
diff --git a/src/x_arithmetic.c b/src/x_arithmetic.c
index 0dd199372..64c1872ed 100644
--- a/src/x_arithmetic.c
+++ b/src/x_arithmetic.c
@@ -6,20 +6,44 @@
 done on floats; the logical and bitwise binops convert their
 inputs to int and their outputs back to float. */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include <math.h>
 
-
-/* MSW and OSX don't appear to have single-precision ANSI math */
-#if defined(MSW) || defined(__APPLE__)
+#if !defined(HAVE_SINF)
 #define sinf sin
+#endif
+
+#if !defined(HAVE_COSF)
 #define cosf cos
+#endif
+
+#if !defined(HAVE_ATANF)
 #define atanf atan
+#endif
+
+#if !defined(HAVE_ATAN2F)
 #define atan2f atan2
+#endif
+
+#if !defined(HAVE_SQRTF)
 #define sqrtf sqrt
+#endif
+
+#if !defined(HAVE_LOGF)
 #define logf log
+#endif
+
+#if !defined(HAVE_EXPF)
 #define expf exp
+#endif
+
+#if !defined(HAVE_FABSF)
 #define fabsf fabs
+#endif
+
+#if !defined(HAVE_POWF)
 #define powf pow
 #endif
 
@@ -636,9 +660,6 @@ static void *exp_new(void)
 static void exp_float(t_object *x, t_float f)
 {
     t_float g;
-#ifdef MSW
-    char buf[10];
-#endif
     if (f > MAXLOG) f = MAXLOG;
     g = expf(f);
     outlet_float(x->ob_outlet, g);
@@ -664,6 +685,8 @@ static void *wrap_new(void)
 {
     t_object *x = (t_object *)pd_new(wrap_class);
     outlet_new(x, &s_float);
+    pd_error(x, "A new incompatible [wrap] object was introduced in Pd 0.42.");
+    post("\tFor a backwards-compatible version, use [zexy/wrap]");
     return (x);
 }
 
diff --git a/src/x_connective.c b/src/x_connective.c
index b9093f46b..1422a074e 100644
--- a/src/x_connective.c
+++ b/src/x_connective.c
@@ -1002,8 +1002,7 @@ static void trigger_anything(t_trigger *x, t_symbol *s, int argc, t_atom *argv)
             outlet_bang(u->u_outlet);
         else if (u->u_type == TR_ANYTHING)
             outlet_anything(u->u_outlet, s, argc, argv);
-        else pd_error(x, "trigger: can only convert 's' to 'b' or 'a'",
-            s->s_name);
+        else pd_error(x, "trigger: can only convert 's' to 'b' or 'a'");
     }
 }
 
diff --git a/src/x_gui.c b/src/x_gui.c
index 6ba58a7b1..99337dd89 100644
--- a/src/x_gui.c
+++ b/src/x_gui.c
@@ -5,10 +5,13 @@
 /* dialogs.  LATER, deal with the situation where the object goes 
 away before the panel does... */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include <stdio.h>
 #include <string.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
@@ -46,6 +49,9 @@ void gfxstub_new(t_pd *owner, void *key, const char *cmd)
 {
     char buf[4*MAXPDSTRING];
     char namebuf[80];
+    char sprintfbuf[MAXPDSTRING];
+    char *afterpercent;
+    t_int afterpercentlen;
     t_gfxstub *x;
     t_symbol *s;
         /* if any exists with matching key, burn it. */
@@ -55,7 +61,7 @@ void gfxstub_new(t_pd *owner, void *key, const char *cmd)
     if (strlen(cmd) + 50 > 4*MAXPDSTRING)
     {
         bug("audio dialog too long");
-        bug("%x", cmd);
+        bug("%s", cmd);
         return;
     }
     x = (t_gfxstub *)pd_new(gfxstub_class);
@@ -68,7 +74,13 @@ void gfxstub_new(t_pd *owner, void *key, const char *cmd)
     x->x_key = key;
     x->x_next = gfxstub_list;
     gfxstub_list = x;
-    sprintf(buf, cmd, s->s_name);
+    /* only replace first %s so sprintf() doesn't crash */
+    afterpercent = strchr(cmd, '%') + 2;
+    afterpercentlen = afterpercent - cmd;
+    strncpy(sprintfbuf, cmd, afterpercentlen);
+    sprintfbuf[afterpercentlen] = '\0';
+    sprintf(buf, sprintfbuf, s->s_name);
+    strncat(buf, afterpercent, (4*MAXPDSTRING) - afterpercentlen);
     sys_gui(buf);
 }
 
diff --git a/src/x_interface.c b/src/x_interface.c
index 044961b18..3c31c4c5a 100644
--- a/src/x_interface.c
+++ b/src/x_interface.c
@@ -5,7 +5,6 @@
 /* interface objects */
 
 #include "m_pd.h"
-#include <string.h>
 
 /* -------------------------- print ------------------------------ */
 static t_class *print_class;
@@ -16,39 +15,48 @@ typedef struct _print
     t_symbol *x_sym;
 } t_print;
 
-static void *print_new(t_symbol *sel, int argc, t_atom *argv)
+static void *print_new(t_symbol *s, int argc, t_atom *argv)
 {
+    int bufsize;
+    char *buf;
     t_print *x = (t_print *)pd_new(print_class);
-    t_symbol *s = atom_getsymbolarg(0, argc, argv);
-    if (!*s->s_name) 
+    if (argc)
+    {
+        t_binbuf *bb = binbuf_new();
+        binbuf_add(bb, argc, argv);
+        binbuf_gettext(bb, &buf, &bufsize);
+        buf = t_resizebytes(buf, bufsize, bufsize+1);
+        buf[bufsize] = 0;
+        x->x_sym = gensym(buf);
+        binbuf_free(bb);
+    }
+    else 
+    {
         x->x_sym = gensym("print");
-    else if (!strcmp(s->s_name, "-n"))
-        x->x_sym = &s_;
-    else x->x_sym = s;
+    }
     return (x);
 }
 
 static void print_bang(t_print *x)
 {
-    post("%s%sbang", x->x_sym->s_name, (*x->x_sym->s_name ? ": " : ""));
+    post("%s: bang", x->x_sym->s_name);
 }
 
 static void print_pointer(t_print *x, t_gpointer *gp)
 {
-    post("%s%s(gpointer)", x->x_sym->s_name, (*x->x_sym->s_name ? ": " : ""));
+    post("%s: (gpointer)", x->x_sym->s_name);
 }
 
 static void print_float(t_print *x, t_float f)
 {
-    post("%s%s%g", x->x_sym->s_name, (*x->x_sym->s_name ? ": " : ""), f);
+    post("%s: %g", x->x_sym->s_name, f);
 }
 
 static void print_list(t_print *x, t_symbol *s, int argc, t_atom *argv)
 {
     int i;
     if (argc && argv->a_type != A_SYMBOL) startpost("%s:", x->x_sym->s_name);
-    else startpost("%s%s%s", x->x_sym->s_name,
-        (*x->x_sym->s_name ? ": " : ""),
+    else startpost("%s: %s", x->x_sym->s_name,
         (argc > 1 ? s_list.s_name : (argc == 1 ? s_symbol.s_name :
             s_bang.s_name)));
     postatom(argc, argv);
@@ -58,8 +66,7 @@ static void print_list(t_print *x, t_symbol *s, int argc, t_atom *argv)
 static void print_anything(t_print *x, t_symbol *s, int argc, t_atom *argv)
 {
     int i;
-    startpost("%s%s%s", x->x_sym->s_name, (*x->x_sym->s_name ? ": " : ""),
-        s->s_name);
+    startpost("%s: %s", x->x_sym->s_name, s->s_name);
     postatom(argc, argv);
     endpost();
 }
@@ -75,6 +82,8 @@ static void print_setup(void)
     class_addanything(print_class, print_anything);
 }
 
+
+
 void x_interface_setup(void)
 {
     print_setup();
diff --git a/src/x_list.c b/src/x_list.c
index bb21a8f59..305cbe24a 100644
--- a/src/x_list.c
+++ b/src/x_list.c
@@ -2,17 +2,21 @@
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
 
+#include "config.h"
+
 #include "m_pd.h"
 /* #include <string.h> */
-#ifdef MSW
+
+#ifdef HAVE_MALLOC_H
 #include <malloc.h>
-#else
+#endif
+
+#ifdef HAVE_ALLOCA_H
 #include <alloca.h>
 #endif
 
 extern t_pd *newest;
 
-#define HAVE_ALLOCA 1   /* LATER this should be set by configure script! */
 #define LIST_NGETBYTE 100 /* bigger that this we use alloc, not alloca */
 
 /* the "list" object family.
diff --git a/src/x_midi.c b/src/x_midi.c
index 970581080..473767062 100644
--- a/src/x_midi.c
+++ b/src/x_midi.c
@@ -162,7 +162,6 @@ static void notein_setup(void)
     notein_class = class_new(gensym("notein"), (t_newmethod)notein_new,
         (t_method)notein_free, sizeof(t_notein), CLASS_NOINLET, A_DEFFLOAT, 0);
     class_addlist(notein_class, notein_list);
-    class_sethelpsymbol(notein_class, gensym("midi"));
     notein_sym = gensym("#notein");
 }
 
@@ -236,7 +235,6 @@ static void ctlin_setup(void)
         (t_method)ctlin_free, sizeof(t_ctlin),
             CLASS_NOINLET, A_GIMME, 0);
     class_addlist(ctlin_class, ctlin_list);
-    class_sethelpsymbol(ctlin_class, gensym("midi"));
     ctlin_sym = gensym("#ctlin");
 }
 
@@ -303,7 +301,6 @@ static void pgmin_setup(void)
         (t_method)pgmin_free, sizeof(t_pgmin),
             CLASS_NOINLET, A_DEFFLOAT, 0);
     class_addlist(pgmin_class, pgmin_list);
-    class_sethelpsymbol(pgmin_class, gensym("midi"));
     pgmin_sym = gensym("#pgmin");
 }
 
@@ -368,7 +365,6 @@ static void bendin_setup(void)
     bendin_class = class_new(gensym("bendin"), (t_newmethod)bendin_new,
         (t_method)bendin_free, sizeof(t_bendin), CLASS_NOINLET, A_DEFFLOAT, 0);
     class_addlist(bendin_class, bendin_list);
-    class_sethelpsymbol(bendin_class, gensym("midi"));
     bendin_sym = gensym("#bendin");
 }
 
@@ -727,7 +723,6 @@ static void noteout_setup(void)
     noteout_class = class_new(gensym("noteout"), (t_newmethod)noteout_new, 0,
         sizeof(t_noteout), 0, A_DEFFLOAT, 0);
     class_addfloat(noteout_class, noteout_float);
-    class_sethelpsymbol(noteout_class, gensym("midi"));
 }
 
 
@@ -767,7 +762,6 @@ static void ctlout_setup(void)
     ctlout_class = class_new(gensym("ctlout"), (t_newmethod)ctlout_new, 0,
         sizeof(t_ctlout), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
     class_addfloat(ctlout_class, ctlout_float);
-    class_sethelpsymbol(ctlout_class, gensym("midi"));
 }
 
 
@@ -807,7 +801,6 @@ static void pgmout_setup(void)
     pgmout_class = class_new(gensym("pgmout"), (t_newmethod)pgmout_new, 0,
         sizeof(t_pgmout), 0, A_DEFFLOAT, 0);
     class_addfloat(pgmout_class, pgmout_float);
-    class_sethelpsymbol(pgmout_class, gensym("midi"));
 }
 
 
@@ -844,7 +837,6 @@ static void bendout_setup(void)
     bendout_class = class_new(gensym("bendout"), (t_newmethod)bendout_new, 0,
         sizeof(t_bendout), 0, A_DEFFLOAT, 0);
     class_addfloat(bendout_class, bendout_float);
-    class_sethelpsymbol(bendout_class, gensym("midi"));
 }
 
 /* -------------------------- touch -------------------------- */
diff --git a/src/x_misc.c b/src/x_misc.c
index 8a67a5d15..3d9f4d98f 100644
--- a/src/x_misc.c
+++ b/src/x_misc.c
@@ -4,17 +4,24 @@
 
 /* misc. */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include "s_stuff.h"
 #include <math.h>
 #include <stdio.h>
 #include <string.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+/* XXX Hack! */
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/times.h>
 #include <sys/param.h>
-#include <unistd.h>
 #endif
 #ifdef MSW
 #include <wtypes.h>
@@ -114,6 +121,66 @@ static void loadbang_setup(void)
         gensym("loadbang"), 0);
 }
 
+
+/* -------------------------- JMZ: initbang ------------------------------ */
+static t_class *initbang_class;
+
+typedef struct _initbang
+{
+    t_object x_obj;
+} t_initbang;
+
+static void *initbang_new(void)
+{
+    t_initbang *x = (t_initbang *)pd_new(initbang_class);
+    outlet_new(&x->x_obj, &s_bang);
+    return (x);
+}
+
+static void initbang_initbang(t_initbang *x)
+{
+  if (!sys_noloadbang) /* JMZ: hmm, not sure whether we should respect sys_noloadbang here... */
+        outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void initbang_setup(void)
+{
+  initbang_class = class_new(gensym("initbang"), (t_newmethod)initbang_new, 0,
+        sizeof(t_initbang), CLASS_NOINLET, 0);
+    class_addmethod(initbang_class, (t_method)initbang_initbang,
+        gensym("initbang"), 0);
+}
+
+
+/* -------------------------- JMZ: closebang ------------------------------ */
+static t_class *closebang_class;
+
+typedef struct _closebang
+{
+    t_object x_obj;
+} t_closebang;
+
+static void *closebang_new(void)
+{
+    t_closebang *x = (t_closebang *)pd_new(closebang_class);
+    outlet_new(&x->x_obj, &s_bang);
+    return (x);
+}
+static void closebang_closebang(t_closebang *x)
+{
+  if (!sys_noloadbang) /* JMZ: hmm, not sure whether we should respect sys_noloadbang here... */
+        outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void closebang_setup(void)
+{
+  closebang_class = class_new(gensym("closebang"), (t_newmethod)closebang_new, 0,
+        sizeof(t_closebang), CLASS_NOINLET, 0);
+    class_addmethod(closebang_class, (t_method)closebang_closebang,
+        gensym("closebang"), 0);
+}
+
+
 /* ------------- namecanvas (delete this later) --------------------- */
 static t_class *namecanvas_class;
 
@@ -194,7 +261,7 @@ static t_class *cputime_class;
 typedef struct _cputime
 {
     t_object x_obj;
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     struct tms x_setcputime;
 #endif
 #ifdef MSW
@@ -206,7 +273,7 @@ typedef struct _cputime
 
 static void cputime_bang(t_cputime *x)
 {
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     times(&x->x_setcputime);
 #endif
 #ifdef MSW
@@ -227,7 +294,7 @@ static void cputime_bang(t_cputime *x)
 
 static void cputime_bang2(t_cputime *x)
 {
-#ifdef UNISTD
+#ifdef HAVE_UNISTD_H
     t_float elapsedcpu;
     struct tms newcputime;
     times(&newcputime);
@@ -317,6 +384,8 @@ void x_misc_setup(void)
 {
     random_setup();
     loadbang_setup();
+    initbang_setup();
+    closebang_setup();
     namecanvas_setup();
     serial_setup();
     cputime_setup();
diff --git a/src/x_qlist.c b/src/x_qlist.c
index fe6df0f38..c83aec289 100644
--- a/src/x_qlist.c
+++ b/src/x_qlist.c
@@ -2,12 +2,16 @@
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
 
+#include "config.h"
+
 #include "m_pd.h"
 #include <string.h>
-#ifdef UNISTD
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef MSW
+
+#ifdef HAVE_IO_H
 #include <io.h>
 #endif
 
-- 
GitLab