aboutsummaryrefslogtreecommitdiff
path: root/pd/portmidi
diff options
context:
space:
mode:
authorMiller Puckette <millerpuckette@users.sourceforge.net>2007-08-18 23:32:44 +0000
committerMiller Puckette <millerpuckette@users.sourceforge.net>2007-08-18 23:32:44 +0000
commitc1b10d55375dd8ecdf7b223d1f12541983422764 (patch)
tree9d7ed3a39363e510f1fd0a5dd1cd46dcf0da1b00 /pd/portmidi
parent20390a34beb221388014c29e5aefe30a55be60a3 (diff)
Download and adjust sources for new portaudio, portmidi.
Add experimental callback scheduling. svn path=/trunk/; revision=8657
Diffstat (limited to 'pd/portmidi')
-rw-r--r--pd/portmidi/CHANGELOG.txt158
-rw-r--r--pd/portmidi/Makefile77
-rw-r--r--pd/portmidi/README.txt51
-rw-r--r--pd/portmidi/license.txt40
-rw-r--r--pd/portmidi/portmidi.dsp124
-rw-r--r--pd/portmidi/portmidi.dsw158
6 files changed, 232 insertions, 376 deletions
diff --git a/pd/portmidi/CHANGELOG.txt b/pd/portmidi/CHANGELOG.txt
new file mode 100644
index 00000000..fd118e81
--- /dev/null
+++ b/pd/portmidi/CHANGELOG.txt
@@ -0,0 +1,158 @@
+/* CHANGELOG FOR PORTMIDI
+ *
+ * 17Jan07 Roger Dannenberg
+ * - Lots more help for Common Lisp user in pm_cl
+ * - Minor fix to eliminate a compiler warning
+ * - Went back to single library in OS X for both portmidi and porttime
+ *
+ * 16Jan07 Roger Dannenberg
+ * - OOPS! fixed bug where short messages all had zero data
+ * - Makefile.osx static library build now makes universal (i386 + ppc)
+ * binaries
+ *
+ * 15Jan07 Roger Dannenberg
+ * - multiple rewrites of sysex handling code to take care of
+ * error-handling, embedded messages, message filtering,
+ * driver bugs, and host limitations.
+ * - fixed windows to use dwBufferLength rather than
+ * dwBytesRecorded for long buffer output (fix by Nigel Brown)
+ * - Win32 MME code always appends an extra zero to long buffer
+ * output to work around a problem with earlier versions of Midi Yoke
+ * - Added mm, a command line Midi Monitor to pm_test suite
+ * - Revised copyright notice to match PortAudio/MIT license (requests
+ * are moved out of the license proper and into a separate paragraph)
+ *
+ * 18Oct06 Roger Dannenberg
+ * - replace FIFO in pmutil with Light Pipe-based multiprocessor-safe alg.
+ * - replace FIFO in portmidi.c with PmQueue from pmutil
+ *
+ * 07Oct06 cpr & Roger Dannenberg
+ * - overhaul of CoreMIDI input to handle running status and multiple
+ * - messages per packet, with additional error detection
+ * - added Leigh Smith and Rick Taube support for Common Lisp and
+ * - dynamic link libraries in OSX
+ * - initialize static global seq = NULL in pmlinuxalsa.c
+ *
+ * 05Sep06 Sebastien Frippiat
+ * - check if (ALSA) seq exists before closing it in pm_linuxalsa_term()
+ *
+ * 05Sep06 Andreas Micheler and Cecilio
+ * - fixed memory leak by freeing someo objects in pm_winmm_term()
+ * - and another leak by freeing descriptors in Pm_Terminate()
+ *
+ * 23Aug06 RBD
+ * - various minor fixes
+ *
+ * 04Nov05 Olivier Tristan
+ * - changes to OS X to properly retrieve real device name on CoreMidi
+ *
+ * 19Jul05 Roger Dannenberg
+ * - included pmBufferMaxSize in Pm_GetErrorText()
+ *
+ * 23Mar05 Torgier Strand Henriksen
+ * - cleaner termination of porttime thread under Linux
+ *
+ * 15Nov04 Ben Allison
+ * - sysex output now uses one buffer/message and reallocates buffer
+ * - if needed
+ * - filters expanded for many message types and channels
+ * - detailed changes are as follows:
+ * ------------- in pmwinmm.c --------------
+ * - new #define symbol: OUTPUT_BYTES_PER_BUFFER
+ * - change SYSEX_BYTES_PER_BUFFER to 1024
+ * - added MIDIHDR_BUFFER_LENGTH(x) to correctly count midihdr buffer length
+ * - change MIDIHDR_SIZE(x) to (MIDIHDR_BUFFER_LENGTH(x) + sizeof(MIDIHDR))
+ * - change allocate_buffer to use new MIDIHDR_BUFFER_LENGTH macro
+ * - new macros for MIDIHDR_SYSEX_SIZE and MIDIHDR_SYSEX_BUFFER_LENGTH
+ * - similar to above, but counts appropriately for sysex messages
+ * - added the following members to midiwinmm_struct for sysex data:
+ * - LPMIDIHDR *sysex_buffers; ** pool of buffers for sysex data **
+ * - int num_sysex_buffers; ** how many sysex buffers **
+ * - int next_sysex_buffer; ** index of next sysexbuffer to send **
+ * - HANDLE sysex_buffer_signal; ** to wait for free sysex buffer **
+ * - duplicated allocate_buffer, alocate_buffers and get_free_output_buffer
+ * - into equivalent sysex_buffer form
+ * - changed winmm_in_open to initialize new midiwinmm_struct members and
+ * - to use the new allocate_sysex_buffer() function instead of
+ * - allocate_buffer()
+ * - changed winmm_out_open to initialize new members, create sysex buffer
+ * - signal, and allocate 2 sysex buffers
+ * - changed winmm_out_delete to free sysex buffers and shut down the sysex
+ * - buffer signal
+ * - create new function resize_sysex_buffer which resizes m->hdr to the
+ * - passed size, and corrects the midiwinmm_struct accordingly.
+ * - changed winmm_write_byte to use new resize_sysex_buffer function,
+ * - if resize fails, write current buffer to output and continue
+ * - changed winmm_out_callback to use buffer_signal or sysex_buffer_signal
+ * - depending on which buffer was finished
+ * ------------- in portmidi.h --------------
+ * - added pmBufferMaxSize to PmError to indicate that the buffer would be
+ * - too large for the underlying API
+ * - added additional filters
+ * - added prototype, documentation, and helper macro for Pm_SetChannelMask
+ * ------------- in portmidi.c --------------
+ * - added pm_status_filtered() and pm_realtime_filtered() functions to
+ * separate filtering logic from buffer logic in pm_read_short
+ * - added Pm_SetChannelMask function
+ * - added pm_channel_filtered() function
+ * ------------- in pminternal.h --------------
+ * - added member to PortMidiStream for channel mask
+ *
+ * 25May04 RBD
+ * - removed support for MIDI THRU
+ * - moved filtering from Pm_Read to pm_enqueue to avoid buffer ovfl
+ * - extensive work on Mac OS X port, especially sysex and error handling
+ *
+ * 18May04 RBD
+ * - removed side-effects from assert() calls. Now you can disable assert().
+ * - no longer check pm_hosterror everywhere, fixing a bug where an open
+ * failure could cause a write not to work on a previously opened port
+ * until you call Pm_GetHostErrorText().
+ * 16May04 RBD and Chris Roberts
+ * - Some documentation wordsmithing in portmidi.h
+ * - Dynamically allocate port descriptor structures
+ * - Fixed parameter error in midiInPrepareBuffer and midiInAddBuffer.
+ *
+ * 09Oct03 RBD
+ * - Changed Thru handling. Now the client does all the work and the client
+ * must poll or read to keep thru messages flowing.
+ *
+ * 31May03 RBD
+ * - Fixed various bugs.
+ * - Added linux ALSA support with help from Clemens Ladisch
+ * - Added Mac OS X support, implemented by Jon Parise, updated and
+ * integrated by Andrew Zeldis and Zico Kolter
+ * - Added latency program to build histogram of system latency using PortTime.
+ *
+ * 30Jun02 RBD Extensive rewrite of sysex handling. It works now.
+ * Extensive reworking of error reporting and error text -- no
+ * longer use dictionary call to delete data; instead, Pm_Open
+ * and Pm_Close clean up before returning an error code, and
+ * error text is saved in a system-independent location.
+ * Wrote sysex.c to test sysex message handling.
+ *
+ * 15Jun02 BCT changes:
+ * - Added pmHostError text handling.
+ * - For robustness, check PortMidi stream args not NULL.
+ * - Re-C-ANSI-fied code (changed many C++ comments to C style)
+ * - Reorganized code in pmwinmm according to input/output functionality (made
+ * cleanup handling easier to reason about)
+ * - Fixed Pm_Write calls (portmidi.h says these should not return length but Pm_Error)
+ * - Cleaned up memory handling (now system specific data deleted via dictionary
+ * call in PortMidi, allows client to query host errors).
+ * - Added explicit asserts to verify various aspects of pmwinmm implementation behaves as
+ * logic implies it should. Specifically: verified callback routines not reentrant and
+ * all verified status for all unchecked Win32 MMedia API calls perform successfully
+ * - Moved portmidi initialization and clean-up routines into DLL to fix Win32 MMedia API
+ * bug (i.e. if devices not explicitly closed, must reboot to debug application further).
+ * With this change, clients no longer need explicitly call Pm_Initialize, Pm_Terminate, or
+ * explicitly Pm_Close open devices when using WinMM version of PortMidi.
+ *
+ * 23Jan02 RBD Fixed bug in pmwinmm.c thru handling
+ *
+ * 21Jan02 RBD Added tests in Pm_OpenInput() and Pm_OpenOutput() to prevent
+ * opening an input as output and vice versa.
+ * Added comments and documentation.
+ * Implemented Pm_Terminate().
+ *
+ */
diff --git a/pd/portmidi/Makefile b/pd/portmidi/Makefile
deleted file mode 100644
index 7a87606d..00000000
--- a/pd/portmidi/Makefile
+++ /dev/null
@@ -1,77 +0,0 @@
-# MAKEFILE FOR PORTMIDI AND PORTTIME
-
-
-# For debugging, define PM_CHECK_ERRORS
-PMFLAGS = -DPM_CHECK_ERRORS
-# Otherwise do not define PM_CHECK_ERRORS
-# PMFLAGS =
-
-# Use this for linux alsa (0.9x) version
-versions = pm_linux/pmlinuxalsa.o
-ALSALIB = -lasound
-VFLAGS = -DPMALSA
-
-# Use this for null (a dummy implementation for no Midi I/O:
-# versions = pmlinuxnull.o
-# ALSALIB =
-# VFLAGS = -DPMNULL
-
-pmlib = pm_linux/libportmidi.a
-
-ptlib = porttime/libporttime.a
-
-CC = gcc $(VFLAGS) $(PMFLAGS) -g -Ipm_common -Iporttime
-
-pmobjects = pm_common/pmutil.o $(versions) pm_linux/pmlinux.o \
- pm_common/portmidi.o pm_linux/pmlinuxalsa.o
-
-ptobjects = porttime/porttime.o porttime/ptlinux.o
-
-current: all
-
-all: $(pmlib) $(ptlib) pm_test/test pm_test/sysex pm_test/midithread \
- pm_test/latency pm_test/midithru
-
-$(pmlib): Makefile $(pmobjects)
- ar -cr $(pmlib) $(pmobjects)
-
-$(ptlib): Makefile $(ptobjects)
- ar -cr $(ptlib) $(ptobjects)
-
-pm_linux/pmlinuxalsa.o: Makefile pm_linux/pmlinuxalsa.c pm_linux/pmlinuxalsa.h
- $(CC) -c pm_linux/pmlinuxalsa.c -o pm_linux/pmlinuxalsa.o
-
-pm_test/test: Makefile pm_test/test.o $(pmlib) $(ptlib)
- $(CC) pm_test/test.c -o pm_test/test $(pmlib) $(ptlib) $(ALSALIB)
-
-pm_test/sysex: Makefile pm_test/sysex.o $(pmlib) $(ptlib)
- $(CC) pm_test/sysex.c -o pm_test/sysex $(pmlib) $(ptlib) $(ALSALIB)
-
-pm_test/midithread: Makefile pm_test/midithread.o $(pmlib) $(ptlib)
- $(CC) pm_test/midithread.c -o pm_test/midithread \
- $(pmlib) $(ptlib) $(ALSALIB)
-
-pm_test/latency: Makefile $(ptlib) pm_test/latency.o
- $(CC) pm_test/latency.c -o pm_test/latency $(pmlib) $(ptlib) \
- $(ALSALIB) -lpthread -lm
-
-pm_test/midithru: Makefile $(ptlib) pm_test/midithru.o
- $(CC) pm_test/midithru.c -o pm_test/midithru $(pmlib) $(ptlib) \
- $(ALSALIB) -lpthread -lm
-
-porttime/ptlinux.o: Makefile porttime/ptlinux.c
- $(CC) -c porttime/ptlinux.c -o porttime/ptlinux.o
-
-clean:
- rm -f *.o *~ core* */*.o */*~ */core* pm_test/*/pm_dll.dll
- rm -f *.opt *.ncb *.plg pm_win/Debug/pm_dll.lib pm_win/Release/pm_dll.lib
- rm -f pm_test/*.opt pm_test/*.ncb
-
-cleaner: clean
-
-cleanest: cleaner
- rm -f $(pmlib) $(ptlib) pm_test/test pm_test/sysex pm_test/midithread
- rm -f pm_test/latency pm_test/midithru
-
-backup: cleanest
- cd ..; zip -r portmidi.zip portmidi
diff --git a/pd/portmidi/README.txt b/pd/portmidi/README.txt
index 76412efd..0ab950d0 100644
--- a/pd/portmidi/README.txt
+++ b/pd/portmidi/README.txt
@@ -1,12 +1,17 @@
README for PortMidi
Roger Dannenberg
-6 April 2003
-revised May 2004
-For Windows, please see also README_WIN.txt and debugging_dlls.txt
-in pm_win.
+VERSION: this is the 17-Jan-07 version of PortMidi.
-For Linux, please see also README_LINUX.txt in pm_linux.
+Documentation for PortMidi is found in pm_common/portmidi.h.
+
+Additional documentation:
+ - Windows: see pm_win/README_WIN.txt and pm_win/debugging_dlls.txt
+ - Linux: see pm_linux/README_LINUX.txt
+ - Mac OSX: see pm_mac/README_MAC.txt
+ - Common Lisp: see pm_cl/README_CL.txt
+
+---------- some notes on the design of PortMidi ----------
POINTERS VS DEVICE NUMBERS
@@ -22,26 +27,38 @@ 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
-this case, the error code is transferred to the next call to
-Pm_Read or Pm_Write. Furthermore, an error can arise during a MIDI THRU
-operation that is also invoked as a side effect of polling for 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
+guess is that one is unlikely to recover gracefully from that.
+Therefore, all errors in callbacks are guarded by assert(), which
+means not guarded at all in release configurations.
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 errors are recorded in the system-specific data allocated for
-each open MIDI port. However, if an error occurs on open or close,
+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
-are not open). For open and close, we will store the host error
-in a global variable. The PortMidi is smart enough to look here
-first when the user asks for ErrorText.
+are not open). For open and close, we will convert the error
+to text, copy it to a global string, and set pm_hosterror, a
+global flag.
+
+Similarly, whenever a Read or Write operation returns pmHostError,
+the corresponding error string is copied to a global string
+and pm_hosterror is set. This makes getting error strings
+simple and uniform, although it does cost a string copy and some
+overhead even if the user does not want to look at the error data.
-Because output to a MIDI Thru stream can be invoked as a side-effect
-of a MIDI read operation, some errors normally associated with
-writing MIDI can be returned from Pm_Read.
+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
+code, where lots of things are happening in callbacks, but again,
+in Windows, there are no error codes recorded in callbacks.
DEBUGGING
diff --git a/pd/portmidi/license.txt b/pd/portmidi/license.txt
new file mode 100644
index 00000000..b04523be
--- /dev/null
+++ b/pd/portmidi/license.txt
@@ -0,0 +1,40 @@
+/*
+ * PortMidi Portable Real-Time MIDI Library
+ *
+ * license.txt -- a copy of the PortMidi copyright notice and license information
+ *
+ * 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
+ *
+ * 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 PortMidi license; however,
+ * the PortMusic 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.
+ */
diff --git a/pd/portmidi/portmidi.dsp b/pd/portmidi/portmidi.dsp
deleted file mode 100644
index 699cc120..00000000
--- a/pd/portmidi/portmidi.dsp
+++ /dev/null
@@ -1,124 +0,0 @@
-# Microsoft Developer Studio Project File - Name="portmidi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=portmidi - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "portmidi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "portmidi.mak" CFG="portmidi - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "portmidi - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "portmidi - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "portmidi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "pm_win\Release"
-# PROP Intermediate_Dir "pm_win\Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "pm_common" /I "porttime" /I "pm_win" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "portmidi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "pm_win\Debug"
-# PROP Intermediate_Dir "pm_win\Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "pm_common" /I "porttime" /I "pm_win" /D "_LIB" /D "DEBUG" /D "PM_CHECK_ERRORS" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "USE_DLL_FOR_CLEANUP" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "portmidi - Win32 Release"
-# Name "portmidi - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pm_common\pmutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_win\pmwin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_win\pmwinmm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_common\portmidi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\pm_common\pminternal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_common\pmutil.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_win\pmwinmm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\pm_common\portmidi.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/pd/portmidi/portmidi.dsw b/pd/portmidi/portmidi.dsw
deleted file mode 100644
index 1ccfb5bf..00000000
--- a/pd/portmidi/portmidi.dsw
+++ /dev/null
@@ -1,158 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "latency"=.\PM_TEST\latency.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name portmidi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "midithread"=.\pm_test\midithread.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name pm_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name portmidi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "midithru"=.\pm_test\midithru.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name pm_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name portmidi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pm_dll"=.\pm_win\pm_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "portmidi"=.\portmidi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "porttime"=.\porttime\porttime.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "sysex"=.\pm_test\sysex.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name pm_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name portmidi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "test"=.\pm_test\test.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name pm_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name portmidi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name porttime
- End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-