summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Scavone <gary@music.mcgill.ca>2013-10-11 15:04:06 +0200
committerStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 15:04:06 +0200
commit1f910fbc187d2f50004bb0f7e619bd39f043b5b5 (patch)
tree8254a3a788c9cbf1e34a22f1320e865f525cfb36
parenteeca35408122b9fc020139a20255f3c1ad8254cd (diff)
Release 1.0.0 tarball1.0.0
-rwxr-xr-xconfigure4697
-rw-r--r--doc/html/RtError_8h-source.html62
-rw-r--r--doc/html/RtMidi_8h-source.html166
-rw-r--r--doc/html/annotated.html25
-rw-r--r--doc/html/classRtError-members.html26
-rw-r--r--doc/html/classRtError.html53
-rw-r--r--doc/html/classRtMidi-members.html20
-rw-r--r--doc/html/classRtMidi.html46
-rw-r--r--doc/html/classRtMidi.pngbin0 -> 412 bytes
-rw-r--r--doc/html/classRtMidiIn-members.html33
-rw-r--r--doc/html/classRtMidiIn.html376
-rw-r--r--doc/html/classRtMidiIn.pngbin0 -> 300 bytes
-rw-r--r--doc/html/classRtMidiOut-members.html28
-rw-r--r--doc/html/classRtMidiOut.html217
-rw-r--r--doc/html/classRtMidiOut.pngbin0 -> 317 bytes
-rw-r--r--doc/html/doxygen.css49
-rw-r--r--doc/html/doxygen.pngbin0 -> 2352 bytes
-rw-r--r--doc/html/files.html23
-rw-r--r--doc/html/functions.html42
-rw-r--r--doc/html/hierarchy.html27
-rw-r--r--doc/html/index.html336
-rwxr-xr-xdoxygen/html/MidiFileIn_8cpp-source.html350
-rwxr-xr-xdoxygen/html/MidiFileIn_8h-source.html93
-rwxr-xr-xdoxygen/html/RtError_8h-source.html63
-rwxr-xr-xdoxygen/html/RtMidi_8cpp-source.html482
-rwxr-xr-xdoxygen/html/RtMidi_8h-source.html145
-rwxr-xr-xdoxygen/html/Stk_8cpp-source.html128
-rwxr-xr-xdoxygen/html/Stk_8h-source.html162
-rwxr-xr-xdoxygen/html/annotated.html29
-rwxr-xr-xdoxygen/html/classMidiFileIn-members.html44
-rwxr-xr-xdoxygen/html/classMidiFileIn.html296
-rwxr-xr-xdoxygen/html/classMidiFileIn.pngbin0 -> 307 bytes
-rwxr-xr-xdoxygen/html/classRtError-members.html27
-rwxr-xr-xdoxygen/html/classRtError.html56
-rwxr-xr-xdoxygen/html/classRtMidi-members.html21
-rwxr-xr-xdoxygen/html/classRtMidi.html44
-rwxr-xr-xdoxygen/html/classRtMidi.pngbin0 -> 412 bytes
-rwxr-xr-xdoxygen/html/classRtMidiIn-members.html32
-rwxr-xr-xdoxygen/html/classRtMidiIn.html281
-rwxr-xr-xdoxygen/html/classRtMidiIn.pngbin0 -> 300 bytes
-rwxr-xr-xdoxygen/html/classRtMidiOut-members.html29
-rwxr-xr-xdoxygen/html/classRtMidiOut.html166
-rwxr-xr-xdoxygen/html/classRtMidiOut.pngbin0 -> 317 bytes
-rwxr-xr-xdoxygen/html/classStk-members.html35
-rwxr-xr-xdoxygen/html/classStk.html232
-rwxr-xr-xdoxygen/html/classStk.pngbin0 -> 313 bytes
-rwxr-xr-xdoxygen/html/classStkError-members.html26
-rwxr-xr-xdoxygen/html/classStkError.html53
-rwxr-xr-xdoxygen/html/doxygen.css49
-rwxr-xr-xdoxygen/html/doxygen.pngbin0 -> 2352 bytes
-rwxr-xr-xdoxygen/html/files.html32
-rwxr-xr-xdoxygen/html/functions.html65
-rwxr-xr-xdoxygen/html/hierarchy.html33
-rwxr-xr-xdoxygen/html/index.html24
-rwxr-xr-xdoxygen/html/midiin_8cpp-source.html83
-rwxr-xr-xdoxygen/html/miditime_8cpp-source.html93
-rwxr-xr-xdoxygen/html/newRtMidi_8h-source.html148
-rwxr-xr-xdoxygen/html/oldRtMidi_8cpp-source.html385
-rwxr-xr-xdoxygen/html/oldRtMidi_8h-source.html163
-rwxr-xr-xdoxygen/html/playsmf_8cpp-source.html117
60 files changed, 10212 insertions, 0 deletions
diff --git a/configure b/configure
new file mode 100755
index 0000000..dc53eae
--- /dev/null
+++ b/configure
@@ -0,0 +1,4697 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.57 for RtMidi 1.0.
+#
+# Report bugs to <gary@music.mcgill.ca>.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='RtMidi'
+PACKAGE_TARNAME='rtmidi'
+PACKAGE_VERSION='1.0'
+PACKAGE_STRING='RtMidi 1.0'
+PACKAGE_BUGREPORT='gary@music.mcgill.ca'
+
+ac_unique_file="RtMidi.cpp"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GXX CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP debug cflags object_path warn build build_cpu build_vendor build_os host host_cpu host_vendor host_os midi_api frameworks LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures RtMidi 1.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of RtMidi 1.0:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-debug = enable various debug output
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <gary@music.mcgill.ca>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+RtMidi configure 1.0
+generated by GNU Autoconf 2.57
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by RtMidi $as_me 1.0, which was
+generated by GNU Autoconf 2.57. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core core.* *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_files="$ac_config_files tests/Makefile"
+
+
+# Fill GXX with something before test.
+GXX="no"
+
+
+# Checks for programs.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ CC c++ cxx
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ CC c++ cxx
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Checks for header files.
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_header in sys/ioctl.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+
+# Check for debug
+echo "$as_me:$LINENO: checking whether to compile debug version" >&5
+echo $ECHO_N "checking whether to compile debug version... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+ enableval="$enable_debug"
+ debug=-D__RTMIDI_DEBUG__
+ cflags=-g
+ object_path=Debug
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ debug=
+ cflags=-O2
+ object_path=Release
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi;
+
+# Check compiler and use -Wall if gnu.
+if test $GXX = "yes" ; then
+ warn=-Wall
+
+fi
+
+# Checks for package options and external software
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking for MIDI API" >&5
+echo $ECHO_N "checking for MIDI API... $ECHO_C" >&6
+case $host in
+ *-*-linux*)
+ midi_api=_D__LINUX_ALSA__
+
+
+echo "$as_me:$LINENO: checking for snd_seq_open in -lasound" >&5
+echo $ECHO_N "checking for snd_seq_open in -lasound... $ECHO_C" >&6
+if test "${ac_cv_lib_asound_snd_seq_open+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lasound $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char snd_seq_open ();
+int
+main ()
+{
+snd_seq_open ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_asound_snd_seq_open=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_asound_snd_seq_open=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_seq_open" >&5
+echo "${ECHO_T}$ac_cv_lib_asound_snd_seq_open" >&6
+if test $ac_cv_lib_asound_snd_seq_open = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBASOUND 1
+_ACEOF
+
+ LIBS="-lasound $LIBS"
+
+else
+ { { echo "$as_me:$LINENO: error: RtMidi in Linux requires the ALSA asound library!" >&5
+echo "$as_me: error: RtMidi in Linux requires the ALSA asound library!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ # Checks for pthread library.
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char pthread_create ();
+int
+main ()
+{
+pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_pthread_pthread_create=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+ LIBS="-lpthread $LIBS"
+
+else
+ { { echo "$as_me:$LINENO: error: RtMidi requires the pthread library!" >&5
+echo "$as_me: error: RtMidi requires the pthread library!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ ;;
+
+ *-sgi*)
+ midi_api="-D__IRIX_MD__ -LANG:std -w"
+
+ echo "$as_me:$LINENO: result: using IRIX MD" >&5
+echo "${ECHO_T}using IRIX MD" >&6
+
+echo "$as_me:$LINENO: checking for mdInit in -lmd" >&5
+echo $ECHO_N "checking for mdInit in -lmd... $ECHO_C" >&6
+if test "${ac_cv_lib_md_mdInit+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char mdInit ();
+int
+main ()
+{
+mdInit ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_md_mdInit=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_md_mdInit=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_md_mdInit" >&5
+echo "${ECHO_T}$ac_cv_lib_md_mdInit" >&6
+if test $ac_cv_lib_md_mdInit = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMD 1
+_ACEOF
+
+ LIBS="-lmd $LIBS"
+
+else
+ { { echo "$as_me:$LINENO: error: IRIX MIDI support requires the md library!" >&5
+echo "$as_me: error: IRIX MIDI support requires the md library!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ # Checks for pthread library.
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char pthread_create ();
+int
+main ()
+{
+pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_pthread_pthread_create=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+ LIBS="-lpthread $LIBS"
+
+else
+ { { echo "$as_me:$LINENO: error: RtMidi requires the pthread library!" >&5
+echo "$as_me: error: RtMidi requires the pthread library!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ ;;
+
+ *-apple*)
+ # Check for CoreAudio framework
+ if test "${ac_cv_header_CoreMIDI_CoreMIDI_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for CoreMIDI/CoreMIDI.h" >&5
+echo $ECHO_N "checking for CoreMIDI/CoreMIDI.h... $ECHO_C" >&6
+if test "${ac_cv_header_CoreMIDI_CoreMIDI_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_CoreMIDI_CoreMIDI_h" >&5
+echo "${ECHO_T}$ac_cv_header_CoreMIDI_CoreMIDI_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking CoreMIDI/CoreMIDI.h usability" >&5
+echo $ECHO_N "checking CoreMIDI/CoreMIDI.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <CoreMIDI/CoreMIDI.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking CoreMIDI/CoreMIDI.h presence" >&5
+echo $ECHO_N "checking CoreMIDI/CoreMIDI.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CoreMIDI/CoreMIDI.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: CoreMIDI/CoreMIDI.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: CoreMIDI/CoreMIDI.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: CoreMIDI/CoreMIDI.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: CoreMIDI/CoreMIDI.h: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: CoreMIDI/CoreMIDI.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: CoreMIDI/CoreMIDI.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: CoreMIDI/CoreMIDI.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: CoreMIDI/CoreMIDI.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: CoreMIDI/CoreMIDI.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: CoreMIDI/CoreMIDI.h: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for CoreMIDI/CoreMIDI.h" >&5
+echo $ECHO_N "checking for CoreMIDI/CoreMIDI.h... $ECHO_C" >&6
+if test "${ac_cv_header_CoreMIDI_CoreMIDI_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_CoreMIDI_CoreMIDI_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_CoreMIDI_CoreMIDI_h" >&5
+echo "${ECHO_T}$ac_cv_header_CoreMIDI_CoreMIDI_h" >&6
+
+fi
+if test $ac_cv_header_CoreMIDI_CoreMIDI_h = yes; then
+ midi_api=-D__MACOSX_CORE__
+
+else
+ { { echo "$as_me:$LINENO: error: CoreMIDI header files not found!" >&5
+echo "$as_me: error: CoreMIDI header files not found!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ frameworks="-framework CoreMIDI -framework CoreFoundation -framework CoreAudio"
+
+ ;;
+
+ *)
+ # Default case for unknown realtime systems.
+ { { echo "$as_me:$LINENO: error: Unknown system type for MIDI support!" >&5
+echo "$as_me: error: Unknown system type for MIDI support!" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+esac
+
+# Checks for library functions.
+if test $ac_cv_c_compiler_gnu = yes; then
+ echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_pattern="Autoconf.*'x'"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
+ ac_cv_prog_gcc_traditional=yes
+else
+ ac_cv_prog_gcc_traditional=no
+fi
+rm -f conftest*
+
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
+ ac_cv_prog_gcc_traditional=yes
+fi
+rm -f conftest*
+
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
+ if test $ac_cv_prog_gcc_traditional = yes; then
+ CC="$CC -traditional"
+ fi
+fi
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+t quote
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output. A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by RtMidi $as_me 1.0, which was
+generated by GNU Autoconf 2.57. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+RtMidi config.status 1.0
+configured by $0, generated by GNU Autoconf 2.57,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@GXX@,$GXX,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@debug@,$debug,;t t
+s,@cflags@,$cflags,;t t
+s,@object_path@,$object_path,;t t
+s,@warn@,$warn,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@midi_api@,$midi_api,;t t
+s,@frameworks@,$frameworks,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/doc/html/RtError_8h-source.html b/doc/html/RtError_8h-source.html
new file mode 100644
index 0000000..db0f4ce
--- /dev/null
+++ b/doc/html/RtError_8h-source.html
@@ -0,0 +1,62 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
+00010 <span class="comment">/************************************************************************/</span>
+00011
+00012 <span class="preprocessor">#ifndef RTERROR_H</span>
+00013 <span class="preprocessor"></span><span class="preprocessor">#define RTERROR_H</span>
+00014 <span class="preprocessor"></span>
+00015 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00016 <span class="preprocessor">#include &lt;string&gt;</span>
+00017
+<a name="l00018"></a><a class="code" href="classRtError.html">00018</a> <span class="keyword">class </span><a class="code" href="classRtError.html">RtError</a>
+00019 {
+00020 <span class="keyword">public</span>:
+<a name="l00022"></a><a class="code" href="classRtError.html#s11">00022</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#s11">Type</a> {
+00023 WARNING,
+00024 DEBUG_WARNING,
+00025 UNSPECIFIED,
+00026 NO_DEVICES_FOUND,
+00027 INVALID_DEVICE,
+00028 INVALID_STREAM,
+00029 MEMORY_ERROR,
+00030 INVALID_PARAMETER,
+00031 DRIVER_ERROR,
+00032 SYSTEM_ERROR,
+00033 THREAD_ERROR
+00034 };
+00035
+00036 <span class="keyword">protected</span>:
+00037 std::string message_;
+00038 <a class="code" href="classRtError.html#s11">Type</a> type_;
+00039
+00040 <span class="keyword">public</span>:
+<a name="l00042"></a><a class="code" href="classRtError.html#a0">00042</a> <a class="code" href="classRtError.html#a0">RtError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = RtError::UNSPECIFIED) : message_(message), type_(type) {}
+00043
+<a name="l00045"></a><a class="code" href="classRtError.html#a1">00045</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a1">~RtError</a>(<span class="keywordtype">void</span>) {}
+00046
+<a name="l00048"></a><a class="code" href="classRtError.html#a2">00048</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cout &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
+00049
+<a name="l00051"></a><a class="code" href="classRtError.html#a3">00051</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#s11">Type</a>&amp; <a class="code" href="classRtError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
+00052
+<a name="l00054"></a><a class="code" href="classRtError.html#a4">00054</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
+00055 };
+00056
+00057 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/RtMidi_8h-source.html b/doc/html/RtMidi_8h-source.html
new file mode 100644
index 0000000..9bda7a2
--- /dev/null
+++ b/doc/html/RtMidi_8h-source.html
@@ -0,0 +1,166 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00036 <span class="comment">/**********************************************************************/</span>
+00037
+00038 <span class="comment">// RtMidi: Version 1.0.0, 17 September 2004</span>
+00039
+00040 <span class="preprocessor">#ifndef RTMIDI_H</span>
+00041 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
+00042 <span class="preprocessor"></span>
+00043 <span class="preprocessor">#include "RtError.h"</span>
+00044 <span class="preprocessor">#include &lt;string&gt;</span>
+00045
+<a name="l00046"></a><a class="code" href="classRtMidi.html">00046</a> <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
+00047 {
+00048 <span class="keyword">protected</span>:
+00049
+00050 <a class="code" href="classRtMidi.html">RtMidi</a>();
+00051
+00052 <span class="keyword">virtual</span> ~<a class="code" href="classRtMidi.html">RtMidi</a>() {};
+00053
+00054 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
+00055 <span class="comment">// subclasses. The behavior of this function can be modified to</span>
+00056 <span class="comment">// suit specific needs.</span>
+00057 <span class="keywordtype">void</span> error( RtError::Type type );
+00058
+00059 <span class="keyword">virtual</span> <span class="keywordtype">void</span> openPort( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
+00060
+00061 <span class="keywordtype">void</span> *apiData_;
+00062 <span class="keywordtype">bool</span> connected_;
+00063 std::string errorString_;
+00064 };
+00065
+00066 <span class="comment">/**********************************************************************/</span>
+00082 <span class="comment">/**********************************************************************/</span>
+00083
+00084 <span class="preprocessor">#include &lt;vector&gt;</span>
+00085 <span class="preprocessor">#include &lt;queue&gt;</span>
+00086
+<a name="l00087"></a><a class="code" href="classRtMidiIn.html">00087</a> <span class="keyword">class </span><a class="code" href="classRtMidiIn.html">RtMidiIn</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
+00088 {
+00089 <span class="keyword">public</span>:
+00090
+<a name="l00092"></a><a class="code" href="classRtMidiIn.html#s0">00092</a> <span class="keyword">typedef</span> void (*RtMidiCallback)( <span class="keywordtype">double</span> timeStamp, std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
+00093
+00095
+00098 <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>();
+00099
+00101 <a class="code" href="classRtMidiIn.html#a1">~RtMidiIn</a>();
+00102
+00104
+00108 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00109
+00111
+00117 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">openVirtualPort</a>();
+00118
+00120
+00126 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">setCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData = 0 );
+00127
+00129
+00133 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a5">cancelCallback</a>();
+00134
+00136 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a6">closePort</a>( <span class="keywordtype">void</span> );
+00137
+00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
+00140
+00142
+00145 std::string <a class="code" href="classRtMidiIn.html#a8">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00146
+00148
+00152 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a9">setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
+00153
+00155
+00162 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a10">ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span> );
+00163
+00165
+00172 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a11">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00173
+00174 <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
+00175 <span class="comment">// messages. Each message represents one and only one MIDI message.</span>
+00176 <span class="keyword">struct </span>MidiMessage {
+00177 std::vector&lt;unsigned char&gt; bytes;
+00178 <span class="keywordtype">double</span> timeStamp;
+00179
+00180 <span class="comment">// Default constructor.</span>
+00181 MidiMessage()
+00182 :bytes(3), timeStamp(0.0) {}
+00183 };
+00184
+00185 <span class="comment">// The RtMidiInData structure is used to pass private class data to</span>
+00186 <span class="comment">// the MIDI input handling function or thread.</span>
+00187 <span class="keyword">struct </span>RtMidiInData {
+00188 std::queue&lt;MidiMessage&gt; queue;
+00189 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
+00190 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
+00191 <span class="keywordtype">bool</span> doInput;
+00192 <span class="keywordtype">bool</span> firstMessage;
+00193 <span class="keywordtype">void</span> *apiData;
+00194 <span class="keywordtype">bool</span> usingCallback;
+00195 <span class="keywordtype">void</span> *userCallback;
+00196 <span class="keywordtype">void</span> *userData;
+00197
+00198 <span class="comment">// Default constructor.</span>
+00199 RtMidiInData()
+00200 : queueLimit(1024), ignoreFlags(7), doInput(false), firstMessage(true),
+00201 apiData(0), usingCallback(false), userCallback(0), userData(0) {}
+00202 };
+00203
+00204 <span class="keyword">private</span>:
+00205
+00206 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
+00207 RtMidiInData inputData_;
+00208
+00209 };
+00210
+00211 <span class="comment">/**********************************************************************/</span>
+00223 <span class="comment">/**********************************************************************/</span>
+00224
+<a name="l00225"></a><a class="code" href="classRtMidiOut.html">00225</a> <span class="keyword">class </span><a class="code" href="classRtMidiOut.html">RtMidiOut</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
+00226 {
+00227 <span class="keyword">public</span>:
+00228
+00230
+00233 <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>();
+00234
+00236 <a class="code" href="classRtMidiOut.html#a1">~RtMidiOut</a>();
+00237
+00239
+00245 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00246
+00248 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">closePort</a>();
+00249
+00251
+00259 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">openVirtualPort</a>();
+00260
+00262 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
+00263
+00265
+00268 std::string <a class="code" href="classRtMidiOut.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
+00269
+00271
+00275 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00276
+00277 <span class="keyword">private</span>:
+00278
+00279 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
+00280 };
+00281
+00282 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
new file mode 100644
index 0000000..3ad461c
--- /dev/null
+++ b/doc/html/annotated.html
@@ -0,0 +1,25 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Compound List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="classRtError.html">RtError</a></td><td class="indexvalue">Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a></td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidi.html">RtMidi</a></td><td class="indexvalue">An abstract base class for realtime MIDI input/output</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td class="indexvalue">A realtime MIDI input class</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td class="indexvalue">A realtime MIDI output class</td></tr>
+</table>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtError-members.html b/doc/html/classRtError-members.html
new file mode 100644
index 0000000..f3bb904
--- /dev/null
+++ b/doc/html/classRtError-members.html
@@ -0,0 +1,26 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError Member List</h1>This is the complete list of members for <a class="el" href="classRtError.html">RtError</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a4">getMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a3">getType</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a2">printMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a0">RtError</a>(const std::string &amp;message, Type type=RtError::UNSPECIFIED)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#s11">Type</a> enum name</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a1">~RtError</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtError.html b/doc/html/classRtError.html
new file mode 100644
index 0000000..395a949
--- /dev/null
+++ b/doc/html/classRtError.html
@@ -0,0 +1,53 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError Class Reference</h1>Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a>.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtError_8h-source.html">RtError.h</a>&gt;</code>
+<p>
+<a href="classRtError-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#s11">Type</a> </td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Defined RtError types.</em></font><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="a0" doxytag="RtError::RtError"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a0">RtError</a> (const std::string &amp;message, <a class="el" href="classRtError.html#s11">Type</a> type=RtError::UNSPECIFIED)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The constructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="RtError::~RtError"></a>
+virtual&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a1">~RtError</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="RtError::printMessage"></a>
+virtual void&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a2">printMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Prints "thrown" error message to stdout.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a3" doxytag="RtError::getType"></a>
+virtual const <a class="el" href="classRtError.html#s11">Type</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a3">getType</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a4" doxytag="RtError::getMessage"></a>
+virtual const std::string &amp;&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a4">getMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message string.</em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a>.
+<p>
+The RtError class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#s11">RtError::Type</a>. See the RtAudio and <a class="el" href="classRtMidi.html">RtMidi</a> documentation to know which methods can "throw" an RtError.
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="RtError_8h-source.html">RtError.h</a></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidi-members.html b/doc/html/classRtMidi-members.html
new file mode 100644
index 0000000..18e99aa
--- /dev/null
+++ b/doc/html/classRtMidi-members.html
@@ -0,0 +1,20 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Member List</h1>This is the complete list of members for <a class="el" href="classRtMidi.html">RtMidi</a>, including all inherited members.<table>
+</table><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidi.html b/doc/html/classRtMidi.html
new file mode 100644
index 0000000..e7be341
--- /dev/null
+++ b/doc/html/classRtMidi.html
@@ -0,0 +1,46 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Class Reference</h1>An abstract base class for realtime MIDI input/output.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidi:
+<p><center><img src="classRtMidi.png" usemap="#RtMidi_map" border="0" alt=""></center>
+<map name="RtMidi_map">
+<area href="classRtMidiIn.html" alt="RtMidiIn" shape="rect" coords="0,56,67,80">
+<area href="classRtMidiOut.html" alt="RtMidiOut" shape="rect" coords="77,56,144,80">
+</map>
+<a href="classRtMidi-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+An abstract base class for realtime MIDI input/output.
+<p>
+This class implements some common functionality for the realtime MIDI input/output subclasses <a class="el" href="classRtMidiIn.html">RtMidiIn</a> and <a class="el" href="classRtMidiOut.html">RtMidiOut</a>.<p>
+RtMidi WWW site: <a href="http://music.mcgill.ca/~gary/rtmidi/">http://music.mcgill.ca/~gary/rtmidi/</a><p>
+RtMidi: realtime MIDI i/o C++ classes Copyright (c) 2003-2004 Gary P. Scavone<p>
+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:<p>
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<p>
+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.<p>
+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.
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidi.png b/doc/html/classRtMidi.png
new file mode 100644
index 0000000..4114caf
--- /dev/null
+++ b/doc/html/classRtMidi.png
Binary files differ
diff --git a/doc/html/classRtMidiIn-members.html b/doc/html/classRtMidiIn-members.html
new file mode 100644
index 0000000..f03b7c1
--- /dev/null
+++ b/doc/html/classRtMidiIn-members.html
@@ -0,0 +1,33 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiIn Member List</h1>This is the complete list of members for <a class="el" href="classRtMidiIn.html">RtMidiIn</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a5">cancelCallback</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a6">closePort</a>(void)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a11">getMessage</a>(std::vector&lt; unsigned char &gt; *message)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a7">getPortCount</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a8">getPortName</a>(unsigned int portNumber=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a10">ignoreTypes</a>(bool midiSysex=true, bool midiTime=true, bool midiSense=true)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a2">openPort</a>(unsigned int portNumber=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td><code> [virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a3">openVirtualPort</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> typedef</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a0">RtMidiIn</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a4">setCallback</a>(RtMidiCallback callback, void *userData=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a9">setQueueSizeLimit</a>(unsigned int queueSize)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a1">~RtMidiIn</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+</table><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidiIn.html b/doc/html/classRtMidiIn.html
new file mode 100644
index 0000000..ced103b
--- /dev/null
+++ b/doc/html/classRtMidiIn.html
@@ -0,0 +1,376 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiIn Class Reference</h1>A realtime MIDI input class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidiIn:
+<p><center><img src="classRtMidiIn.png" usemap="#RtMidiIn_map" border="0" alt=""></center>
+<map name="RtMidiIn_map">
+<area href="classRtMidi.html" alt="RtMidi" shape="rect" coords="0,0,57,24">
+</map>
+<a href="classRtMidiIn-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="s0" doxytag="RtMidiIn::RtMidiCallback"></a>
+typedef void(*&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> )(double timeStamp, std::vector&lt; unsigned char &gt; *message, void *userData)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>User callback function type definition.</em></font><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a0">RtMidiIn</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Default constructor.</em> <a href="#a0"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="RtMidiIn::~RtMidiIn"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a1">~RtMidiIn</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>If a MIDI connection is still open, it will be closed by the destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a2">openPort</a> (unsigned int portNumber=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Open a MIDI input connection.</em> <a href="#a2"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a3">openVirtualPort</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Create a virtual input port to allow software connections (OS X and ALSA only).</em> <a href="#a3"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a4">setCallback</a> (<a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> callback, void *userData=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Set a callback function to be invoked for incoming MIDI messages.</em> <a href="#a4"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a5">cancelCallback</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Cancel use of the current callback function (if one exists).</em> <a href="#a5"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a6" doxytag="RtMidiIn::closePort"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a6">closePort</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Close an open MIDI connection (if one exists).</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a7" doxytag="RtMidiIn::getPortCount"></a>
+unsigned int&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a7">getPortCount</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the number of available MIDI input ports.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>std::string&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a8">getPortName</a> (unsigned int portNumber=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return a string identifier for the specified MIDI input port number.</em> <a href="#a8"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a9">setQueueSizeLimit</a> (unsigned int queueSize)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Set the maximum number of MIDI messages to be saved in the queue.</em> <a href="#a9"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a10">ignoreTypes</a> (bool midiSysex=true, bool midiTime=true, bool midiSense=true)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Specify whether certain MIDI message types should be queued or ignored during input.</em> <a href="#a10"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a11">getMessage</a> (std::vector&lt; unsigned char &gt; *message)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.</em> <a href="#a11"></a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A realtime MIDI input class.
+<p>
+This class provides a common, platform-independent API for realtime MIDI input. It allows access to a single MIDI input port. Incoming MIDI messages are either saved to a queue for retrieval using the <a class="el" href="classRtMidiIn.html#a11">getMessage()</a> function or immediately passed to a user-specified callback function. Create multiple instances of this class to connect to more than one MIDI device at the same time. With the OS-X and Linux ALSA MIDI APIs, it is also possible to open a virtual input port to which other MIDI software clients can connect.<p>
+by Gary P. Scavone, 2003-2004.
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a name="a0" doxytag="RtMidiIn::RtMidiIn"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> RtMidiIn::RtMidiIn </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Default constructor.
+<p>
+An exception will be thrown if a MIDI system initialization error occurs. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a name="a2" doxytag="RtMidiIn::openPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::openPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Open a MIDI input connection.
+<p>
+An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened.
+<p>
+Implements <a class="el" href="classRtMidi.html">RtMidi</a>. </td>
+ </tr>
+</table>
+<a name="a3" doxytag="RtMidiIn::openVirtualPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::openVirtualPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Create a virtual input port to allow software connections (OS X and ALSA only).
+<p>
+This function creates a virtual MIDI input port to which other software applications can connect. This type of functionality is currently only supported by the Macintosh OS-X and Linux ALSA APIs (the function does nothing for the other APIs). </td>
+ </tr>
+</table>
+<a name="a4" doxytag="RtMidiIn::setCallback"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::setCallback </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a>&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>callback</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>void *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>userData</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set a callback function to be invoked for incoming MIDI messages.
+<p>
+The callback function will be called whenever an incoming MIDI message is received. While not absolutely necessary, it is best to set the callback function before opening a MIDI port to avoid leaving some messages in the queue. </td>
+ </tr>
+</table>
+<a name="a5" doxytag="RtMidiIn::cancelCallback"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::cancelCallback </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Cancel use of the current callback function (if one exists).
+<p>
+Subsequent incoming MIDI messages will be written to the queue and can be retrieved with the <em>getMessage</em> function. </td>
+ </tr>
+</table>
+<a name="a8" doxytag="RtMidiIn::getPortName"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string RtMidiIn::getPortName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return a string identifier for the specified MIDI input port number.
+<p>
+An exception is thrown if an invalid port specifier is provided. </td>
+ </tr>
+</table>
+<a name="a9" doxytag="RtMidiIn::setQueueSizeLimit"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::setQueueSizeLimit </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>queueSize</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the maximum number of MIDI messages to be saved in the queue.
+<p>
+If the queue size limit is reached, incoming messages will be ignored. The default limit is 1024. </td>
+ </tr>
+</table>
+<a name="a10" doxytag="RtMidiIn::ignoreTypes"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::ignoreTypes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiSysex</em> = true, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiTime</em> = true, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiSense</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Specify whether certain MIDI message types should be queued or ignored during input.
+<p>
+By default, MIDI timing and active sensing messages are ignored during message input because of their relative high data rates. MIDI sysex messages are ignored by default as well. Variable values of "true" imply that the respective message type will be ignored. </td>
+ </tr>
+</table>
+<a name="a11" doxytag="RtMidiIn::getMessage"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double RtMidiIn::getMessage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>message</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.
+<p>
+This function returns immediately whether a new message is available or not. A valid message is indicated by a non-zero vector size. An exception is thrown if an error occurs during message retrieval or an input connection was not previously established. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidiIn.png b/doc/html/classRtMidiIn.png
new file mode 100644
index 0000000..224cf6d
--- /dev/null
+++ b/doc/html/classRtMidiIn.png
Binary files differ
diff --git a/doc/html/classRtMidiOut-members.html b/doc/html/classRtMidiOut-members.html
new file mode 100644
index 0000000..451ad23
--- /dev/null
+++ b/doc/html/classRtMidiOut-members.html
@@ -0,0 +1,28 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiOut Member List</h1>This is the complete list of members for <a class="el" href="classRtMidiOut.html">RtMidiOut</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a3">closePort</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a5">getPortCount</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a6">getPortName</a>(unsigned int portNumber)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a2">openPort</a>(unsigned int portNumber=0)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td><code> [virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a4">openVirtualPort</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a0">RtMidiOut</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a7">sendMessage</a>(std::vector&lt; unsigned char &gt; *message)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a1">~RtMidiOut</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+</table><HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidiOut.html b/doc/html/classRtMidiOut.html
new file mode 100644
index 0000000..3c75b27
--- /dev/null
+++ b/doc/html/classRtMidiOut.html
@@ -0,0 +1,217 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiOut Class Reference</h1>A realtime MIDI output class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidiOut:
+<p><center><img src="classRtMidiOut.png" usemap="#RtMidiOut_map" border="0" alt=""></center>
+<map name="RtMidiOut_map">
+<area href="classRtMidi.html" alt="RtMidi" shape="rect" coords="0,0,67,24">
+</map>
+<a href="classRtMidiOut-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a0">RtMidiOut</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Default constructor.</em> <a href="#a0"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="RtMidiOut::~RtMidiOut"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a1">~RtMidiOut</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The destructor closes any open MIDI connections.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a2">openPort</a> (unsigned int portNumber=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Open a MIDI output connection.</em> <a href="#a2"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a3" doxytag="RtMidiOut::closePort"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a3">closePort</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Close an open MIDI connection (if one exists).</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a4">openVirtualPort</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Create a virtual output port to allow software connections (OS X and ALSA only).</em> <a href="#a4"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a5" doxytag="RtMidiOut::getPortCount"></a>
+unsigned int&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a5">getPortCount</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the number of available MIDI output ports.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>std::string&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a6">getPortName</a> (unsigned int portNumber)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return a string identifier for the specified MIDI port type and number.</em> <a href="#a6"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a7">sendMessage</a> (std::vector&lt; unsigned char &gt; *message)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Immediately send a single message out an open MIDI output port.</em> <a href="#a7"></a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A realtime MIDI output class.
+<p>
+This class provides a common, platform-independent API for MIDI output. It allows one to probe available MIDI output ports, to connect to one such port, and to send MIDI bytes immediately over the connection. Create multiple instances of this class to connect to more than one MIDI device at the same time.<p>
+by Gary P. Scavone, 2003-2004.
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a name="a0" doxytag="RtMidiOut::RtMidiOut"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> RtMidiOut::RtMidiOut </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Default constructor.
+<p>
+An exception will be thrown if a MIDI system initialization error occurs. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a name="a2" doxytag="RtMidiOut::openPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiOut::openPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Open a MIDI output connection.
+<p>
+An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened. An exception is thrown if an error occurs while attempting to make the port connection.
+<p>
+Implements <a class="el" href="classRtMidi.html">RtMidi</a>. </td>
+ </tr>
+</table>
+<a name="a4" doxytag="RtMidiOut::openVirtualPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiOut::openVirtualPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Create a virtual output port to allow software connections (OS X and ALSA only).
+<p>
+This function creates a virtual MIDI output port to which other software applications can connect. This type of functionality is currently only supported by the Macintosh OS-X and Linux ALSA APIs (the function does nothing with the other APIs). An exception is thrown if an error occurs while attempting to create the virtual port. </td>
+ </tr>
+</table>
+<a name="a6" doxytag="RtMidiOut::getPortName"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string RtMidiOut::getPortName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return a string identifier for the specified MIDI port type and number.
+<p>
+An exception is thrown if an invalid port specifier is provided. </td>
+ </tr>
+</table>
+<a name="a7" doxytag="RtMidiOut::sendMessage"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiOut::sendMessage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>message</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Immediately send a single message out an open MIDI output port.
+<p>
+An exception is thrown if an error occurs during output or an output connection was not previously established. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/classRtMidiOut.png b/doc/html/classRtMidiOut.png
new file mode 100644
index 0000000..6a41edc
--- /dev/null
+++ b/doc/html/classRtMidiOut.png
Binary files differ
diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css
new file mode 100644
index 0000000..8cb8b2e
--- /dev/null
+++ b/doc/html/doxygen.css
@@ -0,0 +1,49 @@
+H1 { text-align: center; }
+CAPTION { font-weight: bold }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #f2f2ff; font-weight: bold; }
+TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+BODY { background: white; color: black }
+TD.indexkey {
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+TD.indexvalue {
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+span.keyword { color: #008000 }
+span.keywordtype { color: #604020 }
+span.keywordflow { color: #e08000 }
+span.comment { color: #800000 }
+span.preprocessor { color: #806020 }
+span.stringliteral { color: #002080 }
+span.charliteral { color: #008080 }
diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png
new file mode 100644
index 0000000..96ae72c
--- /dev/null
+++ b/doc/html/doxygen.png
Binary files differ
diff --git a/doc/html/files.html b/doc/html/files.html
new file mode 100644
index 0000000..7be5c13
--- /dev/null
+++ b/doc/html/files.html
@@ -0,0 +1,23 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey"><b>RtError.h</b> <a href="RtError_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>RtMidi.h</b> <a href="RtMidi_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/functions.html b/doc/html/functions.html
new file mode 100644
index 0000000..1195328
--- /dev/null
+++ b/doc/html/functions.html
@@ -0,0 +1,42 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Compound Members</h1>Here is a list of all documented class members with links to the class documentation for each member:<ul>
+<li>cancelCallback()
+: <a class="el" href="classRtMidiIn.html#a5">RtMidiIn</a><li>closePort()
+: <a class="el" href="classRtMidiOut.html#a3">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a6">RtMidiIn</a><li>getMessage()
+: <a class="el" href="classRtError.html#a4">RtError</a>, <a class="el" href="classRtMidiIn.html#a11">RtMidiIn</a><li>getPortCount()
+: <a class="el" href="classRtMidiOut.html#a5">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a7">RtMidiIn</a><li>getPortName()
+: <a class="el" href="classRtMidiOut.html#a6">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a8">RtMidiIn</a><li>getType()
+: <a class="el" href="classRtError.html#a3">RtError</a><li>ignoreTypes()
+: <a class="el" href="classRtMidiIn.html#a10">RtMidiIn</a><li>openPort()
+: <a class="el" href="classRtMidiOut.html#a2">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a2">RtMidiIn</a><li>openVirtualPort()
+: <a class="el" href="classRtMidiOut.html#a4">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a3">RtMidiIn</a><li>printMessage()
+: <a class="el" href="classRtError.html#a2">RtError</a><li>RtError()
+: <a class="el" href="classRtError.html#a0">RtError</a><li>RtMidiCallback
+: <a class="el" href="classRtMidiIn.html#s0">RtMidiIn</a><li>RtMidiIn()
+: <a class="el" href="classRtMidiIn.html#a0">RtMidiIn</a><li>RtMidiOut()
+: <a class="el" href="classRtMidiOut.html#a0">RtMidiOut</a><li>sendMessage()
+: <a class="el" href="classRtMidiOut.html#a7">RtMidiOut</a><li>setCallback()
+: <a class="el" href="classRtMidiIn.html#a4">RtMidiIn</a><li>setQueueSizeLimit()
+: <a class="el" href="classRtMidiIn.html#a9">RtMidiIn</a><li>Type
+: <a class="el" href="classRtError.html#s11">RtError</a><li>~RtError()
+: <a class="el" href="classRtError.html#a1">RtError</a><li>~RtMidiIn()
+: <a class="el" href="classRtMidiIn.html#a1">RtMidiIn</a><li>~RtMidiOut()
+: <a class="el" href="classRtMidiOut.html#a1">RtMidiOut</a></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
new file mode 100644
index 0000000..548d919
--- /dev/null
+++ b/doc/html/hierarchy.html
@@ -0,0 +1,27 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="classRtError.html">RtError</a>
+<li><a class="el" href="classRtMidi.html">RtMidi</a>
+<ul>
+<li><a class="el" href="classRtMidiIn.html">RtMidiIn</a>
+<li><a class="el" href="classRtMidiOut.html">RtMidiOut</a>
+</ul>
+<li><b>RtMidiIn::MidiMessage</b><li><b>RtMidiIn::RtMidiInData</b></ul>
+<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644
index 0000000..5972b27
--- /dev/null
+++ b/doc/html/index.html
@@ -0,0 +1,336 @@
+<HTML>
+<HEAD>
+<TITLE>The RtMidi Tutorial</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>The <a class="el" href="classRtMidi.html">RtMidi</a> Tutorial</h1>
+<p>
+<center><a class="el" href="index.html#intro">Introduction</a> &nbsp;&nbsp; <a class="el" href="index.html#download">Download</a> &nbsp;&nbsp; <a class="el" href="index.html#start">Getting Started</a> &nbsp;&nbsp; <a class="el" href="index.html#error">Error Handling</a> &nbsp;&nbsp; <a class="el" href="index.html#probing">Probing Ports</a> &nbsp;&nbsp; <a class="el" href="index.html#output">MIDI Output</a> &nbsp;&nbsp; <a class="el" href="index.html#input">MIDI Input</a> &nbsp;&nbsp; <a class="el" href="index.html#virtual">Virtual Ports</a> &nbsp;&nbsp; <a class="el" href="index.html#compiling">Compiling</a> &nbsp;&nbsp; <a class="el" href="index.html#debug">Debugging</a> &nbsp;&nbsp; <a class="el" href="index.html#apinotes">API Notes</a> &nbsp;&nbsp; <a class="el" href="index.html#license">License</a> </center><h2><a name="intro"></a>
+Introduction</h2>
+<a class="el" href="classRtMidi.html">RtMidi</a> is a set of C++ classes (<a class="el" href="classRtMidiIn.html">RtMidiIn</a> and <a class="el" href="classRtMidiOut.html">RtMidiOut</a>) which provide a common API (Application Programming Interface) for realtime MIDI input/output across Linux (ALSA), Macintosh OS X, SGI, and Windows (Multimedia Library) operating systems. <a class="el" href="classRtMidi.html">RtMidi</a> significantly simplifies the process of interacting with computer MIDI hardware and software. It was designed with the following goals:<p>
+<ul>
+<li>
+object oriented C++ design </li>
+<li>
+simple, common API across all supported platforms </li>
+<li>
+only two header files and one source file for easy inclusion in programming projects </li>
+<li>
+MIDI device enumeration </li>
+</ul>
+<p>
+MIDI input and output functionality are separated into two classes, <a class="el" href="classRtMidiIn.html">RtMidiIn</a> and <a class="el" href="classRtMidiOut.html">RtMidiOut</a>. Each class instance supports only a single MIDI connection. <a class="el" href="classRtMidi.html">RtMidi</a> does not provide timing functionality (i.e., output messages are sent immediately). Input messages are timestamped with delta times in seconds (via a <code>double</code> floating point type). MIDI data is passed to the user as raw bytes using an std::vector&lt;unsigned char&gt;.<h2><a name="download"></a>
+Download</h2>
+Latest Release (17 September 2004): <a href="http://music.mcgill.ca/~gary/rtmidi/release/rtmidi-1.0.0.tar.gz">Version 1.0.0 (154 kB tar/gzipped)</a><h2><a name="start"></a>
+Getting Started</h2>
+The first thing that must be done when using <a class="el" href="classRtMidi.html">RtMidi</a> is to create an instance of the <a class="el" href="classRtMidiIn.html">RtMidiIn</a> or <a class="el" href="classRtMidiOut.html">RtMidiOut</a> subclasses. <a class="el" href="classRtMidi.html">RtMidi</a> is an abstract base class, which itself cannot be instantiated. Each default constructor attempts to establish any necessary "connections" with the underlying MIDI system. <a class="el" href="classRtMidi.html">RtMidi</a> uses C++ exceptions to report errors, necessitating try/catch blocks around many member functions. An <a class="el" href="classRtError.html">RtError</a> can be thrown during instantiation in some circumstances. A warning message may also be reported if no MIDI devices are found during instantiation. The <a class="el" href="classRtMidi.html">RtMidi</a> classes have been designed to work with "hot pluggable" or virtual (software) MIDI devices, making it is possible to connect or start MIDI devices after the classes have been instantiated. The following code example demonstrates default object construction and destruction:<p>
+<div class="fragment"><pre>
+
+<span class="preprocessor">#include "RtMidi.h"</span>
+
+<span class="keywordtype">int</span> main()
+{
+ <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midiin = 0;
+
+ <span class="comment">// RtMidiIn constructor</span>
+ <span class="keywordflow">try</span> {
+ midiin = <span class="keyword">new</span> <a class="code" href="classRtMidiIn.html">RtMidiIn</a>();
+ }
+ <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
+ <span class="comment">// Handle the exception here</span>
+ error.printMessage();
+ }
+
+ <span class="comment">// Clean up</span>
+ <span class="keyword">delete</span> midiin;
+}
+</pre></div><p>
+Obviously, this example doesn't demonstrate any of the real functionality of <a class="el" href="classRtMidi.html">RtMidi</a>. However, all uses of <a class="el" href="classRtMidi.html">RtMidi</a> must begin with construction and must end with class destruction. Further, it is necessary that all class methods which can throw a C++ exception be called within a try/catch block.<h2><a name="error"></a>
+Error Handling</h2>
+<a class="el" href="classRtMidi.html">RtMidi</a> uses a C++ exception handler called <a class="el" href="classRtError.html">RtError</a>, which is declared and defined in <a class="el" href="RtError_8h.html">RtError.h</a>. The <a class="el" href="classRtError.html">RtError</a> class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#s11">RtError::Type</a>. Many <a class="el" href="classRtMidi.html">RtMidi</a> methods can "throw" an <a class="el" href="classRtError.html">RtError</a>, most typically if a driver error occurs or an invalid function argument is specified. There are a number of cases within <a class="el" href="classRtMidi.html">RtMidi</a> where warning messages may be displayed but an exception is not thrown. There is a protected <a class="el" href="classRtMidi.html">RtMidi</a> method, error(), which can be modified to globally control how these messages are handled and reported. By default, error messages are not automatically displayed in <a class="el" href="classRtMidi.html">RtMidi</a> unless the preprocessor definition __RTMIDI_DEBUG__ is defined. Messages associated with caught exceptions can be displayed with, for example, the <a class="el" href="classRtError.html#a2">RtError::printMessage()</a> function.<h2><a name="probing"></a>
+Probing Ports</h2>
+A programmer may wish to query the available MIDI ports before deciding which to use. The following example outlines how this can be done.<p>
+<div class="fragment"><pre>
+<span class="comment">// midiinfo.cpp</span>
+
+<span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#include "RtMidi.h"</span>
+
+<span class="keywordtype">int</span> main()
+{
+ <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midiin = 0;
+ <a class="code" href="classRtMidiOut.html">RtMidiOut</a> *midiout = 0;
+
+ <span class="comment">// RtMidiIn constructor</span>
+ <span class="keywordflow">try</span> {
+ midiin = <span class="keyword">new</span> <a class="code" href="classRtMidiIn.html">RtMidiIn</a>();
+ }
+ <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
+ error.printMessage();
+ exit(EXIT_FAILURE);
+ }
+
+ <span class="comment">// Check inputs.</span>
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nPorts = midiin-&gt;<a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
+ std::cout &lt;&lt; <span class="stringliteral">"\nThere are "</span> &lt;&lt; nPorts &lt;&lt; <span class="stringliteral">" MIDI input sources available.\n"</span>;
+ std::string portName;
+ <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nPorts; i++ ) {
+ <span class="keywordflow">try</span> {
+ portName = midiin-&gt;<a class="code" href="classRtMidiIn.html#a8">getPortName</a>(i);
+ }
+ <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
+ error.printMessage();
+ <span class="keywordflow">goto</span> cleanup;
+ }
+ std::cout &lt;&lt; <span class="stringliteral">" Input Port #"</span> &lt;&lt; i+1 &lt;&lt; <span class="stringliteral">": "</span> &lt;&lt; portName &lt;&lt; <span class="charliteral">'\n'</span>;
+ }
+
+ <span class="comment">// RtMidiOut constructor</span>
+ <span class="keywordflow">try</span> {
+ midiout = <span class="keyword">new</span> <a class="code" href="classRtMidiOut.html">RtMidiOut</a>();
+ }
+ <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
+ error.printMessage();
+ exit(EXIT_FAILURE);
+ }
+
+ <span class="comment">// Check outputs.</span>
+ nPorts = midiout-&gt;<a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
+ std::cout &lt;&lt; <span class="stringliteral">"\nThere are "</span> &lt;&lt; nPorts &lt;&lt; <span class="stringliteral">" MIDI output ports available.\n"</span>;
+ <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nPorts; i++ ) {
+ <span class="keywordflow">try</span> {
+ portName = midiout-&gt;<a class="code" href="classRtMidiOut.html#a6">getPortName</a>(i);
+ }
+ <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a> &amp;error) {
+ error.printMessage();
+ <span class="keywordflow">goto</span> cleanup;
+ }
+ std::cout &lt;&lt; <span class="stringliteral">" Output Port #"</span> &lt;&lt; i+1 &lt;&lt; <span class="stringliteral">": "</span> &lt;&lt; portName &lt;&lt; <span class="charliteral">'\n'</span>;
+ }
+ std::cout &lt;&lt; <span class="charliteral">'\n'</span>;
+
+ <span class="comment">// Clean up</span>
+ cleanup:
+ <span class="keyword">delete</span> midiin;
+ <span class="keyword">delete</span> midiout;
+
+ <span class="keywordflow">return</span> 0;
+}
+</pre></div><h2><a name="output"></a>
+MIDI Output</h2>
+The <a class="el" href="classRtMidiOut.html">RtMidiOut</a> class provides simple functionality to immediately send messages over a MIDI connection. No timing functionality is provided.<p>
+In the following example, we omit necessary error checking and details regarding OS-dependent sleep functions. For a complete example, see the <code>midiout.cpp</code> program in the <code>tests</code> directory.<p>
+<div class="fragment"><pre>
+<span class="comment">// midiout.cpp</span>
+
+<span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#include "RtMidi.h"</span>
+
+<span class="keywordtype">int</span> main()
+{
+ <a class="code" href="classRtMidiOut.html">RtMidiOut</a> *midiout = <span class="keyword">new</span> <a class="code" href="classRtMidiOut.html">RtMidiOut</a>();
+ std::vector&lt;unsigned char&gt; message;
+
+ <span class="comment">// Check available ports.</span>
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nPorts = midiout-&gt;<a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
+ <span class="keywordflow">if</span> ( nPorts == 0 ) {
+ std::cout &lt;&lt; <span class="stringliteral">"No ports available!\n"</span>;
+ <span class="keywordflow">goto</span> cleanup;
+ }
+
+ <span class="comment">// Open first available port.</span>
+ midiout-&gt;<a class="code" href="classRtMidiOut.html#a2">openPort</a>( 0 );
+
+ <span class="comment">// Send out a series of MIDI messages.</span>
+
+ <span class="comment">// Program change: 192, 5</span>
+ message.push_back( 192 );
+ message.push_back( 5 );
+ midiout-&gt;<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;message );
+
+ <span class="comment">// Control Change: 176, 7, 100 (volume)</span>
+ message[0] = 176;
+ message[1] = 7;
+ message.push_back( 100 );
+ midiout-&gt;<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;message );
+
+ <span class="comment">// Note On: 144, 64, 90</span>
+ message[0] = 144;
+ message[1] = 64;
+ message[2] = 90;
+ midiout-&gt;<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;message );
+
+ SLEEP( 500 ); <span class="comment">// Platform-dependent ... see example in tests directory.</span>
+
+ <span class="comment">// Note Off: 128, 64, 40</span>
+ message[0] = 128;
+ message[1] = 64;
+ message[2] = 40;
+ midiout-&gt;<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;message );
+
+ <span class="comment">// Clean up</span>
+ cleanup:
+ <span class="keyword">delete</span> midiout;
+
+ <span class="keywordflow">return</span> 0;
+}
+</pre></div><h2><a name="input"></a>
+MIDI Input</h2>
+The <a class="el" href="classRtMidiIn.html">RtMidiIn</a> class uses an internal callback function or thread to receive incoming MIDI messages from a port or device. These messages are then either queued and read by the user via calls to the <a class="el" href="classRtMidiIn.html#a11">RtMidiIn::getMessage()</a> function or immediately passed to a user-specified callback function (which must be "registered" using the <a class="el" href="classRtMidiIn.html#a4">RtMidiIn::setCallback()</a> function). We'll provide examples of both usages.<p>
+The <a class="el" href="classRtMidiIn.html">RtMidiIn</a> class provides the <a class="el" href="classRtMidiIn.html#a10">RtMidiIn::ignoreTypes()</a> function to specify that certain MIDI message types be ignored. By default, sysem exclusive, timing, and active sensing messages are ignored.<h3><a name="qmidiin"></a>
+Queued MIDI Input</h3>
+The <a class="el" href="classRtMidiIn.html#a11">RtMidiIn::getMessage()</a> function does not block. If a MIDI message is available in the queue, it is copied to the user-provided <code>std::vector&lt;unsigned char&gt;</code> container. When no MIDI message is available, the function returns an empty container. The default maximum MIDI queue size is 1024 messages. This value may be modified with the <a class="el" href="classRtMidiIn.html#a9">RtMidiIn::setQueueSizeLimit()</a> function. If the maximum queue size limit is reached, subsequent MIDI messages are discarded until the queue size is reduced.<p>
+In the following example, we omit some necessary error checking and details regarding OS-dependent sleep functions. For a more complete example, see the <code>qmidiin.cpp</code> program in the <code>tests</code> directory.<p>
+<div class="fragment"><pre>
+<span class="comment">// qmidiin.cpp</span>
+
+<span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#include &lt;signal.h&gt;</span>
+<span class="preprocessor">#include "RtMidi.h"</span>
+
+<span class="keywordtype">bool</span> done;
+<span class="keyword">static</span> <span class="keywordtype">void</span> finish(<span class="keywordtype">int</span> ignore){ done = <span class="keyword">true</span>; }
+
+<span class="keywordtype">int</span> main()
+{
+ <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midiin = <span class="keyword">new</span> <a class="code" href="classRtMidiIn.html">RtMidiIn</a>();
+ std::vector&lt;unsigned char&gt; message;
+ <span class="keywordtype">int</span> nBytes, i;
+ <span class="keywordtype">double</span> stamp;
+
+ <span class="comment">// Check available ports.</span>
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nPorts = midiin-&gt;<a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
+ <span class="keywordflow">if</span> ( nPorts == 0 ) {
+ std::cout &lt;&lt; <span class="stringliteral">"No ports available!\n"</span>;
+ <span class="keywordflow">goto</span> cleanup;
+ }
+ midiin-&gt;<a class="code" href="classRtMidiIn.html#a2">openPort</a>( 0 );
+
+ <span class="comment">// Don't ignore sysex, timing, or active sensing messages.</span>
+ midiin-&gt;<a class="code" href="classRtMidiIn.html#a10">ignoreTypes</a>( <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
+
+ <span class="comment">// Install an interrupt handler function.</span>
+ done = <span class="keyword">false</span>;
+ (void) signal(SIGINT, finish);
+
+ <span class="comment">// Periodically check input queue.</span>
+ std::cout &lt;&lt; <span class="stringliteral">"Reading MIDI from port ... quit with Ctrl-C.\n"</span>;
+ <span class="keywordflow">while</span> ( !done ) {
+ stamp = midiin-&gt;<a class="code" href="classRtMidiIn.html#a11">getMessage</a>( &amp;message );
+ nBytes = message.size();
+ <span class="keywordflow">for</span> ( i=0; i&lt;nBytes; i++ )
+ std::cout &lt;&lt; <span class="stringliteral">"Byte "</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">" = "</span> &lt;&lt; (int)message[i] &lt;&lt; <span class="stringliteral">", "</span>;
+ <span class="keywordflow">if</span> ( nBytes &gt; 0 )
+ std::cout &lt;&lt; <span class="stringliteral">"stamp = "</span> &lt;&lt; stamp &lt;&lt; <span class="charliteral">'\n'</span>;
+
+ <span class="comment">// Sleep for 10 milliseconds ... platform-dependent.</span>
+ SLEEP( 10 );
+ }
+
+ <span class="comment">// Clean up</span>
+ cleanup:
+ <span class="keyword">delete</span> midiin;
+
+ <span class="keywordflow">return</span> 0;
+}
+</pre></div><h3><a name="cmidiin"></a>
+MIDI Input with User Callback</h3>
+When set, a user-provided callback function will be invoked after the input of a complete MIDI message. It is possible to provide a pointer to user data which can be accessed in the callback function (not shown here). It is necessary to set the callback function immediately after opening the port to avoid having incoming messages written to the queue (which is not emptied when a callback function is set). If you are worried about this happening, you can check the queue using the RtMidi::getMessage() function to verify it is empty (after the callback function is set).<p>
+In the following example, we omit some necessary error checking. For a more complete example, see the <code>cmidiin.cpp</code> program in the <code>tests</code> directory.<p>
+<div class="fragment"><pre>
+<span class="comment">// cmidiin.cpp</span>
+
+<span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#include "RtMidi.h"</span>
+
+<span class="keywordtype">void</span> mycallback( <span class="keywordtype">double</span> deltatime, std::vector&lt; unsigned char &gt; *message, <span class="keywordtype">void</span> *userData )
+{
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes = message-&gt;size();
+ <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nBytes; i++ )
+ std::cout &lt;&lt; <span class="stringliteral">"Byte "</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">" = "</span> &lt;&lt; (int)message-&gt;at(i) &lt;&lt; <span class="stringliteral">", "</span>;
+ <span class="keywordflow">if</span> ( nBytes &gt; 0 )
+ std::cout &lt;&lt; <span class="stringliteral">"stamp = "</span> &lt;&lt; deltatime &lt;&lt; <span class="charliteral">'\n'</span>;
+}
+
+<span class="keywordtype">int</span> main()
+{
+ <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midiin = <span class="keyword">new</span> <a class="code" href="classRtMidiIn.html">RtMidiIn</a>();
+
+ <span class="comment">// Check available ports.</span>
+ <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nPorts = midiin-&gt;<a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
+ <span class="keywordflow">if</span> ( nPorts == 0 ) {
+ std::cout &lt;&lt; <span class="stringliteral">"No ports available!\n"</span>;
+ <span class="keywordflow">goto</span> cleanup;
+ }
+
+ midiin-&gt;<a class="code" href="classRtMidiIn.html#a2">openPort</a>( 0 );
+
+ <span class="comment">// Set our callback function. This should be done immediately after</span>
+ <span class="comment">// opening the port to avoid having incoming messages written to the</span>
+ <span class="comment">// queue.</span>
+ midiin-&gt;<a class="code" href="classRtMidiIn.html#a4">setCallback</a>( &amp;mycallback );
+
+ <span class="comment">// Don't ignore sysex, timing, or active sensing messages.</span>
+ midiin-&gt;<a class="code" href="classRtMidiIn.html#a10">ignoreTypes</a>( <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
+
+ std::cout &lt;&lt; <span class="stringliteral">"\nReading MIDI input ... press &lt;enter&gt; to quit.\n"</span>;
+ <span class="keywordtype">char</span> input;
+ std::cin.get(input);
+
+ <span class="comment">// Clean up</span>
+ cleanup:
+ <span class="keyword">delete</span> midiin;
+
+ <span class="keywordflow">return</span> 0;
+}
+</pre></div><h2><a name="virtual"></a>
+Virtual Ports</h2>
+The Linux ALSA and Macintosh CoreMIDI APIs allow for the establishment of virtual input and output MIDI ports to which other software clients can connect. <a class="el" href="classRtMidi.html">RtMidi</a> incorporates this functionality with the <a class="el" href="classRtMidiIn.html#a3">RtMidiIn::openVirtualPort()</a> and <a class="el" href="classRtMidiOut.html#a4">RtMidiOut::openVirtualPort()</a> functions. Any messages sent with the <a class="el" href="classRtMidiOut.html#a7">RtMidiOut::sendMessage()</a> function will also be transmitted through an open virtual output port. If a virtual input port is open and a user callback function is set, the callback function will be invoked when messages arrive via that port. If a callback function is not set, the user must poll the input queue to check whether messages have arrived. No notification is provided for the establishment of a client connection via a virtual port.<h2><a name="compiling"></a>
+Compiling</h2>
+In order to compile <a class="el" href="classRtMidi.html">RtMidi</a> for a specific OS and API, it is necessary to supply the appropriate preprocessor definition and library within the compiler statement: <p>
+<table border="2" cols="5" width="100%" cellspacing="3" cellpadding="3">
+<tr bgcolor="beige">
+<td width="5%"><b>OS:</b> </td><td width="5%"><b>Audio API:</b> </td><td width="5%"><b>Preprocessor Definition:</b> </td><td width="5%"><b>Library or Framework:</b> </td><td><b>Example Compiler Statement:</b> </td></tr>
+<tr>
+<td>Linux </td><td>ALSA </td><td>__LINUX_ALSA__ </td><td><code>asound, pthread</code> </td><td><code>g++ -Wall -D__LINUX_ALSA__ -o midiinfo midiinfo.cpp RtMidi.cpp -lasound -lpthread</code> </td></tr>
+<tr>
+<td>Macintosh OS X </td><td>CoreAudio </td><td>__MACOSX_CORE__ </td><td><code>pthread, stdc++, CoreAudio</code> </td><td><code>g++ -Wall -D__MACOSX_CORE__ -o midiinfo midiinfo.cpp RtMidi.cpp -framework CoreMidi -lpthread</code> </td></tr>
+<tr>
+<td>Irix </td><td>MD </td><td>__IRIX_MD__ </td><td><code>md, pthread</code> </td><td><code>CC -Wall -D__IRIX_MD__ -o midiinfo midiinfo.cpp RtMidi.cpp -laudio -lpthread</code> </td></tr>
+<tr>
+<td>Windows </td><td>Multimedia Library </td><td>__WINDOWS_MM__ </td><td><code>winmm.lib, multithreaded</code> </td><td><em>compiler specific</em> </td></tr>
+</table>
+<p>
+The example compiler statements above could be used to compile the <code>probe.cpp</code> example file, assuming that <code>midiinfo.cpp</code>, <code><a class="el" href="RtMidi_8h.html">RtMidi.h</a></code>, <code><a class="el" href="RtError_8h.html">RtError.h</a></code>, and <code>RtMidi.cpp</code> all exist in the same directory.<h2><a name="debug"></a>
+Debugging</h2>
+If you are having problems getting <a class="el" href="classRtMidi.html">RtMidi</a> to run on your system, try passing the preprocessor definition <code>__RTMIDI_DEBUG__</code> to the compiler (or uncomment the definition at the bottom of <a class="el" href="RtMidi_8h.html">RtMidi.h</a>). A variety of warning messages will be displayed which may help in determining the problem. Also try using the programs included in the <code>test</code> directory. The program <code>midiinfo</code> displays the queried capabilities of all MIDI ports found.<h2><a name="apinotes"></a>
+API Notes</h2>
+<a class="el" href="classRtMidi.html">RtMidi</a> is designed to provide a common API across the various supported operating systems and audio libraries. Despite that, some issues should be mentioned with regard to each.<h3><a name="linux"></a>
+Linux:</h3>
+<a class="el" href="classRtMidi.html">RtMidi</a> for Linux was developed using the Fedora distribution. A decision was made to not include support for the OSS API because the OSS API provides such limited functionality and because <a href="http://www.alsa-project.org/">ALSA</a> support is now incorporated in the Linux kernel. <a class="el" href="classRtMidi.html">RtMidi</a> uses the ALSA sequencer API, which allows for virtual software input and output ports.<h3><a name="macosx"></a>
+Macintosh OS X (CoreAudio):</h3>
+The Apple CoreMidi API allows for the establishment of virtual input and output ports to which other software applications can connect.<h3><a name="irix"></a>
+Irix (SGI):</h3>
+The Irix version of <a class="el" href="classRtMidi.html">RtMidi</a> was written and tested on an SGI Indy running Irix version 6.5.4 and the MD audio library.<h3><a name="windowsds"></a>
+Windows (Multimedia Library):</h3>
+The Windows Multimedia library MIDI calls used in <a class="el" href="classRtMidi.html">RtMidi</a> do not make use of streaming functionality. <a class="el" href="classRtMidi.html">RtMidi</a> was originally developed with Visual C++ version 6.0.<h2><a name="license"></a>
+License</h2>
+<a class="el" href="classRtMidi.html">RtMidi</a>: realtime MIDI i/o C++ classes<br>
+ Copyright (c) 2003-2004 Gary P. Scavone<p>
+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:<p>
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<p>
+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.<p>
+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.<HR>
+
+<table><tr><td><img src="../images/mcgill.gif" width=165></td>
+ <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
+ Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/MidiFileIn_8cpp-source.html b/doxygen/html/MidiFileIn_8cpp-source.html
new file mode 100755
index 0000000..a7109dd
--- /dev/null
+++ b/doxygen/html/MidiFileIn_8cpp-source.html
@@ -0,0 +1,350 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>MidiFileIn.cpp</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00016 <span class="comment">/**********************************************************************/</span>
+00017
+00018 <span class="preprocessor">#include "MidiFileIn.h"</span>
+00019 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00020
+<a name="l00021"></a><a class="code" href="classMidiFileIn.html#a0">00021</a> <a class="code" href="classMidiFileIn.html#a0">MidiFileIn :: MidiFileIn</a>( std::string fileName )
+00022 {
+00023 <span class="comment">// Attempt to open the file.</span>
+00024 file_.open( fileName.c_str(), std::ios::in );
+00025 <span class="keywordflow">if</span> ( !file_ ) {
+00026 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn: error opening or finding file ("</span> &lt;&lt; fileName &lt;&lt; <span class="stringliteral">")."</span>;
+00027 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_NOT_FOUND );
+00028 }
+00029
+00030 <span class="comment">// Parse header info.</span>
+00031 <span class="keywordtype">char</span> chunkType[4];
+00032 <span class="keywordtype">char</span> buffer[4];
+00033 SINT32 *length;
+00034 <span class="keywordflow">if</span> ( !file_.read( chunkType, 4 ) ) <span class="keywordflow">goto</span> error;
+00035 <span class="keywordflow">if</span> ( !file_.read( buffer, 4 ) ) <span class="keywordflow">goto</span> error;
+00036 length = (SINT32 *) &amp;buffer;
+00037 <span class="keywordflow">if</span> ( strncmp( chunkType, <span class="stringliteral">"MThd"</span>, 4 ) || ( *length != 6 ) ) {
+00038 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn: file ("</span> &lt;&lt; fileName &lt;&lt; <span class="stringliteral">") does not appear to be a MIDI file!"</span>;
+00039 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_UNKNOWN_FORMAT );
+00040 }
+00041
+00042 <span class="comment">// Read the MIDI file format.</span>
+00043 SINT16 *data;
+00044 <span class="keywordflow">if</span> ( !file_.read( buffer, 2 ) ) <span class="keywordflow">goto</span> error;
+00045 data = (SINT16 *) &amp;buffer;
+00046 <span class="keywordflow">if</span> ( *data &lt; 0 || *data &gt; 2 ) {
+00047 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn: the file ("</span> &lt;&lt; fileName &lt;&lt; <span class="stringliteral">") format is invalid!"</span>;
+00048 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_ERROR );
+00049 }
+00050 format_ = *data;
+00051
+00052 <span class="comment">// Read the number of tracks.</span>
+00053 <span class="keywordflow">if</span> ( !file_.read( buffer, 2 ) ) <span class="keywordflow">goto</span> error;
+00054 <span class="keywordflow">if</span> ( format_ == 0 &amp;&amp; *data != 1 ) {
+00055 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn: invalid number of tracks (&gt;1) for a file format = 0!"</span>;
+00056 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_ERROR );
+00057 }
+00058 nTracks_ = *data;
+00059
+00060 <span class="comment">// Read the beat division.</span>
+00061 <span class="keywordflow">if</span> ( !file_.read( buffer, 2 ) ) <span class="keywordflow">goto</span> error;
+00062 division_ = (int) *data;
+00063 <span class="keywordtype">double</span> tickrate;
+00064 usingTimeCode_ = <span class="keyword">false</span>;
+00065 <span class="keywordflow">if</span> ( *data &amp; 0x8000 ) {
+00066 <span class="comment">// Determine ticks per second from time-code formats.</span>
+00067 tickrate = (double) -(*data &amp; 0x7F00);
+00068 <span class="comment">// If frames per second value is 29, it really should be 29.97.</span>
+00069 <span class="keywordflow">if</span> ( tickrate == 29.0 ) tickrate = 29.97;
+00070 tickrate *= (*data &amp; 0x00FF);
+00071 usingTimeCode_ = <span class="keyword">true</span>;
+00072 }
+00073 <span class="keywordflow">else</span> {
+00074 tickrate = (double) (*data &amp; 0x7FFF); <span class="comment">// ticks per quarter note</span>
+00075 }
+00076
+00077 <span class="comment">// Now locate the track offsets and lengths. If not using time</span>
+00078 <span class="comment">// code, we can initialize the "tick time" using a default tempo of</span>
+00079 <span class="comment">// 120 beats per minute. We will then check for tempo meta-events</span>
+00080 <span class="comment">// afterward.</span>
+00081 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nTracks_; i++ ) {
+00082 <span class="keywordflow">if</span> ( !file_.read( chunkType, 4 ) ) <span class="keywordflow">goto</span> error;
+00083 <span class="keywordflow">if</span> ( strncmp( chunkType, <span class="stringliteral">"MTrk"</span>, 4 ) ) <span class="keywordflow">goto</span> error;
+00084 <span class="keywordflow">if</span> ( !file_.read( buffer, 4 ) ) <span class="keywordflow">goto</span> error;
+00085 length = (SINT32 *) &amp;buffer;
+00086 trackLengths_.push_back( *length );
+00087 trackOffsets_.push_back( file_.tellg() );
+00088 trackPointers_.push_back( file_.tellg() );
+00089 trackStatus_.push_back( 0 );
+00090 file_.seekg( *length, std::ios_base::cur );
+00091 <span class="keywordflow">if</span> ( usingTimeCode_ ) tickSeconds_.push_back( (<span class="keywordtype">double</span>) (1.0 / tickrate) );
+00092 <span class="keywordflow">else</span> tickSeconds_.push_back( (<span class="keywordtype">double</span>) (0.5 / tickrate) );
+00093 }
+00094
+00095 <span class="comment">// Save the initial tickSeconds parameter.</span>
+00096 TempoChange tempoEvent;
+00097 tempoEvent.count = 0;
+00098 tempoEvent.tickSeconds = tickSeconds_[0];
+00099 tempoEvents_.push_back( tempoEvent );
+00100
+00101 <span class="comment">// If format 1 and not using time code, parse and save the tempo map</span>
+00102 <span class="comment">// on track 0.</span>
+00103 <span class="keywordflow">if</span> ( format_ == 1 &amp;&amp; !usingTimeCode_ ) {
+00104 std::vector&lt;unsigned char&gt; event;
+00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value, count;
+00106
+00107 <span class="comment">// We need to temporarily change the usingTimeCode_ value here so</span>
+00108 <span class="comment">// that the getNextEvent() function doesn't try to check the tempo</span>
+00109 <span class="comment">// map (which we're creating here).</span>
+00110 usingTimeCode_ = <span class="keyword">true</span>;
+00111 count = <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( &amp;event, 0 );
+00112 <span class="keywordflow">while</span> ( event.size() ) {
+00113 <span class="keywordflow">if</span> ( ( event.size() == 6 ) &amp;&amp; ( event[0] == 0xff ) &amp;&amp;
+00114 ( event[1] == 0x51 ) &amp;&amp; ( event[2] == 0x03 ) ) {
+00115 tempoEvent.count = count;
+00116 value = ( event[3] &lt;&lt; 16 ) + ( event[4] &lt;&lt; 8 ) + event[5];
+00117 tempoEvent.tickSeconds = (double) (0.000001 * value / tickrate);
+00118 <span class="keywordflow">if</span> ( count &gt; tempoEvents_.back().count )
+00119 tempoEvents_.push_back( tempoEvent );
+00120 <span class="keywordflow">else</span>
+00121 tempoEvents_.back() = tempoEvent;
+00122 }
+00123 count += <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( &amp;event, 0 );
+00124 }
+00125 <a class="code" href="classMidiFileIn.html#a5">rewindTrack</a>( 0 );
+00126 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nTracks_; i++ ) {
+00127 trackCounters_.push_back( 0 );
+00128 trackTempoIndex_.push_back( 0 );
+00129 }
+00130 <span class="comment">// Change the time code flag back!</span>
+00131 usingTimeCode_ = <span class="keyword">false</span>;
+00132 }
+00133
+00134 <span class="keywordflow">return</span>;
+00135
+00136 error:
+00137 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn: error reading from file ("</span> &lt;&lt; fileName &lt;&lt; <span class="stringliteral">")."</span>;
+00138 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_ERROR );
+00139 }
+00140
+<a name="l00141"></a><a class="code" href="classMidiFileIn.html#a1">00141</a> <a class="code" href="classMidiFileIn.html#a1">MidiFileIn :: ~MidiFileIn</a>()
+00142 {
+00143 <span class="comment">// An ifstream object implicitly closes itself during destruction</span>
+00144 <span class="comment">// but we'll make an explicit call to "close" anyway.</span>
+00145 file_.close();
+00146 }
+00147
+<a name="l00148"></a><a class="code" href="classMidiFileIn.html#a2">00148</a> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a2">MidiFileIn :: getFileFormat</a>()<span class="keyword"> const</span>
+00149 <span class="keyword"></span>{
+00150 <span class="keywordflow">return</span> format_;
+00151 }
+00152
+<a name="l00153"></a><a class="code" href="classMidiFileIn.html#a3">00153</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a3">MidiFileIn :: getNumberOfTracks</a>()<span class="keyword"> const</span>
+00154 <span class="keyword"></span>{
+00155 <span class="keywordflow">return</span> nTracks_;
+00156 }
+00157
+<a name="l00158"></a><a class="code" href="classMidiFileIn.html#a4">00158</a> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a4">MidiFileIn :: getDivision</a>()<span class="keyword"> const</span>
+00159 <span class="keyword"></span>{
+00160 <span class="keywordflow">return</span> division_;
+00161 }
+00162
+<a name="l00163"></a><a class="code" href="classMidiFileIn.html#a5">00163</a> <span class="keywordtype">void</span> <a class="code" href="classMidiFileIn.html#a5">MidiFileIn :: rewindTrack</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track )
+00164 {
+00165 <span class="keywordflow">if</span> ( track &gt;= nTracks_ ) {
+00166 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn::getNextEvent: invalid track argument ("</span> &lt;&lt; track &lt;&lt; <span class="stringliteral">")."</span>;
+00167 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FUNCTION_ARGUMENT );
+00168 }
+00169
+00170 trackPointers_[track] = trackOffsets_[track];
+00171 trackStatus_[track] = 0;
+00172 tickSeconds_[track] = tempoEvents_[0].tickSeconds;
+00173 }
+00174
+<a name="l00175"></a><a class="code" href="classMidiFileIn.html#a6">00175</a> <span class="keywordtype">double</span> <a class="code" href="classMidiFileIn.html#a6">MidiFileIn :: getTickSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track )
+00176 {
+00177 <span class="comment">// Return the current tick value in seconds for the given track.</span>
+00178 <span class="keywordflow">if</span> ( track &gt;= nTracks_ ) {
+00179 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn::getTickSeconds: invalid track argument ("</span> &lt;&lt; track &lt;&lt; <span class="stringliteral">")."</span>;
+00180 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FUNCTION_ARGUMENT );
+00181 }
+00182
+00183 <span class="keywordflow">return</span> tickSeconds_[track];
+00184 }
+00185
+<a name="l00186"></a><a class="code" href="classMidiFileIn.html#a7">00186</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a7">MidiFileIn :: getNextEvent</a>( std::vector&lt;unsigned char&gt; *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track )
+00187 {
+00188 <span class="comment">// Fill the user-provided vector with the next event in the</span>
+00189 <span class="comment">// specified track (default = 0) and return the event delta time in</span>
+00190 <span class="comment">// ticks. This function assumes that the stored track pointer is</span>
+00191 <span class="comment">// positioned at the start of a track event. If the track has</span>
+00192 <span class="comment">// reached its end, the event vector size will be zero.</span>
+00193 <span class="comment">//</span>
+00194 <span class="comment">// If we have a format 0 or 2 file and we're not using timecode, we</span>
+00195 <span class="comment">// should check every meta-event for tempo changes and make</span>
+00196 <span class="comment">// appropriate updates to the tickSeconds_ parameter if so.</span>
+00197 <span class="comment">//</span>
+00198 <span class="comment">// If we have a format 1 file and we're not using timecode, keep a</span>
+00199 <span class="comment">// running sum of ticks for each track and update the tickSeconds_</span>
+00200 <span class="comment">// parameter as needed based on the stored tempo map.</span>
+00201
+00202 <span class="keywordflow">if</span> ( track &gt;= nTracks_ ) {
+00203 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn::getNextEvent: invalid track argument ("</span> &lt;&lt; track &lt;&lt; <span class="stringliteral">")."</span>;
+00204 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FUNCTION_ARGUMENT );
+00205 }
+00206
+00207 event-&gt;clear();
+00208 <span class="comment">// Check for the end of the track.</span>
+00209 <span class="keywordflow">if</span> ( (trackPointers_[track] - trackOffsets_[track]) &gt;= trackLengths_[track] )
+00210 <span class="keywordflow">return</span> 0;
+00211
+00212 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks = 0, bytes = 0;
+00213 <span class="keywordtype">bool</span> isTempoEvent = <span class="keyword">false</span>;
+00214
+00215 <span class="comment">// Read the event delta time.</span>
+00216 file_.seekg( trackPointers_[track], std::ios_base::beg );
+00217 <span class="keywordflow">if</span> ( !readVariableLength( &amp;ticks ) ) <span class="keywordflow">goto</span> error;
+00218
+00219 <span class="comment">// Parse the event stream to determine the event length.</span>
+00220 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c;
+00221 <span class="keywordflow">if</span> ( !file_.read( (<span class="keywordtype">char</span> *)&amp;c, 1 ) ) <span class="keywordflow">goto</span> error;
+00222 <span class="keywordflow">switch</span> ( c ) {
+00223
+00224 <span class="keywordflow">case</span> 0xFF: <span class="comment">// A Meta-Event</span>
+00225 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> position;
+00226 trackStatus_[track] = 0;
+00227 event-&gt;push_back( c );
+00228 <span class="keywordflow">if</span> ( !file_.read( (<span class="keywordtype">char</span> *)&amp;c, 1 ) ) <span class="keywordflow">goto</span> error;
+00229 event-&gt;push_back( c );
+00230 <span class="keywordflow">if</span> ( format_ != 1 &amp;&amp; ( c == 0x51 ) ) isTempoEvent = <span class="keyword">true</span>;
+00231 position = file_.tellg();
+00232 <span class="keywordflow">if</span> ( !readVariableLength( &amp;bytes ) ) <span class="keywordflow">goto</span> error;
+00233 bytes += ( (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)file_.tellg() - position );
+00234 file_.seekg( position, std::ios_base::beg );
+00235 <span class="keywordflow">break</span>;
+00236
+00237 <span class="keywordflow">case</span> 0xF0 || 0xF7: <span class="comment">// The start or continuation of a Sysex event</span>
+00238 trackStatus_[track] = 0;
+00239 event-&gt;push_back( c );
+00240 position = file_.tellg();
+00241 <span class="keywordflow">if</span> ( !readVariableLength( &amp;bytes ) ) <span class="keywordflow">goto</span> error;
+00242 bytes += ( (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)file_.tellg() - position );
+00243 file_.seekg( position, std::ios_base::beg );
+00244 <span class="keywordflow">break</span>;
+00245
+00246 <span class="keywordflow">default</span>: <span class="comment">// Should be a MIDI channel event</span>
+00247 <span class="keywordflow">if</span> ( c &amp; 0x80 ) { <span class="comment">// MIDI status byte</span>
+00248 <span class="keywordflow">if</span> ( c &gt; 0xF0 ) <span class="keywordflow">goto</span> error;
+00249 trackStatus_[track] = c;
+00250 event-&gt;push_back( c );
+00251 c &amp;= 0xF0;
+00252 <span class="keywordflow">if</span> ( (c == 0xC0) || (c == 0xD0) ) bytes = 1;
+00253 <span class="keywordflow">else</span> bytes = 2;
+00254 }
+00255 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( trackStatus_[track] &amp; 0x80 ) { <span class="comment">// Running status</span>
+00256 event-&gt;push_back( trackStatus_[track] );
+00257 event-&gt;push_back( c );
+00258 c = trackStatus_[track] &amp; 0xF0;
+00259 <span class="keywordflow">if</span> ( (c != 0xC0) &amp;&amp; (c != 0xD0) ) bytes = 1;
+00260 }
+00261 <span class="keywordflow">else</span> <span class="keywordflow">goto</span> error;
+00262
+00263 }
+00264
+00265 <span class="comment">// Read the rest of the event into the event vector.</span>
+00266 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i=0; i&lt;bytes; i++ ) {
+00267 <span class="keywordflow">if</span> ( !file_.read( (<span class="keywordtype">char</span> *)&amp;c, 1 ) ) <span class="keywordflow">goto</span> error;
+00268 event-&gt;push_back( c );
+00269 }
+00270
+00271 <span class="keywordflow">if</span> ( !usingTimeCode_ ) {
+00272 <span class="keywordflow">if</span> ( isTempoEvent ) {
+00273 <span class="comment">// Parse the tempo event and update tickSeconds_[track].</span>
+00274 <span class="keywordtype">double</span> tickrate = (double) (division_ &amp; 0x7FFF);
+00275 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value = ( event-&gt;at(3) &lt;&lt; 16 ) + ( event-&gt;at(4) &lt;&lt; 8 ) + event-&gt;at(5);
+00276 tickSeconds_[track] = (double) (0.000001 * value / tickrate);
+00277 }
+00278
+00279 <span class="keywordflow">if</span> ( format_ == 1 ) {
+00280 <span class="comment">// Update track counter and check the tempo map.</span>
+00281 trackCounters_[track] += ticks;
+00282 TempoChange tempoEvent = tempoEvents_[ trackTempoIndex_[track] ];
+00283 <span class="keywordflow">if</span> ( trackCounters_[track] &gt;= tempoEvent.count ) {
+00284 trackTempoIndex_[track]++;
+00285 tickSeconds_[track] = tempoEvent.tickSeconds;
+00286 }
+00287 }
+00288 }
+00289
+00290 <span class="comment">// Save the current track pointer value.</span>
+00291 trackPointers_[track] = file_.tellg();
+00292
+00293 <span class="keywordflow">return</span> ticks;
+00294
+00295 error:
+00296 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn::getNextEvent: file read error!"</span>;
+00297 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FILE_ERROR );
+00298 <span class="keywordflow">return</span> 0;
+00299 }
+00300
+<a name="l00301"></a><a class="code" href="classMidiFileIn.html#a8">00301</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a8">MidiFileIn :: getNextMidiEvent</a>( std::vector&lt;unsigned char&gt; *midiEvent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track )
+00302 {
+00303 <span class="comment">// Fill the user-provided vector with the next MIDI event in the</span>
+00304 <span class="comment">// specified track (default = 0) and return the event delta time in</span>
+00305 <span class="comment">// ticks. Meta-Events preceeding this event are skipped and ignored.</span>
+00306 <span class="keywordflow">if</span> ( track &gt;= nTracks_ ) {
+00307 errorString_ &lt;&lt; <span class="stringliteral">"MidiFileIn::getNextMidiEvent: invalid track argument ("</span> &lt;&lt; track &lt;&lt; <span class="stringliteral">")."</span>;
+00308 <a class="code" href="classStk.html#e0">handleError</a>( errorString_.str(), StkError::FUNCTION_ARGUMENT );
+00309 }
+00310
+00311 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks = <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( midiEvent, track );
+00312 <span class="keywordflow">while</span> ( midiEvent-&gt;size() &amp;&amp; ( midiEvent-&gt;at(0) &gt;= 0xF0 ) ) {
+00313 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;midiEvent-&gt;size(); i++ )
+00314 std::cout &lt;&lt; <span class="stringliteral">"event byte = "</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">", value = "</span> &lt;&lt; (int)midiEvent-&gt;at(i) &lt;&lt; std::endl;
+00315 ticks = <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( midiEvent, track );
+00316 }
+00317
+00318 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;midiEvent-&gt;size(); i++ )
+00319 std::cout &lt;&lt; <span class="stringliteral">"event byte = "</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">", value = "</span> &lt;&lt; (int)midiEvent-&gt;at(i) &lt;&lt; std::endl;
+00320
+00321 <span class="keywordflow">return</span> ticks;
+00322 }
+00323
+00324 <span class="keywordtype">bool</span> MidiFileIn :: readVariableLength( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *value )
+00325 {
+00326 <span class="comment">// It is assumed that this function is called with the file read</span>
+00327 <span class="comment">// pointer positioned at the start of a variable-length value. The</span>
+00328 <span class="comment">// function returns "true" if the value is successfully parsed and</span>
+00329 <span class="comment">// "false" otherwise.</span>
+00330 *value = 0;
+00331 <span class="keywordtype">char</span> c;
+00332
+00333 <span class="keywordflow">if</span> ( !file_.read( &amp;c, 1 ) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00334 *value = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) c;
+00335 <span class="keywordflow">if</span> ( *value &amp; 0x80 ) {
+00336 *value &amp;= 0x7f;
+00337 <span class="keywordflow">do</span> {
+00338 <span class="keywordflow">if</span> ( !file_.read( &amp;c, 1 ) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00339 *value = ( *value &lt;&lt; 7 ) + ( c &amp; 0x7f );
+00340 } <span class="keywordflow">while</span> ( c &amp; 0x80 );
+00341 }
+00342
+00343 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00344 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/MidiFileIn_8h-source.html b/doxygen/html/MidiFileIn_8h-source.html
new file mode 100755
index 0000000..235fda2
--- /dev/null
+++ b/doxygen/html/MidiFileIn_8h-source.html
@@ -0,0 +1,93 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>MidiFileIn.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00016 <span class="comment">/**********************************************************************/</span>
+00017
+00018 <span class="preprocessor">#ifndef STK_MIDIFILEIN_H</span>
+00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_MIDIFILEIN_H</span>
+00020 <span class="preprocessor"></span>
+00021 <span class="preprocessor">#include "Stk.h"</span>
+00022 <span class="preprocessor">#include &lt;string&gt;</span>
+00023 <span class="preprocessor">#include &lt;vector&gt;</span>
+00024 <span class="preprocessor">#include &lt;fstream&gt;</span>
+00025 <span class="preprocessor">#include &lt;sstream&gt;</span>
+00026
+<a name="l00027"></a><a class="code" href="classMidiFileIn.html">00027</a> <span class="keyword">class </span><a class="code" href="classMidiFileIn.html">MidiFileIn</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
+00028 {
+00029 <span class="keyword">public</span>:
+00031
+00035 <a class="code" href="classMidiFileIn.html#a0">MidiFileIn</a>( std::string fileName );
+00036
+00038 <a class="code" href="classMidiFileIn.html#a1">~MidiFileIn</a>();
+00039
+00041 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a2">getFileFormat</a>() <span class="keyword">const</span>;
+00042
+00044 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() <span class="keyword">const</span>;
+00045
+00047
+00052 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a4">getDivision</a>() <span class="keyword">const</span>;
+00053
+00055
+00059 <span class="keywordtype">void</span> <a class="code" href="classMidiFileIn.html#a5">rewindTrack</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
+00060
+00062
+00069 <span class="keywordtype">double</span> <a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
+00070
+00072
+00084 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( std::vector&lt;unsigned char&gt; *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
+00085
+00087
+00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( std::vector&lt;unsigned char&gt; *midiEvent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
+00098
+00099 <span class="keyword">protected</span>:
+00100
+00101 <span class="comment">// This protected class function is used for reading variable-length</span>
+00102 <span class="comment">// MIDI file values. It is assumed that this function is called with</span>
+00103 <span class="comment">// the file read pointer positioned at the start of a</span>
+00104 <span class="comment">// variable-length value. The function returns true if the value is</span>
+00105 <span class="comment">// successfully parsed. Otherwise, it returns false.</span>
+00106 <span class="keywordtype">bool</span> readVariableLength( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *value );
+00107
+00108 std::ifstream file_;
+00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nTracks_;
+00110 <span class="keywordtype">int</span> format_;
+00111 <span class="keywordtype">int</span> division_;
+00112 <span class="keywordtype">bool</span> usingTimeCode_;
+00113 std::vector&lt;double&gt; tickSeconds_;
+00114 std::vector&lt;long&gt; trackPointers_;
+00115 std::vector&lt;long&gt; trackOffsets_;
+00116 std::vector&lt;long&gt; trackLengths_;
+00117 std::vector&lt;char&gt; trackStatus_;
+00118 std::ostringstream errorString_;
+00119
+00120 <span class="comment">// This structure and the following variables are used to save and</span>
+00121 <span class="comment">// keep track of a format 1 tempo map (and the initial tickSeconds</span>
+00122 <span class="comment">// parameter for formats 0 and 2).</span>
+00123 <span class="keyword">struct </span>TempoChange {
+00124 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
+00125 <span class="keywordtype">double</span> tickSeconds;
+00126 };
+00127 std::vector&lt;TempoChange&gt; tempoEvents_;
+00128 std::vector&lt;unsigned long&gt; trackCounters_;
+00129 std::vector&lt;unsigned int&gt; trackTempoIndex_;
+00130 };
+00131
+00132 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/RtError_8h-source.html b/doxygen/html/RtError_8h-source.html
new file mode 100755
index 0000000..ce20468
--- /dev/null
+++ b/doxygen/html/RtError_8h-source.html
@@ -0,0 +1,63 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
+00010 <span class="comment">/************************************************************************/</span>
+00011
+00012 <span class="preprocessor">#ifndef RTERROR_H</span>
+00013 <span class="preprocessor"></span><span class="preprocessor">#define RTERROR_H</span>
+00014 <span class="preprocessor"></span>
+00015 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00016 <span class="preprocessor">#include &lt;string&gt;</span>
+00017
+<a name="l00018"></a><a class="code" href="classRtError.html">00018</a> <span class="keyword">class </span><a class="code" href="classRtError.html">RtError</a>
+00019 {
+00020 <span class="keyword">public</span>:
+<a name="l00022"></a><a class="code" href="classRtError.html#s11">00022</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#s11">Type</a> {
+00023 WARNING,
+00024 DEBUG_WARNING,
+00025 UNSPECIFIED,
+00026 NO_DEVICES_FOUND,
+00027 INVALID_DEVICE,
+00028 INVALID_STREAM,
+00029 MEMORY_ERROR,
+00030 INVALID_PARAMETER,
+00031 DRIVER_ERROR,
+00032 SYSTEM_ERROR,
+00033 THREAD_ERROR
+00034 };
+00035
+00036 <span class="keyword">protected</span>:
+00037 std::string message_;
+00038 <a class="code" href="classRtError.html#s11">Type</a> type_;
+00039
+00040 <span class="keyword">public</span>:
+<a name="l00042"></a><a class="code" href="classRtError.html#a0">00042</a> <a class="code" href="classRtError.html#a0">RtError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = RtError::UNSPECIFIED) : message_(message), type_(type) {}
+00043
+<a name="l00045"></a><a class="code" href="classRtError.html#a1">00045</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a1">~RtError</a>(<span class="keywordtype">void</span>) {}
+00046
+<a name="l00048"></a><a class="code" href="classRtError.html#a2">00048</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cout &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
+00049
+<a name="l00051"></a><a class="code" href="classRtError.html#a3">00051</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#s11">Type</a>&amp; <a class="code" href="classRtError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
+00052
+<a name="l00054"></a><a class="code" href="classRtError.html#a4">00054</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
+00055 };
+00056
+00057 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/RtMidi_8cpp-source.html b/doxygen/html/RtMidi_8cpp-source.html
new file mode 100755
index 0000000..1b65b96
--- /dev/null
+++ b/doxygen/html/RtMidi_8cpp-source.html
@@ -0,0 +1,482 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi.cpp</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00010 <span class="comment">/**********************************************************************/</span>
+00011
+00012 <span class="preprocessor">#include "RtMidi.h"</span>
+00013 <span class="preprocessor">#include &lt;sstream&gt;</span>
+00014
+00015 RtMidi :: RtMidi()
+00016 : apiData_( 0 ), connected_( false )
+00017 {
+00018 }
+00019
+00020 <span class="keywordtype">void</span> RtMidi :: error( RtError::Type type )
+00021 {
+00022 <span class="keywordflow">if</span> (type == RtError::WARNING) {
+00023 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00024 }
+00025 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == RtError::DEBUG_WARNING) {
+00026 <span class="preprocessor">#if defined(__RTMIDI_DEBUG__)</span>
+00027 <span class="preprocessor"></span> std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00028 <span class="preprocessor">#endif</span>
+00029 <span class="preprocessor"></span> }
+00030 <span class="keywordflow">else</span> {
+00031 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00032 <span class="keywordflow">throw</span> <a class="code" href="classRtError.html#a0">RtError</a>( errorString_, type );
+00033 }
+00034 }
+00035
+<a name="l00036"></a><a class="code" href="classRtMidiIn.html#a0">00036</a> <a class="code" href="classRtMidiIn.html#a0">RtMidiIn :: RtMidiIn</a>() : <a class="code" href="classRtMidi.html">RtMidi</a>()
+00037 {
+00038 }
+00039
+<a name="l00040"></a><a class="code" href="classRtMidiIn.html#a1">00040</a> <a class="code" href="classRtMidiIn.html#a0">RtMidiIn :: RtMidiIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber, RtMidiCallback callback, <span class="keywordtype">void</span> *userData ) : <a class="code" href="classRtMidi.html">RtMidi</a>()
+00041
+00042 {
+00043 <span class="comment">// Attempt to make the connection.</span>
+00044 this-&gt;<a class="code" href="classRtMidiIn.html#a3">openPort</a>( portNumber, callback, userData );
+00045 }
+00046
+<a name="l00047"></a><a class="code" href="classRtMidiIn.html#a2">00047</a> <a class="code" href="classRtMidiIn.html#a2">RtMidiIn :: ~RtMidiIn</a>()
+00048 {
+00049 <a class="code" href="classRtMidiIn.html#a4">closePort</a>();
+00050 }
+00051
+<a name="l00052"></a><a class="code" href="classRtMidiOut.html#a0">00052</a> <a class="code" href="classRtMidiOut.html#a0">RtMidiOut :: RtMidiOut</a>() : <a class="code" href="classRtMidi.html">RtMidi</a>()
+00053 {
+00054 }
+00055
+<a name="l00056"></a><a class="code" href="classRtMidiOut.html#a1">00056</a> <a class="code" href="classRtMidiOut.html#a0">RtMidiOut :: RtMidiOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber ) : <a class="code" href="classRtMidi.html">RtMidi</a>()
+00057 {
+00058 <span class="comment">// Attempt to make the connection.</span>
+00059 this-&gt;<a class="code" href="classRtMidiOut.html#a3">openPort</a>( portNumber );
+00060 }
+00061
+<a name="l00062"></a><a class="code" href="classRtMidiOut.html#a2">00062</a> <a class="code" href="classRtMidiOut.html#a2">RtMidiOut :: ~RtMidiOut</a>()
+00063 {
+00064 <a class="code" href="classRtMidiOut.html#a4">closePort</a>();
+00065 }
+00066
+00067
+00068 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
+00069 <span class="preprocessor"></span>
+00070 <span class="comment">// The CoreMIDI API is based on the use of a callback function for</span>
+00071 <span class="comment">// MIDI input. We convert the system specific time stamps to delta</span>
+00072 <span class="comment">// time values.</span>
+00073
+00074 <span class="comment">// OS-X CoreMIDI header files.</span>
+00075 <span class="preprocessor">#include &lt;CoreMIDI/CoreMIDI.h&gt;</span>
+00076 <span class="preprocessor">#include &lt;CoreAudio/HostTime.h&gt;</span>
+00077
+00078 <span class="comment">// A structure to hold variables related to the CoreMIDI API</span>
+00079 <span class="comment">// implementation.</span>
+00080 <span class="keyword">struct </span>CoreMidiData {
+00081 MIDIClientRef client;
+00082 MIDIPortRef port;
+00083 MIDIEndpointRef destinationId;
+00084 };
+00085
+00086 <span class="keywordtype">void</span> midiInputCallback( <span class="keyword">const</span> MIDIPacketList *list, <span class="keywordtype">void</span> *procRef, <span class="keywordtype">void</span> *srcRef )
+00087 {
+00088 RtMidiIn::RtMidiInData *data = static_cast&lt;RtMidiIn::RtMidiInData *&gt; (procRef);
+00089
+00090 <span class="keywordtype">bool</span> continueSysex = <span class="keyword">false</span>;
+00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> status;
+00092 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nBytes, iByte, size;
+00093 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> time;
+00094 RtMidiIn::MidiMessage message;
+00095 <span class="keyword">const</span> MIDIPacket *packet = &amp;list-&gt;packet[0];
+00096 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;list-&gt;numPackets; ++i ) {
+00097
+00098 <span class="comment">// My interpretation of the CoreMIDI documentation: all message</span>
+00099 <span class="comment">// types, except sysex, are complete within a packet and there may</span>
+00100 <span class="comment">// be several of them in a single packet. Sysex messages can be</span>
+00101 <span class="comment">// broken across multiple packets but are bundled alone within a</span>
+00102 <span class="comment">// packet. I'm assuming that sysex messages, if segmented, must</span>
+00103 <span class="comment">// be complete within the same MIDIPacketList.</span>
+00104
+00105 nBytes = packet-&gt;length;
+00106 <span class="keywordflow">if</span> ( nBytes == 0 ) <span class="keywordflow">continue</span>;
+00107
+00108 <span class="comment">// Calculate time stamp.</span>
+00109 message.timeStamp = 0.0;
+00110 time = packet-&gt;timeStamp;
+00111 time -= data-&gt;lastTime;
+00112 data-&gt;lastTime = packet-&gt;timeStamp;
+00113 time = AudioConvertHostTimeToNanos( time );
+00114 message.timeStamp = time * 0.000000001;
+00115
+00116 iByte = 0;
+00117 <span class="keywordflow">if</span> ( continueSysex ) {
+00118 <span class="comment">// We have a continuing, segmented sysex message.</span>
+00119 <span class="keywordflow">if</span> ( !(data-&gt;ignoreFlags &amp; 0x01) ) {
+00120 <span class="comment">// If we're not ignoring sysex messages, copy the entire packet.</span>
+00121 message.bytes.assign( packet-&gt;data, &amp;packet-&gt;data[nBytes] );
+00122 }
+00123 <span class="keywordflow">if</span> ( packet-&gt;data[nBytes] == 0xF7 ) continueSysex = <span class="keyword">false</span>;
+00124 <span class="keywordflow">if</span> ( !continueSysex ) {
+00125 <span class="comment">// If not a continuing sysex message, invoke the user callback function or queue the message.</span>
+00126 <span class="keywordflow">if</span> ( data-&gt;usingCallback &amp;&amp; message.bytes.size() &gt; 0 ) {
+00127 <a class="code" href="classRtMidiIn.html#s0">RtMidiIn::RtMidiCallback</a> callback = (RtMidiIn::RtMidiCallback) data-&gt;userCallback;
+00128 callback( message.timeStamp, &amp;message.bytes, data-&gt;userData );
+00129 }
+00130 <span class="keywordflow">else</span> {
+00131 <span class="comment">// As long as we haven't reached our queue size limit, push the message.</span>
+00132 <span class="keywordflow">if</span> ( data-&gt;queueLimit &gt; data-&gt;queue.size() )
+00133 data-&gt;queue.push( message );
+00134 <span class="keywordflow">else</span>
+00135 std::cerr &lt;&lt; <span class="stringliteral">"\nRtMidiIn: message queue limit reached!!\n\n"</span>;
+00136 }
+00137 message.bytes.clear();
+00138 }
+00139 }
+00140 <span class="keywordflow">else</span> {
+00141 <span class="keywordflow">while</span> ( iByte &lt; nBytes ) {
+00142 size = 0;
+00143 <span class="comment">// We are expecting that the next byte in the packet is a status byte.</span>
+00144 status = packet-&gt;data[iByte];
+00145 <span class="keywordflow">if</span> ( !(status &amp; 0x80) ) <span class="keywordflow">break</span>;
+00146 <span class="comment">// Determine the number of bytes in the MIDI message.</span>
+00147 <span class="keywordflow">if</span> ( status &lt; 0xC0 ) size = 3;
+00148 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status &lt; 0xE0 ) size = 2;
+00149 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status &lt; 0xF0 ) size = 3;
+00150 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status == 0xF0 ) {
+00151 <span class="comment">// A MIDI sysex</span>
+00152 <span class="keywordflow">if</span> ( data-&gt;ignoreFlags &amp; 0x01 ) {
+00153 size = 0;
+00154 iByte = nBytes;
+00155 }
+00156 <span class="keywordflow">else</span> size = nBytes - iByte;
+00157 <span class="keywordflow">if</span> ( packet-&gt;data[nBytes] == 0xF7 ) continueSysex = <span class="keyword">false</span>;
+00158 }
+00159 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status &lt; 0xF3 ) {
+00160 <span class="keywordflow">if</span> ( status == 0xF1 &amp;&amp; (data-&gt;ignoreFlags &amp; 0x02) ) {
+00161 <span class="comment">// A MIDI time code message and we're ignoring it.</span>
+00162 size = 0;
+00163 iByte += 3;
+00164 }
+00165 <span class="keywordflow">else</span> size = 3;
+00166 }
+00167 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status == 0xF3 ) size = 2;
+00168 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( status == 0xFE &amp;&amp; (data-&gt;ignoreFlags &amp; 0x04) ) {
+00169 <span class="comment">// A MIDI active sensing message and we're ignoring it.</span>
+00170 size = 0;
+00171 iByte += 1;
+00172 }
+00173 <span class="keywordflow">else</span> size = 1;
+00174
+00175 <span class="comment">// Copy the MIDI data to our vector.</span>
+00176 <span class="keywordflow">if</span> ( size ) {
+00177 message.bytes.assign( &amp;packet-&gt;data[iByte], &amp;packet-&gt;data[iByte+size] );
+00178 <span class="keywordflow">if</span> ( !continueSysex ) {
+00179 <span class="comment">// If not a continuing sysex message, invoke the user callback function or queue the message.</span>
+00180 <span class="keywordflow">if</span> ( data-&gt;usingCallback ) {
+00181 <a class="code" href="classRtMidiIn.html#s0">RtMidiIn::RtMidiCallback</a> callback = (RtMidiIn::RtMidiCallback) data-&gt;userCallback;
+00182 callback( message.timeStamp, &amp;message.bytes, data-&gt;userData );
+00183 }
+00184 <span class="keywordflow">else</span> {
+00185 <span class="comment">// As long as we haven't reached our queue size limit, push the message.</span>
+00186 <span class="keywordflow">if</span> ( data-&gt;queueLimit &gt; data-&gt;queue.size() )
+00187 data-&gt;queue.push( message );
+00188 <span class="keywordflow">else</span>
+00189 std::cerr &lt;&lt; <span class="stringliteral">"\nRtMidiIn: message queue limit reached!!\n\n"</span>;
+00190 }
+00191 message.bytes.clear();
+00192 }
+00193 iByte += size;
+00194 }
+00195 }
+00196 }
+00197 packet = MIDIPacketNext(packet);
+00198 }
+00199 }
+00200
+00201 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">RtMidiIn :: openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber, RtMidiCallback callback, <span class="keywordtype">void</span> *userData )
+00202 {
+00203 <span class="keywordflow">if</span> ( connected_ ) {
+00204 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: a valid connection already exists!"</span>;
+00205 error( RtError::WARNING );
+00206 <span class="keywordflow">return</span>;
+00207 }
+00208
+00209 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nSrc = MIDIGetNumberOfSources();
+00210 <span class="keywordflow">if</span> (nSrc &lt; 1) {
+00211 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: no MIDI input sources found!"</span>;
+00212 error( RtError::NO_DEVICES_FOUND );
+00213 }
+00214
+00215 std::ostringstream ost;
+00216 <span class="keywordflow">if</span> ( portNumber &gt;= nSrc ) {
+00217 ost &lt;&lt; <span class="stringliteral">"RtMidiIn::openPort: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00218 errorString_ = ost.str();
+00219 error( RtError::INVALID_PARAMETER );
+00220 }
+00221
+00222 MIDIClientRef client;
+00223 OSStatus result = MIDIClientCreate( CFSTR(<span class="stringliteral">"RtMidi Input Client"</span>), NULL, NULL, &amp;client );
+00224 <span class="keywordflow">if</span> ( result != noErr ) {
+00225 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: error creating OS-X MIDI client object."</span>;
+00226 error( RtError::DRIVER_ERROR );
+00227 }
+00228
+00229 MIDIPortRef port;
+00230 result = MIDIInputPortCreate( client, CFSTR(<span class="stringliteral">"RtMidi Virtual MIDI Input Port"</span>), midiInputCallback, (<span class="keywordtype">void</span> *)&amp;inputData_, &amp;port );
+00231 <span class="keywordflow">if</span> ( result != noErr ) {
+00232 MIDIClientDispose( client );
+00233 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: error creating OS-X MIDI input port."</span>;
+00234 error( RtError::DRIVER_ERROR );
+00235 }
+00236
+00237 <span class="comment">// Get the desired input source identifier.</span>
+00238 MIDIEndpointRef src = MIDIGetSource( portNumber );
+00239 <span class="keywordflow">if</span> ( src == NULL ) {
+00240 MIDIPortDispose( port );
+00241 MIDIClientDispose( client );
+00242 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: error getting MIDI input source reference."</span>;
+00243 error( RtError::DRIVER_ERROR );
+00244 }
+00245
+00246 <span class="comment">// Make the connection.</span>
+00247 result = MIDIPortConnectSource(port, src, NULL );
+00248 <span class="keywordflow">if</span> ( result != noErr ) {
+00249 MIDIPortDispose( port );
+00250 MIDIClientDispose( client );
+00251 errorString_ = <span class="stringliteral">"RtMidiIn::openPort: error connecting OS-X MIDI input port."</span>;
+00252 error( RtError::DRIVER_ERROR );
+00253 }
+00254
+00255 <span class="comment">// Save our api-specific connection information.</span>
+00256 CoreMidiData *data = (CoreMidiData *) <span class="keyword">new</span> CoreMidiData;
+00257 data-&gt;client = client;
+00258 data-&gt;port = port;
+00259 apiData_ = (<span class="keywordtype">void</span> *) data;
+00260
+00261 <span class="keywordflow">if</span> ( callback ) {
+00262 inputData_.userCallback = (<span class="keywordtype">void</span> *) callback;
+00263 inputData_.userData = userData;
+00264 inputData_.usingCallback = <span class="keyword">true</span>;
+00265 }
+00266
+00267 inputData_.lastTime = AudioGetCurrentHostTime();
+00268
+00269 connected_ = <span class="keyword">true</span>;
+00270 }
+00271
+00272 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">RtMidiIn :: closePort</a>( <span class="keywordtype">void</span> )
+00273 {
+00274 <span class="keywordflow">if</span> ( connected_ ) {
+00275 CoreMidiData *data = static_cast&lt;CoreMidiData *&gt; (apiData_);
+00276 MIDIClientDispose( data-&gt;client );
+00277 MIDIPortDispose( data-&gt;port );
+00278 <span class="keyword">delete</span> data;
+00279 apiData_ = 0;
+00280 }
+00281
+00282 connected_ = <span class="keyword">false</span>;
+00283 }
+00284
+00285 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a5">RtMidiIn :: getPortCount</a>()
+00286 {
+00287 <span class="keywordflow">return</span> MIDIGetNumberOfSources();
+00288 }
+00289
+00290 std::string <a class="code" href="classRtMidiIn.html#a6">RtMidiIn :: getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber )
+00291 {
+00292 CFStringRef nameRef;
+00293 MIDIEndpointRef portRef;
+00294 std::ostringstream ost;
+00295 <span class="keywordtype">char</span> name[128];
+00296
+00297 <span class="keywordflow">if</span> ( portNumber &gt;= MIDIGetNumberOfSources() ) {
+00298 ost &lt;&lt; <span class="stringliteral">"RtMidiIn::getPortName: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00299 errorString_ = ost.str();
+00300 error( RtError::INVALID_PARAMETER );
+00301 }
+00302 portRef = MIDIGetSource( portNumber );
+00303
+00304 MIDIObjectGetStringProperty( portRef, kMIDIPropertyName, &amp;nameRef );
+00305 CFStringGetCString( nameRef, name, <span class="keyword">sizeof</span>(name), 0);
+00306 CFRelease( nameRef );
+00307 std::string stringName = name;
+00308 <span class="keywordflow">return</span> stringName;
+00309 }
+00310
+00311 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a7">RtMidiIn :: setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize )
+00312 {
+00313 inputData_.queueLimit = queueSize;
+00314 }
+00315
+00316 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a8">RtMidiIn :: ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex, <span class="keywordtype">bool</span> midiTime, <span class="keywordtype">bool</span> midiSense )
+00317 {
+00318 inputData_.ignoreFlags = 0;
+00319 <span class="keywordflow">if</span> ( midiSysex ) inputData_.ignoreFlags = 0x01;
+00320 <span class="keywordflow">if</span> ( midiTime ) inputData_.ignoreFlags |= 0x02;
+00321 <span class="keywordflow">if</span> ( midiSense ) inputData_.ignoreFlags |= 0x04;
+00322 }
+00323
+00324 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a9">RtMidiIn :: getMessage</a>( std::vector&lt;unsigned char&gt; *message )
+00325 {
+00326 message-&gt;clear();
+00327 <span class="keywordflow">if</span> ( !connected_ ) {
+00328 errorString_ = <span class="stringliteral">"RtMidiIn::getNextMessage: a port is not open!"</span>;
+00329 error( RtError::WARNING );
+00330 <span class="keywordflow">return</span> 0.0;
+00331 }
+00332
+00333 <span class="keywordflow">if</span> ( inputData_.usingCallback ) {
+00334 errorString_ = <span class="stringliteral">"RtMidiIn::getNextMessage: a user callback is currently set for this port."</span>;
+00335 error( RtError::WARNING );
+00336 <span class="keywordflow">return</span> 0.0;
+00337 }
+00338
+00339 <span class="keywordflow">if</span> ( inputData_.queue.size() == 0 ) <span class="keywordflow">return</span> 0.0;
+00340
+00341 <span class="comment">// Copy queued message to the vector pointer argument and then "pop" it.</span>
+00342 std::vector&lt;unsigned char&gt; *bytes = &amp;(inputData_.queue.front().bytes);
+00343 message-&gt;assign( bytes-&gt;begin(), bytes-&gt;end() );
+00344 <span class="keywordtype">double</span> deltaTime = inputData_.queue.front().timeStamp;
+00345 inputData_.queue.pop();
+00346
+00347 <span class="keywordflow">return</span> deltaTime;
+00348 }
+00349
+00350 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">RtMidiOut :: getPortCount</a>()
+00351 {
+00352 <span class="keywordflow">return</span> MIDIGetNumberOfDestinations();
+00353 }
+00354
+00355 std::string <a class="code" href="classRtMidiOut.html#a6">RtMidiOut :: getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber )
+00356 {
+00357 CFStringRef nameRef;
+00358 MIDIEndpointRef portRef;
+00359 std::ostringstream ost;
+00360 <span class="keywordtype">char</span> name[128];
+00361
+00362 <span class="keywordflow">if</span> ( portNumber &gt;= MIDIGetNumberOfDestinations() ) {
+00363 ost &lt;&lt; <span class="stringliteral">"RtMidiOut::getPortName: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00364 errorString_ = ost.str();
+00365 error( RtError::INVALID_PARAMETER );
+00366 }
+00367 portRef = MIDIGetDestination( portNumber );
+00368
+00369 MIDIObjectGetStringProperty( portRef, kMIDIPropertyName, &amp;nameRef );
+00370 CFStringGetCString( nameRef, name, <span class="keyword">sizeof</span>(name), 0);
+00371 CFRelease( nameRef );
+00372 std::string stringName = name;
+00373 <span class="keywordflow">return</span> stringName;
+00374 }
+00375
+00376 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">RtMidiOut :: openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber )
+00377 {
+00378 <span class="keywordflow">if</span> ( connected_ ) {
+00379 errorString_ = <span class="stringliteral">"RtMidiOut::openPort: a valid connection already exists!"</span>;
+00380 error( RtError::WARNING );
+00381 <span class="keywordflow">return</span>;
+00382 }
+00383
+00384 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nDest = MIDIGetNumberOfDestinations();
+00385 <span class="keywordflow">if</span> (nDest &lt; 1) {
+00386 errorString_ = <span class="stringliteral">"RtMidiOut::openPort: no MIDI output destinations found!"</span>;
+00387 error( RtError::NO_DEVICES_FOUND );
+00388 }
+00389
+00390 std::ostringstream ost;
+00391 <span class="keywordflow">if</span> ( portNumber &gt;= nDest ) {
+00392 ost &lt;&lt; <span class="stringliteral">"RtMidiOut::openPort: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00393 errorString_ = ost.str();
+00394 error( RtError::INVALID_PARAMETER );
+00395 }
+00396
+00397 MIDIClientRef client;
+00398 OSStatus result = MIDIClientCreate( CFSTR(<span class="stringliteral">"RtMidi Output Client"</span>), NULL, NULL, &amp;client );
+00399 <span class="keywordflow">if</span> ( result != noErr ) {
+00400 errorString_ = <span class="stringliteral">"RtMidiOut::openPort: error creating OS-X MIDI client object."</span>;
+00401 error( RtError::DRIVER_ERROR );
+00402 }
+00403
+00404 MIDIPortRef port;
+00405 result = MIDIOutputPortCreate( client, CFSTR(<span class="stringliteral">"RtMidi Virtual MIDI Output Port"</span>), &amp;port );
+00406 <span class="keywordflow">if</span> ( result != noErr ) {
+00407 MIDIClientDispose( client );
+00408 errorString_ = <span class="stringliteral">"RtMidiOut::openPort: error creating OS-X MIDI output port."</span>;
+00409 error( RtError::DRIVER_ERROR );
+00410 }
+00411
+00412 <span class="comment">// Get the desired output port identifier.</span>
+00413 MIDIEndpointRef destinationId = MIDIGetDestination( portNumber );
+00414 <span class="keywordflow">if</span> ( destinationId == NULL ) {
+00415 MIDIPortDispose( port );
+00416 MIDIClientDispose( client );
+00417 errorString_ = <span class="stringliteral">"RtMidiOut::openPort: error getting MIDI output destination reference."</span>;
+00418 error( RtError::DRIVER_ERROR );
+00419 }
+00420
+00421 <span class="comment">// Save our api-specific connection information.</span>
+00422 CoreMidiData *data = (CoreMidiData *) <span class="keyword">new</span> CoreMidiData;
+00423 data-&gt;client = client;
+00424 data-&gt;port = port;
+00425 data-&gt;destinationId = destinationId;
+00426 apiData_ = (<span class="keywordtype">void</span> *) data;
+00427
+00428 connected_ = <span class="keyword">true</span>;
+00429 }
+00430
+00431 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">RtMidiOut :: closePort</a>( <span class="keywordtype">void</span> )
+00432 {
+00433 <span class="keywordflow">if</span> ( connected_ ) {
+00434 CoreMidiData *data = static_cast&lt;CoreMidiData *&gt; (apiData_);
+00435 MIDIClientDispose( data-&gt;client );
+00436 MIDIPortDispose( data-&gt;port );
+00437 <span class="keyword">delete</span> data;
+00438 apiData_ = 0;
+00439 }
+00440
+00441 connected_ = <span class="keyword">false</span>;
+00442 }
+00443
+00444 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">RtMidiOut :: sendMessage</a>( std::vector&lt;unsigned char&gt; *message )
+00445 {
+00446 <span class="keywordflow">if</span> ( !connected_ ) {
+00447 errorString_ = <span class="stringliteral">"RtMidiOut::sendMessage: a port is not open!"</span>;
+00448 error( RtError::WARNING );
+00449 <span class="keywordflow">return</span>;
+00450 }
+00451
+00452 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes = message-&gt;size();
+00453 <span class="comment">// Pad the buffer for extra (unknown) structure data.</span>
+00454 Byte buffer[nBytes+32];
+00455 MIDIPacketList *pktlist = (MIDIPacketList *) buffer;
+00456 MIDIPacket *curPacket = MIDIPacketListInit( pktlist );
+00457
+00458 MIDITimeStamp timeStamp = 0;
+00459 curPacket = MIDIPacketListAdd( pktlist, <span class="keyword">sizeof</span>(buffer), curPacket, timeStamp, nBytes, &amp;message-&gt;at(0) );
+00460
+00461 CoreMidiData *data = static_cast&lt;CoreMidiData *&gt; (apiData_);
+00462 OSStatus result = MIDISend( data-&gt;port, data-&gt;destinationId, pktlist );
+00463 <span class="keywordflow">if</span> ( result != noErr ) {
+00464 errorString_ = <span class="stringliteral">"RtMidiOut::sendMessage: error sending MIDI message."</span>;
+00465 error( RtError::WARNING );
+00466 }
+00467 }
+00468
+00469 <span class="preprocessor">#endif</span>
+00470 <span class="preprocessor"></span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/RtMidi_8h-source.html b/doxygen/html/RtMidi_8h-source.html
new file mode 100755
index 0000000..5a60461
--- /dev/null
+++ b/doxygen/html/RtMidi_8h-source.html
@@ -0,0 +1,145 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00010 <span class="comment">/**********************************************************************/</span>
+00011
+00012 <span class="preprocessor">#ifndef RTMIDI_H</span>
+00013 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
+00014 <span class="preprocessor"></span>
+00015 <span class="preprocessor">#include "RtError.h"</span>
+00016 <span class="preprocessor">#include &lt;string&gt;</span>
+00017
+<a name="l00018"></a><a class="code" href="classRtMidi.html">00018</a> <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
+00019 {
+00020 <span class="keyword">protected</span>:
+00021
+00022 <a class="code" href="classRtMidi.html">RtMidi</a>();
+00023
+00024 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
+00025 <span class="comment">// subclasses. The behavior of this function can be modified to</span>
+00026 <span class="comment">// suit specific needs.</span>
+00027 <span class="keywordtype">void</span> error( RtError::Type type );
+00028
+00029 <span class="keywordtype">void</span> *apiData_;
+00030 <span class="keywordtype">bool</span> connected_;
+00031 std::string errorString_;
+00032 };
+00033
+00034 <span class="comment">/**********************************************************************/</span>
+00048 <span class="comment">/**********************************************************************/</span>
+00049
+00050 <span class="preprocessor">#include &lt;vector&gt;</span>
+00051 <span class="preprocessor">#include &lt;queue&gt;</span>
+00052
+<a name="l00053"></a><a class="code" href="classRtMidiIn.html">00053</a> <span class="keyword">class </span><a class="code" href="classRtMidiIn.html">RtMidiIn</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
+00054 {
+00055 <span class="keyword">public</span>:
+00056
+<a name="l00058"></a><a class="code" href="classRtMidiIn.html#s0">00058</a> <span class="keyword">typedef</span> void (*RtMidiCallback)( <span class="keywordtype">double</span> timeStamp, std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
+00059
+00061 <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>();
+00062
+00064
+00070 <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber, RtMidiCallback callback = 0, <span class="keywordtype">void</span> *userData = 0 );
+00071
+00073 <a class="code" href="classRtMidiIn.html#a2">~RtMidiIn</a>();
+00074
+00076
+00084 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0, RtMidiCallback callback = 0, <span class="keywordtype">void</span> *userData = 0 );
+00085
+00087 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">closePort</a>( <span class="keywordtype">void</span> );
+00088
+00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a5">getPortCount</a>();
+00091
+00093 std::string <a class="code" href="classRtMidiIn.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00094
+00096
+00100 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a7">setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
+00101
+00103
+00110 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a8">ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span> );
+00111
+00113
+00120 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a9">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00121
+00122 <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
+00123 <span class="comment">// messages. Each message represents one and only one MIDI message.</span>
+00124 <span class="keyword">struct </span>MidiMessage {
+00125 std::vector&lt;unsigned char&gt; bytes;
+00126 <span class="keywordtype">double</span> timeStamp;
+00127
+00128 <span class="comment">// Default constructor.</span>
+00129 MidiMessage()
+00130 :bytes(3), timeStamp(0.0) {}
+00131 };
+00132
+00133 <span class="comment">// The RtMidiInData structure is used to pass private class data to</span>
+00134 <span class="comment">// the MIDI input handling function or thread.</span>
+00135 <span class="keyword">struct </span>RtMidiInData {
+00136 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> lastTime;
+00137 std::queue&lt;MidiMessage&gt; queue;
+00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
+00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
+00140 <span class="keywordtype">bool</span> usingCallback;
+00141 <span class="keywordtype">void</span> *userCallback;
+00142 <span class="keywordtype">void</span> *userData;
+00143
+00144 <span class="comment">// Default constructor.</span>
+00145 RtMidiInData()
+00146 : lastTime(0), queueLimit(1024), ignoreFlags(7),
+00147 usingCallback(false), userCallback(0), userData(0) {}
+00148 };
+00149
+00150 <span class="keyword">private</span>:
+00151
+00152 RtMidiInData inputData_;
+00153
+00154 };
+00155
+00156 <span class="comment">/**********************************************************************/</span>
+00168 <span class="comment">/**********************************************************************/</span>
+00169
+<a name="l00170"></a><a class="code" href="classRtMidiOut.html">00170</a> <span class="keyword">class </span><a class="code" href="classRtMidiOut.html">RtMidiOut</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
+00171 {
+00172 <span class="keyword">public</span>:
+00173
+00175 <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>();
+00176
+00178
+00182 <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
+00183
+00185 <a class="code" href="classRtMidiOut.html#a2">~RtMidiOut</a>();
+00186
+00188
+00194 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00195
+00197 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">closePort</a>();
+00198
+00200 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
+00201
+00203 std::string <a class="code" href="classRtMidiOut.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
+00204
+00206
+00210 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00211
+00212 };
+00213
+00214 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/Stk_8cpp-source.html b/doxygen/html/Stk_8cpp-source.html
new file mode 100755
index 0000000..09312fc
--- /dev/null
+++ b/doxygen/html/Stk_8cpp-source.html
@@ -0,0 +1,128 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>Stk.cpp</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
+00013 <span class="comment">/***************************************************/</span>
+00014
+00015 <span class="preprocessor">#include "Stk.h"</span>
+00016
+00017 StkFloat Stk :: srate_ = (StkFloat) SRATE;
+00018 std::string Stk :: rawwavepath_ = RAWWAVE_PATH;
+<a name="l00019"></a><a class="code" href="classStk.html#p0">00019</a> <span class="keyword">const</span> Stk::StkFormat Stk :: STK_SINT8 = 1;
+<a name="l00020"></a><a class="code" href="classStk.html#p1">00020</a> <span class="keyword">const</span> Stk::StkFormat Stk :: STK_SINT16 = 2;
+<a name="l00021"></a><a class="code" href="classStk.html#p2">00021</a> <span class="keyword">const</span> Stk::StkFormat Stk :: STK_SINT32 = 8;
+<a name="l00022"></a><a class="code" href="classStk.html#p3">00022</a> <span class="keyword">const</span> Stk::StkFormat Stk :: STK_FLOAT32 = 16;
+<a name="l00023"></a><a class="code" href="classStk.html#p4">00023</a> <span class="keyword">const</span> Stk::StkFormat Stk :: STK_FLOAT64 = 32;
+00024
+<a name="l00025"></a><a class="code" href="classStk.html#d3">00025</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d3">Stk :: setRawwavePath</a>(std::string path)
+00026 {
+00027 <span class="keywordflow">if</span> ( !path.empty() )
+00028 rawwavepath_ = path;
+00029
+00030 <span class="comment">// Make sure the path includes a "/"</span>
+00031 <span class="keywordflow">if</span> ( rawwavepath_[rawwavepath_.length()-1] != <span class="charliteral">'/'</span> )
+00032 rawwavepath_ += <span class="stringliteral">"/"</span>;
+00033 }
+00034
+<a name="l00035"></a><a class="code" href="classStk.html#d4">00035</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d4">Stk :: swap16</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr)
+00036 {
+00037 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> val;
+00038
+00039 <span class="comment">// Swap 1st and 2nd bytes</span>
+00040 val = *(ptr);
+00041 *(ptr) = *(ptr+1);
+00042 *(ptr+1) = val;
+00043 }
+00044
+<a name="l00045"></a><a class="code" href="classStk.html#d5">00045</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d5">Stk :: swap32</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr)
+00046 {
+00047 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> val;
+00048
+00049 <span class="comment">// Swap 1st and 4th bytes</span>
+00050 val = *(ptr);
+00051 *(ptr) = *(ptr+3);
+00052 *(ptr+3) = val;
+00053
+00054 <span class="comment">//Swap 2nd and 3rd bytes</span>
+00055 ptr += 1;
+00056 val = *(ptr);
+00057 *(ptr) = *(ptr+1);
+00058 *(ptr+1) = val;
+00059 }
+00060
+<a name="l00061"></a><a class="code" href="classStk.html#d6">00061</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d6">Stk :: swap64</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr)
+00062 {
+00063 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> val;
+00064
+00065 <span class="comment">// Swap 1st and 8th bytes</span>
+00066 val = *(ptr);
+00067 *(ptr) = *(ptr+7);
+00068 *(ptr+7) = val;
+00069
+00070 <span class="comment">// Swap 2nd and 7th bytes</span>
+00071 ptr += 1;
+00072 val = *(ptr);
+00073 *(ptr) = *(ptr+5);
+00074 *(ptr+5) = val;
+00075
+00076 <span class="comment">// Swap 3rd and 6th bytes</span>
+00077 ptr += 1;
+00078 val = *(ptr);
+00079 *(ptr) = *(ptr+3);
+00080 *(ptr+3) = val;
+00081
+00082 <span class="comment">// Swap 4th and 5th bytes</span>
+00083 ptr += 1;
+00084 val = *(ptr);
+00085 *(ptr) = *(ptr+1);
+00086 *(ptr+1) = val;
+00087 }
+00088
+00089 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
+00090 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;unistd.h&gt;</span>
+00091 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
+00092 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
+00093 <span class="preprocessor">#endif</span>
+00094 <span class="preprocessor"></span>
+<a name="l00095"></a><a class="code" href="classStk.html#d7">00095</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d7">Stk :: sleep</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds)
+00096 {
+00097 <span class="preprocessor">#if defined(__OS_WINDOWS__)</span>
+00098 <span class="preprocessor"></span> Sleep((DWORD) milliseconds);
+00099 <span class="preprocessor">#elif (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
+00100 <span class="preprocessor"></span> usleep( (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) (milliseconds * 1000.0) );
+00101 <span class="preprocessor">#endif</span>
+00102 <span class="preprocessor"></span>}
+00103
+<a name="l00104"></a><a class="code" href="classStk.html#e0">00104</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e0">Stk :: handleError</a>( <span class="keyword">const</span> std::string&amp; message, StkError::Type type )
+00105 {
+00106 <span class="keywordflow">if</span> ( type == StkError::WARNING ) {
+00107 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00108 }
+00109 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( type == StkError::DEBUG_WARNING ) {
+00110 <span class="preprocessor">#if defined( __STK_DEBUG__ )</span>
+00111 <span class="preprocessor"></span> std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00112 <span class="preprocessor">#endif</span>
+00113 <span class="preprocessor"></span> }
+00114 <span class="keywordflow">else</span> {
+00115 <span class="comment">// Print error message before throwing.</span>
+00116 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00117 <span class="keywordflow">throw</span> <a class="code" href="classStkError.html">StkError</a>(message, type);
+00118 }
+00119 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/Stk_8h-source.html b/doxygen/html/Stk_8h-source.html
new file mode 100755
index 0000000..45a46a1
--- /dev/null
+++ b/doxygen/html/Stk_8h-source.html
@@ -0,0 +1,162 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>Stk.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
+00013 <span class="comment">/***************************************************/</span>
+00014
+00015 <span class="preprocessor">#ifndef STK_STK_H</span>
+00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_STK_H</span>
+00017 <span class="preprocessor"></span>
+00018 <span class="preprocessor">#include &lt;string&gt;</span>
+00019 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00020
+00021 <span class="comment">// Most data in STK is passed and calculated with the</span>
+00022 <span class="comment">// following user-definable floating-point type. You</span>
+00023 <span class="comment">// can change this to "float" if you prefer or perhaps</span>
+00024 <span class="comment">// a "long double" in the future.</span>
+00025 <span class="keyword">typedef</span> <span class="keywordtype">double</span> StkFloat;
+00026
+00028
+<a name="l00033"></a><a class="code" href="classStkError.html">00033</a> <span class="keyword">class </span><a class="code" href="classStkError.html">StkError</a>
+00034 {
+00035 <span class="keyword">public</span>:
+00036 <span class="keyword">enum</span> Type {
+00037 WARNING,
+00038 DEBUG_WARNING,
+00039 FUNCTION_ARGUMENT,
+00040 FILE_NOT_FOUND,
+00041 FILE_UNKNOWN_FORMAT,
+00042 FILE_ERROR,
+00043 PROCESS_THREAD,
+00044 PROCESS_SOCKET,
+00045 PROCESS_SOCKET_IPADDR,
+00046 AUDIO_SYSTEM,
+00047 MIDI_SYSTEM,
+00048 UNSPECIFIED
+00049 };
+00050
+00051 <span class="keyword">protected</span>:
+00052 std::string message_;
+00053 Type type_;
+00054
+00055 <span class="keyword">public</span>:
+<a name="l00057"></a><a class="code" href="classStkError.html#a0">00057</a> <a class="code" href="classStkError.html#a0">StkError</a>( <span class="keyword">const</span> std::string&amp; message, Type type = StkError::UNSPECIFIED ) : message_(message), type_(type) {}
+00058
+<a name="l00060"></a><a class="code" href="classStkError.html#a1">00060</a> <span class="keyword">virtual</span> <a class="code" href="classStkError.html#a1">~StkError</a>(<span class="keywordtype">void</span>) {}
+00061
+<a name="l00063"></a><a class="code" href="classStkError.html#a2">00063</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classStkError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cout &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
+00064
+<a name="l00066"></a><a class="code" href="classStkError.html#a3">00066</a> <span class="keyword">virtual</span> <span class="keyword">const</span> Type&amp; <a class="code" href="classStkError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
+00067
+<a name="l00069"></a><a class="code" href="classStkError.html#a4">00069</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classStkError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
+00070 };
+00071
+<a name="l00072"></a><a class="code" href="classStk.html">00072</a> <span class="keyword">class </span><a class="code" href="classStk.html">Stk</a>
+00073 {
+00074 <span class="keyword">public</span>:
+00075
+00076 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> StkFormat;
+00077 <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#p0">STK_SINT8</a>;
+00078 <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#p1">STK_SINT16</a>;
+00079 <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#p2">STK_SINT32</a>;
+00080 <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#p3">STK_FLOAT32</a>;
+00081 <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#p4">STK_FLOAT64</a>;
+00083
+<a name="l00084"></a><a class="code" href="classStk.html#d0">00084</a> <span class="keyword">static</span> StkFloat <a class="code" href="classStk.html#d0">sampleRate</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> srate_; }
+00085
+00087
+<a name="l00095"></a><a class="code" href="classStk.html#d1">00095</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d1">setSampleRate</a>(StkFloat rate) { <span class="keywordflow">if</span> (rate &gt; 0.0) srate_ = rate; }
+00096
+<a name="l00098"></a><a class="code" href="classStk.html#d2">00098</a> <span class="keyword">static</span> std::string <a class="code" href="classStk.html#d2">rawwavePath</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> rawwavepath_; }
+00099
+00101 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d3">setRawwavePath</a>(std::string path);
+00102
+00104 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d4">swap16</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr);
+00105
+00107 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d5">swap32</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr);
+00108
+00110 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d6">swap64</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr);
+00111
+00113 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#d7">sleep</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds);
+00114
+00115 <span class="keyword">private</span>:
+00116 <span class="keyword">static</span> StkFloat srate_;
+00117 <span class="keyword">static</span> std::string rawwavepath_;
+00118
+00119 <span class="keyword">protected</span>:
+00120
+00122 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e0">handleError</a>( <span class="keyword">const</span> std::string&amp; message, StkError::Type type );
+00123
+00124 };
+00125
+00126 <span class="comment">// Here are a few other useful typedefs.</span>
+00127 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> SINT16;
+00128 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> SINT32;
+00129 <span class="keyword">typedef</span> <span class="keywordtype">float</span> FLOAT32;
+00130 <span class="keyword">typedef</span> <span class="keywordtype">double</span> FLOAT64;
+00131
+00132 <span class="comment">// Boolean values</span>
+00133 <span class="preprocessor">#define FALSE 0</span>
+00134 <span class="preprocessor"></span><span class="preprocessor">#define TRUE 1</span>
+00135 <span class="preprocessor"></span>
+00136 <span class="comment">// The default sampling rate.</span>
+00137 <span class="preprocessor">#define SRATE (StkFloat) 44100.0</span>
+00138 <span class="preprocessor"></span>
+00139 <span class="comment">// The default real-time audio input and output buffer size. If</span>
+00140 <span class="comment">// clicks are occuring in the input and/or output sound stream, a</span>
+00141 <span class="comment">// larger buffer size may help. Larger buffer sizes, however, result</span>
+00142 <span class="comment">// in more latency.</span>
+00143 <span class="preprocessor">#define RT_BUFFER_SIZE 512</span>
+00144 <span class="preprocessor"></span>
+00145 <span class="comment">// The default rawwave path value is set with the preprocessor</span>
+00146 <span class="comment">// definition RAWWAVE_PATH. This can be specified as an argument to</span>
+00147 <span class="comment">// the configure script, in an integrated development environment, or</span>
+00148 <span class="comment">// below. The global STK rawwave path variable can be dynamically set</span>
+00149 <span class="comment">// with the Stk::setRawwavePath() function. This value is</span>
+00150 <span class="comment">// concatenated to the beginning of all references to rawwave files in</span>
+00151 <span class="comment">// various STK classes. If you wish to move the rawwaves directory to</span>
+00152 <span class="comment">// a different location in your file system, you will need to set this</span>
+00153 <span class="comment">// path definition appropriately.</span>
+00154 <span class="preprocessor">#if !defined(RAWWAVE_PATH)</span>
+00155 <span class="preprocessor"></span><span class="preprocessor"> #define RAWWAVE_PATH "../../rawwaves/"</span>
+00156 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00157 <span class="preprocessor"></span>
+00158 <span class="preprocessor">#define PI (MY_FLOAT) 3.14159265359</span>
+00159 <span class="preprocessor"></span><span class="preprocessor">#define TWO_PI (MY_FLOAT) (MY_FLOAT) (2 * PI)</span>
+00160 <span class="preprocessor"></span>
+00161 <span class="preprocessor">#define ONE_OVER_128 (MY_FLOAT) 0.0078125</span>
+00162 <span class="preprocessor"></span>
+00163 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
+00164 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_WINDOWS__</span>
+00165 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
+00166 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__LINUX_JACK__)</span>
+00167 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_LINUX__</span>
+00168 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
+00169 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__IRIX_AL__)</span>
+00170 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_IRIX__</span>
+00171 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
+00172 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__MACOSX_CORE__)</span>
+00173 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_MACOSX__</span>
+00174 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
+00175 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00176 <span class="preprocessor"></span>
+00177 <span class="comment">//#define __STK_DEBUG__</span>
+00178
+00179 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/annotated.html b/doxygen/html/annotated.html
new file mode 100755
index 0000000..02a08e7
--- /dev/null
+++ b/doxygen/html/annotated.html
@@ -0,0 +1,29 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>STK Compound List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td class="indexvalue">A standard MIDI file reading/parsing class</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtError.html">RtError</a></td><td class="indexvalue">Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a></td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidi.html">RtMidi</a></td><td class="indexvalue">An abstract base class for realtime MIDI input/output</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td class="indexvalue">A realtime MIDI input class</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td class="indexvalue">A realtime MIDI output class</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classStk.html">Stk</a></td><td class="indexvalue">STK base class</td></tr>
+ <tr><td class="indexkey"><a class="el" href="classStkError.html">StkError</a></td><td class="indexvalue">STK error handling class</td></tr>
+</table>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classMidiFileIn-members.html b/doxygen/html/classMidiFileIn-members.html
new file mode 100755
index 0000000..85c5512
--- /dev/null
+++ b/doxygen/html/classMidiFileIn-members.html
@@ -0,0 +1,44 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>MidiFileIn Member List</h1>This is the complete list of members for <a class="el" href="classMidiFileIn.html">MidiFileIn</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a4">getDivision</a>() const</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a2">getFileFormat</a>() const</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a7">getNextEvent</a>(std::vector&lt; unsigned char &gt; *event, unsigned int track=0)</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a8">getNextMidiEvent</a>(std::vector&lt; unsigned char &gt; *midiEvent, unsigned int track=0)</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() const</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a6">getTickSeconds</a>(unsigned int track=0)</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#e0">handleError</a>(const std::string &amp;message, StkError::Type type)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a0">MidiFileIn</a>(std::string fileName)</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d2">rawwavePath</a>(void)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a5">rewindTrack</a>(unsigned int track=0)</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d0">sampleRate</a>(void)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d3">setRawwavePath</a>(std::string path)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d1">setSampleRate</a>(StkFloat rate)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d7">sleep</a>(unsigned long milliseconds)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p3">STK_FLOAT32</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p4">STK_FLOAT64</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p1">STK_SINT16</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p2">STK_SINT32</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p0">STK_SINT8</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d4">swap16</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d5">swap32</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d6">swap64</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classMidiFileIn.html#a1">~MidiFileIn</a>()</td><td><a class="el" href="classMidiFileIn.html">MidiFileIn</a></td><td></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classMidiFileIn.html b/doxygen/html/classMidiFileIn.html
new file mode 100755
index 0000000..e03bb48
--- /dev/null
+++ b/doxygen/html/classMidiFileIn.html
@@ -0,0 +1,296 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>MidiFileIn Class Reference</h1>A standard MIDI file reading/parsing class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="MidiFileIn_8h-source.html">MidiFileIn.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for MidiFileIn:
+<p><center><img src="classMidiFileIn.png" usemap="#MidiFileIn_map" border="0" alt=""></center>
+<map name="MidiFileIn_map">
+<area href="classStk.html" alt="Stk" shape="rect" coords="0,0,67,24">
+</map>
+<a href="classMidiFileIn-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a0">MidiFileIn</a> (std::string fileName)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Default constructor.</em> <a href="#a0"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="MidiFileIn::~MidiFileIn"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a1">~MidiFileIn</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Class destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="MidiFileIn::getFileFormat"></a>
+int&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a2">getFileFormat</a> () const</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the MIDI file format (0, 1, or 2).</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a3" doxytag="MidiFileIn::getNumberOfTracks"></a>
+unsigned int&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a3">getNumberOfTracks</a> () const</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the number of tracks in the MIDI file.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a4">getDivision</a> () const</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the MIDI file division value from the file header.</em> <a href="#a4"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a5">rewindTrack</a> (unsigned int track=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Move the specified track event reader to the beginning of its track.</em> <a href="#a5"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a6">getTickSeconds</a> (unsigned int track=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Get the current value, in seconds, of delta-time ticks for the specified track.</em> <a href="#a6"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>unsigned long&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a7">getNextEvent</a> (std::vector&lt; unsigned char &gt; *event, unsigned int track=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Fill the user-provided vector with the next event in the specified track and return the event delta-time in ticks.</em> <a href="#a7"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>unsigned long&nbsp;</td><td valign=bottom><a class="el" href="classMidiFileIn.html#a8">getNextMidiEvent</a> (std::vector&lt; unsigned char &gt; *midiEvent, unsigned int track=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Fill the user-provided vector with the next MIDI channel event in the specified track and return the event delta time in ticks.</em> <a href="#a8"></a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A standard MIDI file reading/parsing class.
+<p>
+This class can be used to read events from a standard MIDI file. Event bytes are copied to a C++ vector and must be subsequently interpreted by the user. The function <a class="el" href="classMidiFileIn.html#a8">getNextMidiEvent()</a> skips meta and sysex events, returning only MIDI channel messages. Event delta-times are returned in the form of "ticks" and a function is provided to determine the current "seconds per tick". Tempo changes are internally tracked by the class and reflected in the values returned by the function <a class="el" href="classMidiFileIn.html#a6">getTickSeconds()</a>.<p>
+by Gary P. Scavone, 2003.
+<p>
+
+<p>
+Definition at line <a class="el" href="MidiFileIn_8h-source.html#l00027">27</a> of file <a class="el" href="MidiFileIn_8h-source.html">MidiFileIn.h</a>.<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a name="a0" doxytag="MidiFileIn::MidiFileIn"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> MidiFileIn::MidiFileIn </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::string&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>fileName</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Default constructor.
+<p>
+If an error occurs while opening or parsing the file header, an <a class="el" href="classStkError.html">StkError</a> exception will be thrown.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00021">21</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>.
+<p>
+References <a class="el" href="MidiFileIn_8cpp-source.html#l00186">getNextEvent()</a>, <a class="el" href="Stk_8cpp-source.html#l00104">Stk::handleError()</a>, and <a class="el" href="MidiFileIn_8cpp-source.html#l00163">rewindTrack()</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a name="a4" doxytag="MidiFileIn::getDivision"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int MidiFileIn::getDivision </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Return the MIDI file division value from the file header.
+<p>
+Note that this value must be "parsed" in accordance with the MIDI File Specification. In particular, if the MSB is set, the file uses time-code representations for delta-time values.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00158">158</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>. </td>
+ </tr>
+</table>
+<a name="a5" doxytag="MidiFileIn::rewindTrack"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void MidiFileIn::rewindTrack </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>track</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Move the specified track event reader to the beginning of its track.
+<p>
+The relevant track tempo value is reset as well. If an invalid track number is specified, an <a class="el" href="classStkError.html">StkError</a> exception will be thrown.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00163">163</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>.
+<p>
+References <a class="el" href="Stk_8cpp-source.html#l00104">Stk::handleError()</a>.
+<p>
+Referenced by <a class="el" href="MidiFileIn_8cpp-source.html#l00021">MidiFileIn()</a>. </td>
+ </tr>
+</table>
+<a name="a6" doxytag="MidiFileIn::getTickSeconds"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double MidiFileIn::getTickSeconds </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>track</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get the current value, in seconds, of delta-time ticks for the specified track.
+<p>
+This value can change as events are read (via "Set Tempo" Meta-Events). Therefore, one should call this function after every call to <a class="el" href="classMidiFileIn.html#a7">getNextEvent()</a> or <a class="el" href="classMidiFileIn.html#a8">getNextMidiEvent()</a>. If an invalid track number is specified, an <a class="el" href="classStkError.html">StkError</a> exception will be thrown.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00175">175</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>.
+<p>
+References <a class="el" href="Stk_8cpp-source.html#l00104">Stk::handleError()</a>. </td>
+ </tr>
+</table>
+<a name="a7" doxytag="MidiFileIn::getNextEvent"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> unsigned long MidiFileIn::getNextEvent </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>event</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>unsigned int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>track</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Fill the user-provided vector with the next event in the specified track and return the event delta-time in ticks.
+<p>
+MIDI File events consist of a delta time and a sequence of event bytes. This function returns the delta-time value and writes the subsequent event bytes directly to the event vector. The user must parse the event bytes in accordance with the MIDI File Specification. All returned MIDI channel events are complete ... a status byte is provided even when running status is used in the file. If the track has reached its end, no bytes will be written and the event vector size will be zero. If an invalid track number is specified or an error occurs while reading the file, an <a class="el" href="classStkError.html">StkError</a> exception will be thrown.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00186">186</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>.
+<p>
+References <a class="el" href="Stk_8cpp-source.html#l00104">Stk::handleError()</a>.
+<p>
+Referenced by <a class="el" href="MidiFileIn_8cpp-source.html#l00301">getNextMidiEvent()</a>, and <a class="el" href="MidiFileIn_8cpp-source.html#l00021">MidiFileIn()</a>. </td>
+ </tr>
+</table>
+<a name="a8" doxytag="MidiFileIn::getNextMidiEvent"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> unsigned long MidiFileIn::getNextMidiEvent </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiEvent</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>unsigned int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>track</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Fill the user-provided vector with the next MIDI channel event in the specified track and return the event delta time in ticks.
+<p>
+All returned MIDI events are complete ... a status byte is provided even when running status is used in the file. Meta and sysex events in the track are skipped though "Set Tempo" events are properly parsed for use by the <a class="el" href="classMidiFileIn.html#a6">getTickSeconds()</a> function. If the track has reached its end, no bytes will be written and the event vector size will be zero. If an invalid track number is specified or an error occurs while reading the file, an <a class="el" href="classStkError.html">StkError</a> exception will be thrown.
+<p>
+Definition at line <a class="el" href="MidiFileIn_8cpp-source.html#l00301">301</a> of file <a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a>.
+<p>
+References <a class="el" href="MidiFileIn_8cpp-source.html#l00186">getNextEvent()</a>, and <a class="el" href="Stk_8cpp-source.html#l00104">Stk::handleError()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="MidiFileIn_8h-source.html">MidiFileIn.h</a><li><a class="el" href="MidiFileIn_8cpp-source.html">MidiFileIn.cpp</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classMidiFileIn.png b/doxygen/html/classMidiFileIn.png
new file mode 100755
index 0000000..13082f0
--- /dev/null
+++ b/doxygen/html/classMidiFileIn.png
Binary files differ
diff --git a/doxygen/html/classRtError-members.html b/doxygen/html/classRtError-members.html
new file mode 100755
index 0000000..da67c30
--- /dev/null
+++ b/doxygen/html/classRtError-members.html
@@ -0,0 +1,27 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError Member List</h1>This is the complete list of members for <a class="el" href="classRtError.html">RtError</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a4">getMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a3">getType</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a2">printMessage</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a0">RtError</a>(const std::string &amp;message, Type type=RtError::UNSPECIFIED)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#s11">Type</a> enum name</td><td><a class="el" href="classRtError.html">RtError</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtError.html#a1">~RtError</a>(void)</td><td><a class="el" href="classRtError.html">RtError</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtError.html b/doxygen/html/classRtError.html
new file mode 100755
index 0000000..535c495
--- /dev/null
+++ b/doxygen/html/classRtError.html
@@ -0,0 +1,56 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtError Class Reference</h1>Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a>.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtError_8h-source.html">RtError.h</a>&gt;</code>
+<p>
+<a href="classRtError-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#s11">Type</a> </td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Defined RtError types.</em></font><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="a0" doxytag="RtError::RtError"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a0">RtError</a> (const std::string &amp;message, <a class="el" href="classRtError.html#s11">Type</a> type=RtError::UNSPECIFIED)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The constructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="RtError::~RtError"></a>
+virtual&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a1">~RtError</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="RtError::printMessage"></a>
+virtual void&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a2">printMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Prints "thrown" error message to stdout.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a3" doxytag="RtError::getType"></a>
+virtual const <a class="el" href="classRtError.html#s11">Type</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a3">getType</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a4" doxytag="RtError::getMessage"></a>
+virtual const std::string &amp;&nbsp;</td><td valign=bottom><a class="el" href="classRtError.html#a4">getMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message string.</em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception handling class for RtAudio &amp; <a class="el" href="classRtMidi.html">RtMidi</a>.
+<p>
+The RtError class is quite simple but it does allow errors to be "caught" by <a class="el" href="classRtError.html#s11">RtError::Type</a>. See the RtAudio and <a class="el" href="classRtMidi.html">RtMidi</a> documentation to know which methods can "throw" an RtError.
+<p>
+
+<p>
+Definition at line <a class="el" href="RtError_8h-source.html#l00018">18</a> of file <a class="el" href="RtError_8h-source.html">RtError.h</a>.<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="RtError_8h-source.html">RtError.h</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidi-members.html b/doxygen/html/classRtMidi-members.html
new file mode 100755
index 0000000..dc1fd95
--- /dev/null
+++ b/doxygen/html/classRtMidi-members.html
@@ -0,0 +1,21 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Member List</h1>This is the complete list of members for <a class="el" href="classRtMidi.html">RtMidi</a>, including all inherited members.<table>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidi.html b/doxygen/html/classRtMidi.html
new file mode 100755
index 0000000..dc7efe0
--- /dev/null
+++ b/doxygen/html/classRtMidi.html
@@ -0,0 +1,44 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidi Class Reference</h1>An abstract base class for realtime MIDI input/output.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidi:
+<p><center><img src="classRtMidi.png" usemap="#RtMidi_map" border="0" alt=""></center>
+<map name="RtMidi_map">
+<area href="classRtMidiIn.html" alt="RtMidiIn" shape="rect" coords="0,56,67,80">
+<area href="classRtMidiOut.html" alt="RtMidiOut" shape="rect" coords="77,56,144,80">
+</map>
+<a href="classRtMidi-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+An abstract base class for realtime MIDI input/output.
+<p>
+This class implements some common functionality for the realtime MIDI input/output subclasses <a class="el" href="classRtMidiIn.html">RtMidiIn</a> and <a class="el" href="classRtMidiOut.html">RtMidiOut</a>.<p>
+by Gary P. Scavone, 2003.
+<p>
+
+<p>
+Definition at line <a class="el" href="RtMidi_8h-source.html#l00018">18</a> of file <a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>.<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a><li><a class="el" href="RtMidi_8cpp-source.html">RtMidi.cpp</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidi.png b/doxygen/html/classRtMidi.png
new file mode 100755
index 0000000..4114caf
--- /dev/null
+++ b/doxygen/html/classRtMidi.png
Binary files differ
diff --git a/doxygen/html/classRtMidiIn-members.html b/doxygen/html/classRtMidiIn-members.html
new file mode 100755
index 0000000..c314e0c
--- /dev/null
+++ b/doxygen/html/classRtMidiIn-members.html
@@ -0,0 +1,32 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiIn Member List</h1>This is the complete list of members for <a class="el" href="classRtMidiIn.html">RtMidiIn</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a4">closePort</a>(void)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a9">getMessage</a>(std::vector&lt; unsigned char &gt; *message)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a5">getPortCount</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a6">getPortName</a>(unsigned int portNumber=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a8">ignoreTypes</a>(bool midiSysex=true, bool midiTime=true, bool midiSense=true)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a3">openPort</a>(unsigned int portNumber=0, RtMidiCallback callback=0, void *userData=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> typedef</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a0">RtMidiIn</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a1">RtMidiIn</a>(unsigned int portNumber, RtMidiCallback callback=0, void *userData=0)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a7">setQueueSizeLimit</a>(unsigned int queueSize)</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiIn.html#a2">~RtMidiIn</a>()</td><td><a class="el" href="classRtMidiIn.html">RtMidiIn</a></td><td></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidiIn.html b/doxygen/html/classRtMidiIn.html
new file mode 100755
index 0000000..9af2a2e
--- /dev/null
+++ b/doxygen/html/classRtMidiIn.html
@@ -0,0 +1,281 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiIn Class Reference</h1>A realtime MIDI input class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidiIn:
+<p><center><img src="classRtMidiIn.png" usemap="#RtMidiIn_map" border="0" alt=""></center>
+<map name="RtMidiIn_map">
+<area href="classRtMidi.html" alt="RtMidi" shape="rect" coords="0,0,57,24">
+</map>
+<a href="classRtMidiIn-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="s0" doxytag="RtMidiIn::RtMidiCallback"></a>
+typedef void(*&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> )(double timeStamp, std::vector&lt; unsigned char &gt; *message, void *userData)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>User callback function type definition.</em></font><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="a0" doxytag="RtMidiIn::RtMidiIn"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a0">RtMidiIn</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Default constructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a1">RtMidiIn</a> (unsigned int portNumber, <a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> callback=0, void *userData=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>An overloaded constructor which can be used to open a MIDI input port during instantiation.</em> <a href="#a1"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="RtMidiIn::~RtMidiIn"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a2">~RtMidiIn</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>If a MIDI connection is still open, it will be closed by the destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a3">openPort</a> (unsigned int portNumber=0, <a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a> callback=0, void *userData=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Open a MIDI input connection and optionally set a user callback function.</em> <a href="#a3"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a4" doxytag="RtMidiIn::closePort"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a4">closePort</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Close an open MIDI connection (if one exists).</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a5" doxytag="RtMidiIn::getPortCount"></a>
+unsigned int&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a5">getPortCount</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the number of available MIDI input ports.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a6" doxytag="RtMidiIn::getPortName"></a>
+std::string&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a6">getPortName</a> (unsigned int portNumber=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return a string identifier for the specified MIDI input port number.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a7">setQueueSizeLimit</a> (unsigned int queueSize)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Set the maximum number of MIDI messages to be saved in the queue.</em> <a href="#a7"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a8">ignoreTypes</a> (bool midiSysex=true, bool midiTime=true, bool midiSense=true)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Specify whether certain MIDI message types should be queued or ignored during input.</em> <a href="#a8"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiIn.html#a9">getMessage</a> (std::vector&lt; unsigned char &gt; *message)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.</em> <a href="#a9"></a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A realtime MIDI input class.
+<p>
+This class provides a common, platform-independent API for realtime MIDI input. It allows access to a single MIDI input port. Incoming MIDI messages are either saved to a queue for retrieval using the <a class="el" href="classRtMidiIn.html#a9">getMessage()</a> function or immediately passed to a user-specified callback function. Create multiple instances of this class to connect to more than one MIDI device at the same time.<p>
+by Gary P. Scavone, 2003.
+<p>
+
+<p>
+Definition at line <a class="el" href="RtMidi_8h-source.html#l00053">53</a> of file <a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>.<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a name="a1" doxytag="RtMidiIn::RtMidiIn"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> RtMidiIn::RtMidiIn </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>portNumber</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a>&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>callback</em> = 0, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>void *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>userData</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+An overloaded constructor which can be used to open a MIDI input port during instantiation.
+<p>
+If the optional RtMidiCallback argument is non-NULL, the callback function will be invoked whenever MIDI input messages become available. An exception is thrown if an error occurs while attempting to make the port connection.
+<p>
+Definition at line <a class="el" href="RtMidi_8cpp-source.html#l00040">40</a> of file <a class="el" href="RtMidi_8cpp-source.html">RtMidi.cpp</a>.
+<p>
+References <a class="el" href="classRtMidiIn.html#a3">openPort()</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a name="a3" doxytag="RtMidiIn::openPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::openPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>portNumber</em> = 0, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="classRtMidiIn.html#s0">RtMidiCallback</a>&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>callback</em> = 0, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>void *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>userData</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Open a MIDI input connection and optionally set a user callback function.
+<p>
+An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened. If the optional RtMidiCallback argument is non-NULL, the callback function will be associated with the port and invoked whenever MIDI input messages become available. An exception is thrown if an error occurs while attempting to make the port connection.
+<p>
+Referenced by <a class="el" href="RtMidi_8cpp-source.html#l00040">RtMidiIn()</a>. </td>
+ </tr>
+</table>
+<a name="a7" doxytag="RtMidiIn::setQueueSizeLimit"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::setQueueSizeLimit </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>queueSize</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the maximum number of MIDI messages to be saved in the queue.
+<p>
+If the queue size limit is reached, incoming messages will be ignored. The default limit is 1024. </td>
+ </tr>
+</table>
+<a name="a8" doxytag="RtMidiIn::ignoreTypes"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiIn::ignoreTypes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiSysex</em> = true, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiTime</em> = true, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>midiSense</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Specify whether certain MIDI message types should be queued or ignored during input.
+<p>
+By default, MIDI timing and active sensing messages are ignored during message input because of their relative high data rates. MIDI sysex messages are ignored by default as well. Variable values of "true" imply that the respective message type will be ignored. </td>
+ </tr>
+</table>
+<a name="a9" doxytag="RtMidiIn::getMessage"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double RtMidiIn::getMessage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>message</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.
+<p>
+This function returns immediately whether a new message is available or not. A valid message is indicated by a non-zero vector size. An exception is thrown if an error occurs during message retrieval or an input connection was not previously established. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a><li><a class="el" href="RtMidi_8cpp-source.html">RtMidi.cpp</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidiIn.png b/doxygen/html/classRtMidiIn.png
new file mode 100755
index 0000000..224cf6d
--- /dev/null
+++ b/doxygen/html/classRtMidiIn.png
Binary files differ
diff --git a/doxygen/html/classRtMidiOut-members.html b/doxygen/html/classRtMidiOut-members.html
new file mode 100755
index 0000000..af47f3d
--- /dev/null
+++ b/doxygen/html/classRtMidiOut-members.html
@@ -0,0 +1,29 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiOut Member List</h1>This is the complete list of members for <a class="el" href="classRtMidiOut.html">RtMidiOut</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a4">closePort</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a5">getPortCount</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a6">getPortName</a>(unsigned int portNumber)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a3">openPort</a>(unsigned int portNumber=0)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a0">RtMidiOut</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a1">RtMidiOut</a>(unsigned int portNumber)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a7">sendMessage</a>(std::vector&lt; unsigned char &gt; *message)</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classRtMidiOut.html#a2">~RtMidiOut</a>()</td><td><a class="el" href="classRtMidiOut.html">RtMidiOut</a></td><td></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidiOut.html b/doxygen/html/classRtMidiOut.html
new file mode 100755
index 0000000..bb5b0f9
--- /dev/null
+++ b/doxygen/html/classRtMidiOut.html
@@ -0,0 +1,166 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>RtMidiOut Class Reference</h1>A realtime MIDI output class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for RtMidiOut:
+<p><center><img src="classRtMidiOut.png" usemap="#RtMidiOut_map" border="0" alt=""></center>
+<map name="RtMidiOut_map">
+<area href="classRtMidi.html" alt="RtMidi" shape="rect" coords="0,0,67,24">
+</map>
+<a href="classRtMidiOut-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="a0" doxytag="RtMidiOut::RtMidiOut"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a0">RtMidiOut</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Default constructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a1">RtMidiOut</a> (unsigned int portNumber)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>An overloaded constructor which opens a MIDI output port during instantiation.</em> <a href="#a1"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="RtMidiOut::~RtMidiOut"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a2">~RtMidiOut</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The destructor closes any open MIDI connections.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a3">openPort</a> (unsigned int portNumber=0)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Open a MIDI output connection.</em> <a href="#a3"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a4" doxytag="RtMidiOut::closePort"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a4">closePort</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Close an open MIDI connection (if one exists).</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a5" doxytag="RtMidiOut::getPortCount"></a>
+unsigned int&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a5">getPortCount</a> ()</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return the number of available MIDI output ports.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a6" doxytag="RtMidiOut::getPortName"></a>
+std::string&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a6">getPortName</a> (unsigned int portNumber)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Return a string identifier for the specified MIDI port type and number.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classRtMidiOut.html#a7">sendMessage</a> (std::vector&lt; unsigned char &gt; *message)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Immediately send a single message out an open MIDI output port.</em> <a href="#a7"></a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A realtime MIDI output class.
+<p>
+This class provides a common, platform-independent API for MIDI output. It allows one to probe available MIDI output ports, to connect to one such port, and to send MIDI bytes immediately over the connection. Create multiple instances of this class to connect to more than one MIDI device at the same time.<p>
+by Gary P. Scavone, 2003.
+<p>
+
+<p>
+Definition at line <a class="el" href="RtMidi_8h-source.html#l00170">170</a> of file <a class="el" href="RtMidi_8h-source.html">RtMidi.h</a>.<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a name="a1" doxytag="RtMidiOut::RtMidiOut"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> RtMidiOut::RtMidiOut </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+An overloaded constructor which opens a MIDI output port during instantiation.
+<p>
+An exception is thrown if an error occurs while attempting to make the port connection.
+<p>
+Definition at line <a class="el" href="RtMidi_8cpp-source.html#l00056">56</a> of file <a class="el" href="RtMidi_8cpp-source.html">RtMidi.cpp</a>.
+<p>
+References <a class="el" href="classRtMidiOut.html#a3">openPort()</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a name="a3" doxytag="RtMidiOut::openPort"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiOut::openPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>portNumber</em> = 0 </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Open a MIDI output connection.
+<p>
+An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened. An exception is thrown if an error occurs while attempting to make the port connection.
+<p>
+Referenced by <a class="el" href="RtMidi_8cpp-source.html#l00056">RtMidiOut()</a>. </td>
+ </tr>
+</table>
+<a name="a7" doxytag="RtMidiOut::sendMessage"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void RtMidiOut::sendMessage </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; unsigned char &gt; *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>message</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Immediately send a single message out an open MIDI output port.
+<p>
+An exception is thrown if an error occurs during output or an output connection was not previously established. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="RtMidi_8h-source.html">RtMidi.h</a><li><a class="el" href="RtMidi_8cpp-source.html">RtMidi.cpp</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classRtMidiOut.png b/doxygen/html/classRtMidiOut.png
new file mode 100755
index 0000000..6a41edc
--- /dev/null
+++ b/doxygen/html/classRtMidiOut.png
Binary files differ
diff --git a/doxygen/html/classStk-members.html b/doxygen/html/classStk-members.html
new file mode 100755
index 0000000..c38fd67
--- /dev/null
+++ b/doxygen/html/classStk-members.html
@@ -0,0 +1,35 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>Stk Member List</h1>This is the complete list of members for <a class="el" href="classStk.html">Stk</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#e0">handleError</a>(const std::string &amp;message, StkError::Type type)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d2">rawwavePath</a>(void)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d0">sampleRate</a>(void)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d3">setRawwavePath</a>(std::string path)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d1">setSampleRate</a>(StkFloat rate)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d7">sleep</a>(unsigned long milliseconds)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p3">STK_FLOAT32</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p4">STK_FLOAT64</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p1">STK_SINT16</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p2">STK_SINT32</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#p0">STK_SINT8</a></td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d4">swap16</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d5">swap32</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStk.html#d6">swap64</a>(unsigned char *ptr)</td><td><a class="el" href="classStk.html">Stk</a></td><td><code> [static]</code></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classStk.html b/doxygen/html/classStk.html
new file mode 100755
index 0000000..f3cf78f
--- /dev/null
+++ b/doxygen/html/classStk.html
@@ -0,0 +1,232 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>Stk Class Reference</h1>STK base class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="Stk_8h-source.html">Stk.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for Stk:
+<p><center><img src="classStk.png" usemap="#Stk_map" border="0" alt=""></center>
+<map name="Stk_map">
+<area href="classMidiFileIn.html" alt="MidiFileIn" shape="rect" coords="0,56,67,80">
+</map>
+<a href="classStk-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="d0" doxytag="Stk::sampleRate"></a>
+StkFloat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d0">sampleRate</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which returns the current STK sample rate.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d1">setSampleRate</a> (StkFloat rate)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which sets the STK sample rate.</em> <a href="#d1"></a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d2" doxytag="Stk::rawwavePath"></a>
+std::string&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d2">rawwavePath</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which returns the current rawwave path.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d3" doxytag="Stk::setRawwavePath"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d3">setRawwavePath</a> (std::string path)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which sets the STK rawwave path.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d4" doxytag="Stk::swap16"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d4">swap16</a> (unsigned char *ptr)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which byte-swaps a 16-bit data type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d5" doxytag="Stk::swap32"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d5">swap32</a> (unsigned char *ptr)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which byte-swaps a 32-bit data type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d6" doxytag="Stk::swap64"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d6">swap64</a> (unsigned char *ptr)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static method which byte-swaps a 64-bit data type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="d7" doxytag="Stk::sleep"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#d7">sleep</a> (unsigned long milliseconds)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Static cross-platform method to sleep for a number of milliseconds.</em></font><br><br></td></tr>
+<tr><td colspan=2><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td nowrap align=right valign=top>const StkFormat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#p0">STK_SINT8</a> = 1</td></tr>
+<tr><td nowrap align=right valign=top>const StkFormat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#p1">STK_SINT16</a> = 2</td></tr>
+<tr><td nowrap align=right valign=top>const StkFormat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#p2">STK_SINT32</a> = 8</td></tr>
+<tr><td nowrap align=right valign=top>const StkFormat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#p3">STK_FLOAT32</a> = 16</td></tr>
+<tr><td nowrap align=right valign=top>const StkFormat&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#p4">STK_FLOAT64</a> = 32</td></tr>
+<tr><td colspan=2><br><h2>Static Protected Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="e0" doxytag="Stk::handleError"></a>
+void&nbsp;</td><td valign=bottom><a class="el" href="classStk.html#e0">handleError</a> (const std::string &amp;message, StkError::Type type)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Function for error reporting and handling.</em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+STK base class.
+<p>
+Nearly all STK classes inherit from this class. The global sample rate can be queried and modified via Stk. In addition, this class provides error handling and byte-swapping functions.<p>
+by Perry R. Cook and Gary P. Scavone, 1995 - 2003.
+<p>
+
+<p>
+Definition at line <a class="el" href="Stk_8h-source.html#l00072">72</a> of file <a class="el" href="Stk_8h-source.html">Stk.h</a>.<hr><h2>Member Function Documentation</h2>
+<a name="d1" doxytag="Stk::setSampleRate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void Stk::setSampleRate </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">StkFloat&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>rate</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Static method which sets the STK sample rate.
+<p>
+The sample rate set using this method is queried by all STK classes which depend on its value. It is initialized to the default SRATE set in <a class="el" href="Stk_8h.html">Stk.h</a>. Many STK classes use the sample rate during instantiation. Therefore, if you wish to use a rate which is different from the default rate, it is imperative that it be set <em>BEFORE</em> STK objects are instantiated.
+<p>
+Definition at line <a class="el" href="Stk_8h-source.html#l00095">95</a> of file <a class="el" href="Stk_8h-source.html">Stk.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a name="p0" doxytag="Stk::STK_SINT8"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const Stk::StkFormat Stk::STK_SINT8 = 1<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+-128 to +127
+<p>
+Definition at line <a class="el" href="Stk_8cpp-source.html#l00019">19</a> of file <a class="el" href="Stk_8cpp-source.html">Stk.cpp</a>. </td>
+ </tr>
+</table>
+<a name="p1" doxytag="Stk::STK_SINT16"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const Stk::StkFormat Stk::STK_SINT16 = 2<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+-32768 to +32767
+<p>
+Definition at line <a class="el" href="Stk_8cpp-source.html#l00020">20</a> of file <a class="el" href="Stk_8cpp-source.html">Stk.cpp</a>. </td>
+ </tr>
+</table>
+<a name="p2" doxytag="Stk::STK_SINT32"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const Stk::StkFormat Stk::STK_SINT32 = 8<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+-2147483648 to +2147483647.
+<p>
+Definition at line <a class="el" href="Stk_8cpp-source.html#l00021">21</a> of file <a class="el" href="Stk_8cpp-source.html">Stk.cpp</a>. </td>
+ </tr>
+</table>
+<a name="p3" doxytag="Stk::STK_FLOAT32"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const Stk::StkFormat Stk::STK_FLOAT32 = 16<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Normalized between plus/minus 1.0.
+<p>
+Definition at line <a class="el" href="Stk_8cpp-source.html#l00022">22</a> of file <a class="el" href="Stk_8cpp-source.html">Stk.cpp</a>. </td>
+ </tr>
+</table>
+<a name="p4" doxytag="Stk::STK_FLOAT64"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const Stk::StkFormat Stk::STK_FLOAT64 = 32<code> [static]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Normalized between plus/minus 1.0.
+<p>
+Definition at line <a class="el" href="Stk_8cpp-source.html#l00023">23</a> of file <a class="el" href="Stk_8cpp-source.html">Stk.cpp</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="Stk_8h-source.html">Stk.h</a><li><a class="el" href="Stk_8cpp-source.html">Stk.cpp</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classStk.png b/doxygen/html/classStk.png
new file mode 100755
index 0000000..84495a3
--- /dev/null
+++ b/doxygen/html/classStk.png
Binary files differ
diff --git a/doxygen/html/classStkError-members.html b/doxygen/html/classStkError-members.html
new file mode 100755
index 0000000..97d7df0
--- /dev/null
+++ b/doxygen/html/classStkError-members.html
@@ -0,0 +1,26 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>StkError Member List</h1>This is the complete list of members for <a class="el" href="classStkError.html">StkError</a>, including all inherited members.<table>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStkError.html#a4">getMessage</a>(void)</td><td><a class="el" href="classStkError.html">StkError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStkError.html#a3">getType</a>(void)</td><td><a class="el" href="classStkError.html">StkError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStkError.html#a2">printMessage</a>(void)</td><td><a class="el" href="classStkError.html">StkError</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStkError.html#a0">StkError</a>(const std::string &amp;message, Type type=StkError::UNSPECIFIED)</td><td><a class="el" href="classStkError.html">StkError</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><a class="el" href="classStkError.html#a1">~StkError</a>(void)</td><td><a class="el" href="classStkError.html">StkError</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/classStkError.html b/doxygen/html/classStkError.html
new file mode 100755
index 0000000..cfdb29f
--- /dev/null
+++ b/doxygen/html/classStkError.html
@@ -0,0 +1,53 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>StkError Class Reference</h1>STK error handling class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="Stk_8h-source.html">Stk.h</a>&gt;</code>
+<p>
+<a href="classStkError-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top><a name="a0" doxytag="StkError::StkError"></a>
+&nbsp;</td><td valign=bottom><a class="el" href="classStkError.html#a0">StkError</a> (const std::string &amp;message, Type type=StkError::UNSPECIFIED)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The constructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a1" doxytag="StkError::~StkError"></a>
+virtual&nbsp;</td><td valign=bottom><a class="el" href="classStkError.html#a1">~StkError</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>The destructor.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a2" doxytag="StkError::printMessage"></a>
+virtual void&nbsp;</td><td valign=bottom><a class="el" href="classStkError.html#a2">printMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Prints "thrown" error message to stdout.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a3" doxytag="StkError::getType"></a>
+virtual const Type &amp;&nbsp;</td><td valign=bottom><a class="el" href="classStkError.html#a3">getType</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message type.</em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top><a name="a4" doxytag="StkError::getMessage"></a>
+virtual const std::string &amp;&nbsp;</td><td valign=bottom><a class="el" href="classStkError.html#a4">getMessage</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Returns the "thrown" error message string.</em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+STK error handling class.
+<p>
+This is a fairly abstract exception handling class. There could be sub-classes to take care of more specific error conditions ... or not.
+<p>
+
+<p>
+Definition at line <a class="el" href="Stk_8h-source.html#l00033">33</a> of file <a class="el" href="Stk_8h-source.html">Stk.h</a>.<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="Stk_8h-source.html">Stk.h</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/doxygen.css b/doxygen/html/doxygen.css
new file mode 100755
index 0000000..96680fb
--- /dev/null
+++ b/doxygen/html/doxygen.css
@@ -0,0 +1,49 @@
+H1 { text-align: center; }
+CAPTION { font-weight: bold }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #f2f2ff; font-weight: bold; }
+TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+BODY { background: white; color: black }
+TD.indexkey {
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+TD.indexvalue {
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+span.keyword { color: #008000 }
+span.keywordtype { color: #604020 }
+span.keywordflow { color: #e08000 }
+span.comment { color: #800000 }
+span.preprocessor { color: #806020 }
+span.stringliteral { color: #002080 }
+span.charliteral { color: #008080 }
diff --git a/doxygen/html/doxygen.png b/doxygen/html/doxygen.png
new file mode 100755
index 0000000..96ae72c
--- /dev/null
+++ b/doxygen/html/doxygen.png
Binary files differ
diff --git a/doxygen/html/files.html b/doxygen/html/files.html
new file mode 100755
index 0000000..981655b
--- /dev/null
+++ b/doxygen/html/files.html
@@ -0,0 +1,32 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>STK File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey"><b>MidiFileIn.cpp</b> <a href="MidiFileIn_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>MidiFileIn.h</b> <a href="MidiFileIn_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>midiin.cpp</b> <a href="midiin_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>miditime.cpp</b> <a href="miditime_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>playsmf.cpp</b> <a href="playsmf_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>RtError.h</b> <a href="RtError_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>RtMidi.cpp</b> <a href="RtMidi_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>RtMidi.h</b> <a href="RtMidi_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>Stk.cpp</b> <a href="Stk_8cpp-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>Stk.h</b> <a href="Stk_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/functions.html b/doxygen/html/functions.html
new file mode 100755
index 0000000..48492e2
--- /dev/null
+++ b/doxygen/html/functions.html
@@ -0,0 +1,65 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>STK Compound Members</h1>Here is a list of all documented class members with links to the class documentation for each member:<ul>
+<li>closePort()
+: <a class="el" href="classRtMidiOut.html#a4">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a4">RtMidiIn</a><li>getDivision()
+: <a class="el" href="classMidiFileIn.html#a4">MidiFileIn</a><li>getFileFormat()
+: <a class="el" href="classMidiFileIn.html#a2">MidiFileIn</a><li>getMessage()
+: <a class="el" href="classStkError.html#a4">StkError</a>, <a class="el" href="classRtMidiIn.html#a9">RtMidiIn</a>, <a class="el" href="classRtError.html#a4">RtError</a><li>getNextEvent()
+: <a class="el" href="classMidiFileIn.html#a7">MidiFileIn</a><li>getNextMidiEvent()
+: <a class="el" href="classMidiFileIn.html#a8">MidiFileIn</a><li>getNumberOfTracks()
+: <a class="el" href="classMidiFileIn.html#a3">MidiFileIn</a><li>getPortCount()
+: <a class="el" href="classRtMidiOut.html#a5">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a5">RtMidiIn</a><li>getPortName()
+: <a class="el" href="classRtMidiOut.html#a6">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a6">RtMidiIn</a><li>getTickSeconds()
+: <a class="el" href="classMidiFileIn.html#a6">MidiFileIn</a><li>getType()
+: <a class="el" href="classStkError.html#a3">StkError</a>, <a class="el" href="classRtError.html#a3">RtError</a><li>handleError()
+: <a class="el" href="classStk.html#e0">Stk</a><li>ignoreTypes()
+: <a class="el" href="classRtMidiIn.html#a8">RtMidiIn</a><li>MidiFileIn()
+: <a class="el" href="classMidiFileIn.html#a0">MidiFileIn</a><li>openPort()
+: <a class="el" href="classRtMidiOut.html#a3">RtMidiOut</a>, <a class="el" href="classRtMidiIn.html#a3">RtMidiIn</a><li>printMessage()
+: <a class="el" href="classStkError.html#a2">StkError</a>, <a class="el" href="classRtError.html#a2">RtError</a><li>rawwavePath()
+: <a class="el" href="classStk.html#d2">Stk</a><li>rewindTrack()
+: <a class="el" href="classMidiFileIn.html#a5">MidiFileIn</a><li>RtError()
+: <a class="el" href="classRtError.html#a0">RtError</a><li>RtMidiCallback
+: <a class="el" href="classRtMidiIn.html#s0">RtMidiIn</a><li>RtMidiIn()
+: <a class="el" href="classRtMidiIn.html#a1">RtMidiIn</a><li>RtMidiOut()
+: <a class="el" href="classRtMidiOut.html#a1">RtMidiOut</a><li>sampleRate()
+: <a class="el" href="classStk.html#d0">Stk</a><li>sendMessage()
+: <a class="el" href="classRtMidiOut.html#a7">RtMidiOut</a><li>setQueueSizeLimit()
+: <a class="el" href="classRtMidiIn.html#a7">RtMidiIn</a><li>setRawwavePath()
+: <a class="el" href="classStk.html#d3">Stk</a><li>setSampleRate()
+: <a class="el" href="classStk.html#d1">Stk</a><li>sleep()
+: <a class="el" href="classStk.html#d7">Stk</a><li>STK_FLOAT32
+: <a class="el" href="classStk.html#p3">Stk</a><li>STK_FLOAT64
+: <a class="el" href="classStk.html#p4">Stk</a><li>STK_SINT16
+: <a class="el" href="classStk.html#p1">Stk</a><li>STK_SINT32
+: <a class="el" href="classStk.html#p2">Stk</a><li>STK_SINT8
+: <a class="el" href="classStk.html#p0">Stk</a><li>StkError()
+: <a class="el" href="classStkError.html#a0">StkError</a><li>swap16()
+: <a class="el" href="classStk.html#d4">Stk</a><li>swap32()
+: <a class="el" href="classStk.html#d5">Stk</a><li>swap64()
+: <a class="el" href="classStk.html#d6">Stk</a><li>Type
+: <a class="el" href="classRtError.html#s11">RtError</a><li>~MidiFileIn()
+: <a class="el" href="classMidiFileIn.html#a1">MidiFileIn</a><li>~RtError()
+: <a class="el" href="classRtError.html#a1">RtError</a><li>~RtMidiIn()
+: <a class="el" href="classRtMidiIn.html#a2">RtMidiIn</a><li>~RtMidiOut()
+: <a class="el" href="classRtMidiOut.html#a2">RtMidiOut</a><li>~StkError()
+: <a class="el" href="classStkError.html#a1">StkError</a></ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/hierarchy.html b/doxygen/html/hierarchy.html
new file mode 100755
index 0000000..3f2be16
--- /dev/null
+++ b/doxygen/html/hierarchy.html
@@ -0,0 +1,33 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>STK Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="classRtError.html">RtError</a>
+<li><a class="el" href="classRtMidi.html">RtMidi</a>
+<ul>
+<li><a class="el" href="classRtMidiIn.html">RtMidiIn</a>
+<li><a class="el" href="classRtMidiOut.html">RtMidiOut</a>
+</ul>
+<li><a class="el" href="classStk.html">Stk</a>
+<ul>
+<li><a class="el" href="classMidiFileIn.html">MidiFileIn</a>
+</ul>
+<li><a class="el" href="classStkError.html">StkError</a>
+</ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/index.html b/doxygen/html/index.html
new file mode 100755
index 0000000..e68c218
--- /dev/null
+++ b/doxygen/html/index.html
@@ -0,0 +1,24 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>STK Documentation</h1>
+<p>
+<ul>
+<li><a class="qindex" href="index.html">Main Page</a> &nbsp; <li><a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <li><a class="qindex" href="annotated.html">Compound List</a> &nbsp; <li><a class="qindex" href="files.html">File List</a> &nbsp; <li><a class="qindex" href="functions.html">Compound Members</a> &nbsp; </ul>
+<HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/midiin_8cpp-source.html b/doxygen/html/midiin_8cpp-source.html
new file mode 100755
index 0000000..267d6fb
--- /dev/null
+++ b/doxygen/html/midiin_8cpp-source.html
@@ -0,0 +1,83 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>midiin.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// midiin.cpp</span>
+00002 <span class="comment">//</span>
+00003 <span class="comment">// Simple program to read MIDI input from default port.</span>
+00004 <span class="comment">//</span>
+00005 <span class="comment">// by Gary Scavone, 2003.</span>
+00006 <span class="comment">//</span>
+00007 <span class="comment">// compile: g++ -Wall -D__MACOSX_CORE__ -o midiin midiin.cpp RtMidi.cpp Stk.cpp -framework CoreMIDI -framework CoreFoundation -framework CoreAudio</span>
+00008
+00009 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00010 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
+00011 <span class="preprocessor">#include &lt;signal.h&gt;</span>
+00012 <span class="preprocessor">#include "RtMidi.h"</span>
+00013
+00014 <span class="keywordtype">bool</span> done;
+00015 <span class="keyword">static</span> <span class="keywordtype">void</span> finish(<span class="keywordtype">int</span> ignore){ done = <span class="keyword">true</span>; }
+00016
+00017 <span class="keywordtype">int</span> main()
+00018 {
+00019 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
+00020 <a class="code" href="classRtMidiIn.html">RtMidiIn</a> midi;
+00021 std::vector&lt;unsigned char&gt; message;
+00022
+00023 <span class="keywordflow">if</span> ( midi.<a class="code" href="classRtMidiIn.html#a5">getPortCount</a>() &lt; 1 ) {
+00024 cout &lt;&lt; <span class="stringliteral">"\nThere are no MIDI input sources available!\n"</span>;
+00025 exit(0);
+00026 }
+00027
+00028 <span class="keywordflow">try</span> {
+00029 midi.<a class="code" href="classRtMidiIn.html#a3">openPort</a>();
+00030 }
+00031 <span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html">RtError</a> &amp; ) {
+00032 <span class="comment">// You might want to do something more useful here.</span>
+00033 cout &lt;&lt; <span class="stringliteral">"\nAborting program!\n"</span>;
+00034 <span class="keywordflow">goto</span> cleanup;
+00035 }
+00036
+00037 <span class="comment">// Install an interrupt handler function.</span>
+00038 (void) signal(SIGINT, finish);
+00039
+00040 <span class="keywordtype">int</span> nBytes, i, value;
+00041 <span class="keywordtype">double</span> stamp;
+00042 done = <span class="keyword">false</span>;
+00043 cout &lt;&lt; <span class="stringliteral">"Reading MIDI from default port ..."</span> &lt;&lt; endl;
+00044 <span class="keywordflow">while</span> ( !done ) {
+00045 stamp = midi.<a class="code" href="classRtMidiIn.html#a9">getMessage</a>( &amp;message );
+00046 nBytes = message.size();
+00047 <span class="keywordflow">for</span> ( i=0; i&lt;nBytes; i++ ) {
+00048 value = message[i];
+00049 cout &lt;&lt; <span class="stringliteral">"Byte "</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">" = "</span> &lt;&lt; value &lt;&lt; <span class="stringliteral">", "</span>;
+00050 }
+00051 <span class="keywordflow">if</span> ( nBytes &gt; 0 )
+00052 cout &lt;&lt; <span class="stringliteral">"stamp = "</span> &lt;&lt; stamp &lt;&lt; <span class="charliteral">'\n'</span>;
+00053
+00054 <span class="comment">// Sleep for 10 milliseconds.</span>
+00055 usleep( 10000 );
+00056 }
+00057
+00058 cout &lt;&lt; <span class="stringliteral">"Goodbye!"</span> &lt;&lt; endl;
+00059
+00060 cleanup:
+00061 midi.<a class="code" href="classRtMidiIn.html#a4">closePort</a>();
+00062 <span class="keywordflow">return</span> 0;
+00063 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/miditime_8cpp-source.html b/doxygen/html/miditime_8cpp-source.html
new file mode 100755
index 0000000..cf274e6
--- /dev/null
+++ b/doxygen/html/miditime_8cpp-source.html
@@ -0,0 +1,93 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>miditime.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// miditime.cpp</span>
+00002 <span class="comment">//</span>
+00003 <span class="comment">// Simple program to output MIDI to the default port.</span>
+00004 <span class="comment">//</span>
+00005 <span class="comment">// by Gary Scavone, 2003.</span>
+00006 <span class="comment">//</span>
+00007 <span class="comment">// compile: g++ -Wall -o miditime miditime.cpp RtMidi.cpp -framework CoreMIDI -framework CoreFoundation -framework CoreAudio</span>
+00008
+00009 <span class="preprocessor">#include &lt;iostream&gt;</span>
+00010 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
+00011 <span class="preprocessor">#include &lt;signal.h&gt;</span>
+00012 <span class="preprocessor">#include "RtMidi.h"</span>
+00013
+00014 <span class="keywordtype">bool</span> done;
+00015 <span class="keyword">static</span> <span class="keywordtype">void</span> finish(<span class="keywordtype">int</span> ignore){ done = <span class="keyword">true</span>; }
+00016
+00017 <span class="keywordtype">int</span> main()
+00018 {
+00019 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
+00020 <a class="code" href="classRtMidi.html">RtMidi</a> midi( RtMidi::ABSOLUTE_TIME );
+00021
+00022 <span class="keywordflow">if</span> ( midi.getPortCount( RtMidi::MIDI_OUTPUT ) &lt; 1 ) {
+00023 cout &lt;&lt; <span class="stringliteral">"\nThere are no MIDI output destinations available!\n"</span>;
+00024 exit(0);
+00025 }
+00026
+00027 <span class="keywordflow">try</span> {
+00028 midi.openPort( RtMidi::MIDI_OUTPUT );
+00029 }
+00030 <span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html">RtError</a> &amp; ) {
+00031 <span class="comment">// You might want to do something more useful here.</span>
+00032 cout &lt;&lt; <span class="stringliteral">"\nAborting program!\n"</span>;
+00033 midi.closePort();
+00034 exit(0);
+00035 }
+00036
+00037 <span class="comment">// Install an interrupt handler function.</span>
+00038 (void) signal(SIGINT, finish);
+00039
+00040 RtMidi::MidiMessage message;
+00041 message.bytes.push_back( 144 );
+00042 message.bytes.push_back( 64 );
+00043 message.bytes.push_back( 80 );
+00044
+00045 cout &lt;&lt; <span class="stringliteral">"Scheduling for 1 second later ..."</span> &lt;&lt; endl;
+00046 timeval tvTime;
+00047 <span class="keywordflow">if</span> ( gettimeofday( &amp;tvTime, NULL ) == 0 ) {
+00048 message.timeStamp = (double) tvTime.tv_sec + 1.0;
+00049 message.timeStamp += (double) (tvTime.tv_usec * 0.000001);
+00050 }
+00051 <span class="comment">//message.timeStamp = 1.0;</span>
+00052 midi.sendMessage( &amp;message );
+00053
+00054 <span class="comment">// Sleep for 0.5 seconds.</span>
+00055 usleep( 1000000 );
+00056
+00057 cout &lt;&lt; <span class="stringliteral">"1 second has passed ..."</span> &lt;&lt; endl;
+00058
+00059 <span class="comment">// Sleep another 1.0 seconds.</span>
+00060 usleep( 1000000 );
+00061
+00062 cout &lt;&lt; <span class="stringliteral">"Turning note off ... "</span>;
+00063
+00064 <span class="comment">// Turn the note off.</span>
+00065 message.timeStamp = 0.0;
+00066 message.bytes[2] = 0;
+00067 midi.sendMessage( &amp;message );
+00068
+00069 midi.closePort();
+00070
+00071 cout &lt;&lt; <span class="stringliteral">"Goodbye!"</span> &lt;&lt; endl;
+00072 <span class="keywordflow">return</span> 0;
+00073 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/newRtMidi_8h-source.html b/doxygen/html/newRtMidi_8h-source.html
new file mode 100755
index 0000000..971238f
--- /dev/null
+++ b/doxygen/html/newRtMidi_8h-source.html
@@ -0,0 +1,148 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>newRtMidi.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00012 <span class="comment">/**********************************************************************/</span>
+00013
+00014 <span class="preprocessor">#ifndef RTMIDI_H</span>
+00015 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
+00016 <span class="preprocessor"></span>
+00017 <span class="preprocessor">#include &lt;vector&gt;</span>
+00018 <span class="preprocessor">#include &lt;string&gt;</span>
+00019 <span class="preprocessor">#include "RtError.h"</span>
+00020
+00021 <span class="comment">// Operating system dependent thread functionality.</span>
+00022 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
+00023 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
+00024 <span class="preprocessor"> #include &lt;process.h&gt;</span>
+00025
+00026 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
+00027 <span class="keyword">typedef</span> CRITICAL_SECTION Mutex;
+00028
+00029 <span class="preprocessor">#else // Various unix flavors with pthread support.</span>
+00030 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;pthread.h&gt;</span>
+00031
+00032 <span class="keyword">typedef</span> pthread_t ThreadHandle;
+00033 <span class="keyword">typedef</span> pthread_mutex_t Mutex;
+00034
+00035 <span class="preprocessor">#endif</span>
+00036 <span class="preprocessor"></span>
+00037 <span class="comment">// OS-X CoreMIDI header files.</span>
+00038 <span class="preprocessor">#include &lt;CoreMIDI/CoreMIDI.h&gt;</span>
+00039 <span class="preprocessor">#include &lt;CoreAudio/HostTime.h&gt;</span>
+00040
+00041 <span class="comment">// Issues yet to resolve:</span>
+00042 <span class="comment">// - how do we make this cross-platform</span>
+00043 <span class="comment">// - no subclasses</span>
+00044 <span class="comment">// - instead, attempt an optional api argument for oss/alsa selection</span>
+00045 <span class="comment">// - do we keep both input and output functionality here?</span>
+00046 <span class="comment">//</span>
+00047 <span class="comment">// - RtMidiIn, RtMidiOut</span>
+00048 <span class="comment">//</span>
+00049 <span class="comment">// - what do we call the ignore() function?</span>
+00050
+00051
+00052
+00053 <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
+00054 {
+00055 <span class="keyword">public</span>:
+00056
+<a name="l00058"></a><a class="code" href="classRtMidi.html#s8">00058</a> <span class="keyword">enum</span> <a class="code" href="classRtMidi.html#s8">PortType</a> { RTMIDI_INPUT, RTMIDI_OUTPUT };
+00059
+<a name="l00061"></a><a class="code" href="classRtMidi.html#s0">00061</a> <span class="keyword">typedef</span> void (*RtMidiCallback)( std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
+00062
+00064 <a class="code" href="classRtMidi.html#a0">RtMidi</a>();
+00065
+00067
+00071 <a class="code" href="classRtMidi.html#a0">RtMidi</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00072
+00074 <a class="code" href="classRtMidi.html#a2">~RtMidi</a>();
+00075
+00077
+00083 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a3">openPort</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00084
+00086 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a4">closePort</a>( <span class="keywordtype">void</span> );
+00087
+00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#a5">getPortCount</a>( PortType type );
+00090
+00092 std::string <a class="code" href="classRtMidi.html#a6">getPortName</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
+00093
+00095 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a7">setInputCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData);
+00096
+00097 <span class="keywordtype">void</span> setInputQueueSize( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
+00098
+00100
+00107 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a9">setIgnoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span> );
+00108
+00110
+00117 <span class="keywordtype">double</span> <a class="code" href="classRtMidi.html#a10">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00118
+00120
+00124 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a11">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
+00125
+00126 <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
+00127 <span class="comment">// messages. Each message represents one and only one MIDI message.</span>
+00128 <span class="keyword">struct </span>MidiMessage {
+00129 std::vector&lt;unsigned char&gt; bytes;
+00130 <span class="keywordtype">double</span> timeStamp;
+00131
+00132 <span class="comment">// Default constructor.</span>
+00133 MidiMessage()
+00134 :bytes(3), timeStamp(0.0) {}
+00135 };
+00136
+00137 <span class="comment">// This public structure is used to pass private class data to the</span>
+00138 <span class="comment">// MIDI input callback function or thread.</span>
+00139 <span class="keyword">struct </span>RtMidiCallbackInfo {
+00140 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex;
+00141 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastTime;
+00142 MidiMessage buffer[nMessages];
+00143 Mutex mutex;
+00144 <span class="keywordtype">bool</span> usingCallback;
+00145 <span class="keywordtype">void</span> *userCallback;
+00146 <span class="keywordtype">void</span> *userData;
+00147
+00148 <span class="comment">// Default constructor.</span>
+00149 RtMidiCallbackInfo()
+00150 : writeIndex(0), doDeltaTime(true), lastTime(0),
+00151 usingCallback(false), userCallback(0), userData(0) {}
+00152 };
+00153
+00154 <span class="keyword">private</span>:
+00155
+00156 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
+00157 <span class="comment">// class. The behavior of this function can be modified to suit</span>
+00158 <span class="comment">// specific needs.</span>
+00159 <span class="keywordtype">void</span> error( RtError::Type type );
+00160
+00161 MidiMessage currentMessage_;
+00162 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nMessages;
+00163 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
+00164 MIDIClientRef client_;
+00165 MIDIPortRef port_;
+00166 MIDIEndpointRef destinationId_;
+00167 RtMidiCallbackInfo callbackInfo_;
+00168 <span class="keywordtype">bool</span> connected_;
+00169 <span class="keywordtype">bool</span> isInputPort_;
+00170 std::string errorString_;
+00171
+00172 };
+00173
+00174 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/oldRtMidi_8cpp-source.html b/doxygen/html/oldRtMidi_8cpp-source.html
new file mode 100755
index 0000000..90c3f47
--- /dev/null
+++ b/doxygen/html/oldRtMidi_8cpp-source.html
@@ -0,0 +1,385 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>oldRtMidi.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// RtMidi class declaration</span>
+00002 <span class="comment">// Realtime MIDI input/output class.</span>
+00003 <span class="comment">//</span>
+00004 <span class="comment">// This class provides access to a single MIDI input or output port.</span>
+00005 <span class="comment">// Create multiple instances of this class to connect to more than</span>
+00006 <span class="comment">// one MIDI device at the same time.</span>
+00007 <span class="comment">//</span>
+00008 <span class="comment">// by Gary P. Scavone, 2003.</span>
+00009
+00010 <span class="preprocessor">#include "RtMidi.h"</span>
+00011 <span class="preprocessor">#include &lt;sstream&gt;</span>
+00012 <span class="preprocessor">#include &lt;sys/time.h&gt;</span>
+00013
+00014 <span class="keywordtype">void</span> midiInputCallback( <span class="keyword">const</span> MIDIPacketList *list, <span class="keywordtype">void</span> *procRef, <span class="keywordtype">void</span> *srcRef )
+00015 {
+00016 RtMidi::RtMidiCallbackInfo *info = static_cast&lt;RtMidi::RtMidiCallbackInfo *&gt; (procRef);
+00017
+00018 RtMidi::MidiMessage *message;
+00019 <span class="keyword">const</span> MIDIPacket *packet = &amp;list-&gt;packet[0];
+00020 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;list-&gt;numPackets; ++i ) {
+00021
+00022 <span class="comment">// For the moment, we're limiting ourselves to basic MIDI messages</span>
+00023 <span class="comment">// and ignoring the (real) possibility that multiple MIDI messages</span>
+00024 <span class="comment">// can be packed into a single MIDIPacket. FIXME!!!</span>
+00025 <span class="keywordflow">if</span> ( packet-&gt;length &gt; 3 ) <span class="keywordflow">continue</span>;
+00026
+00027 message = static_cast&lt;RtMidi::MidiMessage *&gt; (&amp;info-&gt;buffer[info-&gt;writeIndex++]);
+00028 message-&gt;bytes.assign( packet-&gt;data, &amp;packet-&gt;data[packet-&gt;length] );
+00029
+00030 <span class="comment">// - have status byte:</span>
+00031 <span class="comment">// - look for subsequent data bytes of known number (unless sysex ... unknown number)</span>
+00032 <span class="comment">// - if find a system realtime:</span>
+00033 <span class="comment">// - copy incomplete message to next buffer</span>
+00034 <span class="comment">// - clear current buffer and write realtime message</span>
+00035 <span class="comment">// - continue parsing data bytes</span>
+00036 <span class="comment">// while !finished parsing:</span>
+00037 <span class="comment">// if data byte</span>
+00038 <span class="comment">// if ( incomplete ) {</span>
+00039 <span class="comment">// for ( int i = 0; i &lt; packet-&gt;length; i++ ) {</span>
+00040 <span class="comment">// if while ( packet-&gt;data[</span>
+00041 <span class="comment">// }</span>
+00042 <span class="comment">//}</span>
+00043
+00044 <span class="comment">// Calculate time stamp.</span>
+00045 message-&gt;timeStamp = 0.0;
+00046 <span class="keywordflow">if</span> ( info-&gt;doDeltaTime ) {
+00047 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time = packet-&gt;timeStamp;
+00048 time -= info-&gt;lastTime;
+00049 info-&gt;lastTime = packet-&gt;timeStamp;
+00050 time = AudioConvertHostTimeToNanos( time );
+00051 message-&gt;timeStamp = time * 0.000000001;
+00052 }
+00053 <span class="keywordflow">else</span> { <span class="comment">// absolute time in seconds since midnight (0 hour), January 1, 1970</span>
+00054 timeval time;
+00055 <span class="keywordflow">if</span> ( gettimeofday( &amp;time, NULL ) != 0 ) {
+00056 std::cerr &lt;&lt; <span class="stringliteral">"RtMidi: error in midiInputCallback calculating time stamp."</span>;
+00057 }
+00058 <span class="keywordflow">else</span> {
+00059 message-&gt;timeStamp = (double) time.tv_sec;
+00060 message-&gt;timeStamp += (double) (time.tv_usec * 0.000001);
+00061 }
+00062 }
+00063
+00064 <span class="keywordflow">if</span> ( info-&gt;writeIndex &gt;= nMessages )
+00065 info-&gt;writeIndex = 0;
+00066
+00067 <span class="keywordflow">if</span> ( info-&gt;usingCallback ) {
+00068 <a class="code" href="classRtMidi.html#s0">RtMidi::RtMidiCallback</a> callback = (RtMidi::RtMidiCallback) info-&gt;userCallback;
+00069 callback( message, info-&gt;userData );
+00070 }
+00071
+00072 packet = MIDIPacketNext(packet);
+00073 }
+00074 }
+00075
+00076 <a class="code" href="classRtMidi.html#a0">RtMidi :: RtMidi</a>( TimeType time )
+00077 {
+00078 <span class="keywordflow">if</span> ( time == ABSOLUTE_TIME ) callbackInfo_.doDeltaTime = <span class="keyword">false</span>;
+00079 callbackInfo_.lastTime = AudioGetCurrentHostTime();
+00080 readIndex_ = 0;
+00081 connected_ = <span class="keyword">false</span>;
+00082 }
+00083
+00084 <a class="code" href="classRtMidi.html#a0">RtMidi :: RtMidi</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber, TimeType time )
+00085 {
+00086 <span class="keywordflow">if</span> ( time == ABSOLUTE_TIME ) callbackInfo_.doDeltaTime = <span class="keyword">false</span>;
+00087 callbackInfo_.lastTime = AudioGetCurrentHostTime();
+00088 readIndex_ = 0;
+00089 connected_ = <span class="keyword">false</span>;
+00090
+00091 <span class="comment">// Attempt to make the connection.</span>
+00092 this-&gt;<a class="code" href="classRtMidi.html#a3">openPort</a>( type, portNumber );
+00093 }
+00094
+<a name="l00095"></a><a class="code" href="classRtMidi.html#a2">00095</a> <a class="code" href="classRtMidi.html#a2">RtMidi :: ~RtMidi</a>()
+00096 {
+00097 <span class="keywordflow">if</span> ( connected_ ) {
+00098 MIDIClientDispose( client_ );
+00099 MIDIPortDispose( port_ );
+00100 }
+00101 }
+00102
+<a name="l00103"></a><a class="code" href="classRtMidi.html#a3">00103</a> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a3">RtMidi :: openPort</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber )
+00104 {
+00105 <span class="keywordflow">if</span> ( connected_ ) {
+00106 errorString_ = <span class="stringliteral">"RtMidi::openPort: a valid connection already exists."</span>;
+00107 error( RtError::WARNING );
+00108 <span class="keywordflow">return</span>;
+00109 }
+00110
+00111 <span class="keywordflow">if</span> ( portNumber &lt; 0 ) {
+00112 errorString_ = <span class="stringliteral">"RtMidi::openPort: the 'portNumber' argument must be greater than zero."</span>;
+00113 error( RtError::INVALID_PARAMETER );
+00114 }
+00115
+00116 std::ostringstream ost;
+00117 <span class="keywordflow">if</span> ( type == MIDI_INPUT ) {
+00118 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nSrc = MIDIGetNumberOfSources();
+00119 <span class="keywordflow">if</span> (nSrc &lt; 1) {
+00120 errorString_ = <span class="stringliteral">"RtMidi::openPort: no MIDI input sources found!"</span>;
+00121 error( RtError::NO_DEVICES_FOUND );
+00122 }
+00123
+00124 <span class="keywordflow">if</span> ( portNumber &gt;= nSrc ) {
+00125 ost &lt;&lt; <span class="stringliteral">"RtMidi::openPort: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00126 errorString_ = ost.str();
+00127 error( RtError::INVALID_PARAMETER );
+00128 }
+00129
+00130 OSStatus result = MIDIClientCreate( CFSTR(<span class="stringliteral">"RtMidi Input Client"</span>), NULL, NULL, &amp;client_ );
+00131 <span class="keywordflow">if</span> ( result != noErr ) {
+00132 errorString_ = <span class="stringliteral">"RtMidi::openPort: error creating OS-X MIDI client object."</span>;
+00133 error( RtError::DRIVER_ERROR );
+00134 }
+00135
+00136 result = MIDIInputPortCreate( client_, CFSTR(<span class="stringliteral">"RtMidi Virtual MIDI Input Port"</span>), midiInputCallback, (<span class="keywordtype">void</span> *)&amp;callbackInfo_, &amp;port_ );
+00137 <span class="keywordflow">if</span> ( result != noErr ) {
+00138 MIDIClientDispose( client_ );
+00139 errorString_ = <span class="stringliteral">"RtMidi::openPort: error creating OS-X MIDI input port."</span>;
+00140 error( RtError::DRIVER_ERROR );
+00141 }
+00142
+00143 <span class="comment">// Get the desired input source identifier.</span>
+00144 MIDIEndpointRef src = MIDIGetSource( portNumber );
+00145 <span class="keywordflow">if</span> ( src == NULL ) {
+00146 MIDIPortDispose( port_ );
+00147 MIDIClientDispose( client_ );
+00148 errorString_ = <span class="stringliteral">"RtMidi::openPort: error getting MIDI input source reference."</span>;
+00149 error( RtError::DRIVER_ERROR );
+00150 }
+00151
+00152 <span class="comment">// Make the connection.</span>
+00153 result = MIDIPortConnectSource(port_, src, NULL );
+00154 <span class="keywordflow">if</span> ( result != noErr ) {
+00155 MIDIPortDispose( port_ );
+00156 MIDIClientDispose( client_ );
+00157 errorString_ = <span class="stringliteral">"RtMidi::openPort: error connecting OS-X MIDI input port."</span>;
+00158 error( RtError::DRIVER_ERROR );
+00159 }
+00160
+00161 isInputPort_ = <span class="keyword">true</span>;
+00162 callbackInfo_.lastTime = AudioGetCurrentHostTime();
+00163 }
+00164 <span class="keywordflow">else</span> { <span class="comment">// MIDI_OUTPUT</span>
+00165 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nDest = MIDIGetNumberOfDestinations();
+00166 <span class="keywordflow">if</span> (nDest &lt; 1) {
+00167 errorString_ = <span class="stringliteral">"RtMidi::openPort: no MIDI output destinations found!"</span>;
+00168 error( RtError::NO_DEVICES_FOUND );
+00169 }
+00170
+00171 <span class="keywordflow">if</span> ( portNumber &gt;= nDest ) {
+00172 ost &lt;&lt; <span class="stringliteral">"RtMidi::openPort: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00173 errorString_ = ost.str();
+00174 error( RtError::INVALID_PARAMETER );
+00175 }
+00176
+00177 OSStatus result = MIDIClientCreate( CFSTR(<span class="stringliteral">"RtMidi Output Client"</span>), NULL, NULL, &amp;client_ );
+00178 <span class="keywordflow">if</span> ( result != noErr ) {
+00179 errorString_ = <span class="stringliteral">"RtMidi::openPort: error creating OS-X MIDI client object."</span>;
+00180 error( RtError::DRIVER_ERROR );
+00181 }
+00182
+00183 result = MIDIOutputPortCreate( client_, CFSTR(<span class="stringliteral">"RtMidi Virtual MIDI Output Port"</span>), &amp;port_ );
+00184 <span class="keywordflow">if</span> ( result != noErr ) {
+00185 MIDIClientDispose( client_ );
+00186 errorString_ = <span class="stringliteral">"RtMidi::openPort: error creating OS-X MIDI output port."</span>;
+00187 error( RtError::DRIVER_ERROR );
+00188 }
+00189
+00190 <span class="comment">// Get the desired output port identifier.</span>
+00191 destinationId_ = MIDIGetDestination( portNumber );
+00192 <span class="keywordflow">if</span> ( destinationId_ == NULL ) {
+00193 MIDIPortDispose( port_ );
+00194 MIDIClientDispose( client_ );
+00195 errorString_ = <span class="stringliteral">"RtMidi::openPort: error getting MIDI output destination reference."</span>;
+00196 error( RtError::DRIVER_ERROR );
+00197 }
+00198
+00199 isInputPort_ = <span class="keyword">false</span>;
+00200 }
+00201
+00202 connected_ = <span class="keyword">true</span>;
+00203 }
+00204
+<a name="l00205"></a><a class="code" href="classRtMidi.html#a4">00205</a> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a4">RtMidi :: closePort</a>( <span class="keywordtype">void</span> )
+00206 {
+00207 <span class="keywordflow">if</span> ( connected_ ) {
+00208 MIDIClientDispose( client_ );
+00209 MIDIPortDispose( port_ );
+00210 }
+00211 <span class="keywordflow">else</span> {
+00212 errorString_ = <span class="stringliteral">"RtMidi::closePort: a port connection was not open!"</span>;
+00213 error( RtError::WARNING );
+00214 }
+00215 connected_ = <span class="keyword">false</span>;
+00216 }
+00217
+<a name="l00218"></a><a class="code" href="classRtMidi.html#a5">00218</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#a5">RtMidi :: getPortCount</a>( PortType type )
+00219 {
+00220 <span class="keywordflow">if</span> ( type == MIDI_INPUT )
+00221 <span class="keywordflow">return</span> MIDIGetNumberOfSources();
+00222 <span class="keywordflow">else</span> <span class="comment">// MIDI_OUTPUT</span>
+00223 <span class="keywordflow">return</span> MIDIGetNumberOfDestinations();
+00224 }
+00225
+<a name="l00226"></a><a class="code" href="classRtMidi.html#a6">00226</a> std::string <a class="code" href="classRtMidi.html#a6">RtMidi :: getPortName</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber )
+00227 {
+00228 CFStringRef nameRef;
+00229 MIDIEndpointRef portRef;
+00230 std::ostringstream ost;
+00231 <span class="keywordtype">char</span> name[128];
+00232 <span class="keywordflow">if</span> ( type == MIDI_INPUT ) {
+00233 <span class="keywordflow">if</span> ( portNumber &lt; 0 || portNumber &gt;= MIDIGetNumberOfSources() ) {
+00234 ost &lt;&lt; <span class="stringliteral">"RtMidi::getPortName: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00235 errorString_ = ost.str();
+00236 error( RtError::INVALID_PARAMETER );
+00237 }
+00238 portRef = MIDIGetSource( portNumber );
+00239 }
+00240 <span class="keywordflow">else</span> { <span class="comment">// MIDI_OUTPUT</span>
+00241 <span class="keywordflow">if</span> ( portNumber &lt; 0 || portNumber &gt;= MIDIGetNumberOfDestinations() ) {
+00242 ost &lt;&lt; <span class="stringliteral">"RtMidi::getPortName: the 'portNumber' argument ("</span> &lt;&lt; portNumber &lt;&lt; <span class="stringliteral">") is invalid."</span>;
+00243 errorString_ = ost.str();
+00244 error( RtError::INVALID_PARAMETER );
+00245 }
+00246 portRef = MIDIGetDestination( portNumber );
+00247 }
+00248
+00249 MIDIObjectGetStringProperty( portRef, kMIDIPropertyName, &amp;nameRef );
+00250 CFStringGetCString( nameRef, name, <span class="keyword">sizeof</span>(name), 0);
+00251 CFRelease( nameRef );
+00252 std::string stringName = name;
+00253 <span class="keywordflow">return</span> stringName;
+00254 }
+00255
+<a name="l00256"></a><a class="code" href="classRtMidi.html#a7">00256</a> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a7">RtMidi :: setInputCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData)
+00257 {
+00258 callbackInfo_.userCallback = (<span class="keywordtype">void</span> *) callback;
+00259 callbackInfo_.userData = userData;
+00260 callbackInfo_.usingCallback = <span class="keyword">true</span>;
+00261 }
+00262
+00263 <span class="keyword">const</span> RtMidi::MidiMessage* <a class="code" href="classRtMidi.html#a10">RtMidi :: getMessage</a>( <span class="keywordtype">void</span> )
+00264 {
+00265 currentMessage_.bytes.clear();
+00266 <span class="keywordflow">if</span> ( !connected_ ) {
+00267 errorString_ = <span class="stringliteral">"RtMidi::getNextMessage: a port is not open!"</span>;
+00268 error( RtError::WARNING );
+00269 <span class="keywordflow">return</span> &amp;currentMessage_;
+00270 }
+00271
+00272 <span class="keywordflow">if</span> ( !isInputPort_ ) {
+00273 errorString_ = <span class="stringliteral">"RtMidi::getNextMessage: this is not an input port!"</span>;
+00274 error( RtError::WARNING );
+00275 <span class="keywordflow">return</span> &amp;currentMessage_;
+00276 }
+00277
+00278 <span class="keywordflow">if</span> ( callbackInfo_.usingCallback ) {
+00279 errorString_ = <span class="stringliteral">"RtMidi::getNextMessage: a user callback is currently set for this port."</span>;
+00280 error( RtError::WARNING );
+00281 <span class="keywordflow">return</span> &amp;currentMessage_;
+00282 }
+00283
+00284 <span class="keywordflow">if</span> ( readIndex_ == callbackInfo_.writeIndex ) <span class="keywordflow">return</span> &amp;currentMessage_;
+00285
+00286 currentMessage_ = callbackInfo_.buffer[readIndex_++];
+00287 <span class="keywordflow">if</span> ( readIndex_ &gt;= nMessages ) readIndex_ = 0;
+00288
+00289 <span class="keywordflow">return</span> &amp;currentMessage_;
+00290 }
+00291
+00292 <span class="keywordtype">bool</span> <a class="code" href="classRtMidi.html#a11">RtMidi :: sendMessage</a>( <span class="keyword">const</span> MidiMessage *message )
+00293 {
+00294 <span class="keywordflow">if</span> ( !connected_ ) {
+00295 errorString_ = <span class="stringliteral">"RtMidi::sendMessage: a port is not open!"</span>;
+00296 error( RtError::WARNING );
+00297 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00298 }
+00299
+00300 <span class="keywordflow">if</span> ( isInputPort_ ) {
+00301 errorString_ = <span class="stringliteral">"RtMidi::sendMessage: this is not an output port!"</span>;
+00302 error( RtError::WARNING );
+00303 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00304 }
+00305
+00306 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes = message-&gt;bytes.size();
+00307 <span class="comment">// Pad the buffer for extra (unknown) structure data.</span>
+00308 Byte buffer[nBytes+32];
+00309 MIDIPacketList *pktlist = (MIDIPacketList *) buffer;
+00310 MIDIPacket *curPacket = MIDIPacketListInit( pktlist );
+00311
+00312 MIDITimeStamp timeStamp = 0;
+00313 <span class="comment">// If a non-zero delta or absolute time, convert to CoreMIDI's host time.</span>
+00314 <span class="keywordflow">if</span> ( message-&gt;timeStamp != 0.0 ) {
+00315 <span class="keywordflow">if</span> ( callbackInfo_.doDeltaTime ) {
+00316 timeStamp = AudioConvertHostTimeToNanos( AudioGetCurrentHostTime() );
+00317 timeStamp += (UInt64) (message-&gt;timeStamp * 1000000000.0);
+00318 timeStamp = AudioConvertNanosToHostTime( timeStamp );
+00319 }
+00320 <span class="keywordflow">else</span> {
+00321 timeval tvTime;
+00322 <span class="keywordtype">double</span> time;
+00323 <span class="keywordflow">if</span> ( gettimeofday( &amp;tvTime, NULL ) != 0 ) {
+00324 errorString_ = <span class="stringliteral">"RtMidi::sendMessage: error calculating time stamp."</span>;
+00325 error( RtError::WARNING );
+00326 }
+00327 <span class="keywordflow">else</span> {
+00328 time = (double) tvTime.tv_sec;
+00329 time += (double) (tvTime.tv_usec * 0.000001);
+00330 time = message-&gt;timeStamp - time;
+00331 <span class="keywordflow">if</span> ( time &gt; 0.0 ) {
+00332 timeStamp = AudioConvertHostTimeToNanos( AudioGetCurrentHostTime() );
+00333 timeStamp += (UInt64) (time * 1000000000.0);
+00334 timeStamp = AudioConvertNanosToHostTime( timeStamp );
+00335 }
+00336 }
+00337 }
+00338 }
+00339 curPacket = MIDIPacketListAdd( pktlist, <span class="keyword">sizeof</span>(buffer), curPacket, timeStamp, nBytes, &amp;message-&gt;bytes[0]);
+00340
+00341 OSStatus result = MIDISend( port_, destinationId_, pktlist );
+00342 <span class="keywordflow">if</span> ( result != noErr ) {
+00343 errorString_ = <span class="stringliteral">"RtMidi::sendMessage: error sending MIDI message."</span>;
+00344 error( RtError::WARNING );
+00345 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00346 }
+00347
+00348 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00349 }
+00350
+00351 <span class="keywordtype">void</span> RtMidi :: error( RtError::Type type )
+00352 {
+00353 <span class="keywordflow">if</span> (type == RtError::WARNING) {
+00354 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00355 }
+00356 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == RtError::DEBUG_WARNING) {
+00357 <span class="preprocessor">#if defined(__RTMIDI_DEBUG__)</span>
+00358 <span class="preprocessor"></span> std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00359 <span class="preprocessor">#endif</span>
+00360 <span class="preprocessor"></span> }
+00361 <span class="keywordflow">else</span> {
+00362 std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; errorString_ &lt;&lt; <span class="stringliteral">"\n\n"</span>;
+00363 <span class="keywordflow">throw</span> <a class="code" href="classRtError.html">RtError</a>( errorString_, type );
+00364 }
+00365 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/oldRtMidi_8h-source.html b/doxygen/html/oldRtMidi_8h-source.html
new file mode 100755
index 0000000..26ea396
--- /dev/null
+++ b/doxygen/html/oldRtMidi_8h-source.html
@@ -0,0 +1,163 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>oldRtMidi.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
+00011 <span class="comment">/**********************************************************************/</span>
+00012
+00013 <span class="preprocessor">#ifndef RTMIDI_H</span>
+00014 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
+00015 <span class="preprocessor"></span>
+00016 <span class="preprocessor">#include &lt;vector&gt;</span>
+00017 <span class="preprocessor">#include &lt;string&gt;</span>
+00018 <span class="preprocessor">#include "RtError.h"</span>
+00019
+00020 <span class="comment">// Operating system dependent thread functionality.</span>
+00021 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
+00022 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
+00023 <span class="preprocessor"> #include &lt;process.h&gt;</span>
+00024
+00025 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
+00026 <span class="keyword">typedef</span> CRITICAL_SECTION Mutex;
+00027
+00028 <span class="preprocessor">#else // Various unix flavors with pthread support.</span>
+00029 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;pthread.h&gt;</span>
+00030
+00031 <span class="keyword">typedef</span> pthread_t ThreadHandle;
+00032 <span class="keyword">typedef</span> pthread_mutex_t Mutex;
+00033
+00034 <span class="preprocessor">#endif</span>
+00035 <span class="preprocessor"></span>
+00036 <span class="comment">// OS-X CoreMIDI header files.</span>
+00037 <span class="preprocessor">#include &lt;CoreMIDI/CoreMIDI.h&gt;</span>
+00038 <span class="preprocessor">#include &lt;CoreAudio/HostTime.h&gt;</span>
+00039
+00040 <span class="comment">// Set the size of the circular MIDI input message buffer.</span>
+00041 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nMessages = 100;
+00042
+00043 <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
+00044 {
+00045 <span class="keyword">public</span>:
+00046
+00047 <span class="comment">// A MIDI message structure. Each message represents one and only</span>
+00048 <span class="comment">// one MIDI message. Given the variable length of the bytes member,</span>
+00049 <span class="comment">// this structure can contain sysex messages of arbitrary length.</span>
+00050 <span class="keyword">struct </span>MidiMessage {
+00051 std::vector&lt;unsigned char&gt; bytes;
+00052 <span class="keywordtype">double</span> timeStamp;
+00053
+00054 <span class="comment">// Default constructor.</span>
+00055 MidiMessage()
+00056 :bytes(3), timeStamp(0.0) {}
+00057 };
+00058
+00059 <span class="comment">// Defined MIDI port types.</span>
+00060 <span class="keyword">enum</span> <a class="code" href="classRtMidi.html#s8">PortType</a> { MIDI_INPUT, MIDI_OUTPUT };
+00061
+00062 <span class="comment">// Defined MIDI time stamp types. Times are saved in a</span>
+00063 <span class="comment">// double-precision floating-point variable. Delta time is in</span>
+00064 <span class="comment">// seconds (between events). Absolute time is in seconds since</span>
+00065 <span class="comment">// midnight (0 hour), January 1, 1970.</span>
+00066 <span class="keyword">enum</span> TimeType { DELTA_TIME, ABSOLUTE_TIME };
+00067
+00068 <span class="comment">// User callback function type definition.</span>
+00069 <span class="keyword">typedef</span> void (*RtMidiCallback)( MidiMessage *message, <span class="keywordtype">void</span> *userData);
+00070
+00071 <span class="comment">// Default constructor.</span>
+00072 <a class="code" href="classRtMidi.html#a0">RtMidi</a>( TimeType time = DELTA_TIME );
+00073
+00074 <span class="comment">// An overloaded constructor which can be used to open a MIDI port</span>
+00075 <span class="comment">// during instantiation. An exception is thrown if an error occurs</span>
+00076 <span class="comment">// while attempting to make the port connection.</span>
+00077 <a class="code" href="classRtMidi.html#a0">RtMidi</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0, TimeType time = DELTA_TIME );
+00078
+00079 <span class="comment">// The destructor closes any open MIDI connections.</span>
+00080 <a class="code" href="classRtMidi.html#a2">~RtMidi</a>();
+00081
+00082 <span class="comment">// Open a MIDI connection of the specified type. An optional port</span>
+00083 <span class="comment">// number greater than 0 can be specified. Otherwise, the default</span>
+00084 <span class="comment">// or first port found is opened. An exception is thrown if an</span>
+00085 <span class="comment">// error occurs while attempting to make the port connection.</span>
+00086 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a3">openPort</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
+00087
+00088 <span class="comment">// Close an open MIDI connection (if one exists).</span>
+00089 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a4">closePort</a>( <span class="keywordtype">void</span> );
+00090
+00091 <span class="comment">// Return the number of available MIDI ports of the specified type.</span>
+00092 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#a5">getPortCount</a>( PortType type );
+00093
+00094 <span class="comment">// Return a string identifier for the specified MIDI port type and number.</span>
+00095 std::string <a class="code" href="classRtMidi.html#a6">getPortName</a>( PortType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
+00096
+00097 <span class="comment">// Set a user-defined callback function for notification of Midi input.</span>
+00098 <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a7">setInputCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData);
+00099
+00100 <span class="comment">// Return a reference to a vector containing the next available</span>
+00101 <span class="comment">// incoming MIDI message. This function returns immediately whether</span>
+00102 <span class="comment">// a new message is available or not. A valid message is indicated</span>
+00103 <span class="comment">// by a non-zero vector size in the MidiMessage structure. An</span>
+00104 <span class="comment">// exception is thrown if an error occurs during message retrieval</span>
+00105 <span class="comment">// or an input connection was not previously established.</span>
+00106 <span class="keyword">const</span> RtMidi::MidiMessage *<a class="code" href="classRtMidi.html#a10">getMessage</a>( <span class="keywordtype">void</span> );
+00107
+00108 <span class="comment">// Send a single message out an open MIDI port. If the message time</span>
+00109 <span class="comment">// stamp is non-zero, the message will be scheduled for output</span>
+00110 <span class="comment">// accordingly. Otherwise, it will be output immediately. An</span>
+00111 <span class="comment">// exception is thrown if an error occurs during output or an output</span>
+00112 <span class="comment">// connection was not previously established.</span>
+00113 <span class="keywordtype">bool</span> <a class="code" href="classRtMidi.html#a11">sendMessage</a>( <span class="keyword">const</span> MidiMessage *message );
+00114
+00115 <span class="comment">// This public structure is used to pass private class data to the</span>
+00116 <span class="comment">// MIDI input callback function or thread.</span>
+00117 <span class="keyword">struct </span>RtMidiCallbackInfo {
+00118 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex;
+00119 <span class="keywordtype">bool</span> doDeltaTime;
+00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> lastTime;
+00121 MidiMessage buffer[nMessages];
+00122 Mutex mutex;
+00123 <span class="keywordtype">bool</span> usingCallback;
+00124 <span class="keywordtype">void</span> *userCallback;
+00125 <span class="keywordtype">void</span> *userData;
+00126
+00127 <span class="comment">// Default constructor.</span>
+00128 RtMidiCallbackInfo()
+00129 : writeIndex(0), doDeltaTime(true), lastTime(0),
+00130 usingCallback(false), userCallback(0), userData(0) {}
+00131 };
+00132
+00133 <span class="keyword">private</span>:
+00134
+00135 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
+00136 <span class="comment">// class. The behavior of this function can be modified to suit</span>
+00137 <span class="comment">// specific needs.</span>
+00138 <span class="keywordtype">void</span> error( RtError::Type type );
+00139
+00140 MidiMessage currentMessage_;
+00141 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
+00142 MIDIClientRef client_;
+00143 MIDIPortRef port_;
+00144 MIDIEndpointRef destinationId_;
+00145 RtMidiCallbackInfo callbackInfo_;
+00146 <span class="keywordtype">bool</span> connected_;
+00147 <span class="keywordtype">bool</span> isInputPort_;
+00148 std::string errorString_;
+00149
+00150 };
+00151
+00152 <span class="preprocessor">#endif</span>
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/doxygen/html/playsmf_8cpp-source.html b/doxygen/html/playsmf_8cpp-source.html
new file mode 100755
index 0000000..5db53c4
--- /dev/null
+++ b/doxygen/html/playsmf_8cpp-source.html
@@ -0,0 +1,117 @@
+<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>playsmf.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// playsmf.cpp</span>
+00002 <span class="comment">//</span>
+00003 <span class="comment">// Simple program to test the MidiFileIn class by reading and playing</span>
+00004 <span class="comment">// a single track from a given Standard MIDI file.</span>
+00005 <span class="comment">//</span>
+00006 <span class="comment">// by Gary Scavone, 2003.</span>
+00007 <span class="comment">//</span>
+00008 <span class="comment">// compile: g++ -Wall -o playsmf playsmf.cpp RtMidi.o MidiFileIn.cpp Stk.cpp -framework CoreMIDI -framework CoreFoundation -framework CoreAudio</span>
+00009
+00010 <span class="preprocessor">#include "MidiFileIn.h"</span>
+00011 <span class="preprocessor">#include "RtMidi.h"</span>
+00012 <span class="preprocessor">#include &lt;signal.h&gt;</span>
+00013 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
+00014
+00015 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
+00016 <span class="keyword">static</span> <span class="keywordtype">void</span> finish(<span class="keywordtype">int</span> ignore){ done = <span class="keyword">true</span>; }
+00017
+00018 <span class="keywordtype">void</span> usage(<span class="keywordtype">void</span>) {
+00019 <span class="comment">// Error function in case of incorrect command-line</span>
+00020 <span class="comment">// argument specifications.</span>
+00021 std::cout &lt;&lt; <span class="stringliteral">"\nusage: testmidi file track\n"</span>;
+00022 std::cout &lt;&lt; <span class="stringliteral">" where file = a standard MIDI file,\n"</span>;
+00023 std::cout &lt;&lt; <span class="stringliteral">" and track = the track to play (0 = 1st track).\n\n"</span>;
+00024 exit(0);
+00025 }
+00026
+00027 <span class="keywordtype">int</span> main( <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[] )
+00028 {
+00029 <span class="keywordflow">if</span> ( argc != 3 ) usage();
+00030
+00031 <a class="code" href="classRtMidiOut.html">RtMidiOut</a> midi;
+00032
+00033 <span class="keywordflow">if</span> ( midi.<a class="code" href="classRtMidiOut.html#a5">getPortCount</a>() &lt; 1 ) {
+00034 std::cout &lt;&lt; <span class="stringliteral">"\nThere are no MIDI output destinations available!\n\n"</span>;
+00035 exit(0);
+00036 }
+00037
+00038 <span class="keywordflow">try</span> {
+00039 midi.<a class="code" href="classRtMidiOut.html#a3">openPort</a>();
+00040 }
+00041 <span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html">RtError</a> &amp; ) {
+00042 <span class="comment">// You might want to do something more useful here.</span>
+00043 std::cout &lt;&lt; <span class="stringliteral">"\nAborting program!\n"</span>;
+00044 exit(0);
+00045 }
+00046
+00047 <span class="comment">// Install an interrupt handler function. Type "ctrl-c" to quit the</span>
+00048 <span class="comment">// program.</span>
+00049 (void) signal(SIGINT, finish);
+00050
+00051 <span class="keywordflow">try</span> {
+00052 <a class="code" href="classMidiFileIn.html">MidiFileIn</a> midiFile( argv[1] );
+00053
+00054 <span class="comment">// Print a little information about the file.</span>
+00055 std::cout &lt;&lt; <span class="stringliteral">"\nThe MIDI file ("</span> &lt;&lt; argv[1] &lt;&lt; <span class="stringliteral">") information:\n"</span>;
+00056 std::cout &lt;&lt; <span class="stringliteral">" - format = "</span> &lt;&lt; midiFile.<a class="code" href="classMidiFileIn.html#a2">getFileFormat</a>() &lt;&lt; <span class="stringliteral">"\n"</span>;
+00057 std::cout &lt;&lt; <span class="stringliteral">" - tracks = "</span> &lt;&lt; midiFile.<a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() &lt;&lt; <span class="stringliteral">"\n"</span>;
+00058 std::cout &lt;&lt; <span class="stringliteral">" - seconds / ticks = "</span> &lt;&lt; midiFile.<a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>() &lt;&lt; <span class="stringliteral">"\n"</span>;
+00059
+00060 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) atoi( argv[2] );
+00061 <span class="keywordflow">if</span> ( midiFile.<a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() &lt;= track ) {
+00062 std::cout &lt;&lt; <span class="stringliteral">"\nInvalid track number ... playing track 0.\n"</span>;
+00063 track = 0;
+00064 }
+00065
+00066 std::cout &lt;&lt; <span class="stringliteral">"\nPress &lt;enter&gt; to start reading/playing.\n"</span>;
+00067 <span class="keywordtype">char</span> input;
+00068 std::cin.get(input);
+00069
+00070 std::vector&lt;unsigned char&gt; event;
+00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks = midiFile.<a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( &amp;event, track );
+00072 <span class="keywordflow">while</span> ( !done &amp;&amp; event.size() ) {
+00073
+00074 <span class="comment">// Pause for the MIDI event delta time.</span>
+00075 <a class="code" href="classStk.html#d7">Stk::sleep</a>( (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) (ticks * midiFile.<a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>() * 1000 ) );
+00076
+00077 midi.<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;event );
+00078
+00079 <span class="comment">// Get a new event.</span>
+00080 ticks = midiFile.<a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( &amp;event, track );
+00081 }
+00082
+00083 <span class="comment">// Send a "reset" to the synthesizer.</span>
+00084 event.clear();
+00085 event.push_back( 0xff );
+00086 midi.<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &amp;event );
+00087 }
+00088 <span class="keywordflow">catch</span> ( <a class="code" href="classStkError.html">StkError</a> &amp; ) {
+00089 <span class="comment">// You might want to do something more useful here.</span>
+00090 std::cout &lt;&lt; <span class="stringliteral">"\nAborting program!\n"</span>;
+00091 midi.<a class="code" href="classRtMidiOut.html#a4">closePort</a>();
+00092 exit(0);
+00093 }
+00094
+00095 std::cout &lt;&lt; <span class="stringliteral">"Goodbye!\n"</span>;
+00096 <span class="keywordflow">return</span> 0;
+00097 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>