summaryrefslogtreecommitdiff
path: root/Build/source/utils
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils')
-rw-r--r--Build/source/utils/Makefile.in1
-rw-r--r--Build/source/utils/README3
-rwxr-xr-xBuild/source/utils/configure32
-rw-r--r--Build/source/utils/mtx/ChangeLog11
-rw-r--r--Build/source/utils/mtx/Makefile.am63
-rw-r--r--Build/source/utils/mtx/Makefile.in959
-rw-r--r--Build/source/utils/mtx/ac/withenable.ac7
-rw-r--r--Build/source/utils/mtx/aclocal.m41012
-rwxr-xr-xBuild/source/utils/mtx/configure5908
-rw-r--r--Build/source/utils/mtx/configure.ac48
l---------Build/source/utils/mtx/m-mtx1
-rw-r--r--Build/source/utils/mtx/malloc16
-rw-r--r--Build/source/utils/mtx/mtx-0.60d-PATCHES/TL-Changes12
l---------Build/source/utils/mtx/mtx-0.60d.tar.gz1
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/AUTHORS1
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/Bugs5
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/COPYING340
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/ChangeLog180
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/INSTALL365
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/Makefile.am13
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/Makefile.orig40
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/NEWS5
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/README164
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/README.060d8
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/analyze.c333
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/analyze.h33
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/analyze.pas181
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/cfuncs.c89
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/cfuncs.h72
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/config.h90
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/config.h.in89
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/configure.ac33
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/control.c274
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/control.h52
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/control.pas198
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/files.c379
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/files.h38
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/files.pas196
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/globals.c348
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/globals.h154
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/globals.pas247
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/COPYING339
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/ChangeLog390
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/Makefile.am2
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/README31
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/p2c.h533
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/libp2c/p2clib.c1117
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/lyrics.c869
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/lyrics.h37
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/lyrics.pas455
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtx.c505
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtx.h30
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtx.pas280
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtxline.c844
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtxline.h83
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/mtxline.pas447
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/multfile.c235
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/multfile.h87
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/multfile.pas196
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/notes.c547
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/notes.h34
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/notes.pas280
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/preamble.c1134
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/preamble.h42
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/preamble.pas624
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/prepmx.c887
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/prepmx.pas444
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/status.c649
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/status.h57
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/status.pas348
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/strings.h34
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/uptext.c277
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/uptext.h25
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/uptext.pas119
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/utility.c393
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/utility.h41
-rw-r--r--Build/source/utils/mtx/mtx-0.60d/utility.pas194
-rw-r--r--Build/source/utils/mtx/version.ac11
78 files changed, 24621 insertions, 0 deletions
diff --git a/Build/source/utils/Makefile.in b/Build/source/utils/Makefile.in
index 6f22260a2b8..d5622fbb177 100644
--- a/Build/source/utils/Makefile.in
+++ b/Build/source/utils/Makefile.in
@@ -87,6 +87,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-common.m4 \
$(top_srcdir)/../m4/kpse-zziplib-flags.m4 \
$(top_srcdir)/../utils/biber/ac/withenable.ac \
$(top_srcdir)/../utils/chktex/ac/withenable.ac \
+ $(top_srcdir)/../utils/mtx/ac/withenable.ac \
$(top_srcdir)/../utils/pmx/ac/withenable.ac \
$(top_srcdir)/../utils/ps2eps/ac/withenable.ac \
$(top_srcdir)/../utils/psutils/ac/withenable.ac \
diff --git a/Build/source/utils/README b/Build/source/utils/README
index 8e36a4d78c9..f07107b949e 100644
--- a/Build/source/utils/README
+++ b/Build/source/utils/README
@@ -13,6 +13,9 @@ chktex 1.6.6 - checked 10apr12
http://mirror.ctan.org/support/chktex/ for pdf, otherwise same as
http://download.savannah.gnu.org/releases/chktex/
+mtx 0.60d - checked 16apr12
+ http://mirror.ctan.org/support/m-tx/
+
pmx 2.6.17 - checked 28mar12
http://mirror.ctan.org/support/pmx/
diff --git a/Build/source/utils/configure b/Build/source/utils/configure
index e0e02498b18..57d3c1aa167 100755
--- a/Build/source/utils/configure
+++ b/Build/source/utils/configure
@@ -673,6 +673,7 @@ enable_cxx_runtime_hack
enable_libtool_hack
enable_biber
enable_chktex
+enable_mtx
enable_pmx
enable_ps2eps
enable_psutils
@@ -823,6 +824,7 @@ LIBS
CPPFLAGS'
ac_subdirs_all='biber
chktex
+mtx
pmx
ps2eps
psutils
@@ -1461,6 +1463,7 @@ Optional Features:
--enable-libtool-hack ignore libtool dependency_libs
--disable-biber do not build the biber package
--disable-chktex do not build the chktex package
+ --disable-mtx do not build the mtx package
--disable-pmx do not build the pmx package
--disable-ps2eps do not build the ps2eps package
--disable-psutils do not build the psutils package
@@ -3220,6 +3223,25 @@ $as_echo "$as_me: Assuming \`--enable-chktex=$enable_chktex'" >&6;}
esac
+## utils/mtx/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/mtx/
+## configure options and TL libraries required for mtx
+# Check whether --enable-mtx was given.
+if test "${enable_mtx+set}" = set; then :
+ enableval=$enable_mtx;
+fi
+case $enable_mtx in #(
+ yes|no) :
+ ;; #(
+ *) :
+
+ enable_mtx=$enable_all_pkgs
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Assuming \`--enable-mtx=$enable_mtx'" >&5
+$as_echo "$as_me: Assuming \`--enable-mtx=$enable_mtx'" >&6;}
+ ac_configure_args="$ac_configure_args '--enable-mtx=$enable_mtx'"
+ ;;
+esac
+
+
## utils/pmx/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/pmx/
## configure options and TL libraries required for pmx
# Check whether --enable-pmx was given.
@@ -5831,6 +5853,16 @@ if test -x $srcdir/chktex/configure; then
fi
+if test -x $srcdir/mtx/configure; then
+ test "x$enable_mtx" = xno || SUBUTILS="$SUBUTILS mtx"
+ DIST_SUBUTILS="$DIST_SUBUTILS mtx"
+ if false; then
+ subdirs="$subdirs mtx"
+
+ fi
+fi
+
+
if test -x $srcdir/pmx/configure; then
test "x$enable_pmx" = xno || SUBUTILS="$SUBUTILS pmx"
DIST_SUBUTILS="$DIST_SUBUTILS pmx"
diff --git a/Build/source/utils/mtx/ChangeLog b/Build/source/utils/mtx/ChangeLog
new file mode 100644
index 00000000000..310be8a5432
--- /dev/null
+++ b/Build/source/utils/mtx/ChangeLog
@@ -0,0 +1,11 @@
+2012-04-16 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Adapt mtx-0.60d to the TeX Live build system.
+
+ * configure.ac: Do not use AC_CONFIG_HEADERS because config.h
+ is not included by the sources.
+ Do not use AC_FUNC_MALLOC because this might redefine malloc()
+ as rpl_malloc().
+
+Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+You may freely use, modify and/or distribute this file.
diff --git a/Build/source/utils/mtx/Makefile.am b/Build/source/utils/mtx/Makefile.am
new file mode 100644
index 00000000000..287dd4f31fa
--- /dev/null
+++ b/Build/source/utils/mtx/Makefile.am
@@ -0,0 +1,63 @@
+## Makefile.am for the TeX Live subdirectory utils/mtx/
+##
+## Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+## You may freely use, modify and/or distribute this file.
+##
+ACLOCAL_AMFLAGS = -I ../../m4
+
+## We want to re-distribute the whole original mtx source tree.
+EXTRA_DIST = $(MTX_TREE)
+## Patches applied to the original source tree
+EXTRA_DIST += $(MTX_TREE)-PATCHES
+
+# in case of an SVN repository
+dist-hook:
+ rm -rf `find $(distdir) -name .svn`
+
+INCLUDES = -I$(srcdir)/$(MTX_TREE)/libp2c
+AM_CFLAGS = #$(WARNING_CFLAGS)
+
+bin_PROGRAMS = prepmx
+
+## prepmx_SOURCES = config.h
+
+prepmx_SOURCES = \
+ $(MTX_TREE)/analyze.c \
+ $(MTX_TREE)/analyze.h \
+ $(MTX_TREE)/cfuncs.c \
+ $(MTX_TREE)/cfuncs.h \
+ $(MTX_TREE)/control.c \
+ $(MTX_TREE)/control.h \
+ $(MTX_TREE)/files.c \
+ $(MTX_TREE)/files.h \
+ $(MTX_TREE)/globals.c \
+ $(MTX_TREE)/globals.h \
+ $(MTX_TREE)/lyrics.c \
+ $(MTX_TREE)/lyrics.h \
+ $(MTX_TREE)/mtx.c \
+ $(MTX_TREE)/mtx.h \
+ $(MTX_TREE)/mtxline.c \
+ $(MTX_TREE)/mtxline.h \
+ $(MTX_TREE)/multfile.c \
+ $(MTX_TREE)/multfile.h \
+ $(MTX_TREE)/notes.c \
+ $(MTX_TREE)/notes.h \
+ $(MTX_TREE)/preamble.c \
+ $(MTX_TREE)/preamble.h \
+ $(MTX_TREE)/prepmx.c \
+ $(MTX_TREE)/status.c \
+ $(MTX_TREE)/status.h \
+ $(MTX_TREE)/strings.h \
+ $(MTX_TREE)/uptext.c \
+ $(MTX_TREE)/uptext.h \
+ $(MTX_TREE)/utility.c \
+ $(MTX_TREE)/utility.h
+
+LDADD = libp2c.a
+
+noinst_LIBRARIES = libp2c.a
+
+libp2c_a_SOURCES = \
+ $(MTX_TREE)/libp2c/p2c.h \
+ $(MTX_TREE)/libp2c/p2clib.c
+
diff --git a/Build/source/utils/mtx/Makefile.in b/Build/source/utils/mtx/Makefile.in
new file mode 100644
index 00000000000..f6fbd6226fa
--- /dev/null
+++ b/Build/source/utils/mtx/Makefile.in
@@ -0,0 +1,959 @@
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = prepmx$(EXEEXT)
+subdir = .
+DIST_COMMON = $(am__configure_deps) $(srcdir)/../../build-aux/depcomp \
+ $(srcdir)/../../build-aux/install-sh \
+ $(srcdir)/../../build-aux/missing $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/configure \
+ ../../build-aux/config.guess ../../build-aux/config.sub \
+ ../../build-aux/depcomp ../../build-aux/install-sh \
+ ../../build-aux/ltmain.sh ../../build-aux/missing \
+ ../../build-aux/texinfo.tex ../../build-aux/ylwrap ChangeLog
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../../m4/kpse-warnings.m4 \
+ $(top_srcdir)/version.ac $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libp2c_a_AR = $(AR) $(ARFLAGS)
+libp2c_a_LIBADD =
+am_libp2c_a_OBJECTS = p2clib.$(OBJEXT)
+libp2c_a_OBJECTS = $(am_libp2c_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_prepmx_OBJECTS = analyze.$(OBJEXT) cfuncs.$(OBJEXT) \
+ control.$(OBJEXT) files.$(OBJEXT) globals.$(OBJEXT) \
+ lyrics.$(OBJEXT) mtx.$(OBJEXT) mtxline.$(OBJEXT) \
+ multfile.$(OBJEXT) notes.$(OBJEXT) preamble.$(OBJEXT) \
+ prepmx.$(OBJEXT) status.$(OBJEXT) uptext.$(OBJEXT) \
+ utility.$(OBJEXT)
+prepmx_OBJECTS = $(am_prepmx_OBJECTS)
+prepmx_LDADD = $(LDADD)
+prepmx_DEPENDENCIES = libp2c.a
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libp2c_a_SOURCES) $(prepmx_SOURCES)
+DIST_SOURCES = $(libp2c_a_SOURCES) $(prepmx_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MTX_TREE = @MTX_TREE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I ../../m4
+EXTRA_DIST = $(MTX_TREE) $(MTX_TREE)-PATCHES
+INCLUDES = -I$(srcdir)/$(MTX_TREE)/libp2c
+AM_CFLAGS = #$(WARNING_CFLAGS)
+prepmx_SOURCES = \
+ $(MTX_TREE)/analyze.c \
+ $(MTX_TREE)/analyze.h \
+ $(MTX_TREE)/cfuncs.c \
+ $(MTX_TREE)/cfuncs.h \
+ $(MTX_TREE)/control.c \
+ $(MTX_TREE)/control.h \
+ $(MTX_TREE)/files.c \
+ $(MTX_TREE)/files.h \
+ $(MTX_TREE)/globals.c \
+ $(MTX_TREE)/globals.h \
+ $(MTX_TREE)/lyrics.c \
+ $(MTX_TREE)/lyrics.h \
+ $(MTX_TREE)/mtx.c \
+ $(MTX_TREE)/mtx.h \
+ $(MTX_TREE)/mtxline.c \
+ $(MTX_TREE)/mtxline.h \
+ $(MTX_TREE)/multfile.c \
+ $(MTX_TREE)/multfile.h \
+ $(MTX_TREE)/notes.c \
+ $(MTX_TREE)/notes.h \
+ $(MTX_TREE)/preamble.c \
+ $(MTX_TREE)/preamble.h \
+ $(MTX_TREE)/prepmx.c \
+ $(MTX_TREE)/status.c \
+ $(MTX_TREE)/status.h \
+ $(MTX_TREE)/strings.h \
+ $(MTX_TREE)/uptext.c \
+ $(MTX_TREE)/uptext.h \
+ $(MTX_TREE)/utility.c \
+ $(MTX_TREE)/utility.h
+
+LDADD = libp2c.a
+noinst_LIBRARIES = libp2c.a
+libp2c_a_SOURCES = \
+ $(MTX_TREE)/libp2c/p2c.h \
+ $(MTX_TREE)/libp2c/p2clib.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libp2c.a: $(libp2c_a_OBJECTS) $(libp2c_a_DEPENDENCIES) $(EXTRA_libp2c_a_DEPENDENCIES)
+ -rm -f libp2c.a
+ $(libp2c_a_AR) libp2c.a $(libp2c_a_OBJECTS) $(libp2c_a_LIBADD)
+ $(RANLIB) libp2c.a
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+prepmx$(EXEEXT): $(prepmx_OBJECTS) $(prepmx_DEPENDENCIES) $(EXTRA_prepmx_DEPENDENCIES)
+ @rm -f prepmx$(EXEEXT)
+ $(LINK) $(prepmx_OBJECTS) $(prepmx_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/analyze.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfuncs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/files.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lyrics.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtxline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p2clib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preamble.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepmx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptext.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utility.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+p2clib.o: $(MTX_TREE)/libp2c/p2clib.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT p2clib.o -MD -MP -MF $(DEPDIR)/p2clib.Tpo -c -o p2clib.o `test -f '$(MTX_TREE)/libp2c/p2clib.c' || echo '$(srcdir)/'`$(MTX_TREE)/libp2c/p2clib.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/p2clib.Tpo $(DEPDIR)/p2clib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/libp2c/p2clib.c' object='p2clib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o p2clib.o `test -f '$(MTX_TREE)/libp2c/p2clib.c' || echo '$(srcdir)/'`$(MTX_TREE)/libp2c/p2clib.c
+
+p2clib.obj: $(MTX_TREE)/libp2c/p2clib.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT p2clib.obj -MD -MP -MF $(DEPDIR)/p2clib.Tpo -c -o p2clib.obj `if test -f '$(MTX_TREE)/libp2c/p2clib.c'; then $(CYGPATH_W) '$(MTX_TREE)/libp2c/p2clib.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/libp2c/p2clib.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/p2clib.Tpo $(DEPDIR)/p2clib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/libp2c/p2clib.c' object='p2clib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o p2clib.obj `if test -f '$(MTX_TREE)/libp2c/p2clib.c'; then $(CYGPATH_W) '$(MTX_TREE)/libp2c/p2clib.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/libp2c/p2clib.c'; fi`
+
+analyze.o: $(MTX_TREE)/analyze.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT analyze.o -MD -MP -MF $(DEPDIR)/analyze.Tpo -c -o analyze.o `test -f '$(MTX_TREE)/analyze.c' || echo '$(srcdir)/'`$(MTX_TREE)/analyze.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/analyze.Tpo $(DEPDIR)/analyze.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/analyze.c' object='analyze.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o analyze.o `test -f '$(MTX_TREE)/analyze.c' || echo '$(srcdir)/'`$(MTX_TREE)/analyze.c
+
+analyze.obj: $(MTX_TREE)/analyze.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT analyze.obj -MD -MP -MF $(DEPDIR)/analyze.Tpo -c -o analyze.obj `if test -f '$(MTX_TREE)/analyze.c'; then $(CYGPATH_W) '$(MTX_TREE)/analyze.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/analyze.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/analyze.Tpo $(DEPDIR)/analyze.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/analyze.c' object='analyze.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o analyze.obj `if test -f '$(MTX_TREE)/analyze.c'; then $(CYGPATH_W) '$(MTX_TREE)/analyze.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/analyze.c'; fi`
+
+cfuncs.o: $(MTX_TREE)/cfuncs.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cfuncs.o -MD -MP -MF $(DEPDIR)/cfuncs.Tpo -c -o cfuncs.o `test -f '$(MTX_TREE)/cfuncs.c' || echo '$(srcdir)/'`$(MTX_TREE)/cfuncs.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cfuncs.Tpo $(DEPDIR)/cfuncs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/cfuncs.c' object='cfuncs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfuncs.o `test -f '$(MTX_TREE)/cfuncs.c' || echo '$(srcdir)/'`$(MTX_TREE)/cfuncs.c
+
+cfuncs.obj: $(MTX_TREE)/cfuncs.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cfuncs.obj -MD -MP -MF $(DEPDIR)/cfuncs.Tpo -c -o cfuncs.obj `if test -f '$(MTX_TREE)/cfuncs.c'; then $(CYGPATH_W) '$(MTX_TREE)/cfuncs.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/cfuncs.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cfuncs.Tpo $(DEPDIR)/cfuncs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/cfuncs.c' object='cfuncs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfuncs.obj `if test -f '$(MTX_TREE)/cfuncs.c'; then $(CYGPATH_W) '$(MTX_TREE)/cfuncs.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/cfuncs.c'; fi`
+
+control.o: $(MTX_TREE)/control.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT control.o -MD -MP -MF $(DEPDIR)/control.Tpo -c -o control.o `test -f '$(MTX_TREE)/control.c' || echo '$(srcdir)/'`$(MTX_TREE)/control.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/control.Tpo $(DEPDIR)/control.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/control.c' object='control.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o control.o `test -f '$(MTX_TREE)/control.c' || echo '$(srcdir)/'`$(MTX_TREE)/control.c
+
+control.obj: $(MTX_TREE)/control.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT control.obj -MD -MP -MF $(DEPDIR)/control.Tpo -c -o control.obj `if test -f '$(MTX_TREE)/control.c'; then $(CYGPATH_W) '$(MTX_TREE)/control.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/control.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/control.Tpo $(DEPDIR)/control.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/control.c' object='control.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o control.obj `if test -f '$(MTX_TREE)/control.c'; then $(CYGPATH_W) '$(MTX_TREE)/control.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/control.c'; fi`
+
+files.o: $(MTX_TREE)/files.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT files.o -MD -MP -MF $(DEPDIR)/files.Tpo -c -o files.o `test -f '$(MTX_TREE)/files.c' || echo '$(srcdir)/'`$(MTX_TREE)/files.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/files.Tpo $(DEPDIR)/files.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/files.c' object='files.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o files.o `test -f '$(MTX_TREE)/files.c' || echo '$(srcdir)/'`$(MTX_TREE)/files.c
+
+files.obj: $(MTX_TREE)/files.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT files.obj -MD -MP -MF $(DEPDIR)/files.Tpo -c -o files.obj `if test -f '$(MTX_TREE)/files.c'; then $(CYGPATH_W) '$(MTX_TREE)/files.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/files.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/files.Tpo $(DEPDIR)/files.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/files.c' object='files.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o files.obj `if test -f '$(MTX_TREE)/files.c'; then $(CYGPATH_W) '$(MTX_TREE)/files.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/files.c'; fi`
+
+globals.o: $(MTX_TREE)/globals.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT globals.o -MD -MP -MF $(DEPDIR)/globals.Tpo -c -o globals.o `test -f '$(MTX_TREE)/globals.c' || echo '$(srcdir)/'`$(MTX_TREE)/globals.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/globals.Tpo $(DEPDIR)/globals.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/globals.c' object='globals.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o globals.o `test -f '$(MTX_TREE)/globals.c' || echo '$(srcdir)/'`$(MTX_TREE)/globals.c
+
+globals.obj: $(MTX_TREE)/globals.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT globals.obj -MD -MP -MF $(DEPDIR)/globals.Tpo -c -o globals.obj `if test -f '$(MTX_TREE)/globals.c'; then $(CYGPATH_W) '$(MTX_TREE)/globals.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/globals.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/globals.Tpo $(DEPDIR)/globals.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/globals.c' object='globals.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o globals.obj `if test -f '$(MTX_TREE)/globals.c'; then $(CYGPATH_W) '$(MTX_TREE)/globals.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/globals.c'; fi`
+
+lyrics.o: $(MTX_TREE)/lyrics.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lyrics.o -MD -MP -MF $(DEPDIR)/lyrics.Tpo -c -o lyrics.o `test -f '$(MTX_TREE)/lyrics.c' || echo '$(srcdir)/'`$(MTX_TREE)/lyrics.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lyrics.Tpo $(DEPDIR)/lyrics.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/lyrics.c' object='lyrics.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lyrics.o `test -f '$(MTX_TREE)/lyrics.c' || echo '$(srcdir)/'`$(MTX_TREE)/lyrics.c
+
+lyrics.obj: $(MTX_TREE)/lyrics.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lyrics.obj -MD -MP -MF $(DEPDIR)/lyrics.Tpo -c -o lyrics.obj `if test -f '$(MTX_TREE)/lyrics.c'; then $(CYGPATH_W) '$(MTX_TREE)/lyrics.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/lyrics.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lyrics.Tpo $(DEPDIR)/lyrics.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/lyrics.c' object='lyrics.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lyrics.obj `if test -f '$(MTX_TREE)/lyrics.c'; then $(CYGPATH_W) '$(MTX_TREE)/lyrics.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/lyrics.c'; fi`
+
+mtx.o: $(MTX_TREE)/mtx.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtx.o -MD -MP -MF $(DEPDIR)/mtx.Tpo -c -o mtx.o `test -f '$(MTX_TREE)/mtx.c' || echo '$(srcdir)/'`$(MTX_TREE)/mtx.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mtx.Tpo $(DEPDIR)/mtx.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/mtx.c' object='mtx.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtx.o `test -f '$(MTX_TREE)/mtx.c' || echo '$(srcdir)/'`$(MTX_TREE)/mtx.c
+
+mtx.obj: $(MTX_TREE)/mtx.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtx.obj -MD -MP -MF $(DEPDIR)/mtx.Tpo -c -o mtx.obj `if test -f '$(MTX_TREE)/mtx.c'; then $(CYGPATH_W) '$(MTX_TREE)/mtx.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/mtx.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mtx.Tpo $(DEPDIR)/mtx.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/mtx.c' object='mtx.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtx.obj `if test -f '$(MTX_TREE)/mtx.c'; then $(CYGPATH_W) '$(MTX_TREE)/mtx.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/mtx.c'; fi`
+
+mtxline.o: $(MTX_TREE)/mtxline.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtxline.o -MD -MP -MF $(DEPDIR)/mtxline.Tpo -c -o mtxline.o `test -f '$(MTX_TREE)/mtxline.c' || echo '$(srcdir)/'`$(MTX_TREE)/mtxline.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mtxline.Tpo $(DEPDIR)/mtxline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/mtxline.c' object='mtxline.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtxline.o `test -f '$(MTX_TREE)/mtxline.c' || echo '$(srcdir)/'`$(MTX_TREE)/mtxline.c
+
+mtxline.obj: $(MTX_TREE)/mtxline.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mtxline.obj -MD -MP -MF $(DEPDIR)/mtxline.Tpo -c -o mtxline.obj `if test -f '$(MTX_TREE)/mtxline.c'; then $(CYGPATH_W) '$(MTX_TREE)/mtxline.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/mtxline.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mtxline.Tpo $(DEPDIR)/mtxline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/mtxline.c' object='mtxline.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mtxline.obj `if test -f '$(MTX_TREE)/mtxline.c'; then $(CYGPATH_W) '$(MTX_TREE)/mtxline.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/mtxline.c'; fi`
+
+multfile.o: $(MTX_TREE)/multfile.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT multfile.o -MD -MP -MF $(DEPDIR)/multfile.Tpo -c -o multfile.o `test -f '$(MTX_TREE)/multfile.c' || echo '$(srcdir)/'`$(MTX_TREE)/multfile.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/multfile.Tpo $(DEPDIR)/multfile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/multfile.c' object='multfile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o multfile.o `test -f '$(MTX_TREE)/multfile.c' || echo '$(srcdir)/'`$(MTX_TREE)/multfile.c
+
+multfile.obj: $(MTX_TREE)/multfile.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT multfile.obj -MD -MP -MF $(DEPDIR)/multfile.Tpo -c -o multfile.obj `if test -f '$(MTX_TREE)/multfile.c'; then $(CYGPATH_W) '$(MTX_TREE)/multfile.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/multfile.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/multfile.Tpo $(DEPDIR)/multfile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/multfile.c' object='multfile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o multfile.obj `if test -f '$(MTX_TREE)/multfile.c'; then $(CYGPATH_W) '$(MTX_TREE)/multfile.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/multfile.c'; fi`
+
+notes.o: $(MTX_TREE)/notes.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT notes.o -MD -MP -MF $(DEPDIR)/notes.Tpo -c -o notes.o `test -f '$(MTX_TREE)/notes.c' || echo '$(srcdir)/'`$(MTX_TREE)/notes.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/notes.Tpo $(DEPDIR)/notes.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/notes.c' object='notes.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o notes.o `test -f '$(MTX_TREE)/notes.c' || echo '$(srcdir)/'`$(MTX_TREE)/notes.c
+
+notes.obj: $(MTX_TREE)/notes.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT notes.obj -MD -MP -MF $(DEPDIR)/notes.Tpo -c -o notes.obj `if test -f '$(MTX_TREE)/notes.c'; then $(CYGPATH_W) '$(MTX_TREE)/notes.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/notes.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/notes.Tpo $(DEPDIR)/notes.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/notes.c' object='notes.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o notes.obj `if test -f '$(MTX_TREE)/notes.c'; then $(CYGPATH_W) '$(MTX_TREE)/notes.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/notes.c'; fi`
+
+preamble.o: $(MTX_TREE)/preamble.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT preamble.o -MD -MP -MF $(DEPDIR)/preamble.Tpo -c -o preamble.o `test -f '$(MTX_TREE)/preamble.c' || echo '$(srcdir)/'`$(MTX_TREE)/preamble.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/preamble.Tpo $(DEPDIR)/preamble.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/preamble.c' object='preamble.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o preamble.o `test -f '$(MTX_TREE)/preamble.c' || echo '$(srcdir)/'`$(MTX_TREE)/preamble.c
+
+preamble.obj: $(MTX_TREE)/preamble.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT preamble.obj -MD -MP -MF $(DEPDIR)/preamble.Tpo -c -o preamble.obj `if test -f '$(MTX_TREE)/preamble.c'; then $(CYGPATH_W) '$(MTX_TREE)/preamble.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/preamble.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/preamble.Tpo $(DEPDIR)/preamble.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/preamble.c' object='preamble.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o preamble.obj `if test -f '$(MTX_TREE)/preamble.c'; then $(CYGPATH_W) '$(MTX_TREE)/preamble.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/preamble.c'; fi`
+
+prepmx.o: $(MTX_TREE)/prepmx.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT prepmx.o -MD -MP -MF $(DEPDIR)/prepmx.Tpo -c -o prepmx.o `test -f '$(MTX_TREE)/prepmx.c' || echo '$(srcdir)/'`$(MTX_TREE)/prepmx.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/prepmx.Tpo $(DEPDIR)/prepmx.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/prepmx.c' object='prepmx.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o prepmx.o `test -f '$(MTX_TREE)/prepmx.c' || echo '$(srcdir)/'`$(MTX_TREE)/prepmx.c
+
+prepmx.obj: $(MTX_TREE)/prepmx.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT prepmx.obj -MD -MP -MF $(DEPDIR)/prepmx.Tpo -c -o prepmx.obj `if test -f '$(MTX_TREE)/prepmx.c'; then $(CYGPATH_W) '$(MTX_TREE)/prepmx.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/prepmx.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/prepmx.Tpo $(DEPDIR)/prepmx.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/prepmx.c' object='prepmx.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o prepmx.obj `if test -f '$(MTX_TREE)/prepmx.c'; then $(CYGPATH_W) '$(MTX_TREE)/prepmx.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/prepmx.c'; fi`
+
+status.o: $(MTX_TREE)/status.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT status.o -MD -MP -MF $(DEPDIR)/status.Tpo -c -o status.o `test -f '$(MTX_TREE)/status.c' || echo '$(srcdir)/'`$(MTX_TREE)/status.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/status.Tpo $(DEPDIR)/status.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/status.c' object='status.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o status.o `test -f '$(MTX_TREE)/status.c' || echo '$(srcdir)/'`$(MTX_TREE)/status.c
+
+status.obj: $(MTX_TREE)/status.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT status.obj -MD -MP -MF $(DEPDIR)/status.Tpo -c -o status.obj `if test -f '$(MTX_TREE)/status.c'; then $(CYGPATH_W) '$(MTX_TREE)/status.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/status.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/status.Tpo $(DEPDIR)/status.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/status.c' object='status.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o status.obj `if test -f '$(MTX_TREE)/status.c'; then $(CYGPATH_W) '$(MTX_TREE)/status.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/status.c'; fi`
+
+uptext.o: $(MTX_TREE)/uptext.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT uptext.o -MD -MP -MF $(DEPDIR)/uptext.Tpo -c -o uptext.o `test -f '$(MTX_TREE)/uptext.c' || echo '$(srcdir)/'`$(MTX_TREE)/uptext.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/uptext.Tpo $(DEPDIR)/uptext.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/uptext.c' object='uptext.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o uptext.o `test -f '$(MTX_TREE)/uptext.c' || echo '$(srcdir)/'`$(MTX_TREE)/uptext.c
+
+uptext.obj: $(MTX_TREE)/uptext.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT uptext.obj -MD -MP -MF $(DEPDIR)/uptext.Tpo -c -o uptext.obj `if test -f '$(MTX_TREE)/uptext.c'; then $(CYGPATH_W) '$(MTX_TREE)/uptext.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/uptext.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/uptext.Tpo $(DEPDIR)/uptext.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/uptext.c' object='uptext.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o uptext.obj `if test -f '$(MTX_TREE)/uptext.c'; then $(CYGPATH_W) '$(MTX_TREE)/uptext.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/uptext.c'; fi`
+
+utility.o: $(MTX_TREE)/utility.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utility.o -MD -MP -MF $(DEPDIR)/utility.Tpo -c -o utility.o `test -f '$(MTX_TREE)/utility.c' || echo '$(srcdir)/'`$(MTX_TREE)/utility.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/utility.Tpo $(DEPDIR)/utility.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/utility.c' object='utility.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utility.o `test -f '$(MTX_TREE)/utility.c' || echo '$(srcdir)/'`$(MTX_TREE)/utility.c
+
+utility.obj: $(MTX_TREE)/utility.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utility.obj -MD -MP -MF $(DEPDIR)/utility.Tpo -c -o utility.obj `if test -f '$(MTX_TREE)/utility.c'; then $(CYGPATH_W) '$(MTX_TREE)/utility.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/utility.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/utility.Tpo $(DEPDIR)/utility.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(MTX_TREE)/utility.c' object='utility.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utility.obj `if test -f '$(MTX_TREE)/utility.c'; then $(CYGPATH_W) '$(MTX_TREE)/utility.c'; else $(CYGPATH_W) '$(srcdir)/$(MTX_TREE)/utility.c'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
+ clean-binPROGRAMS clean-generic clean-noinstLIBRARIES ctags \
+ dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \
+ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-binPROGRAMS
+
+
+# in case of an SVN repository
+dist-hook:
+ rm -rf `find $(distdir) -name .svn`
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/utils/mtx/ac/withenable.ac b/Build/source/utils/mtx/ac/withenable.ac
new file mode 100644
index 00000000000..696bfacabba
--- /dev/null
+++ b/Build/source/utils/mtx/ac/withenable.ac
@@ -0,0 +1,7 @@
+## utils/mtx/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/mtx/
+dnl
+dnl Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+dnl You may freely use, modify and/or distribute this file.
+dnl
+## configure options and TL libraries required for mtx
+KPSE_ENABLE_PROG([mtx])
diff --git a/Build/source/utils/mtx/aclocal.m4 b/Build/source/utils/mtx/aclocal.m4
new file mode 100644
index 00000000000..6524bc8cb05
--- /dev/null
+++ b/Build/source/utils/mtx/aclocal.m4
@@ -0,0 +1,1012 @@
+# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
+# 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([../../m4/kpse-warnings.m4])
diff --git a/Build/source/utils/mtx/configure b/Build/source/utils/mtx/configure
new file mode 100755
index 00000000000..30c0b2c95e5
--- /dev/null
+++ b/Build/source/utils/mtx/configure
@@ -0,0 +1,5908 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for mtx for TeX Live 0.60d.
+#
+# Report bugs to <tex-k@tug.org>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+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
+IFS=$as_save_IFS
+
+ ;;
+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
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ # Preserve -v and -x to the replacement shell.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+ esac
+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and tex-k@tug.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; 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
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# 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
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval 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="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='mtx for TeX Live'
+PACKAGE_TARNAME='mtx-for-tex-live'
+PACKAGE_VERSION='0.60d'
+PACKAGE_STRING='mtx for TeX Live 0.60d'
+PACKAGE_BUGREPORT='tex-k@tug.org'
+PACKAGE_URL=''
+
+ac_unique_file="mtx-0.60d/analyze.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+MTX_TREE
+POW_LIB
+LIBOBJS
+EGREP
+GREP
+CPP
+RANLIB
+LN_S
+WARNING_CFLAGS
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_dependency_tracking
+enable_compiler_warnings
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# 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.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+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
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -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)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$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 ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$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 ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ 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 ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=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 ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_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'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+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
+ $as_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
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# 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 the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ 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
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# 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 mtx for TeX Live 0.60d 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 \`..']
+
+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]
+ --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]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root
+ [DATAROOTDIR/doc/mtx-for-tex-live]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of mtx for TeX Live 0.60d:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-compiler-warnings=[no|min|yes|max|all]
+ Turn on compiler warnings [default: yes if
+ maintainer-mode, min otherwise]
+
+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>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ 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 <tex-k@tug.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested 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
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+mtx for TeX Live configure 0.60d
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 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
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------- ##
+## Report this to tex-k@tug.org ##
+## ---------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by mtx for TeX Live $as_me 0.60d, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+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`
+/usr/bin/hostinfo = `(/usr/bin/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=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append 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
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > 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
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ 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. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_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 $ac_precious_vars; 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,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_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
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_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.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+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_aux_dir=
+for ac_dir in ../../build-aux "$srcdir"/../../build-aux; 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
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../build-aux \"$srcdir\"/../../build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+
+am__api_version='1.11'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='mtx-for-tex-live'
+ VERSION='0.60d'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+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
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+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
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+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
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+# Check whether --enable-compiler-warnings was given.
+if test "${enable_compiler_warnings+set}" = set; then :
+ enableval=$enable_compiler_warnings;
+fi
+case $enable_compiler_warnings in #(
+ no | min | yes | max | all) :
+ ;; #(
+ *) :
+ if test "x$enable_maintainer_mode" = xyes; then :
+ enable_compiler_warnings=yes
+else
+ enable_compiler_warnings=min
+fi ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what warning flags to pass to the C compiler" >&5
+$as_echo_n "checking what warning flags to pass to the C compiler... " >&6; }
+if ${kpse_cv_warning_cflags+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$GCC" = xyes; then
+ kpse_cv_warning_cflags=
+if test "x$enable_compiler_warnings" != xno; then
+ kpse_cv_warning_cflags="-Wimplicit -Wreturn-type"
+ case `$CC -dumpversion` in #(
+ 3.4.* | 4.*) :
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wdeclaration-after-statement" ;; #(
+ *) :
+ ;;
+esac
+ case `$CC -dumpversion` in #(
+ 3.[234].* | 4.*) :
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wno-unknown-pragmas" ;; #(
+ *) :
+ ;;
+esac
+ if test "x$enable_compiler_warnings" != xmin; then
+ kpse_cv_warning_cflags="-Wall -Wunused $kpse_cv_warning_cflags"
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wmissing-prototypes -Wmissing-declarations"
+ if test "x$enable_compiler_warnings" != xyes; then
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wparentheses -Wswitch -Wtrigraphs -Wpointer-arith"
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wcast-qual -Wcast-align -Wwrite-strings"
+ case `$CC -dumpversion` in #(
+ 3.4.* | 4.*) :
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wold-style-definition" ;; #(
+ *) :
+ ;;
+esac
+ if test "x$enable_compiler_warnings" != xmax; then
+ kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wshadow"
+ fi
+ fi
+ fi
+fi
+elif test "x$enable_compiler_warnings" = xno; then
+ kpse_cv_warning_cflags=
+else
+ kpse_cv_warning_cflags= # FIXME: warning flags for non-GNU C compilers
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $kpse_cv_warning_cflags" >&5
+$as_echo "$kpse_cv_warning_cflags" >&6; }
+WARNING_CFLAGS=$kpse_cv_warning_cflags
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+# Checks for libraries.
+
+# 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+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
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.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))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+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=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in memory.h stddef.h stdlib.h string.h strings.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+ struct s { _Bool s: 1; _Bool t; } s;
+
+ char a[true == 1 ? 1 : -1];
+ char b[false == 0 ? 1 : -1];
+ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+ char d[(bool) 0.5 == true ? 1 : -1];
+ /* See body of main program for 'e'. */
+ char f[(_Bool) 0.0 == false ? 1 : -1];
+ char g[true];
+ char h[sizeof (_Bool)];
+ char i[sizeof s.t];
+ enum { j = false, k = true, l = false * true, m = true * 256 };
+ /* The following fails for
+ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+ _Bool n[m];
+ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+ /* Catch a bug in an HP-UX C compiler. See
+ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+ */
+ _Bool q = true;
+ _Bool *pq = &q;
+
+int
+main ()
+{
+
+ bool e = &s;
+ *pq |= q;
+ *pq |= ! q;
+ /* Refer to every declared value, to avoid compiler optimizations. */
+ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+ + !m + !n + !o + !p + !q + !pq);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdbool_h=yes
+else
+ ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if ${ac_cv_lib_error_at_line+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_error_at_line=yes
+else
+ ac_cv_lib_error_at_line=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+if test $ac_cv_lib_error_at_line = no; then
+ case " $LIBOBJS " in
+ *" error.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS error.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
+$as_echo_n "checking for working strtod... " >&6; }
+if ${ac_cv_func_strtod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ac_cv_func_strtod=no
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+$ac_includes_default
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+ {
+ /* Some versions of Linux strtod mis-parse strings with leading '+'. */
+ char *string = " +69";
+ char *term;
+ double value;
+ value = strtod (string, &term);
+ if (value != 69 || term != (string + 4))
+ return 1;
+ }
+
+ {
+ /* Under Solaris 2.4, strtod returns the wrong value for the
+ terminating character under some conditions. */
+ char *string = "NaN";
+ char *term;
+ strtod (string, &term);
+ if (term != string && *(term - 1) == 0)
+ return 1;
+ }
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_strtod=yes
+else
+ ac_cv_func_strtod=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
+$as_echo "$ac_cv_func_strtod" >&6; }
+if test $ac_cv_func_strtod = no; then
+ case " $LIBOBJS " in
+ *" strtod.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
+ ;;
+esac
+
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = xyes; then :
+
+fi
+
+if test $ac_cv_func_pow = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
+$as_echo_n "checking for pow in -lm... " >&6; }
+if ${ac_cv_lib_m_pow+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pow ();
+int
+main ()
+{
+return pow ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_m_pow=yes
+else
+ ac_cv_lib_m_pow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
+$as_echo "$ac_cv_lib_m_pow" >&6; }
+if test "x$ac_cv_lib_m_pow" = xyes; then :
+ POW_LIB=-lm
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
+$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
+fi
+
+fi
+
+fi
+
+for ac_func in memchr memmove memset strchr strrchr strtol
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+MTX_TREE=mtx-0.60d
+
+
+ac_config_files="$ac_config_files Makefile"
+
+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, we kill variables containing newlines.
+# 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.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ 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}'
+
+# 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 branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $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}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+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
+IFS=$as_save_IFS
+
+ ;;
+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
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; 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
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# 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
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval 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="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by mtx for TeX Live $as_me 0.60d, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ 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
+
+Configuration commands:
+$config_commands
+
+Report bugs to <tex-k@tug.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+mtx for TeX Live config.status 0.60d
+configured by $0, generated by GNU Autoconf 2.68,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+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=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ 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 || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ 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
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # 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. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# 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 || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/Build/source/utils/mtx/configure.ac b/Build/source/utils/mtx/configure.ac
new file mode 100644
index 00000000000..250c99789b1
--- /dev/null
+++ b/Build/source/utils/mtx/configure.ac
@@ -0,0 +1,48 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+dnl
+dnl This file is free software; the copyright holder
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+m4_include([version.ac])[] dnl define mtx_version
+AC_INIT([mtx for TeX Live], mtx_version, [tex-k@tug.org])
+AC_PREREQ([2.65])
+AC_CONFIG_SRCDIR([mtx-]mtx_version[/analyze.c])
+AC_CONFIG_AUX_DIR([../../build-aux])
+AC_CONFIG_MACRO_DIR([../../m4])
+
+AM_INIT_AUTOMAKE([foreign])
+AM_MAINTAINER_MODE
+
+dnl Check compiler and flags
+AC_PROG_CC
+
+KPSE_COMPILER_WARNINGS
+
+dnl Checks for programs.
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([memory.h stddef.h stdlib.h string.h strings.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_ERROR_AT_LINE
+dnl AC_FUNC_MALLOC
+AC_FUNC_STRTOD
+AC_CHECK_FUNCS([memchr memmove memset strchr strrchr strtol])
+
+AC_SUBST([MTX_TREE], [mtx-]mtx_version)
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/Build/source/utils/mtx/m-mtx b/Build/source/utils/mtx/m-mtx
new file mode 120000
index 00000000000..2727e25022e
--- /dev/null
+++ b/Build/source/utils/mtx/m-mtx
@@ -0,0 +1 @@
+../../../../m-mtx \ No newline at end of file
diff --git a/Build/source/utils/mtx/malloc b/Build/source/utils/mtx/malloc
new file mode 100644
index 00000000000..90a643256eb
--- /dev/null
+++ b/Build/source/utils/mtx/malloc
@@ -0,0 +1,16 @@
+#undef malloc
+
+#include <sys/types.h>
+
+void *malloc ();
+
+/* Allocate an N-byte block of memory from the heap.
+ If N is zero, allocate a 1-byte block. */
+
+void *
+rpl_malloc (size_t n)
+{
+ if (n == 0)
+ n = 1;
+ return malloc (n);
+}
diff --git a/Build/source/utils/mtx/mtx-0.60d-PATCHES/TL-Changes b/Build/source/utils/mtx/mtx-0.60d-PATCHES/TL-Changes
new file mode 100644
index 00000000000..a24ef1965c0
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d-PATCHES/TL-Changes
@@ -0,0 +1,12 @@
+Changes applied to the mtx-0.60d tree as obtained from:
+ http://www.ctan.org/tex-archive/support/m-tx/
+
+Remove:
+ Makefile.in
+ aclocal.m4
+ configure
+ depcomp
+ install-sh
+ missing
+ libp2c/Makefile.in
+
diff --git a/Build/source/utils/mtx/mtx-0.60d.tar.gz b/Build/source/utils/mtx/mtx-0.60d.tar.gz
new file mode 120000
index 00000000000..a01aa0c4855
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d.tar.gz
@@ -0,0 +1 @@
+../../../../mtx-0.60d.tar.gz \ No newline at end of file
diff --git a/Build/source/utils/mtx/mtx-0.60d/AUTHORS b/Build/source/utils/mtx/mtx-0.60d/AUTHORS
new file mode 100644
index 00000000000..9fdff1fe9d3
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/AUTHORS
@@ -0,0 +1 @@
+Dirk Laurie (dpl@sun.ac.za)
diff --git a/Build/source/utils/mtx/mtx-0.60d/Bugs b/Build/source/utils/mtx/mtx-0.60d/Bugs
new file mode 100644
index 00000000000..1703eee92a2
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/Bugs
@@ -0,0 +1,5 @@
+Lyrics lines when not from same paragraph don't join neatly.
+Problem has been discussed on mailing list and Rainer gave
+a solution.
+
+Rest in dot and comma shortcuts gives error at PMX stage.
diff --git a/Build/source/utils/mtx/mtx-0.60d/COPYING b/Build/source/utils/mtx/mtx-0.60d/COPYING
new file mode 100644
index 00000000000..623b6258a13
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Build/source/utils/mtx/mtx-0.60d/ChangeLog b/Build/source/utils/mtx/mtx-0.60d/ChangeLog
new file mode 100644
index 00000000000..c6191aa7874
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/ChangeLog
@@ -0,0 +1,180 @@
+ Corrections and enhancements to M-Tx starting from 0.53
+ Newest items at top
+
+Version 0.60d
+ Replaced space character tie label by no label,
+ status.pas: procedure labelSlur, call procedure insertchar only for slurs.
+
+Version 0.60c
+ Added facility for prefixing music words with '_' for handling in PMX.
+ Prefix is stripped in output file.
+ mtxline.pas: type music_word, const bind_left, array name,
+ procedure GetNextMusWord.
+
+Version 0.60b
+ Fixed bug in doPMXpreamble causing errors with printed meters.
+
+Version 0.60a
+ Fix for music size 13 in preamble.pas.
+ Convert M-Tx denominators '1', '16', '32' and '64'
+ to PMX meter denominator syntax '0', '1', '3' and '6'.
+ {} ties don't get PMX label T attached in order to support MIDI ties.
+
+Planned for the near future
+ Accepts detached shortcut.
+
+Version 0.55h (not released)
+ Traces pitch including z-words; warns if unreal. Disable checkPitch
+ to bypass this.
+
+Version 0.55g (not released)
+ Corrects another bug in notes.pas, introduced at 0.55d.
+ Features: countMacro, expandMacro.
+
+Version 0.55f (not released)
+ Corrects bugs, mainly in notes.pas, introduced at 0.55d.
+ Help via command line.
+
+Version 0.55e (not released)
+ Chord ties. E.g. C: {ce cf ties the c. No close-tie symbol.
+
+Version 0.55d (not released)
+ Mainly code cleanup. Should be transparent to most users.
+
+Version 0.55c
+ Corrects continuation slur bug.
+
+Version 0.55b
+ Bug correction, but including a substantial rewrite of the lyrics melisma handling.
+
+Version 0.55
+ Basically the same as 0.54k.
+
+Version 0.54k (not released)
+ DPL: Slurs are no longer translated to s and t, but to ( and {. This requires
+ PMX 2.502. Labels are inserted into slurs.
+
+Version 0.54j (not released)
+ DPL: "Enable" and "Disable" directives for more flexible handling of optional
+ features. No further development of "Options:" will be made.
+
+Version 0.54h (not released)
+ Certain parts of the unwieldy "globals" unit moved to a new "utility" unit.
+ Affects programming, not functionality.
+
+Version 0.54g (released only to beta testers)
+ DPL: Corrected bug in multfile.pas (end-of-input not properly recognized).
+
+Version 0.54f (released only to beta testers)
+ DPL: Cleaning up of files.pas to take full advantage of the new
+ multifile.pas unit. Corrected some obscure bugs.
+
+Version 0.54e (not released)
+
+2004-03-07
+ DPL: Added the "Include: filename" directive. This may appear anywhere,
+ and diverts the input stream to the new filename. This may in turn
+ include other files, etc. A file may be included more than once, but
+ do not try recursive includes! When the end of an included file is
+ reached, the stream reverts to the previous file. End-of-file is
+ treated seamlessly and does not act as a paragraph separator.
+
+Version 0.54d (not released)
+
+2004-02-15
+ DPL: {...} gives st slurs, }{ works, -t option to retain old behaviour,
+ some cleaning up of unused pieces of code.
+ Affects files.pas, globals.pas, mtxline.pas, preamble.pas, prepmx.pas,
+ status.pas
+
+Version 0.54c
+
+2003-08-14
+ Hiroaki Morimoto:
+ mtx.pas: allow PMX style absolute octave assignment
+
+Version 0.54b
+
+2003-08-05
+ Christian Mondrup:
+ mtx.tex: changed \def\mtxLyrlink{\lowlyrlink} to \def\mtxLowLyrlink{\lowlyrlink}
+
+2003-06-03
+ Christian Mondrup:
+ Correct bug in procedure respace: test on 'nspace[ninstr]' rather than on
+ nspace[nstaves] in concluding if statement.
+
+Version 0.54a
+
+2002-01-29
+ Recognizes PMX words D s t as binding to the left.
+ Uptext also on multi-bar rests.
+
+Version 0.53j
+
+2001-12-06
+ mtx.tex tuning improvements only
+
+Version 0.53i
+
+2001-11-27
+ Correct bug in verse numbers when bar starts with rests
+ (reported by Christian Mondrup)
+
+Version 0.53h
+
+2001-11-20
+ Correct bug in decrescendo (reported by Christian Mondrup)
+ -- involves mtx.tex and uptext.*
+ 100 lines per paragraph
+
+Version 0.53g
+
+2001-10-30
+ Restore midi accidental capability (lost by mistake from 0.53c to
+ 0.53f)
+
+Version 0.53f
+
+2001-08-29
+ xtuplet may start with rest
+
+Version 0.53e
+
+2001-06-22
+ Recognizes 'D' in xtuplet notes.
+
+Version 0.53d
+
+2001-06-21
+ Always uses full instrument/stave format, even if there is just
+ one stave per instrument.
+
+Version 0.53c
+
+2001-06-18
+ Improved handling of Composer, Poet and Title lines.
+ procedure selectVoices added (maybe one day we'll support
+ movement changes)
+ Braces around \mtxFlat and \mtxSharp
+ Does not translate '_' in lyrics if
+ (1) at end of word
+ (2) followed by another '_'
+ (3) followed by a digit
+
+Version 0.53b
+
+2001-06-02
+ Improvements to mtx.tex, including nicer sharps and flats in uptext
+
+Version 0.53a
+
+2001-05-29
+ Looks for 'i' anywhere in note (except in shortcut and xtuplet parts)
+ and moves it to follow accidental.
+
+2001-05-28
+ From Christian Mondrup
+ preamble.pas: added trailing backslash to \mtxTenorClef
+ mtx.tex: changed \mtxmtxNormalSize to \mtxNormalSize
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/INSTALL b/Build/source/utils/mtx/mtx-0.60d/INSTALL
new file mode 100644
index 00000000000..7d1c323beae
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/INSTALL
@@ -0,0 +1,365 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/Makefile.am b/Build/source/utils/mtx/mtx-0.60d/Makefile.am
new file mode 100644
index 00000000000..1fc037408fa
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/Makefile.am
@@ -0,0 +1,13 @@
+SUBDIRS = libp2c
+DIST_SUBDIRS = libp2c
+bin_PROGRAMS = prepmx
+INCLUDES = -I$(srcdir)/libp2c
+prepmx_SOURCES = analyze.h cfuncs.h config.h control.h files.h globals.h lyrics.h\
+ mtx.h mtxline.h multfile.h notes.h preamble.h status.h strings.h uptext.h utility.h\
+ globals.c mtx.c preamble.c lyrics.c analyze.c mtxline.c\
+ status.c uptext.c files.c notes.c prepmx.c cfuncs.c multfile.c utility.c control.c
+prepmx_LDADD = libp2c/libp2c.a
+EXTRA_DIST = globals.pas mtx.pas preamble.pas lyrics.pas analyze.pas mtxline.pas\
+ status.pas uptext.pas prepmx.pas files.pas notes.pas multfile.pas utility.pas control.pas\
+ Makefile.orig Bugs README.060d
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/Makefile.orig b/Build/source/utils/mtx/mtx-0.60d/Makefile.orig
new file mode 100644
index 00000000000..60cf037cbba
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/Makefile.orig
@@ -0,0 +1,40 @@
+pasfiles = globals.pas mtx.pas preamble.pas lyrics.pas analyze.pas mtxline.pas\
+ status.pas uptext.pas prepmx.pas files.pas notes.pas multfile.pas \
+ strings.pas utility.pas control.pas
+cfiles = globals.c mtx.c preamble.c lyrics.c analyze.c mtxline.c\
+ status.c uptext.c prepmx.c files.c notes.c multfile.c utility.c control.c
+native = cfuncs.c cfuncs.h
+hfiles = globals.h mtx.h preamble.h lyrics.h analyze.h mtxline.h \
+ status.h uptext.h files.h notes.h multfile.h utility.h control.h
+ofiles = globals.o mtx.o preamble.o lyrics.o analyze.o mtxline.o \
+ status.o uptext.o files.o notes.o prepmx.o cfuncs.o multfile.o utility.o \
+ control.o
+
+prepmx: $(pasfiles)
+ fpc -g -B -vnh -So prepmx
+
+prepmxc: $(cfiles) $(ofiles)
+ cc $(ofiles) -o prepmx
+
+multfile.c: multfile.pas
+ p2c -a -LTurbo multfile.pas -o temp.c
+ sed -e "s/Malloc/malloc/" < temp.c > multfile.c
+ rm temp.c
+
+%.c: %.pas
+ p2c -a -LTurbo $*.pas
+
+clean:
+ - rm *.o *~ *~ core *.pmx *.pml *.log *.dvi
+
+bare: clean
+ - rm $(cfiles) $(hfiles) prepmx *.ppu
+
+Pzip:
+ zip -ju mtxP`./version` version $(pasfiles) pmxword.pas mtx.tex $(native) \
+ Makefile Corrections Bugs README
+
+Czip: $(cfiles)
+ zip -ju mtxC`./version` version $(cfiles) $(native) $(hfiles) mtx.tex Makefile \
+ Bugs Corrections README
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/NEWS b/Build/source/utils/mtx/mtx-0.60d/NEWS
new file mode 100644
index 00000000000..1703eee92a2
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/NEWS
@@ -0,0 +1,5 @@
+Lyrics lines when not from same paragraph don't join neatly.
+Problem has been discussed on mailing list and Rainer gave
+a solution.
+
+Rest in dot and comma shortcuts gives error at PMX stage.
diff --git a/Build/source/utils/mtx/mtx-0.60d/README b/Build/source/utils/mtx/mtx-0.60d/README
new file mode 100644
index 00000000000..55e006035bf
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/README
@@ -0,0 +1,164 @@
+ M-Tx Preprocessor Source Code
+
+
+This is a development version of "prepmx", the M-Tx Preprocessor.
+It contains the file "mtx.tex" and all the sources for generating the
+binary executable file ("prepmx", "prepmx.exe", etc., depending on your
+operating system). There is no documentation: find the latest available
+mtxD????.zip and read the Corrections file. There are no examples: find
+the latest available mtxX????.zip. Or stay with the most recent stable
+release for those.
+
+The development version is provided for those who need more recent features
+than the most recent stable release has, in the hope that they will be
+willing to report bugs and maybe even suggest how those can be fixed.
+Send e-mail to Dirk Laurie <dlaurie@na-net.ornl.gov>.
+
+You will have found this README in a file called something like mtxP054f.zip
+(which containes Pascal code) or mtxC054f.zip (which contains C code).
+I will refer to that file as mtxP????.zip or mtxC????.zip.
+
+You need one of the following compilers. A later version than specified
+should also work, but an earlier one probably will not.
+ 1. Free Pascal 1.0.10 (for mtxP????.zip)
+ 2. Borland Pascal 7.0 (for mtxP????.zip)
+ 3. Any ANSI-compliant C compiler (for mtxC????.zip)
+ 4. The p2c package plus any ANSI-compliant C compiler (for mtxP????.zip)
+The first of these is recommended, since that is the compiler I use.
+I try to stay compatible with the other three, but this may not always
+be possible.
+
+"GNU System" means any system on which standard GNU utilities such as "bash"
+and "make" is available. Typical GNU systems are (a) Linux (b) Windows with
+the Cygwin package installed (c) other systems on which an appropriate
+package has been installed. You do not need a GNU system to use M-Tx,
+but it is easier to make the executable on a GNU system.
+
+Read Section 1 below, and, depending on which compiler you have,
+one of the other sections. If you have no appropriate compiler,
+visit http://www.freepascal.org/ to see whether there is a Free Pascal
+compiler for your system (at present, MacOS is the only popular operating
+system not available); if not, get an ANSI compliant C compiler and read
+Section 6.
+
+
+ Contents
+
+1. Text file format and unzipping
+2. Compiling with Free Pascal
+3. Compiling with Borland Pascal 7.0
+4. Compiling with p2c
+5. Compiling with a C compiler on a GNU system
+6. Compiling with a C compiler on a non-GNU system
+7. For experts only
+
+ 1. Text file format and unzipping
+
+Change to some empty directory and unzip the distribution file. YOU MUST
+UNZIP THE FILES USING AN UNZIPPER THAT CAN CONVERT TEXT FILES TO YOUR
+SYSTEM'S FORMAT. Some things may work even if you don't (maybe even
+everything, if your system happens to use the same text format as the
+system on which the zipfile was made) but then any later errors will
+only be more mysterious because of that. It may be necessary to set
+special options in your unzipper to achieve this. On a GNU system,
+the command is
+ unzip -a mtxP????.zip
+
+
+ 2. Compiling with Free Pascal
+
+Free Pascal is available from for most current operating systems, including
+Linux, SunOS and Windows.
+
+If your system has GNU Make, simply type
+
+ make
+
+Otherwise, type
+
+ fpc -B -So prepmx
+
+to make the executable.
+
+
+ 3. Compiling with Borland Pascal 7.0
+
+This compiler is a 16-bit compiler specific to MSDOS, even though it
+runs under Windows and under DOS emulators on other 32-bit systems.
+It cannot handle very large code and data segments, and unfortunately
+it is necessary to cripple M-Tx somewhat to make it fit in, as follows:
+
+3.1 Edit the file "globals.pas" and change the lines
+
+ lines_in_paragraph = 100;
+ max_words = 128;
+ max_notes = 128;
+
+ to
+
+ lines_in_paragraph = 50;
+ max_words = 64;
+ max_notes = 64;
+
+3.2 Type
+
+ bpc -b prepmx
+
+ to make prepmx.exe.
+
+
+ 4. Compiling with p2c
+
+This route is only available if you have a GNU system with a C compiler
+and the package p2c (on old Red Hat systems, both p2c and p2c-devel). Type
+
+ make prepmxc
+
+to make prepmx. On this system only, you can make the mtxC????.zip file
+that corresponds to your mtxP????.zip file with
+
+ make Czip
+
+
+ 5. Compiling with a C compiler on a GNU system
+
+Just type
+
+ make prepmxc
+
+to make prepmx.
+
+
+ 6. Compiling with a C compiler on a non-GNU system
+
+Your C compiler must be ANSI compliant (sorry, Visual C++ 6.0 is not
+such, but Turbo C++ is). Then issue a command that will compile and
+link all the .c files to produce an appropriately named executable.
+The command line will depend on your system; for example
+
+ cc *.c -o prepmx
+
+should work on non-GNU Un?x systems.
+
+
+ 7. For experts only
+
+You can modify the source code as you wish -- this is open source software
+and the copyright is GPL. If you wish to redistribute your modified version,
+please augment the name so that there is no risk of confusion: e.g. if you
+are Johannes Brahms and you have made changes to mtxC054f.zip, call it
+mtxC054f-brahms.zip.
+
+Even better, send me an e-mail with your changes so that I can insert them
+into the current development version.
+
+The primary source is the Pascal version; the C version is made with p2c as
+described in Section 4. Therefore, any change made to the C code is volatile;
+only changes made to the Pascal version become permanent.
+
+If you make both Pascal and C executables, it is your responsibilty to
+move or rename the first executable, otherwise it will be overwritten.
+Moreover, it is possible to confuse the Makefile, since object files
+from Pascal and C compilations may well have the same name; you will
+then get numerous error messages. The safe thing is to "make clean"
+before switching languages.
diff --git a/Build/source/utils/mtx/mtx-0.60d/README.060d b/Build/source/utils/mtx/mtx-0.60d/README.060d
new file mode 100644
index 00000000000..abc347bfd0e
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/README.060d
@@ -0,0 +1,8 @@
+M-Tx 0.60d is a test version of M-Tx 0.60. Please try it out and report any
+error observations to Christian Mondrup, reccmo@daimi.au.dk and
+Dirk Laurie, dpl@sun.ac.za
+
+Changes:
+========
+
+- Fixed a bug with non-labeled ties
diff --git a/Build/source/utils/mtx/mtx-0.60d/analyze.c b/Build/source/utils/mtx/mtx-0.60d/analyze.c
new file mode 100644
index 00000000000..3003eeb9723
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/analyze.c
@@ -0,0 +1,333 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "analyze.pas" */
+
+
+#include "p2c.h"
+
+
+#define ANALYZE_G
+#include "analyze.h"
+
+
+#ifndef MTX_H
+#include "mtx.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef LYRICS_H
+#include "lyrics.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef UPTEXT_H
+#include "uptext.h"
+#endif
+
+#ifndef PREAMBLE_H
+#include "preamble.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+Void includeStartString()
+{
+ voice_index voice;
+ paragraph_index0 mus;
+ voice_index FORLIM;
+ Char STR1[256];
+ Char STR2[256];
+
+ FORLIM = nvoices;
+ for (voice = 1; voice <= FORLIM; voice++) {
+ mus = musicLineNo(voice);
+ if (mus > 0) {
+ sprintf(STR2, "%s%s", startString(STR1, voice), P[mus-1]);
+ strcpy(P[mus-1], STR2);
+ }
+ }
+}
+
+
+Static Char *describe(Result, nbar, extra)
+Char *Result;
+short nbar, extra;
+{
+ Char STR1[256];
+ Char STR3[256];
+ Char STR4[256];
+
+ sprintf(Result, "%s bar%s + %s/64 notes",
+ toString(STR1, nbar), plural(STR3, nbar), toString(STR4, extra));
+ return Result;
+}
+
+
+Void testParagraph()
+{
+ voice_index0 voice;
+ voice_index0 leader = 0, nv = 0;
+ paragraph_index0 mus;
+ short extra, l, nbar;
+ voice_index0 FORLIM;
+ Char STR2[256];
+ Char STR3[256];
+
+ nbars = 0;
+ pickup = 0;
+ nleft = 0;
+ if (top > bottom)
+ return;
+ pickup = 0;
+ multi_bar_rest = false;
+ FORLIM = bottom;
+ for (voice = top; voice <= FORLIM; voice++) {
+ mus = musicLineNo(voice);
+ if (mus > 0) { /** -------------- Voice is present ---- */
+ nv++;
+ line_no = orig_line_no[mus-1];
+ scanMusic(voice, &l);
+ if (multi_bar_rest && nv > 1)
+ error("Multi-bar rest allows only one voice", print);
+ if (!pmx_preamble_done) {
+ if (voice == top)
+ pickup = l;
+ else if (pickup != l)
+ error3(voice, "The same pickup must appear in all voices");
+ }
+ nbar = numberOfBars(voice);
+ extra = ExtraLength(voice);
+ if (multi_bar_rest && (nbar > 0 || extra > 0))
+ error3(voice, "Multi-bar rest allows no other rests or notes");
+ if (nbar > nbars || nbar == nbars && extra > nleft) {
+ nbars = nbar;
+ nleft = extra;
+ leader = voice;
+ }
+ if (!final_paragraph && meternum > 0 && extra > 0) {
+ printf("Line has %s\n", describe(STR2, nbar, extra));
+ error(" Line does not end at complete bar", print);
+ }
+ if (pmx_preamble_done && l > 0 && meternum > 0)
+ error3(voice, "Short bar with no meter change");
+ }
+ }
+ if (!pmx_preamble_done) {
+ xmtrnum0 = (double)pickup / one_beat; /* Don't want an integer result */
+ if (beVerbose())
+ printf("Pickup = %d/64\n", pickup);
+ }
+ if (leader <= 0)
+ return;
+ FORLIM = bottom;
+ for (voice = top; voice <= FORLIM; voice++) {
+ if (musicLineNo(voice) > 0) {
+ if (voice != leader) {
+ mus = musicLineNo(voice);
+ line_no = orig_line_no[mus-1];
+ if (numberOfBars(voice) != numberOfBars(leader) ||
+ ExtraLength(voice) != ExtraLength(leader)) {
+ printf("Following line has %s\n",
+ describe(STR3, numberOfBars(voice), ExtraLength(voice)));
+ puts(musicLine(STR3, voice));
+ printf("Longest line has %s\n",
+ describe(STR2, numberOfBars(leader), ExtraLength(leader)));
+ puts(musicLine(STR2, leader));
+ error("Line duration anomaly", print);
+ }
+ }
+ }
+ }
+}
+
+
+Void describeParagraph()
+{
+ voice_index0 voice;
+ Char STR2[256];
+ voice_index0 FORLIM;
+
+ printf("---- Paragraph %d starting at line %d bar %d\n",
+ paragraph_no, orig_line_no[0], bar_no);
+ FORLIM = bottom;
+ for (voice = top; voice <= FORLIM; voice++)
+ describeVoice(voice, lyricsReport(STR2, voice));
+}
+
+
+/* Local variables for paragraphSetup: */
+struct LOC_paragraphSetup {
+ voice_index0 *voice;
+ short l;
+ voice_index0 k;
+ Char P_keep[256], w[256];
+ boolean is_labelled;
+} ;
+
+Local Void maybeUptext(i, LINK)
+short i;
+struct LOC_paragraphSetup *LINK;
+{
+ if (!doUptext())
+ return;
+ if (strlen(LINK->w) == 1) {
+ if (*LINK->voice == nvoices)
+ warning("Uptext line below bottom voice should be labelled", print);
+ }
+ if (strlen(LINK->w) == 1) { /** Standard chord line ------ */
+ LINK->k = *LINK->voice + 1;
+ if (LINK->k > nvoices)
+ LINK->k--;
+ setUptextLineNo(LINK->k, i);
+ /** Labelled chord line ---- */
+ return;
+ }
+ predelete(LINK->w, 1);
+ LINK->k = findVoice(LINK->w);
+ if (LINK->k == 0)
+ error("Uptext line belongs to unknown voice", print);
+ else
+ setUptextLineNo(LINK->k, i);
+}
+
+Local Void maybeChords(i, LINK)
+short i;
+struct LOC_paragraphSetup *LINK;
+{
+ if (!doChords())
+ return;
+ if (strlen(LINK->w) == 1 && *LINK->voice == 0 && pedanticWarnings())
+ warning("Chord line above top voice should be labelled", print);
+ if (strlen(LINK->w) == 1) { /** Standard chord line ------ */
+ LINK->k = *LINK->voice;
+ if (LINK->k == 0)
+ LINK->k = 1;
+ setChordLineNo(LINK->k, i);
+ /** Labelled chord line ---- */
+ return;
+ }
+ predelete(LINK->w, 1);
+ LINK->k = findVoice(LINK->w);
+ if (LINK->k == 0)
+ error("Chord line belongs to unknown voice", print);
+ else
+ setChordLineNo(LINK->k, i);
+}
+
+Local Void analyzeParagraph(LINK)
+struct LOC_paragraphSetup *LINK;
+{
+ paragraph_index i, FORLIM;
+
+ *LINK->voice = 0;
+ bottom = 0;
+ top = nvoices + 1;
+ clearLabels();
+ clearTags();
+ clearUptext();
+ FORLIM = para_len;
+ for (i = 1; i <= FORLIM; i++)
+ { /* ----- Paragraph analysis main loop ----- */
+ if (*P[i-1] != '\0' && P[i-1][0] != comment) {
+ NextWord(LINK->w, P[i-1], blank, colon);
+ line_no = orig_line_no[i-1];
+ LINK->l = strlen(LINK->w);
+ LINK->is_labelled = (LINK->w[LINK->l-1] == colon &&
+ LINK->w[LINK->l-2] != barsym);
+ if (LINK->is_labelled) {
+ strcpy(LINK->P_keep, P[i-1]);
+ predelete(P[i-1], LINK->l);
+ shorten(LINK->w, LINK->l - 1);
+ LINK->k = findVoice(LINK->w); /* First look for a voice label */
+ if (LINK->k > 0) {
+ *LINK->voice = LINK->k;
+ setMusicLineNo(*LINK->voice, i);
+ } else if (LINK->w[0] == 'L')
+ maybeLyrics(*LINK->voice, i, LINK->w);
+ else if (LINK->w[0] == 'C')
+ maybeChords(i, LINK);
+ else if (LINK->w[0] == 'U')
+ maybeUptext(i, LINK);
+ else {
+ if (startsWithIgnoreCase(LINK->w, "SPACE")) {
+ setSpace(P[i-1]);
+ must_respace = true;
+ } else {
+ if (startsWithIgnoreCase(LINK->w, "VOICES")) {
+ selectVoices(P[i-1]);
+ must_restyle = true;
+ } else {
+ strcpy(P[i-1], LINK->P_keep);
+ LINK->is_labelled = false;
+ if (!isNoteOrRest(LINK->w)) {
+ error("Unknown line label", print);
+ /** ------------ Maybe Space command ------------ */
+ /** ------------ Maybe Voices command ------------ */
+ /** Could be sticky attribute **/
+ }
+ }
+ }
+ }
+ }
+ if (!LINK->is_labelled) {
+ (*LINK->voice)++;
+ setMusicLineNo(*LINK->voice, i);
+ }
+ if (*LINK->voice > bottom)
+ bottom = *LINK->voice;
+ if (*LINK->voice > 0 && *LINK->voice < top)
+ top = *LINK->voice;
+ }
+ }
+}
+
+Local Void obliterate(LINK)
+struct LOC_paragraphSetup *LINK;
+{
+ paragraph_index i;
+ Char new_only[256];
+ paragraph_index FORLIM;
+
+ *new_only = '\0';
+ FORLIM = para_len;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (startsWithIgnoreCase(P[i], "only:")) {
+ strcpy(new_only, P[i]);
+ strcpy(P[i], "%");
+ }
+ }
+ if (*new_only != '\0') {
+ setOnly(new_only);
+ return;
+ }
+ FORLIM = para_len;
+ for (i = 1; i <= FORLIM; i++) {
+ if (omitLine(i))
+ strcpy(P[i-1], "%");
+ }
+}
+
+
+Void paragraphSetup(voice_)
+voice_index0 *voice_;
+{
+ struct LOC_paragraphSetup V;
+
+ V.voice = voice_;
+ obliterate(&V);
+ analyzeParagraph(&V);
+ reviseLyrics();
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/analyze.h b/Build/source/utils/mtx/mtx-0.60d/analyze.h
new file mode 100644
index 00000000000..e05b846ebb5
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/analyze.h
@@ -0,0 +1,33 @@
+/* Header for module analyze, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef ANALYZE_H
+#define ANALYZE_H
+
+
+/* Decide which lines of paragraphs go where; test total duration of lines. */
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+#ifdef ANALYZE_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+extern Void testParagraph PV();
+extern Void describeParagraph PV();
+extern Void paragraphSetup PP((voice_index0 *voice));
+extern Void includeStartString PV();
+
+
+#undef vextern
+
+#endif /*ANALYZE_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/analyze.pas b/Build/source/utils/mtx/mtx-0.60d/analyze.pas
new file mode 100644
index 00000000000..310c5887854
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/analyze.pas
@@ -0,0 +1,181 @@
+unit analyze;
+
+{ Decide which lines of paragraphs go where; test total duration of lines. }
+
+interface uses control, globals;
+
+procedure testParagraph;
+procedure describeParagraph;
+procedure paragraphSetup (var voice: voice_index0);
+procedure includeStartString;
+
+implementation uses mtx, strings, lyrics, mtxline, uptext,
+ preamble, utility;
+
+procedure includeStartString;
+ var voice: voice_index;
+ mus: paragraph_index0;
+begin for voice:=1 to nvoices do
+ begin mus:=musicLineNo(voice); if mus>0 then
+ P[mus]:=startString(voice)+P[mus];
+ end;
+end;
+
+function describe(nbar,extra: integer): string;
+begin describe:=toString(nbar)+' bar'+plural(nbar)+' + '+
+ toString(extra)+'/64 notes';
+end;
+
+procedure testParagraph;
+ var voice, leader, nv: voice_index0;
+ mus: paragraph_index0;
+ extra, l, nbar: integer;
+begin
+ nbars:=0; pickup:=0; nleft:=0; if top>bottom then exit;
+ pickup:=0; nv:=0; leader:=0; multi_bar_rest := false;
+ for voice:=top to bottom do
+ begin mus:=musicLineNo(voice);
+ if mus>0 then {* -------------- Voice is present ---- }
+ begin inc(nv); line_no:=orig_line_no[mus];
+ scanMusic(voice,l);
+ if multi_bar_rest and (nv>1) then error(
+ 'Multi-bar rest allows only one voice',print);
+ if not pmx_preamble_done then
+ if voice=top then pickup:=l
+ else if pickup<>l then
+ error3(voice,'The same pickup must appear in all voices');
+ nbar := numberOfBars(voice); extra := extraLength(voice);
+ if multi_bar_rest and ((nbar>0) or (extra>0)) then error3(voice,
+ 'Multi-bar rest allows no other rests or notes');
+ if (nbar>nbars) or (nbar=nbars) and (extra>nleft) then
+ begin nbars:=nbar; nleft:=extra; leader:=voice; end;
+ if not final_paragraph and (meternum>0) and (extra>0) then
+ begin writeln('Line has ', describe(nbar,extra));
+ error(' Line does not end at complete bar',print);
+ end;
+ if pmx_preamble_done and (l>0) and (meternum>0) then
+ error3(voice,'Short bar with no meter change');
+ end
+ end;
+ if not pmx_preamble_done then
+ begin
+ xmtrnum0 := pickup/one_beat; { Don't want an integer result }
+ if beVerbose then writeln ('Pickup = ', pickup, '/64');
+ end;
+ if leader>0 then
+ for voice:=top to bottom do if musicLineNo(voice)>0 then
+ if voice<>leader then
+ begin mus:=musicLineNo(voice);
+ line_no:=orig_line_no[mus];
+ if (numberOfBars(voice)<>numberOfBars(leader))
+ or (extraLength(voice)<>extraLength(leader)) then
+ begin
+ writeln('Following line has ',
+ describe(numberOfBars(voice), extraLength(voice)));
+ writeln(musicLine(voice));
+ writeln('Longest line has ',
+ describe(numberOfBars(leader), extraLength(leader)));
+ writeln(musicLine(leader));
+ error('Line duration anomaly',print);
+ end;
+ end;
+end;
+
+procedure describeParagraph;
+ var voice: voice_index0;
+ begin writeln('---- Paragraph ',paragraph_no,
+ ' starting at line ', orig_line_no[1], ' bar ', bar_no);
+ for voice:=top to bottom do describeVoice(voice,lyricsReport(voice));
+ end;
+
+procedure paragraphSetup (var voice: voice_index0);
+ var l: integer;
+ k: voice_index0;
+ P_keep, w: string;
+ is_labelled: boolean;
+
+ procedure maybeUptext(i: integer);
+ begin if not doUptext then exit;
+ if (length(w)=1) then if (voice=nvoices) then
+ warning('Uptext line below bottom voice should be labelled',print);
+ if length(w)=1 then {* Standard chord line ------ }
+ begin k:=voice+1; if k>nvoices then dec(k);
+ setUptextLineNo(k,i);
+ end
+ else {* Labelled chord line ---- }
+ begin predelete(w,1); k:=findVoice(w);
+ if k=0 then error('Uptext line belongs to unknown voice',print)
+ else setUptextLineNo(k,i);
+ end
+ end;
+
+ procedure maybeChords(i: integer);
+ begin if not doChords then exit;
+ if (length(w)=1) and (voice=0) and pedanticWarnings then
+ warning('Chord line above top voice should be labelled',print);
+ if length(w)=1 then {* Standard chord line ------ }
+ begin k:=voice; if k=0 then k:=1;
+ setChordLineNo(k,i);
+ end
+ else {* Labelled chord line ---- }
+ begin predelete(w,1); k:=findVoice(w);
+ if k=0 then error('Chord line belongs to unknown voice',print)
+ else setChordLineNo(k,i);
+ end
+ end;
+
+ procedure analyzeParagraph;
+ var i: paragraph_index;
+ begin voice:=0; bottom:=0; top:=nvoices+1;
+ clearLabels; clearTags; clearUptext;
+ for i:=1 to para_len do { ----- Paragraph analysis main loop ----- }
+ if (P[i]<>'') and (P[i,1]<>comment) then
+ begin
+ w:=NextWord(P[i],blank,colon); line_no := orig_line_no[i];
+ l:=length(w);
+ is_labelled := (w[l]=colon) and (w[l-1]<>barsym);
+ if is_labelled then
+ begin P_keep := P[i]; predelete(P[i],l); shorten(w,l-1);
+ k:=findVoice(w); { First look for a voice label }
+ if k>0 then
+ begin voice:=k; setMusicLineNo(voice,i);
+ end
+ else if w[1]='L' then maybeLyrics(voice,i,w)
+ else if w[1]='C' then maybeChords(i)
+ else if w[1]='U' then maybeUptext(i)
+ else begin {* ------------ Maybe Space command ------------ }
+ if startsWithIgnoreCase(w,'SPACE') then
+ begin setSpace(P[i]); must_respace:=true;
+ end
+ else {* ------------ Maybe Voices command ------------ }
+ if startsWithIgnoreCase(w,'VOICES') then
+ begin selectVoices(P[i]); must_restyle:=true;
+ end
+ else begin {* Could be sticky attribute *}
+ P[i] := P_keep; is_labelled := false;
+ if not isNoteOrRest(w) then error('Unknown line label',print);
+ end
+ end
+ end;
+ if not is_labelled then
+ begin inc(voice); setMusicLineNo(voice,i);
+ end;
+ if voice>bottom then bottom:=voice;
+ if (voice>0) and (voice<top) then top:=voice;
+ end;
+ end;
+
+ procedure obliterate;
+ var i: paragraph_index;
+ new_only: string;
+ begin new_only:='';
+ for i:=1 to para_len do if startsWithIgnoreCase(P[i],'only:')
+ then begin new_only:=P[i]; P[i]:='%'; end;
+ if new_only<>'' then setOnly(new_only)
+ else for i:=1 to para_len do if omitLine(i) then P[i]:='%';
+ end;
+
+begin obliterate; analyzeParagraph; reviseLyrics;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/cfuncs.c b/Build/source/utils/mtx/mtx-0.60d/cfuncs.c
new file mode 100644
index 00000000000..e1f2ca65dbf
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/cfuncs.c
@@ -0,0 +1,89 @@
+# define CFUNCS_C
+#include "cfuncs.h"
+
+int P_argc;
+char **P_argv;
+int P_ioresult;
+int _EscIO2 (int errorcode, char* filename)
+{ fprintf(stderr,"Input file %s not found\n",filename);
+ exit(errorcode); return errorcode; }
+int _EscIO (int errorcode){ return _EscIO2(errorcode,""); }
+int _Escape (int exitcode)
+{ exit(exitcode); return exitcode; }
+int _SETIO (int OK, int errorcode){ return P_ioresult = OK ? 0 : errorcode; }
+int P_eof (FILE * infile)
+{ int x;
+ if (feof(infile)) return 1;
+ x = fgetc(infile);
+ if (x==EOF) return 1;
+ ungetc(x,infile); return 0;
+ }
+void PASCAL_MAIN (int npars, char ** pars)
+{ P_argc = npars; P_argv = pars; }
+
+void scan1(char *s, short p, short *n)
+{ sscanf(s+p-1,"%hd",n);
+}
+
+short pos1(char c, char *s)
+{ char *t = strchr(s,c);
+ if (t) return (short) (t-s+1); else return 0;
+}
+
+void delete1(char *s, short p)
+{ char *t = (s+=p); s=t-1;
+ while (*s) *s++ = *t++;
+}
+
+void predelete(char *s, short l)
+{ char *t = s+l;
+ while (*t) *s++ = *t++;
+ *s = *t;
+}
+
+void shorten(char *s, short new_length)
+{ s[new_length] = '\0';
+}
+
+short posNot(char c, char *s)
+{ char *t = s;
+ while (*t == c) t++;
+ if (*t) return t-s+1;
+ else return 0;
+}
+
+void getNum(char *line, short *k)
+{ int j=sscanf(line,"%hd",k);
+ if (j<1) *k=0;
+}
+
+
+void getTwoNums(char *line, short *k1, short *k2)
+{ int param = sscanf(line,"%hd/%hd",k1,k2);
+ if (param<2) *k2 = 0;
+}
+
+void toUpper(char *s)
+{ while (*s) { *s = toupper(*s); s++; }
+}
+
+boolean startsWith(char *s1, char *s2)
+{ while (*s2) { if (*s1++ != *s2++) return false; }
+ return true;
+}
+
+void insertChar(char c, char *s, short p)
+{ char x;
+ s += p-1;
+ do { x=c; c=*s; *s++=x; } while (x);
+}
+
+char *substr_(char *Result, char *s, short start, short count)
+{ char *R = Result;
+ s += start-1;
+ while (count--) *R++ = *s++;
+ *R = '\0';
+ return Result;
+}
+
+# undef CFUNCS_C
diff --git a/Build/source/utils/mtx/mtx-0.60d/cfuncs.h b/Build/source/utils/mtx/mtx-0.60d/cfuncs.h
new file mode 100644
index 00000000000..5dc1c829fe7
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/cfuncs.h
@@ -0,0 +1,72 @@
+/* cfuncs.h DPL 1997-03-31, 2001-12-22 */
+
+#ifndef CFUNCS_H
+# define CFUNCS_H
+
+#define STRINGS_H
+typedef char Char;
+typedef void Void;
+#define Static static
+#define Local static
+#define SHORT_MAX 65535
+
+# define FileNotFound 10
+# define FileWriteError 38
+#ifndef STDIO_H
+# include <stdio.h>
+#endif
+#ifndef CTYPE_H
+# include <ctype.h>
+#endif
+#ifndef STRING_H
+# include <string.h>
+#endif
+#ifndef STDLIB_H
+# include <stdlib.h>
+#endif
+#ifndef _FNSIZE
+# define _FNSIZE 120
+#endif
+
+typedef unsigned boolean;
+#define false 0
+#define true 1
+
+extern int _EscIO (int);
+extern int _EscIO2 (int errorcode, char* filename);
+extern int _Escape (int);
+extern int P_eof (FILE *);
+extern int _SETIO (int, int);
+
+extern void PASCAL_MAIN (int, char **);
+extern int P_argc;
+extern int P_ioresult;
+extern char **P_argv;
+
+#ifdef CFUNCS_C
+# define vextern
+#else
+# define vextern extern
+#endif
+/* String handling primitives. */
+
+extern void scan1(char *s, short p, short *n);
+/* Read an integer at position p of s */
+extern boolean startsWith(char *s1, char *s2);
+/* True if s1 starts with s2 */
+extern short pos1(char c, char *s);
+extern short posNot(char c, char *s);
+extern void insertChar(char c, char *s, short p);
+extern char *substr_(char *Result, char *s, short start, short count);
+extern void getNum(char *line, short *k);
+extern void getTwoNums(char *line, short *k1, short *k2);
+extern void toUpper(char *s);
+extern void delete1(char *s, short p);
+extern void predelete(char *s, short l);
+extern void shorten(char *s, short new_length);
+
+
+#undef vextern
+
+#endif /*CFUNCS_H*/
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/config.h b/Build/source/utils/mtx/mtx-0.60d/config.h
new file mode 100644
index 00000000000..2ce758e1759
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/config.h
@@ -0,0 +1,90 @@
+/* config.h. Generated from config.h.in by configure. */
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+ to 0 otherwise. */
+#define HAVE_MALLOC 1
+
+/* Define to 1 if you have the `memchr' function. */
+#define HAVE_MEMCHR 1
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strtol' function. */
+#define HAVE_STRTOL 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if the system has the type `_Bool'. */
+#define HAVE__BOOL 1
+
+/* Name of package */
+#define PACKAGE "mtx"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "dpl@sun.ac.za"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "mtx"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "mtx 0.60d"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "mtx"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.60d"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "0.60d"
+
+/* Define to rpl_malloc if the replacement function should be used. */
+/* #undef malloc */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
diff --git a/Build/source/utils/mtx/mtx-0.60d/config.h.in b/Build/source/utils/mtx/mtx-0.60d/config.h.in
new file mode 100644
index 00000000000..88cd015fb76
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/config.h.in
@@ -0,0 +1,89 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+ to 0 otherwise. */
+#undef HAVE_MALLOC
+
+/* Define to 1 if you have the `memchr' function. */
+#undef HAVE_MEMCHR
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/Build/source/utils/mtx/mtx-0.60d/configure.ac b/Build/source/utils/mtx/mtx-0.60d/configure.ac
new file mode 100644
index 00000000000..a5c59e86466
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/configure.ac
@@ -0,0 +1,33 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.63])
+AC_INIT([mtx], [0.60d], [dpl@sun.ac.za])
+AC_CONFIG_SRCDIR([analyze.c])
+AC_CONFIG_HEADERS([config.h])
+AM_INIT_AUTOMAKE(mtx,0.60d)
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([memory.h stddef.h stdlib.h string.h strings.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_ERROR_AT_LINE
+AC_FUNC_MALLOC
+AC_FUNC_STRTOD
+AC_CHECK_FUNCS([memchr memmove memset strchr strrchr strtol])
+
+AC_CONFIG_FILES([Makefile
+ libp2c/Makefile])
+AC_OUTPUT
diff --git a/Build/source/utils/mtx/mtx-0.60d/control.c b/Build/source/utils/mtx/mtx-0.60d/control.c
new file mode 100644
index 00000000000..9dbb2dae1da
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/control.c
@@ -0,0 +1,274 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "control.pas" */
+
+
+#include "p2c.h"
+
+
+#define CONTROL_G
+#include "control.h"
+
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+/* enables Include: directive */
+/* one-word shortcut is treated by simply inserting a blank */
+/* detached form of shortcut allowed */
+/* C: lines are taken into account */
+/* U: lines are taken into account */
+/* L: lines are taken into account */
+/* non-melismatic eighth and shorter notes in vocal lines are unbeamed */
+/* blind slurs are hidden */
+/* U: lines synchronize with words and rests */
+/* always insert duration into notes */
+/* include macros in the count */
+/* literally expand macros */
+/* keep track of pitch and warn if unreal */
+/* transform note words to canical form */
+/* use solfa note names */
+/* issue warnings even when default action is likely to be correct */
+/* ignore all errors except fatal errors */
+/* set instrument names */
+/* report what is being done */
+/* write all possible infomative messages */
+typedef enum {
+ noSuchFeature, FmultiFile, FsplitShortcut, FnewWordShortcut, FdoChords,
+ FdoUptext, FdoLyrics, FunbeamVocal, FhideBlindSlurs, FuptextOnRests,
+ FinsertDuration, FcountMacro, FexpandMacro, FcheckPitch, FrearrangeNote,
+ FsolfaNoteNames, FpedanticWarnings, FignoreErrors, FinstrumentNames,
+ FbeVerbose, FdebugMode
+} feature;
+
+typedef struct Tfeature {
+ Char tag[31];
+ boolean active, changed;
+} Tfeature;
+
+
+#define firstFeature FmultiFile
+#define lastFeature FdebugMode
+
+
+Static Tfeature feat[21] = {
+ { "", false, false },
+ { "multiFile", true, false },
+ { "splitShortcut", true, false },
+ { "newWordShortcut", true, false },
+ { "doChords", true, false },
+ { "doUptext", true, false },
+ { "doLyrics", true, false },
+ { "unbeamVocal", true, false },
+ { "hideBlindSlurs", true, false },
+ { "uptextOnRests", true, false },
+ { "insertDuration", true, false },
+ { "countMacro", false, false },
+ { "expandMacro", false, false },
+ { "checkPitch", true, false },
+ { "rearrangeNote", true, false },
+ { "solfaNoteNames", false, false },
+ { "pedanticWarnings", false, false },
+ { "ignoreErrors", false, false },
+ { "instrumentNames", false, false },
+ { "beVerbose", false, false },
+ { "debugMode", false, false }
+};
+
+
+Void printFeatures(anyway)
+boolean anyway;
+{
+ feature i;
+ Tfeature *WITH;
+
+ for (i = firstFeature; (long)i <= (long)lastFeature; i = (feature)((long)i + 1)) {
+ WITH = &feat[(long)i];
+ if (WITH->changed || anyway)
+ printf("%s = %s\n", WITH->tag, WITH->active ? " TRUE" : "FALSE");
+ }
+}
+
+
+Static feature featureNamed(s)
+Char *s;
+{
+ feature i;
+
+ for (i = firstFeature; (long)i <= (long)lastFeature; i = (feature)((long)i + 1)) {
+ if (equalsIgnoreCase(s, feat[(long)i].tag))
+ return i;
+ }
+ return noSuchFeature;
+}
+
+
+boolean setFeature(which, val)
+Char *which;
+boolean val;
+{
+ boolean Result = false;
+ feature f;
+ Tfeature *WITH;
+
+ f = featureNamed(which);
+ if (f != noSuchFeature) {
+ WITH = &feat[(long)f];
+ WITH->active = val;
+ WITH->changed = true;
+ Result = true;
+ }
+ if (f == FdebugMode && val)
+ feat[(long)FbeVerbose].active = true;
+ if (f == FbeVerbose && !val)
+ feat[(long)FdebugMode].active = false;
+ return Result;
+}
+
+
+Void mtxLevel(level)
+Char *level;
+{
+ if (strcmp(level, "0.57") < 0) {
+ setFeature("splitShortcut", false);
+ setFeature("newWordShortcut", false);
+ }
+}
+
+
+/* Feature functions. To add a new feature "newFeature":
+ 1. Insert a new value "FnewFeature" in the declaration of type "feature".
+ 2. Insert an entry for it in array "feat".
+ 3. Copy the template below and change "FEATURE" into "newFeature".
+ 4. Copy the function header to the interface section.
+ 5. (Optional) Insert code into "mtxLevel" to enable/disable the feature.
+
+function FEATURE: boolean;
+begin FEATURE := feat[FFEATURE].active end;
+*/
+
+boolean checkPitch()
+{
+ return (feat[(long)FcheckPitch].active);
+}
+
+
+boolean countMacro()
+{
+ return (feat[(long)FcountMacro].active);
+}
+
+
+boolean expandMacro()
+{
+ return (feat[(long)FexpandMacro].active);
+}
+
+
+boolean insertDuration()
+{
+ return (feat[(long)FinsertDuration].active);
+}
+
+
+boolean rearrangeNote()
+{
+ return (feat[(long)FrearrangeNote].active);
+}
+
+
+boolean beVerbose()
+{
+ return (feat[(long)FbeVerbose].active);
+}
+
+
+boolean debugMode()
+{
+ return (feat[(long)FdebugMode].active);
+}
+
+
+boolean instrumentNames()
+{
+ return (feat[(long)FinstrumentNames].active);
+}
+
+
+boolean hideBlindSlurs()
+{
+ return (feat[(long)FhideBlindSlurs].active);
+}
+
+
+boolean doLyrics()
+{
+ return (feat[(long)FdoLyrics].active);
+}
+
+
+boolean ignoreErrors()
+{
+ return (feat[(long)FignoreErrors].active);
+}
+
+
+boolean pedanticWarnings()
+{
+ return (feat[(long)FpedanticWarnings].active);
+}
+
+
+boolean solfaNoteNames()
+{
+ return (feat[(long)FsolfaNoteNames].active);
+}
+
+
+boolean uptextOnRests()
+{
+ return (feat[(long)FuptextOnRests].active);
+}
+
+
+boolean unbeamVocal()
+{
+ return (feat[(long)FunbeamVocal].active);
+}
+
+
+boolean doChords()
+{
+ return (feat[(long)FdoChords].active);
+}
+
+
+boolean doUptext()
+{
+ return (feat[(long)FdoUptext].active);
+}
+
+
+boolean newWordShortcut()
+{
+ return (feat[(long)FnewWordShortcut].active);
+}
+
+
+boolean splitShortcut()
+{
+ return (feat[(long)FsplitShortcut].active);
+}
+
+
+boolean multiFile()
+{
+ return (feat[(long)FmultiFile].active);
+}
+
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/control.h b/Build/source/utils/mtx/mtx-0.60d/control.h
new file mode 100644
index 00000000000..91ce2c2dfef
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/control.h
@@ -0,0 +1,52 @@
+/* Header for module control, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef CONTROL_H
+#define CONTROL_H
+
+
+#ifdef CONTROL_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* DPL 2004-03-21 */
+/* Controls which M-Tx features are enabled.
+ The interface allows one to interrogate the feature state, to set
+ features according to the M-Tx level, and to override features given
+ the feature name as a character string.
+*/
+
+
+extern Void mtxLevel PP((Char *level));
+extern boolean setFeature PP((Char *which, int val));
+/* return TRUE means OK, return FALSE means there is no such feature */
+extern Void printFeatures PP((int anyway));
+/* anyway TRUE means print all feature settings, FALSE means only those
+ that were set via setFeature */
+
+extern boolean multiFile PV();
+extern boolean splitShortcut PV();
+extern boolean newWordShortcut PV();
+extern boolean doChords PV();
+extern boolean doUptext PV();
+extern boolean doLyrics PV();
+extern boolean unbeamVocal PV();
+extern boolean uptextOnRests PV();
+extern boolean solfaNoteNames PV();
+extern boolean pedanticWarnings PV();
+extern boolean ignoreErrors PV();
+extern boolean hideBlindSlurs PV();
+extern boolean instrumentNames PV();
+extern boolean beVerbose PV();
+extern boolean debugMode PV();
+extern boolean insertDuration PV();
+extern boolean rearrangeNote PV();
+extern boolean countMacro PV();
+extern boolean expandMacro PV();
+extern boolean checkPitch PV();
+
+
+#undef vextern
+
+#endif /*CONTROL_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/control.pas b/Build/source/utils/mtx/mtx-0.60d/control.pas
new file mode 100644
index 00000000000..fbe224658a8
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/control.pas
@@ -0,0 +1,198 @@
+unit control; { DPL 2004-03-21 }
+{ Controls which M-Tx features are enabled.
+ The interface allows one to interrogate the feature state, to set
+ features according to the M-Tx level, and to override features given
+ the feature name as a character string.
+}
+
+interface
+
+procedure mtxLevel(level: string);
+function setFeature(which: string; val: boolean): boolean;
+ { return TRUE means OK, return FALSE means there is no such feature }
+procedure printFeatures(anyway: boolean);
+ { anyway TRUE means print all feature settings, FALSE means only those
+ that were set via setFeature }
+
+function multiFile: boolean;
+function splitShortcut: boolean;
+function newWordShortcut: boolean;
+function doChords: boolean;
+function doUptext: boolean;
+function doLyrics: boolean;
+function unbeamVocal: boolean;
+function uptextOnRests: boolean;
+function solfaNoteNames: boolean;
+function pedanticWarnings: boolean;
+function ignoreErrors: boolean;
+function hideBlindSlurs: boolean;
+function instrumentNames: boolean;
+function beVerbose: boolean;
+function debugMode: boolean;
+function insertDuration: boolean;
+function rearrangeNote: boolean;
+function countMacro: boolean;
+function expandMacro: boolean;
+function checkPitch: boolean;
+
+implementation uses utility;
+
+type feature = (noSuchFeature,
+ FmultiFile, { enables Include: directive }
+ FsplitShortcut, { one-word shortcut is treated by simply inserting a blank }
+ FnewWordShortcut, { detached form of shortcut allowed }
+ FdoChords, { C: lines are taken into account }
+ FdoUptext, { U: lines are taken into account }
+ FdoLyrics, { L: lines are taken into account }
+ FunbeamVocal, { non-melismatic eighth and shorter notes in vocal lines are unbeamed }
+ FhideBlindSlurs, { blind slurs are hidden }
+ FuptextOnRests, { U: lines synchronize with words and rests }
+ FinsertDuration, { always insert duration into notes }
+ FcountMacro, { include macros in the count }
+ FexpandMacro, { literally expand macros }
+ FcheckPitch, { keep track of pitch and warn if unreal }
+ FrearrangeNote, { transform note words to canical form }
+ FsolfaNoteNames, { use solfa note names }
+ FpedanticWarnings, { issue warnings even when default action is likely to be correct }
+ FignoreErrors, { ignore all errors except fatal errors }
+ FinstrumentNames, { set instrument names }
+ FbeVerbose, { report what is being done }
+ FdebugMode { write all possible infomative messages } );
+
+ Tfeature = record
+ tag: string[30];
+ active, changed: boolean
+ end;
+
+const
+ firstFeature = FmultiFile;
+ lastFeature = FdebugMode;
+
+ feat: array[feature] of Tfeature = (
+ ( tag: ''; active: false; changed: false),
+ ( tag: 'multiFile'; active: true; changed: false),
+ ( tag: 'splitShortcut'; active: true; changed: false),
+ ( tag: 'newWordShortcut'; active: true; changed: false),
+ ( tag: 'doChords'; active: true; changed: false),
+ ( tag: 'doUptext'; active: true; changed: false),
+ ( tag: 'doLyrics'; active: true; changed: false),
+ ( tag: 'unbeamVocal'; active: true; changed: false),
+ ( tag: 'hideBlindSlurs'; active: true; changed: false),
+ ( tag: 'uptextOnRests'; active: true; changed: false),
+ ( tag: 'insertDuration'; active: true; changed: false),
+ ( tag: 'countMacro'; active: false; changed: false),
+ ( tag: 'expandMacro'; active: false; changed: false),
+ ( tag: 'checkPitch'; active: true; changed: false),
+ ( tag: 'rearrangeNote'; active: true; changed: false),
+ ( tag: 'solfaNoteNames'; active: false; changed: false),
+ ( tag: 'pedanticWarnings'; active: false; changed: false),
+ ( tag: 'ignoreErrors'; active: false; changed: false),
+ ( tag: 'instrumentNames'; active: false; changed: false),
+ ( tag: 'beVerbose'; active: false; changed: false),
+ ( tag: 'debugMode'; active: false; changed: false)
+ );
+
+procedure printFeatures(anyway: boolean);
+ var i: feature;
+begin for i:=firstFeature to lastFeature do with feat[i] do
+ if changed or anyway then writeln(tag, ' = ', active)
+end;
+
+function featureNamed(s: string): feature;
+ var i: feature;
+begin for i:=firstFeature to lastFeature do
+ if equalsIgnoreCase(s,feat[i].tag) then begin featureNamed := i; exit end;
+ featureNamed := noSuchFeature
+end;
+
+function setFeature(which: string; val: boolean): boolean;
+ var f: feature;
+begin setFeature := false; f := featureNamed(which);
+ if f <> noSuchFeature then with feat[f] do
+ begin active := val; changed := true; setFeature := true end;
+ if (f=FdebugMode) and val then feat[FbeVerbose].active := true;
+ if (f=FbeVerbose) and not val then feat[FdebugMode].active := false;
+end;
+
+procedure mtxLevel(level: string);
+begin
+ if level<'0.57' then
+ begin
+ setFeature('splitShortcut',false);
+ setFeature('newWordShortcut',false);
+ end
+end;
+
+{ Feature functions. To add a new feature "newFeature":
+ 1. Insert a new value "FnewFeature" in the declaration of type "feature".
+ 2. Insert an entry for it in array "feat".
+ 3. Copy the template below and change "FEATURE" into "newFeature".
+ 4. Copy the function header to the interface section.
+ 5. (Optional) Insert code into "mtxLevel" to enable/disable the feature.
+
+function FEATURE: boolean;
+begin FEATURE := feat[FFEATURE].active end;
+}
+
+function checkPitch: boolean;
+begin checkPitch := feat[FcheckPitch].active end;
+
+function countMacro: boolean;
+begin countMacro := feat[FcountMacro].active end;
+
+function expandMacro: boolean;
+begin expandMacro := feat[FexpandMacro].active end;
+
+function insertDuration: boolean;
+begin insertDuration := feat[FinsertDuration].active end;
+
+function rearrangeNote: boolean;
+begin rearrangeNote := feat[FrearrangeNote].active end;
+
+function beVerbose: boolean;
+begin beVerbose := feat[FbeVerbose].active end;
+
+function debugMode: boolean;
+begin debugMode := feat[FdebugMode].active end;
+
+function instrumentNames: boolean;
+begin instrumentNames := feat[FinstrumentNames].active end;
+
+function hideBlindSlurs: boolean;
+begin hideBlindSlurs := feat[FhideBlindSlurs].active end;
+
+function doLyrics: boolean;
+begin doLyrics := feat[FdoLyrics].active end;
+
+function ignoreErrors: boolean;
+begin ignoreErrors := feat[FignoreErrors].active end;
+
+function pedanticWarnings: boolean;
+begin pedanticWarnings := feat[FpedanticWarnings].active end;
+
+function solfaNoteNames: boolean;
+begin solfaNoteNames := feat[FsolfaNoteNames].active end;
+
+function uptextOnRests: boolean;
+begin uptextOnRests := feat[FuptextOnRests].active end;
+
+function unbeamVocal: boolean;
+begin unbeamVocal := feat[FunbeamVocal].active end;
+
+function doChords: boolean;
+begin doChords := feat[FdoChords].active end;
+
+function doUptext: boolean;
+begin doUptext := feat[FdoUptext].active end;
+
+function newWordShortcut: boolean;
+begin newWordShortcut := feat[FnewWordShortcut].active end;
+
+function splitShortcut: boolean;
+begin splitShortcut := feat[FsplitShortcut].active end;
+
+function multiFile: boolean;
+begin multiFile := feat[FmultiFile].active end;
+
+end.
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/files.c b/Build/source/utils/mtx/mtx-0.60d/files.c
new file mode 100644
index 00000000000..6702bcdd003
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/files.c
@@ -0,0 +1,379 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "files.pas" */
+
+
+#include "p2c.h"
+
+
+#define FILES_G
+#include "files.h"
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+#define param_leader '-'
+
+
+Static Char stylefilename[256] = "mtxstyle.txt";
+
+Static short teststyle;
+
+
+boolean endOfInfile()
+{
+ return (eofAll());
+}
+
+
+Void tex3(s)
+Char *s;
+{
+ Char STR1[256], STR2[256];
+
+ if (!pmx_preamble_done) {
+ putLine(s);
+ return;
+ }
+ if (s[0] == '%') {
+ putLine(s);
+ return;
+ }
+ if (first_paragraph) {
+ sprintf(STR2, "\\%s\\", s);
+ putLine(STR2);
+ } else {
+ sprintf(STR1, "\\\\%s\\", s);
+ putLine(STR1);
+ }
+}
+
+
+Void putLine(line)
+Char *line;
+{
+ if (outlen + strlen(line) >= PMXlinelength)
+ putc('\n', outfile);
+ fprintf(outfile, "%s\n", line);
+ outlen = 0;
+}
+
+
+Void put(line_, putspace_)
+Char *line_;
+boolean putspace_;
+{
+ Char line[256];
+ short l;
+ Char STR1[256];
+
+ strcpy(line, line_);
+ l = strlen(line);
+ if (l > PMXlinelength)
+ error("Item longer than PMX line length", print);
+ if (outlen + l >= PMXlinelength) {
+ putLine("");
+ put(line, false);
+ return;
+ }
+ if (putspace_ && outlen > 0 && line[0] != ' ')
+ sprintf(line, " %s", strcpy(STR1, line));
+ fputs(line, outfile);
+ outlen += l;
+}
+
+
+boolean styleFileFound()
+{
+ return (teststyle != 0);
+}
+
+
+Static Void helpmessage()
+{
+ printf("Usage: prepmx [-bcfnhimtuvwDH0123456789] MTXFILE [TEXDIR] [STYLEFILE]\n");
+}
+
+
+Static Void bighelpmessage()
+{
+ helpmessage();
+ printf("\nMTXFILE: name of .mtx file without its extension\n");
+ printf("TEXDIR: directory where the TeX file made by PMX goes, default is ./\n");
+ printf("STYLEFILE: name of a file containing style definitions. Default is\n");
+ printf(" mtxstyle.txt. This feature is now deprecated; use Include: STYLEFILE\n");
+ printf(" in the preamble of the .mtx file instead.\n");
+ printf("Options: (can also be entered separately: -b -c ...)\n");
+ printf(" -b: disable unbeamVocal\n");
+ printf(" -c: disable doChords\n");
+ printf(" -f: enable solfaNoteNames\n");
+ printf(" -h: display this message and quit\n");
+ printf(" -i: enable ignoreErrors\n");
+ printf(" -m: disable doLyrics\n");
+ printf(" -n: enable instrumentNames\n");
+ printf(" -t: disable doUptext\n");
+ printf(" -u: disable uptextOnRests\n");
+ printf(" -v: enable beVerbose\n");
+ printf(" -w: enable pedanticWarnings\n");
+ printf(" -D: enable debugMode\n");
+ printf(" -0123456789: select Case\n");
+ printf(" -H: print enabled status of all options\n");
+ printf("All the above, and some other, options can be enabled or disabled\n");
+ printf(" in the preamble. What you do there overrides what you do here.\n");
+}
+
+
+Void processOption(j)
+Char j;
+{
+ switch (j) {
+
+ case 'b':
+ setFeature("unbeamVocal", false);
+ break;
+
+ case 'c':
+ setFeature("doChords", false);
+ break;
+
+ case 'f':
+ setFeature("solfaNoteNames", true);
+ break;
+
+ case 'h':
+ bighelpmessage();
+ _Escape(255);
+ break;
+
+ case 'i':
+ setFeature("ignoreErrors", true);
+ break;
+
+ case 'm':
+ setFeature("doLyrics", false);
+ break;
+
+ case 'n':
+ setFeature("instrumentNames", true);
+ break;
+
+ case 't':
+ setFeature("doUptext", false);
+ break;
+
+ case 'u':
+ setFeature("uptextOnRests", false);
+ break;
+
+ case 'v':
+ setFeature("beVerbose", true);
+ break;
+
+ case 'w':
+ setFeature("pedanticWarnings", true);
+ break;
+
+ case 'D':
+ setFeature("debugMode", true);
+ break;
+
+ case 'H':
+ printFeatures(true);
+ break;
+
+ default:
+ if (isdigit(j))
+ choice = j;
+ else {
+ putchar(j);
+ error(": invalid option", !print);
+ }
+ break;
+ }
+}
+
+
+/* Local variables for OpenFiles: */
+struct LOC_OpenFiles {
+ short testin;
+ Char basename[256];
+} ;
+
+Local Void checkExistingFile(LINK)
+struct LOC_OpenFiles *LINK;
+{
+ FILE *tryfile;
+ Char tryfile_NAME[_FNSIZE];
+
+ strcpy(tryfile_NAME, LINK->basename);
+ tryfile = fopen(tryfile_NAME, "r+b");
+ _SETIO(tryfile != NULL, FileNotFound);
+ LINK->testin = P_ioresult;
+ if (LINK->testin != 0)
+ return;
+ if (tryfile != NULL)
+ fclose(tryfile);
+ printf("There exists a file named %s. I am treating this\n",
+ LINK->basename);
+ error(" as a fatal error unless you specify -i", !print);
+}
+
+
+Void OpenFiles()
+{
+ struct LOC_OpenFiles V;
+ short i, j, l;
+ short fileid = 0;
+ Char infilename[256], outfilename[256], param[256], ext[256];
+ short FORLIM1;
+ Char STR3[256];
+
+ line_no = 0;
+ paragraph_no = 0;
+ for (i = 1; i <= P_argc - 1; i++) {
+ strcpy(param, P_argv[i]);
+ if (param[0] == param_leader) {
+ FORLIM1 = strlen(param);
+ for (j = 1; j <= FORLIM1 - 1; j++)
+ processOption(param[j]);
+ } else if (fileid == 0)
+ fileid = i;
+ else if (*texdir == '\0')
+ strcpy(texdir, param);
+ else
+ strcpy(stylefilename, param);
+ }
+ if (fileid == 0) {
+ helpmessage();
+ printf("Try \"prepmx -h\" for more information.\n");
+ _Escape(255);
+ }
+ strcpy(V.basename, P_argv[fileid]);
+ l = strlen(V.basename);
+ if (l > 4 && V.basename[l-4] == '.') {
+ substr_(ext, V.basename, l - 2, 3);
+ toUpper(ext);
+ if (!strcmp(ext, "MTX")) {
+ warning(".mtx extension deleted from basename", !print);
+ shorten(V.basename, l - 4);
+ }
+ }
+ if (pos1('.', V.basename) > 0)
+ checkExistingFile(&V);
+ sprintf(infilename, "%s.mtx", V.basename);
+ sprintf(outfilename, "%s.pmx", V.basename);
+ pushFile(infilename);
+ strcpy(outfile_NAME, outfilename);
+ if (outfile != NULL)
+ outfile = freopen(outfile_NAME, "w", outfile);
+ else
+ outfile = fopen(outfile_NAME, "w");
+ _SETIO(outfile != NULL, FileNotFound);
+ strcpy(stylefile_NAME, stylefilename);
+ if (stylefile != NULL)
+ stylefile = freopen(stylefile_NAME, "r", stylefile);
+ else
+ stylefile = fopen(stylefile_NAME, "r");
+ _SETIO(stylefile != NULL, FileNotFound);
+ teststyle = P_ioresult;
+ if (teststyle != 0 && strcmp(stylefilename, "mtxstyle.txt"))
+ _SETIO(printf("Can't read %s\n", stylefilename) >= 0, FileWriteError);
+ if (fileError()) {
+ sprintf(STR3, "Input file %s not found", infilename);
+ fatalerror(STR3);
+ }
+ outfile_open = true;
+ printf("Writing to %s.pmx\n", V.basename);
+}
+
+
+Void CloseFiles()
+{
+ if (outfile != NULL)
+ fclose(outfile);
+ outfile = NULL;
+ closeAll();
+ if (teststyle != 0)
+ return;
+ if (stylefile != NULL)
+ fclose(stylefile);
+ stylefile = NULL;
+}
+
+
+Void readParagraph(P, no, L)
+Char (*P)[256];
+short *no;
+paragraph_index0 *L;
+{
+ boolean another;
+ Char filename[256], buffer[256];
+ Char STR1[256], STR3[256];
+
+ *L = 0;
+ readData(buffer);
+ line_no = currentLineNo();
+ if (isEmpty(buffer))
+ return;
+ if (debugMode())
+ printf(">>>> %s\n", buffer);
+ paragraph_no++;
+ /* Handle directives affecting the processing of the input file */
+ do {
+ another = false;
+ if (startsWithIgnoreCase(buffer, "SUSPEND")) {
+ ignore_input = true;
+ another = true;
+ if (beVerbose())
+ printf("-->> Suspending input file %s at line %d\n",
+ currentFilename(STR3), line_no);
+ }
+ if (startsWithIgnoreCase(buffer, "RESUME")) {
+ ignore_input = false;
+ another = true;
+ if (beVerbose())
+ printf("-->> Resuming input file %s at line %d\n",
+ currentFilename(STR1), line_no);
+ }
+ if (startsWithIgnoreCase(buffer, "INCLUDE:")) {
+ predelete(buffer, 8);
+ NextWord(filename, buffer, ' ', ' ');
+ pushFile(filename);
+ another = true;
+ }
+ if (another) {
+ readLine(buffer);
+ line_no = currentLineNo();
+ }
+ } while (another);
+ /* Normal paragraph input*/
+ do {
+ if (*L < lines_in_paragraph) {
+ (*L)++;
+ strcpy(P[*L - 1], buffer);
+ *buffer = '\0';
+ no[*L - 1] = line_no;
+ } else
+ warning("Paragraph too long: skipping line", !print);
+ readLine(buffer);
+ line_no = currentLineNo();
+ if (debugMode())
+ printf("%d >> %s\n", line_no, buffer);
+ } while (!isEmpty(buffer));
+ skipBlanks(); /* needed to identify final paragraph */
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/files.h b/Build/source/utils/mtx/mtx-0.60d/files.h
new file mode 100644
index 00000000000..66e978f78ca
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/files.h
@@ -0,0 +1,38 @@
+/* Header for module files, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef FILES_H
+#define FILES_H
+
+
+/* Open and close files, interpret command line, do input, do most output*/
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+#ifndef MULTFILE_H
+#include "multfile.h"
+#endif
+
+
+#ifdef FILES_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+extern Void readParagraph PP((Char (*P)[256], short *no, paragraph_index0 *L));
+extern boolean styleFileFound PV();
+extern Void processOption PP((int j));
+extern Void OpenFiles PV();
+extern Void CloseFiles PV();
+extern Void putLine PP((Char *line));
+extern Void put PP((Char *line, int putspace_));
+extern Void tex3 PP((Char *s));
+extern boolean endOfInfile PV();
+
+
+#undef vextern
+
+#endif /*FILES_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/files.pas b/Build/source/utils/mtx/mtx-0.60d/files.pas
new file mode 100644
index 00000000000..8762f7e6e2d
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/files.pas
@@ -0,0 +1,196 @@
+unit files;
+{ Open and close files, interpret command line, do input, do most output}
+
+interface uses globals, multfile;
+
+procedure readParagraph (var P: paragraph; var no: line_nos;
+ var L: paragraph_index0);
+function styleFileFound: boolean;
+procedure processOption(j: char);
+procedure OpenFiles;
+procedure CloseFiles;
+procedure putLine (line: string);
+procedure put(line: string; putspace: boolean);
+procedure tex3 (s: string);
+function endOfInfile: boolean;
+
+implementation uses control, strings, utility;
+
+const param_leader = '-';
+ stylefilename: string = 'mtxstyle.txt';
+
+var teststyle: integer;
+
+function endOfInfile: boolean;
+ begin endOfInfile:=eofAll; end;
+
+procedure tex3 (s: string);
+ begin
+ if pmx_preamble_done then
+ if s[1]='%' then putLine(s)
+ else if first_paragraph then putLine('\'+s+'\')
+ else putLine('\\'+s+'\')
+ else putLine(s);
+ end;
+
+procedure putLine (line: string);
+ begin if outlen+length(line) > pmxlinelength-1 then writeln(outfile);
+ writeln(outfile,line); outlen:=0;
+ end;
+
+procedure put(line: string; putspace: boolean);
+ var l: integer;
+ begin l:=length(line);
+ if l>pmxlinelength then error('Item longer than PMX line length',print);
+ if outlen+l > pmxlinelength-1 then
+ begin putLine(''); put(line,false) end
+ else begin if putspace and (outlen>0) and (line[1]<>' ') then
+ line:=' '+line;
+ write(outfile,line); inc(outlen,l);
+ end
+ end;
+
+function styleFileFound: boolean;
+begin styleFileFound := teststyle<>0; end;
+
+procedure helpmessage;
+begin
+ writeln('Usage: prepmx [-bcfnhimtuvwDH0123456789] MTXFILE [TEXDIR] [STYLEFILE]')
+end;
+
+procedure bighelpmessage;
+begin helpmessage; writeln;
+ writeln('MTXFILE: name of .mtx file without its extension');
+ writeln('TEXDIR: directory where the TeX file made by PMX goes, default is ./');
+ writeln('STYLEFILE: name of a file containing style definitions. Default is');
+ writeln(' mtxstyle.txt. This feature is now deprecated; use Include: STYLEFILE');
+ writeln(' in the preamble of the .mtx file instead.');
+ writeln('Options: (can also be entered separately: -b -c ...)');
+ writeln(' -b: disable unbeamVocal');
+ writeln(' -c: disable doChords');
+ writeln(' -f: enable solfaNoteNames');
+ writeln(' -h: display this message and quit');
+ writeln(' -i: enable ignoreErrors');
+ writeln(' -m: disable doLyrics');
+ writeln(' -n: enable instrumentNames');
+ writeln(' -t: disable doUptext');
+ writeln(' -u: disable uptextOnRests');
+ writeln(' -v: enable beVerbose');
+ writeln(' -w: enable pedanticWarnings');
+ writeln(' -D: enable debugMode');
+ writeln(' -0123456789: select Case');
+ writeln(' -H: print enabled status of all options');
+ writeln('All the above, and some other, options can be enabled or disabled');
+ writeln(' in the preamble. What you do there overrides what you do here.')
+end;
+
+procedure processOption(j: char);
+ begin case j of
+ 'b': setFeature('unbeamVocal',false);
+ 'c': setFeature('doChords',false);
+ 'f': setFeature('solfaNoteNames',true);
+ 'h': begin bighelpmessage; halt(255) end;
+ 'i': setFeature('ignoreErrors',true);
+ 'm': setFeature('doLyrics',false);
+ 'n': setFeature('instrumentNames',true);
+ 't': setFeature('doUptext',false);
+ 'u': setFeature('uptextOnRests',false);
+ 'v': setFeature('beVerbose',true);
+ 'w': setFeature('pedanticWarnings',true);
+ 'D': setFeature('debugMode',true);
+ '0'..'9': choice:=j;
+ 'H': printFeatures(true);
+ else write(j); error(': invalid option',not print);
+ end;
+end;
+
+procedure OpenFiles;
+var i, j, l, fileid, testin: integer;
+ infilename, outfilename, basename, param, ext: string;
+ procedure checkExistingFile;
+ var tryfile: file;
+ begin
+{$I-}
+ assign(tryfile,basename); reset(tryfile); testin := ioresult;
+{$I+}
+ if testin<>0 then exit else close(tryfile);
+ writeln('There exists a file named ',basename,'. I am treating this');
+ error(' as a fatal error unless you specify -i',not print);
+ end;
+begin
+ fileid:=0; line_no:=0; paragraph_no:=0;
+ for i:=1 to ParamCount do
+ begin param:=ParamStr(i);
+ if param[1]=param_leader then
+ for j:=2 to length(param) do processOption(param[j])
+ else if fileid=0 then fileid:=i
+ else if texdir='' then texdir:=param
+ else stylefilename:=param;
+ end;
+ if fileid=0 then
+ begin helpmessage; writeln('Try "prepmx -h" for more information.'); halt(255) end
+ else basename:=paramstr(fileid);
+ l:=length(basename);
+ if (l>4) and (basename[l-3]='.') then
+ begin ext:=substr(basename,l-2,3); toUpper(ext); if ext='MTX' then
+ begin warning('.mtx extension deleted from basename',not print);
+ shorten(basename,l-4);
+ end;
+ end;
+ if pos1('.',basename)>0 then checkExistingFile;
+ infilename := basename+'.mtx'; outfilename := basename+'.pmx';
+{$I-}
+ pushFile(infilename);
+ assign(outfile,outfilename); rewrite(outfile);
+ assign(stylefile,stylefilename); reset(stylefile); teststyle := ioresult;
+ if (teststyle<>0) and (stylefilename<>'mtxstyle.txt') then
+ writeln('Can''t read ',stylefilename);
+{$I+}
+ if fileError then fatalError('Input file '+infilename+' not found');
+ outfile_open := true; writeln('Writing to ',basename,'.pmx');
+end;
+
+procedure CloseFiles;
+begin close(outfile); closeAll; if teststyle=0 then close(stylefile);
+end;
+
+procedure readParagraph (var P: paragraph; var no: line_nos;
+ var L: paragraph_index0);
+ var another: boolean;
+ filename, buffer: string;
+begin
+ L:=0; buffer:=readData; line_no:=currentLineNo;
+ if isEmpty(buffer) then exit;
+ if debugMode then writeln('>>>> ',buffer);
+ inc(paragraph_no);
+{ Handle directives affecting the processing of the input file }
+ repeat another:=false;
+ if startsWithIgnoreCase(buffer,'SUSPEND') then
+ begin ignore_input:=true; another:=true; if beVerbose then
+ writeln('-->> Suspending input file ',currentFilename,
+ ' at line ', line_no);
+ end;
+ if startsWithIgnoreCase(buffer,'RESUME') then
+ begin ignore_input:=false; another:=true; if beVerbose then
+ writeln('-->> Resuming input file ',currentFilename,
+ ' at line ', line_no);
+ end;
+ if startsWithIgnoreCase(buffer,'INCLUDE:') then
+ begin predelete(buffer,8); filename:=nextWord(buffer,' ',' ');
+ pushfile(filename); another:=true;
+ end;
+ if another then begin buffer:=readLine; line_no:=currentLineNo; end;
+ until not another;
+{ Normal paragraph input}
+ repeat
+ if L<lines_in_paragraph then
+ begin inc(L); P[L]:=buffer; buffer:=''; no[L]:=line_no;
+ end
+ else warning('Paragraph too long: skipping line',not print);
+ buffer:=readLine; line_no := currentLineNo;
+ if debugMode then writeln(line_no,' >> ', buffer);
+ until isEmpty(buffer);
+ skipBlanks; { needed to identify final paragraph }
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/globals.c b/Build/source/utils/mtx/mtx-0.60d/globals.c
new file mode 100644
index 00000000000..d022881a84d
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/globals.c
@@ -0,0 +1,348 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "globals.pas" */
+
+
+#include "p2c.h"
+
+
+#define GLOBALS_G
+#include "globals.h"
+
+
+Char double_comment[3] = "%%";
+Char durations[ndurs + 1] = "90248136";
+Char terminators[256] = ".x";
+Char has_duration[9] = "abcdefgr";
+Char solfa_names[8] = "drmfslt";
+Char choice = ' ';
+boolean outfile_open = false;
+Char texdir[256] = "";
+Char old_meter_word[256] = "";
+short outlen = 0;
+boolean ignore_input = false;
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+boolean isNoteOrRest(w)
+Char *w;
+{
+ return (pos1(w[0], has_duration) > 0);
+}
+
+
+boolean isPause(note)
+Char *note;
+{
+ return (startsWith(note, pause));
+}
+
+
+Void cancel(num, denom, lowest)
+short *num, *denom, lowest;
+{
+ while (((*num) & 1) == 0 && *denom > lowest) {
+ *num /= 2;
+ *denom /= 2;
+ }
+}
+
+
+Char *meterWord(Result, num, denom, pnum, pdenom)
+Char *Result;
+short num, denom, pnum, pdenom;
+{
+ Char STR1[256], STR2[256], STR4[256], STR5[256];
+
+ sprintf(Result, "m%s/%s/%s/%s",
+ toString(STR1, num), toString(STR2, denom), toString(STR4, pnum),
+ toString(STR5, pdenom));
+ return Result;
+}
+
+
+Char *meterChange(Result, n1, n2, blind)
+Char *Result;
+short n1, n2;
+boolean blind;
+{
+ short f = 64;
+ short l;
+
+ if (!blind)
+ return (meterWord(Result, n1, PMXmeterdenom(n2), 0, 0));
+ /* CMO: process denominator value with function PMXmeterdenom */
+ l = n1 * (64 / n2);
+ cancel(&l, &f, meterdenom);
+ /* CMO: process denominator value with function PMXmeterdenom */
+ meterWord(Result, l, PMXmeterdenom(f), 0, 0);
+ if (meternum > 0)
+ printf("Blind meter change to %d/%d on line %d\n", l, f, line_no);
+ return Result;
+}
+
+
+Void setSpace(line_)
+Char *line_;
+{
+ Char line[256];
+ short i = 0;
+ Char word[256];
+
+ strcpy(line, line_);
+ while (i < ninstr) {
+ GetNextWord(word, line, blank, dummy);
+ if (*word == '\0')
+ return;
+ i++;
+ getNum(word, &nspace[i-1]);
+ }
+}
+
+
+Static Void onumber(s, j, n1)
+Char *s;
+short *j, *n1;
+{
+ if (s[*j - 1] == 'o')
+ *n1 = 1;
+ else if (s[*j - 1] == '1') {
+ *n1 = digit(s[*j]) + 10;
+ (*j)++;
+ } else
+ *n1 = digit(s[*j - 1]);
+ (*j)++;
+}
+
+
+Static Void extractNumber(s, k)
+Char *s;
+short *k;
+{
+ Char w[256];
+
+ GetNextWord(w, s, '/', dummy);
+ getNum(w, k);
+}
+
+
+Static Void readMeter(meter_, meternum, meterdenom, pmnum, pmdenom)
+Char *meter_;
+short *meternum, *meterdenom, *pmnum, *pmdenom;
+{
+ Char meter[256];
+ short j;
+
+ strcpy(meter, meter_);
+ if (meter[0] == 'm') {
+ if (pos1('/', meter) == 0) {
+ j = 2;
+ onumber(meter, &j, meternum);
+ onumber(meter, &j, meterdenom);
+ onumber(meter, &j, pmnum);
+ onumber(meter, &j, pmdenom);
+ return;
+ }
+ predelete(meter, 1);
+ extractNumber(meter, meternum);
+ extractNumber(meter, meterdenom);
+ extractNumber(meter, pmnum);
+ extractNumber(meter, pmdenom);
+ return;
+ }
+ getTwoNums(meter, meternum, meterdenom);
+ *pmnum = *meternum;
+ *pmdenom = *meterdenom;
+}
+
+
+Void getMeter(line_, meternum, meterdenom, pmnum, pmdenom)
+Char *line_;
+short *meternum, *meterdenom, *pmnum, *pmdenom;
+{
+ Char line[256];
+ Char meter[256];
+ Char STR1[256];
+
+ strcpy(line, line_);
+ GetNextWord(meter, line, blank, dummy);
+ if (!strcmp(meter, "C/") || !strcmp(meter, "mC/")) {
+ *meternum = 2;
+ *meterdenom = 2;
+ *pmdenom = 5;
+ *pmnum = 0;
+ } else if (!strcmp(meter, "C") || !strcmp(meter, "mC")) {
+ *meternum = 4;
+ *meterdenom = 4;
+ *pmdenom = 6;
+ *pmnum = 0;
+ } else
+ readMeter(meter, meternum, meterdenom, pmnum, pmdenom);
+ if (*meterdenom == 0) {
+ sprintf(STR1, "%s: Meter denominator must be nonzero", meter);
+ error(STR1, print);
+ }
+ /* CMO: Convert PMX syntax meter denominator '0' to '1' to be used for
+ prepmx duration checks */
+ /* if meterdenom=0 then meterdenom:=1; */
+}
+
+
+Static short whereInParagraph(l)
+short l;
+{
+ short Result = 0;
+ short j, FORLIM;
+
+ FORLIM = para_len;
+ for (j = 1; j <= FORLIM; j++) {
+ if (orig_line_no[j-1] == l)
+ return j;
+ }
+ return Result;
+}
+
+
+Void fatalerror(message)
+Char *message;
+{
+ setFeature("ignoreErrors", false);
+ error(message, !print);
+}
+
+
+Void error(message, printLine)
+Char *message;
+boolean printLine;
+{
+ short j;
+
+ printf("%s: ERROR on line %d\n", message, line_no);
+ j = whereInParagraph(line_no);
+ if (j > 0 && printLine)
+ puts(P[j-1]);
+ if (ignoreErrors())
+ return;
+ if (outfile_open) {
+ if (outfile != NULL)
+ fclose(outfile);
+ outfile = NULL;
+ outfile = fopen(outfile_NAME, "w");
+ if (outfile == NULL)
+ _EscIO2(FileNotFound, outfile_NAME);
+ fclose(outfile);
+ outfile = NULL;
+ }
+ if (line_no == 0)
+ line_no = 10000;
+ _Escape(line_no);
+}
+
+
+Void warning(message, printLine)
+Char *message;
+boolean printLine;
+{
+ short j;
+
+ if (line_no <= 0) {
+ printf("%s: WARNING in preamble\n", message);
+ return;
+ }
+ printf("%s: WARNING on line %d\n", message, line_no);
+ if (!printLine)
+ return;
+ j = whereInParagraph(line_no);
+ if (j > 0)
+ puts(P[j-1]);
+}
+
+
+short PMXinstr(stave)
+short stave;
+{
+ return (ninstr - instr[stave-1] + 1);
+}
+
+
+Void setDefaultDuration(meterdenom)
+short meterdenom;
+{
+ switch (meterdenom) {
+
+ case 1:
+ default_duration = '0';
+ break;
+
+ case 2:
+ default_duration = '2';
+ break;
+
+ case 4:
+ default_duration = '4';
+ break;
+
+ case 8:
+ default_duration = '8';
+ break;
+
+ case 16:
+ default_duration = '1';
+ break;
+
+ case 32:
+ default_duration = '3';
+ break;
+
+ case 64:
+ default_duration = '6';
+ break;
+ }
+}
+
+
+short PMXmeterdenom(denom)
+short denom;
+{
+ short Result;
+
+ /* CMO: Convert M-Tx meter denominators to PMX syntax */
+ switch (denom) {
+
+ case 1:
+ Result = 0;
+ break;
+
+ case 16:
+ Result = 1;
+ break;
+
+ case 32:
+ Result = 3;
+ break;
+
+ case 64:
+ Result = 6;
+ break;
+
+ default:
+ Result = denom;
+ break;
+ }
+ return Result;
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/globals.h b/Build/source/utils/mtx/mtx-0.60d/globals.h
new file mode 100644
index 00000000000..1e0988edf25
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/globals.h
@@ -0,0 +1,154 @@
+/* Header for module globals, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef GLOBALS_H
+#define GLOBALS_H
+
+
+#ifdef GLOBALS_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+
+/* 1. All global variables.
+ 2. Miscellaneous other procedures required by several Units.
+*/
+
+/* CMO: addition/change by Christian Mondrup */
+
+
+#define PMXlinelength 128
+/* !!! One or more of the following constants should be reduced if this
+ program is to be compiled by a 16-bit compiler (e.g. Turbo Pascal),
+ otherwise you get a "Data segment too large" error */
+#define lines_in_paragraph 100
+#define max_words 128
+#define max_notes 128
+/* Christian Mondrup's suggestion to reduce data segment size:
+ lines_in_paragraph = 50;
+ max_words = 64;
+ max_notes = 64;
+*/
+#define max_bars 16
+#define maxstaves 15
+#define maxvoices 15
+#define maxgroups 3
+#define standardPMXvoices 12
+
+#define max_lyrics_line_length (PMXlinelength - 4)
+
+#define inf 32000
+#define unspec 1000
+#define default_size 20
+
+#define start_beam '['
+#define stop_beam ']'
+#define rest 'r'
+
+#define pause "rp"
+
+#define dotcode 'd'
+#define grace_group 'G'
+#define multi_group 'x'
+#define barsym '|'
+#define comment '%'
+#define blank ' '
+#define dot '.'
+#define comma ','
+#define colon ':'
+#define tilde '~'
+#define atsign '@'
+#define dummy '\0'
+
+#define ndurs 8
+
+#define unspecified '5' /* Not a valid duration */
+
+#define whole 2 /* position of '0' in durations */
+
+#define digits "123456789"
+#define digitsdot "0123456789."
+
+#define putspace true
+#define nospace false
+#define print true
+
+
+typedef char paragraph_index;
+
+typedef char voice_index;
+
+typedef char stave_index;
+
+typedef char bar_index0;
+
+typedef uchar word_index0;
+
+typedef char paragraph_index0;
+
+typedef char voice_index0;
+
+typedef char stave_index0;
+
+typedef Char paragraph[lines_in_paragraph][256];
+typedef short line_nos[lines_in_paragraph];
+
+
+extern Char double_comment[3];
+extern Char durations[ndurs + 1];
+extern Char terminators[256];
+extern Char has_duration[9];
+extern Char solfa_names[8];
+
+extern Char choice;
+extern boolean outfile_open;
+extern Char texdir[256];
+extern Char old_meter_word[256];
+extern short outlen;
+extern boolean ignore_input;
+vextern Char voice_label[maxvoices][256];
+vextern Char clef[maxstaves];
+vextern voice_index0 instr[maxstaves], stave[maxstaves],
+ first_on_stave[maxstaves], number_on_stave[maxstaves];
+vextern short nspace[maxstaves], stave_size[maxstaves];
+vextern voice_index0 nvoices, nstaves, ninstr, bottom, top;
+vextern short one_beat, full_bar, line_no, short_note, musicsize, meternum,
+ meterdenom, pmnum, pmdenom, paragraph_no, bar_no, pickup, nbars,
+ nleft;
+vextern paragraph_index0 para_len;
+vextern double xmtrnum0;
+vextern paragraph P;
+vextern line_nos orig_line_no;
+vextern FILE *infile, *outfile, *stylefile;
+vextern Char default_duration;
+vextern Char fracindent[256], this_version[256], this_version_date[256];
+vextern boolean pmx_preamble_done, first_paragraph, final_paragraph,
+ must_respace, must_restyle, multi_bar_rest, some_vocal;
+vextern Char infile_NAME[_FNSIZE];
+vextern Char outfile_NAME[_FNSIZE];
+vextern Char stylefile_NAME[_FNSIZE];
+
+
+extern Void error PP((Char *message, int printLine));
+extern Void fatalerror PP((Char *message));
+extern Void warning PP((Char *message, int printLine));
+extern short PMXinstr PP((int stave));
+extern Void setDefaultDuration PP((int meterdenom));
+extern Void getMeter PP((Char *line, short *meternum, short *meterdenom,
+ short *pmnum, short *pmdenom));
+extern Void setSpace PP((Char *line));
+extern Char *meterChange PP((Char *Result, int n1, int n2, int blind));
+extern Char *meterWord PP((Char *Result, int num, int denom, int pnum,
+ int pdenom));
+extern Void cancel PP((short *num, short *denom, int lowest));
+extern boolean isNoteOrRest PP((Char *w));
+extern boolean isPause PP((Char *note));
+/* CMO: */
+extern short PMXmeterdenom PP((int denom));
+
+
+#undef vextern
+
+#endif /*GLOBALS_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/globals.pas b/Build/source/utils/mtx/mtx-0.60d/globals.pas
new file mode 100644
index 00000000000..ad53376438f
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/globals.pas
@@ -0,0 +1,247 @@
+unit globals;
+
+{ 1. All global variables.
+ 2. Miscellaneous other procedures required by several Units.
+}
+
+interface
+
+const PMXlinelength = 128;
+{ !!! One or more of the following constants should be reduced if this
+ program is to be compiled by a 16-bit compiler (e.g. Turbo Pascal),
+ otherwise you get a "Data segment too large" error }
+ lines_in_paragraph = 100;
+ max_words = 128;
+ max_notes = 128;
+{ Christian Mondrup's suggestion to reduce data segment size:
+ lines_in_paragraph = 50;
+ max_words = 64;
+ max_notes = 64;
+}
+ max_bars = 16;
+ maxstaves = 15;
+ maxvoices = 15;
+ maxgroups = 3;
+ standardPMXvoices = 12;
+ max_lyrics_line_length = PMXlinelength-4;
+ inf = 32000;
+ unspec = 1000;
+ default_size = 20;
+
+ start_beam = '[';
+ stop_beam = ']';
+ rest = 'r';
+ pause = 'rp';
+ dotcode = 'd';
+ grace_group = 'G';
+ multi_group = 'x';
+ barsym = '|';
+ comment = '%';
+ double_comment: string[2] = '%%';
+ blank = ' ';
+ dot = '.';
+ comma = ',';
+ colon = ':';
+ tilde = '~';
+ atsign = '@';
+ dummy = #0;
+
+ ndurs = 8;
+ durations: string[ndurs] = '90248136';
+ unspecified = '5'; { Not a valid duration }
+ whole = 2; { position of '0' in durations }
+ terminators: string = '.x';
+ digits = '123456789';
+ digitsdot = '0123456789.';
+ has_duration: string[8] = 'abcdefgr';
+ solfa_names: string[7] = 'drmfslt';
+
+ choice: char = ' ';
+ outfile_open: boolean = false;
+ texdir: string = '';
+ old_meter_word: string = '';
+ outlen: integer = 0;
+ putspace = true;
+ nospace = false;
+ ignore_input: boolean = false;
+ print = true;
+
+type
+ paragraph_index = 1..lines_in_paragraph;
+ voice_index = 1..maxvoices;
+ stave_index = 1..maxstaves;
+ bar_index0 = 0..max_bars;
+ word_index0 = 0..max_words;
+ paragraph_index0 = 0..lines_in_paragraph;
+ voice_index0 = 0..maxvoices;
+ stave_index0 = 0..maxstaves;
+ paragraph = array[paragraph_index] of string;
+ line_nos = array[paragraph_index] of integer;
+
+var voice_label: array[voice_index] of string;
+ clef: array[stave_index] of char;
+ instr, stave, first_on_stave, number_on_stave:
+ array[stave_index] of voice_index0;
+ nspace, stave_size: array[stave_index] of integer;
+ nvoices, nstaves, ninstr, bottom, top: voice_index0;
+ one_beat, full_bar, line_no, short_note, musicsize,
+ meternum, meterdenom, pmnum, pmdenom, paragraph_no,
+ bar_no, pickup, nbars, nleft: integer;
+ para_len: paragraph_index0;
+ xmtrnum0: real;
+ P: paragraph;
+ orig_line_no: line_nos;
+ infile, outfile, stylefile: text;
+ default_duration: char;
+ fracindent, this_version, this_version_date: string;
+ pmx_preamble_done, first_paragraph, final_paragraph, must_respace,
+ must_restyle, multi_bar_rest, some_vocal: boolean;
+
+procedure error(message: string; printLine: boolean);
+procedure fatalerror(message: string);
+procedure warning(message: string; printLine: boolean);
+function PMXinstr (stave: integer): integer;
+procedure setDefaultDuration(meterdenom: integer);
+procedure getMeter(line: string;
+ var meternum, meterdenom, pmnum, pmdenom: integer);
+procedure setSpace(line: string);
+function meterChange(n1, n2: integer; blind: boolean): string;
+function meterWord (num, denom, pnum, pdenom: integer): string;
+procedure cancel(var num,denom: integer; lowest: integer);
+function isNoteOrRest(w: string): boolean;
+function isPause(note: string): boolean;
+
+implementation uses strings, control, utility;
+
+function isNoteOrRest(w: string): boolean;
+begin isNoteOrRest := pos1(w[1],has_duration)>0; end;
+
+function isPause(note: string): boolean;
+begin isPause:=startsWith(note,pause); end;
+
+procedure cancel(var num,denom: integer; lowest: integer);
+begin while (num mod 2 = 0) and (denom>lowest) do
+ begin num:=num div 2; denom:=denom div 2; end;
+end;
+
+function meterWord (num,denom,pnum,pdenom: integer): string;
+begin meterWord := 'm' + toString(num) + '/' + toString(denom) +
+ '/' + toString(pnum) + '/' + toString(pdenom);
+end;
+
+function meterChange(n1, n2: integer; blind: boolean): string;
+ var f, l: integer;
+begin
+ if blind then
+ begin f:=64; l:=n1 * (64 div n2);
+ cancel(l,f,meterdenom); meterChange := meterWord (l,f,0,0);
+ if meternum>0 then
+ writeln('Blind meter change to ', l, '/', f, ' on line ', line_no);
+ end
+ else meterChange := meterWord(n1,n2,0,0);
+end;
+
+procedure setSpace(line: string);
+ var i: integer;
+ word: string;
+ begin i:=0;
+ while i<ninstr do
+ begin word:=GetNextWord(line,blank,dummy);
+ if word='' then exit;
+ inc(i); getNum(word,nspace[i]);
+ end;
+ end;
+
+procedure onumber (s: string; var j, n1: integer);
+ begin if s[j]='o' then n1:=1 else if s[j]='1' then
+ begin n1:=10+digit(s[j+1]); inc(j); end
+ else n1:=digit(s[j]);
+ inc(j);
+ end;
+
+procedure extractNumber(var s: string; var k: integer);
+ var w: string;
+begin w:=getNextWord(s,'/',dummy); getNum(w,k);
+end;
+
+procedure readMeter (meter: string;
+ var meternum, meterdenom, pmnum, pmdenom: integer);
+ var j: integer;
+begin if meter[1]='m' then
+ if pos1('/',meter)=0 then
+ begin j:=2; onumber(meter,j,meternum); onumber(meter,j,meterdenom);
+ onumber(meter,j,pmnum); onumber(meter,j,pmdenom);
+ end
+ else begin predelete(meter,1);
+ extractNumber(meter,meternum); extractNumber(meter,meterdenom);
+ extractNumber(meter,pmnum); extractNumber(meter,pmdenom);
+ end
+ else begin getTwoNums(meter, meternum, meterdenom);
+ pmnum:=meternum; pmdenom:=meterdenom;
+ end;
+end;
+
+procedure getMeter(line: string;
+ var meternum, meterdenom, pmnum, pmdenom: integer);
+ var meter: string;
+begin meter:=GetNextWord(line,blank,dummy);
+ if (meter='C/') or (meter='mC/') then
+ begin meternum:=2; meterdenom:=2; pmdenom:=5; pmnum:=0; end
+ else if (meter='C') or (meter='mC') then
+ begin meternum:=4; meterdenom:=4; pmdenom:=6; pmnum:=0; end
+ else readMeter(meter,meternum,meterdenom,pmnum,pmdenom);
+ if meterdenom=0 then Error
+ (meter+': Meter denominator must be nonzero',print);
+end;
+
+function whereInParagraph(l: integer): integer;
+ var j: integer;
+begin whereInParagraph:=0;
+ for j:=1 to para_len do if orig_line_no[j]=l then
+ begin whereInParagraph:=j; exit end;
+end;
+
+procedure fatalerror(message: string);
+begin setFeature('ignoreErrors',false); error(message,not print) end;
+
+procedure error(message: string; printline: boolean);
+ var j: integer;
+begin
+ writeln (message, ': ERROR on line ', line_no);
+ j:=whereInParagraph(line_no); if (j>0) and printline then writeln(P[j]);
+ if not ignoreErrors then
+ begin if outfile_open then
+ begin close(outfile); rewrite(outfile); close(outfile); end;
+ if line_no=0 then line_no:=10000;
+ halt(line_no);
+ end;
+end;
+
+procedure warning(message: string; printline: boolean);
+ var j: integer;
+begin
+ if line_no>0 then
+ begin writeln (message, ': WARNING on line ', line_no);
+ if not printline then exit;
+ j:=whereInParagraph(line_no); if j>0 then writeln(P[j])
+ end
+ else writeln (message, ': WARNING in preamble');
+end;
+
+function PMXinstr (stave: integer): integer;
+begin PMXinstr := ninstr + 1 - instr[stave]; end;
+
+procedure setDefaultDuration(meterdenom: integer);
+begin
+ case meterdenom of
+ 1: default_duration:='0';
+ 2: default_duration:='2';
+ 4: default_duration:='4';
+ 8: default_duration:='8';
+ 16: default_duration:='1';
+ 32: default_duration:='3';
+ 64: default_duration:='6';
+ end;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/COPYING b/Build/source/utils/mtx/mtx-0.60d/libp2c/COPYING
new file mode 100644
index 00000000000..e77696ae8dd
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/ChangeLog b/Build/source/utils/mtx/mtx-0.60d/libp2c/ChangeLog
new file mode 100644
index 00000000000..17e4bc2dbc5
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/ChangeLog
@@ -0,0 +1,390 @@
+Wed Mar 10 15:03:20 1999 Alexander L. Belikoff <abel@blinky>
+
+ * src/p2c.h: DOUBLE defined as double
+
+Tue Mar 31 14:57:26 1998 Alexander L. Belikoff <abel@blinky>
+
+ * src/trans.h:
+ Magic limits (MININT, MAXINT), causing random p2c bugs on the Alpha replaced
+ with LONG-MIN/MAX from limits.h (integers in Pascal include longs in C,
+ according to p2c)
+
+Tue Sep 23 09:14:22 1997 Harvey J. Stein <hjstein@bfr.co.il>
+
+ * src/p2c.proto, src/funcs.c, src/p2c.hdrs:
+ Adjustments to get pad to work correctly.
+
+Thu Jul 3 20:41:55 1997 Harvey J. Stein <hjstein@bfr.co.il>
+
+ * src/p2c.proto, src/sys.p2crc, src/trans.h, src/expr.c, src/funcs.c, src/p2c.hdrs:
+ Bug: Consider:
+
+ procedure foo(x: array[i..j : integer] of varying[k] of char);
+ ...
+ var z : array[3..12] of varying[20] of char;
+ ...
+ foo(z);
+
+ This should become something like:
+
+ foo(int i, int j, int k, char x[j-i+1][k])
+ ...
+ char z[10][20];
+ ...
+ foo(3, 12, 20, z);
+
+ Instead, it was generating:
+
+ foo(3, 12, 255, z);
+
+ which totally screws up accessing z.
+
+ Analysis: To do this correctly, p2c has to keep dereferencing z as it
+ processes the hidden arguments i, j, & k so that it's working on an
+ expression of the appropriate type each time it tries to find either
+ the size of the string or the start & end points of arrays. Instead,
+ it just wasn't.
+
+ Fix done: I couldn't figure out exactly how to do the above. But, p2c
+ calls strmax_func to get the length of the character string. I just
+ built some additional dereferencing into it so that it gets the
+ correct length in the above sort of situation. So, changed
+ strmax_func in expr.c.
+
+
+ Bug: Index(x,y) is a common pascal extension for finding a substring
+ in a string. p2c handles it but it wasn't working right on Dec code.
+
+ Analysis: Some dialects of pascal consider x to be the string and y
+ to be the substring. Others switch x & y. p2c supports (substring,
+ string), and Dec pascal supports the opposite.
+
+ Fix: There was some support for switching index argument order, but it
+ was tightly coupled to HP compiler directive support. I added a
+ comment switch ("IndexOrder") for additional control of this feature.
+ Changed func_strpos in funcs.c, and added the switch in trans.h.
+
+Fri Jun 13 07:22:26 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/p2c.hdrs, src/p2c.proto, src/pexpr.c, src/decl.c, src/funcs.c:
+ Fixed bug in [truncate] handling - I didn't clear the new Meaning
+ fields (fakenumargs & truncated) at meaning creation time, so they
+ were sometimes showing up on non-truncated variables. Changed
+ initmeaning (decl.c).
+
+ Moved hidden number_of_args from beginning to end of arg list. At the
+ beginning it was interfering with the return hidden variable,
+ causing return to not be generated. Changes were in p_funcdecl
+ (decl.c), func_present (funcs.c), and p_funcarglist (pexpr.c). Added
+ has_truncate function to pexpr.c to check whether an arg list has the
+ truncated attribute.
+
+ Argument variables were sometimes getting shadowed just because
+ they're initialized. Problem was in var_reference, which clones
+ Meanings that have constdefns. But arg variables don't need to be
+ cloned since the constants are handled by p_funcarglist. So skipped
+ cloning if Meaning's kind is MK_PARAM or MK_VARPARAM. Previous fix of
+ always cloning, but only copying meanings if not MK_PARAM seems to
+ have been incorrect.
+
+Sun Jun 1 13:15:06 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/sys.p2crc, src/trans.h, src/pexpr.c, src/parse.c, src/lex.c, src/p2c.hdrs, src/p2c.proto, src/funcs.c, src/decl.c:
+ Enhancements:
+
+ Added support for [truncate]. This involved:
+ 1. Added a truncated flag & a fakenumargs flag to the Meaning
+ structure.
+ 2. In p_funcdecl (decl.c), recognizing the [truncate] attribute in
+ argument lists. If it's seen, the argument's truncated flag is
+ set, and it and all arguments following are given default values
+ (assuming that they don't already have default values). The
+ default values gets p2c to automatically generate the correct
+ number of arguments for calling the subroutine when some are
+ left out.
+ 3. In p_funcdecl (decl.c), if any of the args are tagged with
+ [truncate], then add a hidden argument to the front of the
+ argument list - number_of_args. Flag it with fakenumargs.
+ 4. In p_funcarglist (pexpr.c), when the fcn has a fakenumargs
+ parameter as the first parameter, (and truncateisdefalt is zero)
+ compute the index of the last argument supplied, and pass it as
+ the first argument in the call.
+ 5. In funcs.c, added func_present to handle the PRESENT(x) calls.
+ It parses the call, figures out the index of the argument in the
+ fcns calling sequence (say n), and generates an expression
+ (number_of_args >= n) to be the output for the PRESENT(x) call.
+ 6. Added new config parameter - TruncateIsDefault to turn off
+ PRESENT support (in case one doesn't want the extra arg to be
+ generated).
+
+ Added support for CONTINUE & BREAK. Just had to basically declare
+ them as keywords in lex.c, and recognize them in parse.c, and declare
+ their tokens in trans.h (since p2c already supported them internally).
+
+ Added descriptions for SkipReIncludes, NoOutput, and TruncateIsDefault
+ to sys.p2crc.
+
+ Bug fixes:
+
+ Bug: args with default values which are also used in local functions
+ lose their default values.
+
+ Attempted fix: in var_reference (pexpr.c), don't zero out the
+ constdefn when the arg is cloned if the arg is a parameter.
+
+ Problems: This works, but it sometimes causes bogus declarations of
+ the old variable to be output.
+
+Wed May 14 14:27:32 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/stuff.c, src/p2c.hdrs, src/p2c.proto, src/out.c, src/expr.c, p2c.patch:
+ (Updated p2c.patch for last set of changes)
+
+ Bug: p2c was seg faulting when given expressions such as:
+ there :=
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
+
+ and:
+
+ there :=
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' +
+ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' + where;
+
+ when there is VARYING [XXX] OF CHAR;
+
+ Analysis: There seem to be all sorts of fixed length character arrays
+ around the code. It seems that especially long expressions and/or
+ character strings can cause them to overflow.
+
+ Fix: I upped some of the limits, which at least avoided core dumps on
+ the code I'm currently processing, but really one needs to go through
+ and properly keep track of the amount copied into strings so as to
+ avoid buffer overruns. But, this is a real pain in the ass because of
+ the shitty semantics of the standard C library.
+
+ Basically, the stack allocated ones that I noticed in expr.c and out.c
+ I upped to length 2000, and in stuff.c, I upped the size of the
+ strings in formatbuf[] to 4000.
+
+Tue May 13 19:27:00 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/lex.c, src/p2c.hdrs, src/p2c.proto, src/trans.c, src/Makefile, src/decl.c, src/expr.c, src/funcs.c:
+ Minor fixes/changes:
+ -Was calling close in handle_include (lex.c) when it should have
+ been fclose.
+ -Modified src/Makefile to allow for using insure on the source code
+ (to catch memory bugs).
+
+
+ Major fixes:
+
+ Bug: p2c occasionally was freeing memory that was already freed.
+
+ Analysis: This seems to occur sometimes on constant string
+ definitions because mp->val.s might point to the same string as
+ mp->constdefn->val.s, and forget_ctx tries to free them both.
+
+ Fix: In decl.c, in forget_ctx: After calling free_value(&mp->val) when
+ mp->kind == MK_CONST, instead of always calling
+ freexpr(mp->constdefn), only call it when mp->kind != MK_CONST,
+ or when mp->constdefn->val.s != mp->val.s.
+
+ I also tried to fix this by copying mp->val.s in p_constdecl when
+ creating mp->constdefn->val.s, but never got this to work
+ correctly, so I commented it out.
+
+
+ Bug: p2c core dumped on:
+
+ readv(data, short_string);
+
+ when data is a packed array[1..7] of char, and
+ short_string is a packed array[1..3] of char.
+
+ Analysis: What was happening was that in handleread_text (funcs.c),
+ when the readv argument is an array, it was checking
+ ord_range(ex->val.type->indextype, ...), and ex was NULL.
+
+ Fix: It seems like this was a typo, so I change it to check
+ var->... instead of ex->...
+
+
+ Bug: p2c core dumped on:
+
+ WRITELN('%SQLMOD ', msg);
+
+ when msg was of type varying[x] of char.
+
+ Analysis: Some part of the code was converting the above string to
+ "%%SQLMOD %s". It seems that cleansprintf (from expr.c) didn't
+ realize that % is escaped by %%, so it thought that there should
+ be 2 arguments (maybe 3?) for the above printf string instead of
+ one, and thus was going off of the end of the args list (i.e. -
+ ex->args[j] out of range).
+
+ Fix: Inside the for loop, if the next character is also a %, then
+ skip arg processing, and skip the next character (just copy it
+ into fmtbuf).
+
+
+ Bug: p2c core dumps on:
+
+ readv(c, i);
+
+ when c is a char and i is an integer.
+
+ Analysis: In funcs.c, in handleread_text, var is never getting
+ initialized - it's getting passed in as NULL, and it only gets
+ set if isstrread is true. Since c is a char, fex->val.type->kind
+ is TK_CHAR, not TK_STRING, so isstrread is false, so var fails to
+ get initialized.
+
+ Fix: After the case that var is set when isstrread is true, if it's
+ still NULL, we set it to p_expr(NULL). This prevents the core
+ dump, but produces incorrect code! It outputs:
+
+ fscanf(c, "%ld", &i);
+
+ when it should more likely be something along the lines of
+ sscanf(&c, ...) (but safer).
+
+Mon May 5 15:23:04 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/out.c, src/p2c.hdrs, src/p2c.proto, src/trans.h, src/decl.c, src/lex.c, p2c.patch:
+ New features (out.c, trans.h):
+ New parameter NoOutput - setting it to 1 stops p2c from generating
+ output. Useful when trying to simulate Dec style modules via
+ include files - just convert INHERIT to %include, and put
+ {*NoOutput=1} at the top of each include file, and p2c does the
+ right thing. This was done by not pushing characters into the
+ output stream when nooutput is 1. The real code changes occur in
+ out.c, in putc_outf, and puts_outf. Accumulating the output, but
+ turning off writes (i.e. - wiring it into flush_outfilebuf) failed
+ because of timing differences btw when comment directives are
+ processed and when output occurs.
+
+ Bug fixes:
+
+ Bug: Some variable declarations weren't getting output. Most
+ noticable were the automatically generated Return variables.
+
+ Analysis: When using the {INTF-ONLY} directive in include files
+ then the fwd declaration of fcns was being interpreted as the fcn
+ definition, and so the variables generated when the declaration was
+ seen were marked as "wasdeclared". Then, when the code for the
+ function was being generated, these variables weren't getting
+ output because "wasdeclared" was 1. This was most visible from the
+ automatically generated Return variable, but occasionally happened
+ to other variables.
+
+ Fix: in decl.c:activatemeaning - added resetting of "wasdeclared"
+ if we can identify that the variable is the autogenerated return
+ variable. Detected them by snarfing code from isretvar. But this
+ was a lousy fix because as mentioned above, there are other
+ variables which are occasionally affected. And, it's no longer
+ needed because of the new NoOutput feature, so I commented out the
+ change, but left the code there as a reminder of the problem.
+
+
+ Bug: Comments weren't getting output in the correct places. This
+ is a serious problem when using {EMBED comments to insert C code
+ into the output stream. Sometimes code from the {EMBED comment
+ given in an include file showed up in the includer. Sometimes the
+ code didn't get emitted at all because of mistiming against
+ {nooutput} directives.
+
+ Analysis: p2c builds up a comment string structure as it parses
+ the code, and hangs it off of the code's internal representation.
+ Presumably this is so that when doing code transformations, the
+ comments are output in the correct places. However, this seems to
+ sometimes fail when using %include files. It seems that the
+ comments weren't getting processed & output until the current block
+ was finished. Included files don't start a new block because one
+ could conceivably include random snippets of code anywhere you want
+ (inside of RECORD declarations, for example). Thus, sometimes
+ comments from inside the include file don't get processed & output
+ until well after the include file itself is finished being
+ processed.
+
+ Fix: Added the call flushcomments(NULL, -1, -1) to both push_input
+ and pop_input (in lex.c). This seems to have fixed it with no
+ noticable side effects.
+
+Tue Apr 29 18:36:51 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/p2c.hdrs, src/p2c.proto, src/lex.c:
+ Added recognition of AND_THEN and OR_ELSE.
+
+ * src/trans.h, src/lex.c, src/p2c.hdrs, src/p2c.proto:
+ Added tracking of files that have been included so that they can
+ optionally be ignored the second time they're seen. This is needed
+ because a module (say X) can inherit from two other modules (say Y and
+ Z), both of whom inherit from a fourth module (say Z). Converting the
+ inherits to includes thus gets Z included twice. If it's not ignored,
+ it causes p2c to start renaming procedures so as to avoid name
+ clashes.
+
+ Added an rc file parameter (skipreincludes) for controling the above
+ action.
+
+ * src/decl.c, src/p2c.hdrs, src/p2c.proto, src/parse.c:
+ Various adjustments & bug fixes suggested by Dave Gillespie:
+
+ decl.c: Call format_s so that we work with a copy of the string
+ when removing dollar signs - a little more robust.
+
+ Missing ! on strcicmp caused bogus externs to be emitted on
+ some variable declarations.
+
+ parse.c: Sprinkle afew p_attributes around p_block so that p2c
+ properly parses attributes in front of declaration blocks.
+ In particular, this fixes the problem where p2c was choking
+ on [hidden] followed by TYPE, which appears in analytic.pas.
+
+Wed Apr 23 12:17:08 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/p2c.proto, src/decl.c, src/p2c.hdrs:
+ Modified addfield so that it removes dollar signs from record field
+ identifiers. This is more consistent with the handling of other
+ identifiers, and also needed by much of the Pascal code.
+
+Mon Apr 21 10:41:53 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * p2c.patch: Submitted new patch to Dave G.
+
+ * src/p2c.proto, src/lex.c, src/p2c.cat, src/p2c.hdrs, src/Makefile:
+ Changed VALUE from a keyword to a possible keyword when working with
+ Dec Pascal code. Original code set it to be a keyword for Dec, and a
+ possible keyword otherwise. However, if it's a keyword, then p2c
+ doesn't accept it the name of a slot in a record. Since Dec accepts
+ this usage, I figured that VALUE should always be a possible keyword
+ instead of a keyword.
+
+Thu Apr 17 11:33:22 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * p2c.patch: patches generated & mailed to Dave Gillespie
+
+Wed Apr 16 16:26:07 1997 Harvey J. Stein <hjstein@blinky.bfr.co.il>
+
+ * src/p2c.hdrs, src/p2c.proto, .cvsignore, examples/.cvsignore, src/.cvsignore, src/decl.c, src/p2c.cat:
+ Parser didn't expect a ( after the OTHERWISE keyword. Modified
+ decl.c to expect it.
+
+ * src/INSTALL, src/citmods.c, src/comment.c, src/decl.c, src/dir.c, src/expr.c, src/funcs.c, src/hpmods.c, src/lex.c, src/loc.p2clib.c, src/loc.p2crc, src/makeproto.c, src/out.c, src/p2c.cat, src/p2c.h, src/p2c.hdrs, src/p2c.proto, src/p2cc.cat, src/p2cc.man, src/p2cc.perl, src/p2clib.c, src/parse.c, src/pexpr.c, src/string.pas, src/system.imp, src/system.m2, src/trans.h, src/turbo.imp:
+ Import of p2c 1.21alpha2
+
+ * src/INSTALL, src/citmods.c, src/comment.c, src/decl.c, src/dir.c, src/expr.c, src/funcs.c, src/hpmods.c, src/lex.c, src/loc.p2clib.c, src/loc.p2crc, src/makeproto.c, src/out.c, src/p2c.cat, src/p2c.h, src/p2c.hdrs, src/p2c.proto, src/p2cc.cat, src/p2cc.man, src/p2cc.perl, src/p2clib.c, src/parse.c, src/pexpr.c, src/string.pas, src/system.imp, src/system.m2, src/trans.h, src/turbo.imp:
+ Initial revision
+
+ * HP/import/asm.imp, HP/import/fs.imp, HP/import/general_0.imp, HP/import/general_1.imp, HP/import/general_2.imp, HP/import/general_3.imp, HP/import/general_4.imp, HP/import/hpib_0.imp, HP/import/hpib_1.imp, HP/import/hpib_2.imp, HP/import/hpib_3.imp, HP/import/iodecl.imp, HP/import/misc.imp, HP/import/rnd.imp, HP/import/sysdevs.imp, HP/import/sysglobals.imp, HP/include/asm.h, HP/include/fs.h, HP/include/general_0.h, HP/include/general_1.h, HP/include/general_2.h, HP/include/general_3.h, HP/include/general_4.h, HP/include/hpib_0.h, HP/include/hpib_1.h, HP/include/hpib_2.h, HP/include/hpib_3.h, HP/include/iodecl.h, HP/include/misc.h, HP/include/rnd.h, HP/include/sysdevs.h, HP/include/sysglobals.h, Makefile, README, examples/Makefile, examples/README, examples/basic.doc, examples/basic.p, examples/c/basic.c, examples/c/cref.c, examples/c/e.c, examples/c/fact.c, examples/c/self.c, examples/cref.p, examples/e.p, examples/fact.p, examples/p2crc, examples/self.p, ftp.README, src/COPYING, src/HISTORY, src/Makefile, src/NOTES, src/README, src/p2c.man, src/stuff.c, src/sys.p2crc, src/trans.c:
+ Import of p2c 1.21alpha2
+
+ * HP/import/asm.imp, HP/import/fs.imp, HP/import/general_0.imp, HP/import/general_1.imp, HP/import/general_2.imp, HP/import/general_3.imp, HP/import/general_4.imp, HP/import/hpib_0.imp, HP/import/hpib_1.imp, HP/import/hpib_2.imp, HP/import/hpib_3.imp, HP/import/iodecl.imp, HP/import/misc.imp, HP/import/rnd.imp, HP/import/sysdevs.imp, HP/import/sysglobals.imp, HP/include/asm.h, HP/include/fs.h, HP/include/general_0.h, HP/include/general_1.h, HP/include/general_2.h, HP/include/general_3.h, HP/include/general_4.h, HP/include/hpib_0.h, HP/include/hpib_1.h, HP/include/hpib_2.h, HP/include/hpib_3.h, HP/include/iodecl.h, HP/include/misc.h, HP/include/rnd.h, HP/include/sysdevs.h, HP/include/sysglobals.h, Makefile, README, examples/Makefile, examples/README, examples/basic.doc, examples/basic.p, examples/c/basic.c, examples/c/cref.c, examples/c/e.c, examples/c/fact.c, examples/c/self.c, examples/cref.p, examples/e.p, examples/fact.p, examples/p2crc, examples/self.p, ftp.README, src/COPYING, src/HISTORY, src/Makefile, src/NOTES, src/README, src/p2c.man, src/stuff.c, src/sys.p2crc, src/trans.c:
+ Initial revision
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/Makefile.am b/Build/source/utils/mtx/mtx-0.60d/libp2c/Makefile.am
new file mode 100644
index 00000000000..fd208029eef
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/Makefile.am
@@ -0,0 +1,2 @@
+noinst_LIBRARIES = libp2c.a
+libp2c_a_SOURCES = p2c.h p2clib.c
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/README b/Build/source/utils/mtx/mtx-0.60d/libp2c/README
new file mode 100644
index 00000000000..47a102c88d2
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/README
@@ -0,0 +1,31 @@
+
+This directory contains "p2c", a Pascal to C translator.
+
+"p2c" Copyright 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+
+Written and maintained by: Dave Gillespie
+ c/o Synaptics, Inc.
+ 2698 Orchard Parkway
+ San Jose CA 95134
+ daveg@synaptics.com, uunet!synaptx!daveg
+
+
+This program is distributed under the terms of the GNU License Agreement.
+See the file src/COPYING for details.
+
+The GNU License Agreement restrictions do _not_ apply to code generated
+by p2c, nor to the p2c run-time files "p2clib.c" and "p2c.h".
+
+NO WARRANTY:
+ The program in this directory was developed for internal use at
+ Caltech and thus absolutely no guarantee is made that the program
+ will compile or run on other systems or that it will produce correct
+ code. P2c is _not_ a compiler, it is a translator; it strives to
+ produce correct code but reserves the right to sacrifice correctness
+ in extreme cases for readability in the general case. P2c is designed
+ to be extended (see funcs.c, hpmods.c and citmods.c for examples), but
+ some of the main code is pretty messy since the translator has grown
+ considerably beyond its original planned scale. Bug reports are
+ welcome at daveg@synaptics.com, but I may not have time to respond
+ to them immediately. Suggestions are welcome, too!
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/p2c.h b/Build/source/utils/mtx/mtx-0.60d/libp2c/p2c.h
new file mode 100644
index 00000000000..c8216a6002c
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/p2c.h
@@ -0,0 +1,533 @@
+#ifndef P2C_H
+#define P2C_H
+
+
+/* Header file for code generated by "p2c", the Pascal-to-C translator */
+
+/* "p2c" Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation.
+ * By Dave Gillespie, daveg@synaptics.com. Version 1.21alpha-07.Dec.93.
+ * This file may be copied, modified, etc. in any way. It is not restricted
+ * by the licence agreement accompanying p2c itself.
+ */
+
+
+#include <stdio.h>
+
+#define DOUBLE double
+
+
+
+/* If the following heuristic fails, compile -DBSD=0 for non-BSD systems,
+ or -DBSD=1 for BSD systems. */
+
+#ifdef M_XENIX
+# define BSD 0
+#endif
+
+#ifdef vms
+# define BSD 0
+# ifndef __STDC__
+# define __STDC__ 1
+# endif
+#endif
+
+#ifdef __TURBOC__
+# define MSDOS 1
+#endif
+
+#ifdef MSDOS
+# define BSD 0
+#endif
+
+#ifdef FILE /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */
+# ifndef BSD /* (a convenient, but horrible kludge!) */
+# define BSD 1
+# endif
+#endif
+
+#ifdef BSD
+# if !BSD
+# undef BSD
+# endif
+#endif
+
+
+#if (defined(__STDC__) && !defined(M_XENIX)) || defined(__TURBOC__)
+# include <stdlib.h>
+# include <stddef.h>
+# define HAS_STDLIB
+# if defined(vms) || defined(__TURBOC__)
+# define NON_ANSI_CAT
+# endif
+#else
+# ifndef BSD
+# ifndef __TURBOC__
+# include <memory.h>
+# endif
+# endif
+# ifdef hpux
+# ifdef _INCLUDE__STDC__
+# include <stddef.h>
+# include <stdlib.h>
+# define HAS_STDLIB
+# endif
+# endif
+# include <sys/types.h>
+# if !defined(MSDOS) || defined(__TURBOC__)
+# define NON_ANSI_CAT
+# endif
+#endif
+
+#if defined(NON_ANSI_CAT) && !defined(ANSI_CAT)
+# ifdef NON_ANSI_CAT_ALTERNATE
+# define __CAT__(a,b)a/**/b
+# else
+# define __ID__(a)a
+# define __CAT__(a,b)__ID__(a)b
+# endif
+#else
+# define __CAT__(a,b)a##b
+#endif
+
+
+#ifdef BSD
+# include <strings.h>
+# define memcpy(a,b,n) (bcopy(b,a,n),a)
+# define memcmp(a,b,n) bcmp(a,b,n)
+# define strchr(s,c) index(s,c)
+# define strrchr(s,c) rindex(s,c)
+#else
+# include <string.h>
+#endif
+
+#include <ctype.h>
+#include <math.h>
+#include <setjmp.h>
+#include <assert.h>
+
+
+#ifndef NO_LACK
+#ifdef vms
+
+#define LACK_LABS
+#define LACK_MEMMOVE
+#define LACK_MEMCPY
+
+#else
+
+#define LACK_LABS /* Undefine these if your library has these */
+#define LACK_MEMMOVE
+
+#endif
+#endif
+
+
+typedef struct __p2c_jmp_buf {
+ struct __p2c_jmp_buf *next;
+ jmp_buf jbuf;
+} __p2c_jmp_buf;
+
+
+/* Warning: The following will not work if setjmp is used simultaneously.
+ This also violates the ANSI restriction about using vars after longjmp,
+ but a typical implementation of longjmp will get it right anyway. */
+
+#ifndef FAKE_TRY
+# define TRY(x) do { __p2c_jmp_buf __try_jb; \
+ __try_jb.next = __top_jb; \
+ if (!setjmp((__top_jb = &__try_jb)->jbuf)) {
+# define RECOVER(x) __top_jb = __try_jb.next; } else {
+# define RECOVER2(x,L) __top_jb = __try_jb.next; } else { \
+ if (0) { L: __top_jb = __try_jb.next; }
+# define ENDTRY(x) } } while (0)
+#else
+# define TRY(x) if (1) {
+# define RECOVER(x) } else do {
+# define RECOVER2(x,L) } else do { L: ;
+# define ENDTRY(x) } while (0)
+#endif
+
+
+
+#ifdef M_XENIX /* avoid compiler bug */
+# define SHORT_MAX (32767)
+# define SHORT_MIN (-32768)
+#endif
+
+
+/* The following definitions work only on twos-complement machines */
+#ifndef SHORT_MAX
+# define SHORT_MAX ((short)(((unsigned short) -1) >> 1))
+# define SHORT_MIN (~SHORT_MAX)
+#endif
+
+#ifndef INT_MAX
+# define INT_MAX ((int)(((unsigned int) -1) >> 1))
+# define INT_MIN (~INT_MAX)
+#endif
+
+#ifndef LONG_MAX
+# define LONG_MAX ((long)(((unsigned long) -1) >> 1))
+# define LONG_MIN (~LONG_MAX)
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif
+
+#ifndef EXIT_SUCCESS
+# ifdef vms
+# define EXIT_SUCCESS 1
+# define EXIT_FAILURE (02000000000L)
+# else
+# define EXIT_SUCCESS 0
+# define EXIT_FAILURE 1
+# endif
+#endif
+
+
+#define SETBITS 32
+
+
+#if defined(__STDC__) || defined(__TURBOC__)
+# if !defined(vms) && !defined(M_LINT)
+# define Signed signed
+# else
+# define Signed
+# endif
+# define Void void /* Void f() = procedure */
+# ifndef Const
+# define Const const
+# endif
+# ifndef Volatile
+# define Volatile volatile
+# endif
+# ifdef M_LINT
+# define PP(x) ()
+# define PV() ()
+typedef char *Anyptr;
+# else
+# define PP(x) x /* function prototype */
+# define PV() (void) /* null function prototype */
+typedef void *Anyptr;
+# endif
+#else
+# define Signed
+# define Void void
+# ifndef Const
+# define Const
+# endif
+# ifndef Volatile
+# define Volatile
+# endif
+# define PP(x) ()
+# define PV() ()
+typedef char *Anyptr;
+#endif
+
+#ifdef __GNUC__
+# define Inline inline
+#else
+# define Inline
+#endif
+
+#define Register register /* Register variables */
+#define Char char /* Characters (not bytes) */
+
+#ifndef Static
+# define Static static /* Private global funcs and vars */
+#endif
+
+#ifndef Local
+# define Local static /* Nested functions */
+#endif
+
+typedef Signed char schar;
+typedef unsigned char uchar;
+typedef unsigned char boolean;
+
+#ifndef NO_DECLARE_ALFA
+typedef Char alfa[10];
+#endif
+
+#ifndef true
+# define true 1
+# define false 0
+#endif
+
+#ifndef TRUE
+# define TRUE 1
+# define FALSE 0
+#endif
+
+
+typedef struct {
+ Anyptr proc, link;
+} _PROCEDURE;
+
+#ifndef _FNSIZE
+# define _FNSIZE 120
+#endif
+
+
+extern Void PASCAL_MAIN PP( (int, Char **) );
+extern Char **P_argv;
+extern int P_argc;
+extern short P_escapecode;
+extern int P_ioresult;
+extern __p2c_jmp_buf *__top_jb;
+
+
+#ifdef P2C_H_PROTO /* if you have Ansi C but non-prototyped header files */
+extern Char *strcat PP( (Char *, Const Char *) );
+extern Char *strchr PP( (Const Char *, int) );
+extern int strcmp PP( (Const Char *, Const Char *) );
+extern Char *strcpy PP( (Char *, Const Char *) );
+extern size_t strlen PP( (Const Char *) );
+extern Char *strncat PP( (Char *, Const Char *, size_t) );
+extern int strncmp PP( (Const Char *, Const Char *, size_t) );
+extern Char *strncpy PP( (Char *, Const Char *, size_t) );
+extern Char *strrchr PP( (Const Char *, int) );
+
+extern Anyptr memchr PP( (Const Anyptr, int, size_t) );
+extern Anyptr memmove PP( (Anyptr, Const Anyptr, size_t) );
+extern Anyptr memset PP( (Anyptr, int, size_t) );
+#ifndef memcpy
+extern Anyptr memcpy PP( (Anyptr, Const Anyptr, size_t) );
+extern int memcmp PP( (Const Anyptr, Const Anyptr, size_t) );
+#endif
+
+extern int atoi PP( (Const Char *) );
+extern double atof PP( (Const Char *) );
+extern long atol PP( (Const Char *) );
+extern double strtod PP( (Const Char *, Char **) );
+extern long strtol PP( (Const Char *, Char **, int) );
+#endif /*P2C_H_PROTO*/
+
+#ifndef HAS_STDLIB
+#ifndef NO_DECLARE_MALLOC
+extern Anyptr malloc PP( (size_t) );
+extern Void free PP( (Anyptr) );
+#endif
+#endif
+
+extern int _OutMem PV();
+extern int _CaseCheck PV();
+extern int _NilCheck PV();
+extern int _Escape PP( (int) );
+extern int _EscIO PP( (int) );
+extern int _EscIO2 PP( (int, Char *) );
+
+extern long ipow PP( (long, long) );
+extern long P_imax PP( (long, long) );
+extern long P_imin PP( (long, long) );
+extern double P_rmax PP( (double, double) );
+extern double P_rmin PP( (double, double) );
+extern Char *strsub PP( (Char *, Char *, int, int) );
+extern Char *strltrim PP( (Char *) );
+extern Char *strrtrim PP( (Char *) );
+extern Char *strrpt PP( (Char *, Char *, int) );
+extern Char *strpad PP( (Char *, Char *, int, int) );
+extern int strpos2 PP( (Char *, Char *, int) );
+extern long memavail PV();
+extern int P_peek PP( (FILE *) );
+extern int P_eof PP( (FILE *) );
+extern int P_eoln PP( (FILE *) );
+extern Void P_readpaoc PP( (FILE *, Char *, int) );
+extern Void P_readlnpaoc PP( (FILE *, Char *, int) );
+extern long P_maxpos PP( (FILE *) );
+extern Char *P_trimname PP( (Char *, int) );
+extern long *P_setunion PP( (long *, long *, long *) );
+extern long *P_setint PP( (long *, long *, long *) );
+extern long *P_setdiff PP( (long *, long *, long *) );
+extern long *P_setxor PP( (long *, long *, long *) );
+extern int P_inset PP( (unsigned, long *) );
+extern int P_setequal PP( (long *, long *) );
+extern int P_subset PP( (long *, long *) );
+extern long *P_addset PP( (long *, unsigned) );
+extern long *P_addsetr PP( (long *, unsigned, unsigned) );
+extern long *P_remset PP( (long *, unsigned) );
+extern long *P_setcpy PP( (long *, long *) );
+extern long *P_expset PP( (long *, long) );
+extern long P_packset PP( (long *) );
+extern int P_getcmdline PP( (int, int, Char *) );
+extern Void TimeStamp PP( (int *, int *, int *,
+ int *, int *, int *) );
+extern Void P_sun_argv PP( (char *, int, int) );
+extern FILE *_skipspaces PP( (FILE *) );
+extern FILE *_skipnlspaces PP( (FILE *) );
+
+
+/* I/O error handling */
+#define _CHKIO(cond,ior,val,def) ((cond) ? P_ioresult=0,(val) \
+ : P_ioresult=(ior),(def))
+#define _SETIO(cond,ior) (P_ioresult = (cond) ? 0 : (ior))
+
+/* Following defines are suitable for the HP Pascal operating system */
+#define FileNotFound 10
+#define FileNotOpen 13
+#define FileWriteError 38
+#define BadInputFormat 14
+#define EndOfFile 30
+
+#define FILENOTFOUND 10
+#define FILENOTOPEN 13
+#define FILEWRITEERROR 38
+#define BADINPUTFORMAT 14
+#define ENDOFFILE 30
+
+/* Creating temporary files */
+#if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE)
+# define tmpfile() (fopen(tmpnam(NULL), "w+"))
+#endif
+
+/* File buffers */
+#define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS); \
+ sc type __CAT__(f,_BUFFER)
+#define FILEBUFNC(f,type) int __CAT__(f,_BFLAGS); \
+ type __CAT__(f,_BUFFER)
+
+#define RESETBUF(f,type) (__CAT__(f,_BFLAGS) = 1)
+#define SETUPBUF(f,type) (__CAT__(f,_BFLAGS) = 0)
+
+#define GETFBUF(f,type) (*((__CAT__(f,_BFLAGS) == 1 && \
+ ((__CAT__(f,_BFLAGS) = 2), \
+ fread(&__CAT__(f,_BUFFER), \
+ sizeof(type),1,(f)))),\
+ &__CAT__(f,_BUFFER)))
+#define AGETFBUF(f,type) ((__CAT__(f,_BFLAGS) == 1 && \
+ ((__CAT__(f,_BFLAGS) = 2), \
+ fread(__CAT__(f,_BUFFER), \
+ sizeof(type),1,(f)))),\
+ __CAT__(f,_BUFFER))
+
+#define PUTFBUF(f,type,v) (GETFBUF(f,type) = (v))
+#define CPUTFBUF(f,v) (PUTFBUF(f,char,v))
+#define APUTFBUF(f,type,v) (memcpy(AGETFBUF(f,type), (v), \
+ sizeof(__CAT__(f,_BUFFER))))
+
+#define GET(f,type) (__CAT__(f,_BFLAGS) == 1 ? \
+ fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) : \
+ (__CAT__(f,_BFLAGS) = 1))
+
+#define PUT(f,type) (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)), \
+ (__CAT__(f,_BFLAGS) = 0))
+#define CPUT(f) (PUT(f,char))
+
+#define BUFEOF(f) (__CAT__(f,_BFLAGS) != 2 && P_eof(f))
+#define BUFFPOS(f) (ftell(f) - (__CAT__(f,_BFLAGS) == 2))
+
+typedef struct {
+ FILE *f;
+ int f_BFLAGS; /* FILEBUFNC(f,Char); */
+ Char f_BUFFER;
+ Char name[_FNSIZE];
+} _TEXT;
+
+/* Memory allocation */
+#ifdef __GCC__
+# define Malloc(n) (malloc(n) ?: (Anyptr)_OutMem())
+#else
+extern Anyptr __MallocTemp__;
+# define Malloc(n) ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)_OutMem())
+#endif
+#define FreeR(p) (free((Anyptr)(p))) /* used if arg is an rvalue */
+#define Free(p) (free((Anyptr)(p)), (p)=NULL)
+
+/* sign extension */
+#define SEXT(x,n) ((x) | -(((x) & (1L<<((n)-1))) << 1))
+
+/* packed arrays */ /* BEWARE: these are untested! */
+#define P_getbits_UB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] >> \
+ (((~(i))&((1<<(L)-(n))-1)) << (n)) & \
+ (1<<(1<<(n)))-1))
+
+#define P_getbits_SB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] << \
+ (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\
+ (n)) >> (16-(1<<(n))))))
+
+#define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \
+ (x) << (((~(i))&((1<<(L)-(n))-1)) << (n)))
+
+#define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \
+ ((x) & (1<<(1<<(n)))-1) << \
+ (((~(i))&((1<<(L)-(n))-1)) << (n)))
+
+#define P_clrbits_B(a,i,n,L) ((a)[(i)>>(L)-(n)] &= \
+ ~( ((1<<(1<<(n)))-1) << \
+ (((~(i))&((1<<(L)-(n))-1)) << (n))) )
+
+/* small packed arrays */
+#define P_getbits_US(v,i,n) ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1))
+#define P_getbits_SS(v,i,n) ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n)))))
+#define P_putbits_US(v,i,x,n) ((v) |= (x) << ((i) << (n)))
+#define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n)))
+#define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) ))
+
+#define P_max(a,b) ((a) > (b) ? (a) : (b))
+#define P_min(a,b) ((a) < (b) ? (a) : (b))
+
+
+/* Fix ANSI-isms */
+
+#ifdef LACK_LABS
+# ifndef labs
+# define labs my_labs
+ extern long my_labs PP( (long) );
+# endif
+#endif
+
+#ifdef LACK_MEMMOVE
+# ifndef memmove
+# define memmove my_memmove
+ extern Anyptr my_memmove PP( (Anyptr, Const Anyptr, size_t) );
+# endif
+#endif
+
+#ifdef LACK_MEMCPY
+# ifndef memcpy
+# define memcpy my_memcpy
+ extern Anyptr my_memcpy PP( (Anyptr, Const Anyptr, size_t) );
+# endif
+# ifndef memcmp
+# define memcmp my_memcmp
+ extern int my_memcmp PP( (Const Anyptr, Const Anyptr, size_t) );
+# endif
+# ifndef memset
+# define memset my_memset
+ extern Anyptr my_memset PP( (Anyptr, int, size_t) );
+# endif
+#endif
+
+/* Fix toupper/tolower on Suns and other stupid BSD systems */
+#ifdef toupper
+# undef toupper
+# undef tolower
+# define toupper(c) my_toupper(c)
+# define tolower(c) my_tolower(c)
+#endif
+
+#ifndef _toupper
+# if 'A' == 65 && 'a' == 97
+# define _toupper(c) ((c)-'a'+'A')
+# define _tolower(c) ((c)-'A'+'a')
+# else
+# ifdef toupper
+# undef toupper /* hope these are shadowing real functions, */
+# undef tolower /* because my_toupper calls _toupper! */
+# endif
+# define _toupper(c) toupper(c)
+# define _tolower(c) tolower(c)
+# endif
+#endif
+
+
+#endif /* P2C_H */
+
+
+
+/* End. */
+
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/libp2c/p2clib.c b/Build/source/utils/mtx/mtx-0.60d/libp2c/p2clib.c
new file mode 100644
index 00000000000..98a00edf41b
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/libp2c/p2clib.c
@@ -0,0 +1,1117 @@
+
+/* Run-time library for use with "p2c", the Pascal to C translator */
+
+/* "p2c" Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation.
+ * By Dave Gillespie, daveg@synaptics.com. Version --VERSION--.
+ * This file may be copied, modified, etc. in any way. It is not restricted
+ * by the licence agreement accompanying p2c itself.
+ */
+
+
+
+#include "p2c.h"
+
+
+#ifndef NO_TIME
+# include <time.h>
+#endif
+
+
+#define Isspace(c) isspace(c) /* or "((c) == ' ')" if preferred */
+
+
+
+
+int P_argc;
+char **P_argv;
+
+short P_escapecode;
+int P_ioresult;
+
+long EXCP_LINE; /* Used by Pascal workstation system */
+
+Anyptr __MallocTemp__;
+
+__p2c_jmp_buf *__top_jb;
+
+
+
+
+void PASCAL_MAIN(argc, argv)
+int argc;
+char **argv;
+{
+ P_argc = argc;
+ P_argv = argv;
+ __top_jb = NULL;
+
+#ifdef LOCAL_INIT
+ LOCAL_INIT();
+#endif
+}
+
+
+
+
+
+/* In case your system lacks these... */
+
+long my_labs(x)
+long x;
+{
+ return((x > 0) ? x : -x);
+}
+
+
+#ifdef __STDC__
+Anyptr my_memmove(Anyptr d, Const Anyptr s, size_t n)
+#else
+Anyptr my_memmove(d, s, n)
+Anyptr d, s;
+register int n;
+#endif
+{
+ register char *dd = (char *)d, *ss = (char *)s;
+ if (dd < ss || dd - ss >= n) {
+#if defined(bcopy) && defined(memcpy)
+ my_memcpy(dd, ss, n);
+#else
+ memcpy(dd, ss, n);
+#endif
+ } else if (n > 0) {
+ dd += n;
+ ss += n;
+ while (n-- > 0)
+ *--dd = *--ss;
+ }
+ return d;
+}
+
+
+#ifdef __STDC__
+Anyptr my_memcpy(Anyptr d, Const Anyptr s, size_t n)
+#else
+Anyptr my_memcpy(d, s, n)
+Anyptr d, s;
+register int n;
+#endif
+{
+ register char *ss = (char *)s, *dd = (char *)d;
+ while (n-- > 0)
+ *dd++ = *ss++;
+ return d;
+}
+
+#ifdef __STDC__
+int my_memcmp(Const Anyptr s1, Const Anyptr s2, size_t n)
+#else
+int my_memcmp(s1, s2, n)
+Anyptr s1, s2;
+register int n;
+#endif
+{
+ register char *a = (char *)s1, *b = (char *)s2;
+ register int i;
+ while (n-- > 0)
+ if ((i = (*a++) - (*b++)) != 0)
+ return i;
+ return 0;
+}
+
+#ifdef __STDC__
+Anyptr my_memset(Anyptr d, int c, size_t n)
+#else
+Anyptr my_memset(d, c, n)
+Anyptr d;
+register int c;
+register int n;
+#endif
+{
+ register char *dd = (char *)d;
+ while (n-- > 0)
+ *dd++ = c;
+ return d;
+}
+
+
+int my_toupper(c)
+int c;
+{
+ if (islower(c))
+ return _toupper(c);
+ else
+ return c;
+}
+
+
+int my_tolower(c)
+int c;
+{
+ if (isupper(c))
+ return _tolower(c);
+ else
+ return c;
+}
+
+
+
+
+long ipow(a, b)
+long a, b;
+{
+ long v;
+
+ if (a == 0 || a == 1)
+ return a;
+ if (a == -1)
+ return (b & 1) ? -1 : 1;
+ if (b < 0)
+ return 0;
+ if (a == 2)
+ return 1L << b;
+ v = (b & 1) ? a : 1;
+ while ((b >>= 1) > 0) {
+ a *= a;
+ if (b & 1)
+ v *= a;
+ }
+ return v;
+}
+
+
+long P_imax(a, b)
+long a, b;
+{
+ if (a > b)
+ return a;
+ else
+ return b;
+}
+
+long P_imin(a, b)
+long a, b;
+{
+ if (a < b)
+ return a;
+ else
+ return b;
+}
+
+
+double P_rmax(a, b)
+double a, b;
+{
+ if (a > b)
+ return a;
+ else
+ return b;
+}
+
+double P_rmin(a, b)
+double a, b;
+{
+ if (a < b)
+ return a;
+ else
+ return b;
+}
+
+
+
+
+/* Common string functions: */
+
+/* Store in "ret" the substring of length "len" starting from "pos" (1-based).
+ Store a shorter or null string if out-of-range. Return "ret". */
+
+char *strsub(ret, s, pos, len)
+register char *ret, *s;
+register int pos, len;
+{
+ register char *s2;
+
+ if (--pos < 0 || len <= 0) {
+ *ret = 0;
+ return ret;
+ }
+ while (pos > 0) {
+ if (!*s++) {
+ *ret = 0;
+ return ret;
+ }
+ pos--;
+ }
+ s2 = ret;
+ while (--len >= 0) {
+ if (!(*s2++ = *s++))
+ return ret;
+ }
+ *s2 = 0;
+ return ret;
+}
+
+
+/* Return the index of the first occurrence of "pat" as a substring of "s",
+ starting at index "pos" (1-based). Result is 1-based, 0 if not found. */
+
+int strpos2(s, pat, pos)
+char *s;
+register char *pat;
+register int pos;
+{
+ register char *cp, ch;
+ register int slen;
+
+ if (--pos < 0)
+ return 0;
+ slen = strlen(s) - pos;
+ cp = s + pos;
+ if (!(ch = *pat++))
+ return 0;
+ pos = strlen(pat);
+ slen -= pos;
+ while (--slen >= 0) {
+ if (*cp++ == ch && !strncmp(cp, pat, pos))
+ return cp - s;
+ }
+ return 0;
+}
+
+
+/* Case-insensitive version of strcmp. */
+
+int strcicmp(s1, s2)
+register char *s1, *s2;
+{
+ register unsigned char c1, c2;
+
+ while (*s1) {
+ if (*s1++ != *s2++) {
+ if (!s2[-1])
+ return 1;
+ c1 = toupper(s1[-1]);
+ c2 = toupper(s2[-1]);
+ if (c1 != c2)
+ return c1 - c2;
+ }
+ }
+ if (*s2)
+ return -1;
+ return 0;
+}
+
+
+
+
+/* HP and Turbo Pascal string functions: */
+
+/* Trim blanks at left end of string. */
+
+char *strltrim(s)
+register char *s;
+{
+ while (Isspace(*s++)) ;
+ return s - 1;
+}
+
+
+/* Trim blanks at right end of string. */
+
+char *strrtrim(s)
+register char *s;
+{
+ register char *s2 = s;
+
+ if (!*s)
+ return s;
+ while (*++s2) ;
+ while (s2 > s && Isspace(*--s2))
+ *s2 = 0;
+ return s;
+}
+
+
+/* Store in "ret" "num" copies of string "s". Return "ret". */
+
+char *strrpt(ret, s, num)
+char *ret;
+register char *s;
+register int num;
+{
+ register char *s2 = ret;
+ register char *s1;
+
+ while (--num >= 0) {
+ s1 = s;
+ while ((*s2++ = *s1++)) ;
+ s2--;
+ }
+ return ret;
+}
+
+
+/* Store in "ret" string "s" with enough pad chars added to reach "size". */
+
+char *strpad(ret, s, padchar, num)
+char *ret;
+register char *s;
+register int padchar, num;
+{
+ register char *d = ret;
+
+ if (s == d) {
+ while (*d++) ;
+ } else {
+ while ((*d++ = *s++)) ;
+ }
+ num -= (--d - ret);
+ while (--num >= 0)
+ *d++ = padchar;
+ *d = 0;
+ return ret;
+}
+
+
+/* Copy the substring of length "len" from index "spos" of "s" (1-based)
+ to index "dpos" of "d", lengthening "d" if necessary. Length and
+ indices must be in-range. */
+
+void strmove(len, s, spos, d, dpos)
+register char *s, *d;
+register int len, spos, dpos;
+{
+ s += spos - 1;
+ d += dpos - 1;
+ while (*d && --len >= 0)
+ *d++ = *s++;
+ if (len > 0) {
+ while (--len >= 0)
+ *d++ = *s++;
+ *d = 0;
+ }
+}
+
+
+/* Delete the substring of length "len" at index "pos" from "s".
+ Delete less if out-of-range. */
+
+void strdelete(s, pos, len)
+register char *s;
+register int pos, len;
+{
+ register int slen;
+
+ if (--pos < 0)
+ return;
+ slen = strlen(s) - pos;
+ if (slen <= 0)
+ return;
+ s += pos;
+ if (slen <= len) {
+ *s = 0;
+ return;
+ }
+ while ((*s = s[len])) s++;
+}
+
+
+/* Insert string "src" at index "pos" of "dst". */
+
+void strinsert(src, dst, pos)
+register char *src, *dst;
+register int pos;
+{
+ register int slen, dlen;
+
+ if (--pos < 0)
+ return;
+ dlen = strlen(dst);
+ dst += dlen;
+ dlen -= pos;
+ if (dlen <= 0) {
+ strcpy(dst, src);
+ return;
+ }
+ slen = strlen(src);
+ do {
+ dst[slen] = *dst;
+ --dst;
+ } while (--dlen >= 0);
+ dst++;
+ while (--slen >= 0)
+ *dst++ = *src++;
+}
+
+
+
+
+/* File functions */
+
+/* Peek at next character of input stream; return EOF at end-of-file. */
+
+int P_peek(f)
+FILE *f;
+{
+ int ch;
+
+ ch = getc(f);
+ if (ch == EOF)
+ return EOF;
+ ungetc(ch, f);
+ return (ch == '\n') ? ' ' : ch;
+}
+
+
+/* Check if at end of file, using Pascal "eof" semantics. End-of-file for
+ stdin is broken; remove the special case for it to be broken in a
+ different way. */
+
+int P_eof(f)
+FILE *f;
+{
+ register int ch;
+
+ if (feof(f))
+ return 1;
+#ifdef HAVE_ISATTY
+ if (isatty(fileno(f)))
+#else
+ if (f == stdin)
+#endif
+ return 0; /* not safe to look-ahead on the keyboard! */
+ ch = getc(f);
+ if (ch == EOF)
+ return 1;
+ ungetc(ch, f);
+ return 0;
+}
+
+
+/* Check if at end of line (or end of entire file). */
+
+int P_eoln(f)
+FILE *f;
+{
+ register int ch;
+
+ ch = getc(f);
+ if (ch == EOF)
+ return 1;
+ ungetc(ch, f);
+ return (ch == '\n');
+}
+
+
+/* Skip whitespace (including newlines) in a file. */
+
+FILE *_skipnlspaces(f)
+FILE *f;
+{
+ register int ch;
+
+ do {
+ ch = getc(f);
+ } while (ch == ' ' || ch == '\t' || ch == '\n');
+ if (ch != EOF)
+ ungetc(ch, f);
+ return f;
+}
+
+
+/* Skip whitespace (not including newlines) in a file. */
+
+FILE *_skipspaces(f)
+FILE *f;
+{
+ register int ch;
+
+ do {
+ ch = getc(f);
+ } while (ch == ' ' || ch == '\t');
+ if (ch != EOF)
+ ungetc(ch, f);
+ return f;
+}
+
+
+/* Read a packed array of characters from a file. */
+
+Void P_readpaoc(f, s, len)
+FILE *f;
+char *s;
+int len;
+{
+ int ch;
+
+ for (;;) {
+ if (len <= 0)
+ return;
+ ch = getc(f);
+ if (ch == EOF || ch == '\n')
+ break;
+ *s++ = ch;
+ --len;
+ }
+ while (--len >= 0)
+ *s++ = ' ';
+ if (ch != EOF)
+ ungetc(ch, f);
+}
+
+Void P_readlnpaoc(f, s, len)
+FILE *f;
+char *s;
+int len;
+{
+ int ch;
+
+ for (;;) {
+ ch = getc(f);
+ if (ch == EOF || ch == '\n')
+ break;
+ if (len > 0) {
+ *s++ = ch;
+ --len;
+ }
+ }
+ while (--len >= 0)
+ *s++ = ' ';
+}
+
+
+/* Compute maximum legal "seek" index in file (0-based). */
+
+long P_maxpos(f)
+FILE *f;
+{
+ long savepos = ftell(f);
+ long val;
+
+ if (fseek(f, 0L, SEEK_END))
+ return -1;
+ val = ftell(f);
+ if (fseek(f, savepos, SEEK_SET))
+ return -1;
+ return val;
+}
+
+
+/* Use packed array of char for a file name. */
+
+Char *P_trimname(fn, len)
+register Char *fn;
+register int len;
+{
+ static Char fnbuf[256];
+ register Char *cp = fnbuf;
+
+ while (--len >= 0 && *fn && !isspace(*fn))
+ *cp++ = *fn++;
+ *cp = 0;
+ return fnbuf;
+}
+
+
+
+
+/* Pascal's "memavail" doesn't make much sense in Unix with virtual memory.
+ We fix memory size as 10Meg as a reasonable compromise. */
+
+long memavail()
+{
+ return 10000000; /* worry about this later! */
+}
+
+long maxavail()
+{
+ return memavail();
+}
+
+
+
+
+/* Sets are stored as an array of longs. S[0] is the size of the set;
+ S[N] is the N'th 32-bit chunk of the set. S[0] equals the maximum
+ I such that S[I] is nonzero. S[0] is zero for an empty set. Within
+ each long, bits are packed from lsb to msb. The first bit of the
+ set is the element with ordinal value 0. (Thus, for a "set of 5..99",
+ the lowest five bits of the first long are unused and always zero.) */
+
+/* (Sets with 32 or fewer elements are normally stored as plain longs.) */
+
+long *P_setunion(d, s1, s2) /* d := s1 + s2 */
+register long *d, *s1, *s2;
+{
+ long *dbase = d++;
+ register int sz1 = *s1++, sz2 = *s2++;
+ while (sz1 > 0 && sz2 > 0) {
+ *d++ = *s1++ | *s2++;
+ sz1--, sz2--;
+ }
+ while (--sz1 >= 0)
+ *d++ = *s1++;
+ while (--sz2 >= 0)
+ *d++ = *s2++;
+ *dbase = d - dbase - 1;
+ return dbase;
+}
+
+
+long *P_setint(d, s1, s2) /* d := s1 * s2 */
+register long *d, *s1, *s2;
+{
+ long *dbase = d++;
+ register int sz1 = *s1++, sz2 = *s2++;
+ while (--sz1 >= 0 && --sz2 >= 0)
+ *d++ = *s1++ & *s2++;
+ while (--d > dbase && !*d) ;
+ *dbase = d - dbase;
+ return dbase;
+}
+
+
+long *P_setdiff(d, s1, s2) /* d := s1 - s2 */
+register long *d, *s1, *s2;
+{
+ long *dbase = d++;
+ register int sz1 = *s1++, sz2 = *s2++;
+ while (--sz1 >= 0 && --sz2 >= 0)
+ *d++ = *s1++ & ~*s2++;
+ if (sz1 >= 0) {
+ while (sz1-- >= 0)
+ *d++ = *s1++;
+ }
+ while (--d > dbase && !*d) ;
+ *dbase = d - dbase;
+ return dbase;
+}
+
+
+long *P_setxor(d, s1, s2) /* d := s1 / s2 */
+register long *d, *s1, *s2;
+{
+ long *dbase = d++;
+ register int sz1 = *s1++, sz2 = *s2++;
+ while (sz1 > 0 && sz2 > 0) {
+ *d++ = *s1++ ^ *s2++;
+ sz1--, sz2--;
+ }
+ while (--sz1 >= 0)
+ *d++ = *s1++;
+ while (--sz2 >= 0)
+ *d++ = *s2++;
+ while (--d > dbase && !*d) ;
+ *dbase = d - dbase;
+ return dbase;
+}
+
+
+int P_inset(val, s) /* val IN s */
+register unsigned val;
+register long *s;
+{
+ register int bit;
+ bit = val % SETBITS;
+ val /= SETBITS;
+ if (val < *s++ && ((1L<<bit) & s[val]))
+ return 1;
+ return 0;
+}
+
+
+long *P_addset(s, val) /* s := s + [val] */
+register long *s;
+register unsigned val;
+{
+ register long *sbase = s;
+ register int bit, size;
+ bit = val % SETBITS;
+ val /= SETBITS;
+ size = *s;
+ if (++val > size) {
+ s += size;
+ while (val > size)
+ *++s = 0, size++;
+ *sbase = size;
+ } else
+ s += val;
+ *s |= 1L<<bit;
+ return sbase;
+}
+
+
+long *P_addsetr(s, v1, v2) /* s := s + [v1..v2] */
+register long *s;
+register unsigned v1, v2;
+{
+ register long *sbase = s;
+ register int b1, b2, size;
+ if ((int)v1 > (int)v2)
+ return sbase;
+ b1 = v1 % SETBITS;
+ v1 /= SETBITS;
+ b2 = v2 % SETBITS;
+ v2 /= SETBITS;
+ size = *s;
+ v1++;
+ if (++v2 > size) {
+ while (v2 > size)
+ s[++size] = 0;
+ s[v2] = 0;
+ *s = v2;
+ }
+ s += v1;
+ if (v1 == v2) {
+ *s |= (~((-2L)<<(b2-b1))) << b1;
+ } else {
+ *s++ |= (-1L) << b1;
+ while (++v1 < v2)
+ *s++ = -1;
+ *s |= ~((-2L) << b2);
+ }
+ return sbase;
+}
+
+
+long *P_remset(s, val) /* s := s - [val] */
+register long *s;
+register unsigned val;
+{
+ register int bit;
+ bit = val % SETBITS;
+ val /= SETBITS;
+ if (++val <= *s) {
+ if (!(s[val] &= ~(1L<<bit)))
+ while (*s && !s[*s])
+ (*s)--;
+ }
+ return s;
+}
+
+
+int P_setequal(s1, s2) /* s1 = s2 */
+register long *s1, *s2;
+{
+ register int size = *s1++;
+ if (*s2++ != size)
+ return 0;
+ while (--size >= 0) {
+ if (*s1++ != *s2++)
+ return 0;
+ }
+ return 1;
+}
+
+
+int P_subset(s1, s2) /* s1 <= s2 */
+register long *s1, *s2;
+{
+ register int sz1 = *s1++, sz2 = *s2++;
+ if (sz1 > sz2)
+ return 0;
+ while (--sz1 >= 0) {
+ if (*s1++ & ~*s2++)
+ return 0;
+ }
+ return 1;
+}
+
+
+long *P_setcpy(d, s) /* d := s */
+register long *d, *s;
+{
+ register long *save_d = d;
+
+#ifdef SETCPY_MEMCPY
+ memcpy(d, s, (*s + 1) * sizeof(long));
+#else
+ register int i = *s + 1;
+ while (--i >= 0)
+ *d++ = *s++;
+#endif
+ return save_d;
+}
+
+
+/* s is a "smallset", i.e., a 32-bit or less set stored
+ directly in a long. */
+
+long *P_expset(d, s) /* d := s */
+register long *d;
+register long s;
+{
+ if (s) {
+ d[1] = s;
+ *d = 1;
+ } else
+ *d = 0;
+ return d;
+}
+
+
+long P_packset(s) /* convert s to a small-set */
+register long *s;
+{
+ if (*s++)
+ return *s;
+ else
+ return 0;
+}
+
+
+
+
+
+/* Oregon Software Pascal extensions, courtesy of William Bader */
+
+int P_getcmdline(l, h, line)
+int l, h;
+Char *line;
+{
+ int i, len;
+ char *s;
+
+ h = h - l + 1;
+ len = 0;
+ for(i = 1; i < P_argc; i++) {
+ s = P_argv[i];
+ while (*s) {
+ if (len >= h) return len;
+ line[len++] = *s++;
+ }
+ if (len >= h) return len;
+ line[len++] = ' ';
+ }
+ return len;
+}
+
+Void TimeStamp(Day, Month, Year, Hour, Min, Sec)
+int *Day, *Month, *Year, *Hour, *Min, *Sec;
+{
+#ifndef NO_TIME
+ struct tm *tm;
+ long clock;
+
+ time(&clock);
+ tm = localtime(&clock);
+ *Day = tm->tm_mday;
+ *Month = tm->tm_mon + 1; /* Jan = 0 */
+ *Year = tm->tm_year;
+ if (*Year < 1900)
+ *Year += 1900; /* year since 1900 */
+ *Hour = tm->tm_hour;
+ *Min = tm->tm_min;
+ *Sec = tm->tm_sec;
+#endif
+}
+
+Void VAXdate(s)
+char *s;
+{
+ long clock;
+ char *c;
+ int i;
+ static int where[] = {8, 9, 0, 4, 5, 6, 0, 20, 21, 22, 23};
+
+ time(&clock);
+ c = ctime(&clock);
+ for (i = 0; i < 11; i++)
+ s[i] = my_toupper(c[where[i]]);
+ s[2] = '-';
+ s[6] = '-';
+}
+
+Void VAXtime(s)
+char *s;
+{
+ long clock;
+ char *c;
+ int i;
+
+ time(&clock);
+ c = ctime(&clock);
+ for (i = 0; i < 8; i++)
+ s[i] = c[i+11];
+ s[8] = '.';
+ s[9] = '0';
+ s[10] = '0';
+}
+
+
+
+
+/* SUN Berkeley Pascal extensions */
+
+Void P_sun_argv(s, len, n)
+register char *s;
+register int len, n;
+{
+ register char *cp;
+
+ if ((unsigned)n < P_argc)
+ cp = P_argv[n];
+ else
+ cp = "";
+ while (*cp && --len >= 0)
+ *s++ = *cp++;
+ while (--len >= 0)
+ *s++ = ' ';
+}
+
+
+
+
+int _OutMem()
+{
+ return _Escape(-2);
+}
+
+int _CaseCheck()
+{
+ return _Escape(-9);
+}
+
+int _NilCheck()
+{
+ return _Escape(-3);
+}
+
+
+
+
+
+/* The following is suitable for the HP Pascal operating system.
+ It might want to be revised when emulating another system. */
+
+char *_ShowEscape(buf, code, ior, prefix)
+char *buf, *prefix;
+int code, ior;
+{
+ char *bufp;
+
+ if (prefix && *prefix) {
+ strcpy(buf, prefix);
+ strcat(buf, ": ");
+ bufp = buf + strlen(buf);
+ } else {
+ bufp = buf;
+ }
+ if (code == -10) {
+ sprintf(bufp, "Pascal system I/O error %d", ior);
+ switch (ior) {
+ case 3:
+ strcat(buf, " (illegal I/O request)");
+ break;
+ case 7:
+ strcat(buf, " (bad file name)");
+ break;
+ case FileNotFound: /*10*/
+ strcat(buf, " (file not found)");
+ break;
+ case FileNotOpen: /*13*/
+ strcat(buf, " (file not open)");
+ break;
+ case BadInputFormat: /*14*/
+ strcat(buf, " (bad input format)");
+ break;
+ case 24:
+ strcat(buf, " (not open for reading)");
+ break;
+ case 25:
+ strcat(buf, " (not open for writing)");
+ break;
+ case 26:
+ strcat(buf, " (not open for direct access)");
+ break;
+ case 28:
+ strcat(buf, " (string subscript out of range)");
+ break;
+ case EndOfFile: /*30*/
+ strcat(buf, " (end-of-file)");
+ break;
+ case FileWriteError: /*38*/
+ strcat(buf, " (file write error)");
+ break;
+ }
+ } else {
+ sprintf(bufp, "Pascal system error %d", code);
+ switch (code) {
+ case -2:
+ strcat(buf, " (out of memory)");
+ break;
+ case -3:
+ strcat(buf, " (reference to NIL pointer)");
+ break;
+ case -4:
+ strcat(buf, " (integer overflow)");
+ break;
+ case -5:
+ strcat(buf, " (divide by zero)");
+ break;
+ case -6:
+ strcat(buf, " (real math overflow)");
+ break;
+ case -8:
+ strcat(buf, " (value range error)");
+ break;
+ case -9:
+ strcat(buf, " (CASE value range error)");
+ break;
+ case -12:
+ strcat(buf, " (bus error)");
+ break;
+ case -20:
+ strcat(buf, " (stopped by user)");
+ break;
+ }
+ }
+ return buf;
+}
+
+
+int _Escape(code)
+int code;
+{
+ char buf[100];
+
+ P_escapecode = code;
+ if (__top_jb) {
+ __p2c_jmp_buf *jb = __top_jb;
+ __top_jb = jb->next;
+ longjmp(jb->jbuf, 1);
+ }
+ if (code == 0)
+ exit(EXIT_SUCCESS);
+ if (code == -1)
+ exit(EXIT_FAILURE);
+ fprintf(stderr, "%s\n", _ShowEscape(buf, P_escapecode, P_ioresult, ""));
+ exit(EXIT_FAILURE);
+}
+
+int _EscIO(code)
+int code;
+{
+ P_ioresult = code;
+ return _Escape(-10);
+}
+
+int _EscIO2(code, name)
+int code;
+char *name;
+{
+ P_ioresult = code;
+ if (!__top_jb && name && *name) {
+ char buf[100];
+ fprintf(stderr, "%s: %s\n",
+ name, _ShowEscape(buf, P_escapecode, P_ioresult, ""));
+ exit(EXIT_FAILURE);
+ }
+ return _Escape(-10);
+}
+
+
+
+/* End. */
+
+
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/lyrics.c b/Build/source/utils/mtx/mtx-0.60d/lyrics.c
new file mode 100644
index 00000000000..c38cdeffddf
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/lyrics.c
@@ -0,0 +1,869 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "lyrics.pas" */
+
+
+#include "p2c.h"
+
+
+#define LYRICS_G
+#include "lyrics.h"
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef STATUS_H
+#include "status.h"
+#endif
+
+#ifndef MULTFILE_H
+#include "multfile.h"
+#endif
+
+#ifndef FILES_H
+#include "files.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+/* Symbols used in strings of melismatype */
+
+#define beam_melisma '['
+#define inhibit_beam_melisma '<'
+#define slur_melisma '('
+#define inhibit_slur_melisma '{'
+
+
+typedef char other_index;
+
+typedef char other_index0;
+
+typedef Char melismatype[256];
+
+typedef enum {
+ nolyr, haslyr
+} haslyrtype;
+typedef enum {
+ normal, aux
+} auxtype;
+typedef enum {
+ asbefore, newassign
+} assigntype;
+typedef enum {
+ virgin, active
+} inittype;
+
+typedef struct lyrinfotype {
+ short lyr_adjust, slur_level, slur_change, beam_level, beam_change;
+ melismatype melisma;
+ boolean numbered;
+} lyrinfotype;
+
+typedef enum {
+ none_given, global_lyrics, local_lyrics
+} lyrlinetype;
+
+typedef struct lyrtagtype {
+ lyrlinetype lyrsource;
+ haslyrtype has_lyrics;
+ auxtype auxiliary;
+ assigntype new_assign;
+ inittype initialized;
+ short linecount;
+ Char tags[256];
+} lyrtagtype;
+
+
+#define maxLyrNums 64
+#define lyrtaglength 40
+
+
+#define lyr_adjust_undef (-12345)
+#define interstave 24
+
+
+Static short LyrNum = 0;
+
+Static boolean lyrmodealter[maxstaves], oldlyrmodealter[maxstaves];
+Static lyrtagtype tag[maxvoices], oldtag[maxvoices];
+Static lyrinfotype lyrinfo[maxvoices];
+Static Char numberedParagraph[maxLyrNums][lyrtaglength + 1];
+
+
+/* Information flow for verse numbers: at the SetLyrics stage, the first
+line of each lyrics paragraph is checked for a verse number, and if
+found, the paragraph tag is remembered. At the AssignLyrics stage,
+the first time that paragraph is encountered, the particular voice
+is marked in lyrinfo as being numbered. When that voice is later processed,
+the mark in lyrinfo is interrogated and turned off: if it was on, the
+mtxVerse pre-TeX string is put into the output. */
+
+boolean hasVerseNumber(voice)
+voice_index voice;
+{
+ boolean Result;
+
+ Result = lyrinfo[voice-1].numbered;
+ lyrinfo[voice-1].numbered = false;
+ return Result;
+}
+
+
+Static boolean isNumberedLyricsParagraph(tag)
+Char *tag;
+{
+ short i, FORLIM;
+
+ FORLIM = LyrNum;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (!strcmp(tag, numberedParagraph[i]))
+ return true;
+ }
+ return false;
+}
+
+
+Static boolean anyTagNumbered(tags_)
+Char *tags_;
+{
+ boolean Result;
+ Char tags[256];
+ Char s[256];
+
+ strcpy(tags, tags_);
+/* p2c: lyrics.pas: Note: Eliminated unused assignment statement [338] */
+ if (curtail(tags, '}') > 0)
+ delete1(tags, 1);
+ do {
+ GetNextWord(s, tags, ',', dummy);
+ if (*s == '\0')
+ return false;
+ if (isNumberedLyricsParagraph(s))
+ return true;
+ } while (true);
+ return false;
+}
+
+
+/* Save the tag in the numberedParagraph list, stripping off braces if any */
+Static Void markNumbered(tag_)
+Char *tag_;
+{
+ Char tag[256];
+
+ strcpy(tag, tag_);
+ if (LyrNum >= maxLyrNums) {
+ error("Too many numbered lines in the lyrics", !print);
+ return;
+ }
+ LyrNum++;
+ if (curtail(tag, '}') > 0)
+ delete1(tag, 1);
+ strcpy(numberedParagraph[LyrNum-1], tag);
+/* p2c: lyrics.pas, line 104:
+ * Note: Possible string truncation in assignment [145] */
+}
+
+
+/* --- end of procedures to keep track of verse numbering --- */
+
+Void lyricsParagraph()
+{
+ Char first[256], w[256];
+ paragraph_index0 l, line;
+ other_index0 i;
+ other_index0 nother = 0;
+ Char other_[10][lyrtaglength + 1];
+ boolean numbered;
+ Char STR1[256], STR3[256];
+ paragraph_index0 FORLIM;
+ Char STR4[256];
+ Char STR5[256];
+
+ if (!doLyrics())
+ return;
+ NextWord(w, P[0], blank, dummy);
+ l = strlen(w);
+ line_no = orig_line_no[0];
+ if (w[l-1] != '}')
+ strcat(w, "}");
+ GetNextWord(first, w, dummy, '}');
+ while (*w != '\0') {
+ if (w[0] == '=')
+ predelete(w, 1);
+ if (w[0] != '{')
+ sprintf(w, "{%s", strcpy(STR1, w));
+ nother++;
+ GetNextWord(other_[nother-1], w, dummy, '}');
+/* p2c: lyrics.pas, line 122:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ if (beVerbose()) {
+ printf("---- Paragraph %d starting at line %d has lyrics headed %s",
+ paragraph_no, line_no, first);
+ for (i = 0; i <= nother - 1; i++)
+ printf("=%s", other_[i]);
+ putchar('\n');
+ }
+ sprintf(STR5, "%c Paragraph %s line %s bar %s",
+ comment, toString(STR1, paragraph_no), toString(STR3, line_no),
+ toString(STR4, bar_no));
+ tex3(STR5);
+ sprintf(STR3, "\\mtxSetLyrics%s{%%", first);
+ tex3(STR3);
+ FORLIM = para_len;
+ for (line = 2; line <= FORLIM; line++) {
+ lyrTranslate(P[line-1], &numbered);
+ if (numbered) {
+ if (line > 2)
+ warning("Verse number not in first line of paragraph treated as lyrics",
+ print);
+ else {
+ markNumbered(first);
+ for (i = 0; i <= nother - 1; i++)
+ markNumbered(other_[i]);
+ }
+ }
+ line_no = orig_line_no[line-1];
+ if (strlen(P[line-1]) > max_lyrics_line_length && pmx_preamble_done)
+ error("Lyrics line too long", print);
+ if (pmx_preamble_done) {
+ if (line == 2) {
+ sprintf(STR3, "\\\\\\:%s", P[line-1]);
+ put(STR3, putspace);
+ } else {
+ sprintf(STR3, "\\\\\\ %s", P[line-1]);
+ put(STR3, putspace);
+ }
+ } else
+ put(P[line-1], putspace);
+ if (line < para_len) {
+ if (pmx_preamble_done)
+ putLine(" %\\");
+ else
+ putLine(" %");
+ } else if (pmx_preamble_done)
+ putLine("}\\");
+ else
+ putLine("}");
+ }
+ for (i = 0; i <= nother - 1; i++) {
+ sprintf(STR1, "\\mtxCopyLyrics%s%s", first, other_[i]);
+ tex3(STR1);
+ }
+}
+
+
+Static Char *songraise(Result, voice)
+Char *Result;
+voice_index voice;
+{
+ Char s[256];
+ lyrtagtype *WITH;
+ lyrinfotype *WITH1;
+ Char STR1[256], STR3[256];
+
+ WITH = &tag[voice-1];
+ WITH1 = &lyrinfo[voice-1];
+ if (WITH->initialized == virgin && WITH1->lyr_adjust == 0)
+ return strcpy(Result, "");
+ else {
+ if (WITH->auxiliary == aux)
+ strcpy(s, "Aux");
+ else
+ *s = '\0';
+ sprintf(Result, "\\mtx%sLyricsAdjust{%s}{%s}",
+ s, toString(STR1, PMXinstr(voiceStave(voice))),
+ toString(STR3, WITH1->lyr_adjust));
+ return Result;
+ }
+}
+
+
+Char *lyricsReport(Result, voice)
+Char *Result;
+voice_index voice;
+{
+ Char l[256];
+ lyrtagtype *WITH;
+
+ WITH = &tag[voice-1];
+ if (WITH->has_lyrics == nolyr ||
+ WITH->lyrsource == none_given && *WITH->tags == '\0')
+ return strcpy(Result, " but has no own lyrics");
+ else {
+ strcpy(l, " with ");
+ if (WITH->auxiliary == aux)
+ strcat(l, "auxiliary ");
+ strcat(l, "lyrics ");
+ if (WITH->lyrsource == local_lyrics)
+ strcat(l, "locally defined as \"");
+ else
+ strcat(l, "labelled \"");
+ sprintf(l + strlen(l), "%s\"", WITH->tags);
+ if (anyTagNumbered(WITH->tags))
+ strcat(l, " with verse numbers");
+ return strcpy(Result, l);
+ }
+}
+
+
+Void initLyrics()
+{
+ /* at the start only */
+ stave_index stave;
+ voice_index voice, FORLIM;
+ lyrinfotype *WITH;
+ lyrtagtype *WITH1;
+ stave_index FORLIM1;
+
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++) {
+ WITH = &lyrinfo[voice];
+ WITH1 = &tag[voice];
+ WITH1->has_lyrics = nolyr;
+ WITH->lyr_adjust = lyr_adjust_undef;
+ *WITH->melisma = '\0';
+ WITH->slur_level = 0;
+ WITH->beam_level = 0;
+ WITH1->auxiliary = aux;
+ WITH1->lyrsource = none_given;
+ WITH1->new_assign = asbefore;
+ WITH1->initialized = virgin;
+ }
+ FORLIM1 = nstaves;
+ for (stave = 0; stave <= FORLIM1 - 1; stave++)
+ oldlyrmodealter[stave] = false;
+}
+
+
+Static Void registerLyrics(voice, w)
+voice_index voice;
+Char *w;
+{
+ lyrtagtype *WITH;
+
+ WITH = &tag[voice-1];
+ strcpy(oldtag[voice-1].tags, WITH->tags);
+ oldtag[voice-1].lyrsource = WITH->lyrsource;
+ WITH->lyrsource = global_lyrics;
+ switch (strlen(w)) {
+
+ case 0:
+ *WITH->tags = '\0';
+ break;
+
+ case 1:
+ fatalerror("M-Tx system error in registerLyrics");
+ break;
+
+ default:
+ strcpy(WITH->tags, w);
+ break;
+ }
+}
+
+
+Void extractLyrtag(voice, note)
+voice_index voice;
+Char *note;
+{
+ /* inline lyrics change */
+ lyrtagtype *WITH;
+ Char STR1[256], STR2[256];
+
+ WITH = &tag[voice-1];
+ if (WITH->has_lyrics == nolyr) {
+ error3(voice, "Inline lyrics change on no-lyrics line");
+ return;
+ }
+ registerLyrics(voice, note); /* was: ''); */
+ sprintf(note, "\\mtxAssignLyrics{%s}%s",
+ toString(STR1, PMXinstr(voiceStave(voice))), strcpy(STR2, note));
+ if (WITH->auxiliary == aux)
+ sprintf(note, "\\mtxAuxLyr{%s}\\", strcpy(STR2, note));
+ else
+ strcat(note, "\\");
+}
+
+
+Void clearTags()
+{
+ /* at start of paragraph analyis */
+ voice_index voice, FORLIM;
+ lyrtagtype *WITH;
+
+ memcpy(oldtag, tag, maxvoices * sizeof(lyrtagtype));
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++) {
+ WITH = &tag[voice];
+ WITH->lyrsource = none_given;
+ *WITH->tags = '\0';
+ WITH->linecount = 0;
+ }
+}
+
+
+#define maxlyrlen (PMXlinelength - 15)
+
+
+Local Void convertlyrics(lyn, voice, mx)
+Char *lyn;
+voice_index voice;
+auxtype mx;
+{
+ static Char setlyr[256] = "%%\\\\\\mtxSetLyrics";
+ Char btag[256], thistag[256], w[256];
+ boolean numbered;
+ Char STR1[256];
+ lyrtagtype *WITH;
+ Char STR2[256];
+
+ NextWord(w, lyn, blank, dummy);
+ WITH = &tag[voice-1];
+ if (*w == '\0') {
+ *WITH->tags = '\0';
+ return;
+ }
+ WITH->has_lyrics = haslyr;
+ WITH->auxiliary = mx;
+ if (w[0] == '{') {
+ registerLyrics(voice, w);
+ return;
+ }
+ WITH->lyrsource = local_lyrics;
+ WITH->linecount++;
+ toString(thistag, voice * 10 + WITH->linecount);
+ sprintf(btag, "{%s}", thistag);
+ if (*WITH->tags == '\0')
+ strcpy(WITH->tags, btag);
+ else {
+ WITH->tags[strlen(WITH->tags) - 1] = ',';
+ sprintf(WITH->tags + strlen(WITH->tags), "%s}", thistag);
+ }
+ trim(lyn);
+ lyrTranslate(lyn, &numbered);
+ if (numbered)
+ markNumbered(thistag);
+ if (strlen(lyn) + strlen(btag) > maxlyrlen)
+ sprintf(lyn, "%s%s{\\\n\\\\\\:%s}\\", setlyr, btag, strcpy(STR2, lyn));
+ else
+ sprintf(lyn, "%s%s{%s}\\", setlyr, btag, strcpy(STR1, lyn));
+}
+
+#undef maxlyrlen
+
+
+Void maybeLyrics(voice, parline, w_)
+voice_index voice;
+paragraph_index parline;
+Char *w_;
+{
+ /* during paragraph analysis, parline had L:, already stripped */
+ Char w[256];
+ voice_index0 k;
+
+ /** Labelled lyrics line -- */
+ strcpy(w, w_);
+ if (!doLyrics())
+ return;
+ if (strlen(w) == 1 && voice == 0)
+ warning("Lyrics line above top voice should be labelled", print);
+ if (strlen(w) == 1) { /** Standard lyrics line -------- */
+ k = voice;
+ if (k == 0)
+ k = 1;
+ convertlyrics(P[parline-1], k, normal);
+ return;
+ }
+ predelete(w, 1);
+ k = findVoice(w);
+ if (k == 0)
+ error("Lyrics line belongs to unknown voice", print);
+ else
+ convertlyrics(P[parline-1], k, aux);
+}
+
+
+Void reviseLyrics()
+{
+ /* after paragraph analysis */
+ voice_index voice;
+ stave_index stave;
+ voice_index FORLIM;
+ lyrtagtype *WITH;
+ stave_index FORLIM1;
+
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++) {
+ WITH = &tag[voice];
+ if (oldtag[voice].lyrsource == global_lyrics &&
+ WITH->lyrsource == none_given) {
+ strcpy(WITH->tags, oldtag[voice].tags);
+ WITH->lyrsource = global_lyrics;
+ }
+ WITH->new_assign = (assigntype)(WITH->has_lyrics == haslyr &&
+ strcmp(WITH->tags, oldtag[voice].tags));
+ if (*WITH->tags == '\0')
+ WITH->has_lyrics = nolyr;
+ strcpy(oldtag[voice].tags, WITH->tags);
+ oldtag[voice].lyrsource = WITH->lyrsource;
+ }
+ FORLIM1 = nstaves;
+ for (stave = 1; stave <= FORLIM1; stave++) {
+ WITH = &tag[first_on_stave[stave-1] - 1];
+ lyrmodealter[stave-1] = (!aloneOnStave(stave) &&
+ WITH->has_lyrics == haslyr &&
+ WITH->auxiliary == normal);
+ }
+}
+
+
+Void assignLyrics(stave, lyrassign)
+stave_index stave;
+Char *lyrassign;
+{
+ /* at start of new block */
+ Char atag[256], instr[256], l[256];
+ voice_index v1, v2, voice;
+ lyrtagtype *WITH;
+ Char STR2[256];
+ lyrinfotype *WITH1;
+
+ *lyrassign = '\0';
+ toString(instr, PMXinstr(stave));
+ v1 = first_on_stave[stave-1];
+ v2 = v1 + number_on_stave[stave-1] - 1;
+ /* don't reassign if other voice takes over */
+ if (tag[v1-1].auxiliary == tag[v2-1].auxiliary &&
+ tag[v1-1].has_lyrics != tag[v2-1].has_lyrics) {
+ for (voice = v1 - 1; voice <= v2 - 1; voice++) {
+ WITH = &tag[voice];
+ if (WITH->new_assign == newassign)
+ WITH->new_assign = (assigntype)WITH->has_lyrics;
+ }
+ }
+ for (voice = v1 - 1; voice <= v2 - 1; voice++)
+ lyrinfo[voice].numbered = false;
+ for (voice = v1; voice <= v2; voice++) {
+ WITH = &tag[voice-1];
+ if (WITH->new_assign == newassign) {
+ strcpy(atag, WITH->tags);
+ if (*atag == '\0')
+ strcpy(atag, "{}");
+ sprintf(l, "\\mtxAssignLyrics{%s}%s", instr, atag);
+ if (WITH->auxiliary == aux)
+ sprintf(l, "\\mtxAuxLyr{%s}", strcpy(STR2, l));
+ strcat(lyrassign, l);
+ if (*WITH->tags == '\0')
+ WITH->has_lyrics = nolyr;
+ if (WITH->has_lyrics == haslyr && WITH->initialized == virgin) {
+ WITH1 = &lyrinfo[voice-1];
+ if (WITH->auxiliary == aux && upper(voice))
+ WITH1->lyr_adjust = interstave;
+ else
+ WITH1->lyr_adjust = 0;
+ strcat(lyrassign, songraise(STR2, voice));
+ WITH->initialized = active;
+ }
+ if (anyTagNumbered(atag))
+ lyrinfo[voice-1].numbered = true;
+ }
+ }
+ if (lyrmodealter[stave-1] == oldlyrmodealter[stave-1])
+ return;
+ if (lyrmodealter[stave-1])
+ sprintf(lyrassign + strlen(lyrassign), "\\mtxLyrModeAlter{%s}", instr);
+ else
+ sprintf(lyrassign + strlen(lyrassign), "\\mtxLyrModeNormal{%s}", instr);
+ oldlyrmodealter[stave-1] = lyrmodealter[stave-1];
+}
+
+
+Void lyricsAdjust(voice, note)
+voice_index voice;
+Char *note;
+{
+ /* inline at-word */
+ short adj;
+ boolean force, put_above, put_below;
+ lyrinfotype *WITH;
+ lyrtagtype *WITH1;
+ Char STR2[256];
+
+ WITH = &lyrinfo[voice-1];
+ WITH1 = &tag[voice-1];
+ predelete(note, 1);
+ force = (note[0] == '=');
+ if (force)
+ predelete(note, 1);
+ put_above = (note[0] == '^');
+ if (put_above)
+ predelete(note, 1);
+ put_below = (note[0] == 'v');
+ if (put_below)
+ predelete(note, 1);
+ if (*note != '\0')
+ getNum(note, &adj);
+ else
+ adj = 0;
+ if (WITH1->has_lyrics == nolyr) {
+ *note = '\0';
+ return;
+ }
+ if (put_above)
+ WITH->lyr_adjust = interstave;
+ else if (put_below)
+ WITH->lyr_adjust = 0;
+ if (force)
+ WITH->lyr_adjust = adj;
+ else
+ WITH->lyr_adjust += adj;
+ songraise(note, voice);
+ if (*note != '\0')
+ sprintf(note, "\\\\%s\\", strcpy(STR2, note));
+}
+
+
+Void lyrTranslate(P, numbered)
+Char *P;
+boolean *numbered;
+{ /* Test for starting number */
+ short k, l, number;
+ Char Q[256], w[256];
+
+ NextWord(w, P, blank, dummy);
+ *numbered = false;
+ if (endsWith(w, ".")) {
+ getNum(w, &number);
+ *numbered = (number != 0);
+ }
+ /*Translate lyrics link */
+ *Q = '\0';
+ l = strlen(P);
+ for (k = 1; k <= l - 1; k++) {
+ if (P[k-1] != '_' || P[k] == '_' || P[k] == ' ' || pos1(P[k], digits) > 0)
+ sprintf(Q + strlen(Q), "%c", P[k-1]);
+ else if (k > 1 && P[k-2] == '\\')
+ strcat(Q, "mtxLowLyrlink ");
+ else
+ strcat(Q, "\\mtxLyrlink ");
+ }
+ sprintf(Q + strlen(Q), "%c", P[l-1]);
+ strcpy(P, Q);
+}
+
+
+typedef enum {
+ beam, slur
+} melismaEnd;
+
+
+Static Char removeLast(s, t)
+Char *s;
+Char *t;
+{
+ Char Result;
+ short i, l;
+
+ l = strlen(s);
+ for (i = l; i >= 1; i--) {
+ if (pos1(s[i-1], t) > 0) {
+ Result = s[i-1];
+ delete1(s, i);
+ return Result;
+ }
+ }
+ return dummy;
+}
+
+
+Static boolean OpenMelisma(s)
+Char *s;
+{
+ return (pos1(slur_melisma, s) > 0 || pos1(beam_melisma, s) > 0);
+}
+
+
+/* Local variables for getSyllable: */
+struct LOC_getSyllable {
+ voice_index voice;
+ boolean BM, EM;
+} ;
+
+Local Void startMelismas(t, LINK)
+Char *t;
+struct LOC_getSyllable *LINK;
+{
+ boolean open_before, open_now;
+ short i, k;
+ lyrinfotype *WITH;
+
+ k = strlen(t);
+ for (i = 0; i <= k - 1; i++) {
+ WITH = &lyrinfo[LINK->voice-1];
+ open_before = OpenMelisma(WITH->melisma);
+ sprintf(WITH->melisma + strlen(WITH->melisma), "%c", t[i]);
+ open_now = OpenMelisma(WITH->melisma);
+ LINK->BM = (LINK->BM || open_now && !open_before);
+ }
+}
+
+Local boolean endMelisma(voice, LINK)
+short voice;
+struct LOC_getSyllable *LINK;
+{
+ Char found;
+ short i;
+ short count[2];
+ melismaEnd t;
+ short FORLIM1;
+ lyrinfotype *WITH;
+ Char STR1[4];
+
+ LINK->EM = false;
+ count[(long)slur] = -lyrinfo[voice-1].slur_change;
+ count[(long)beam] = -lyrinfo[voice-1].beam_change;
+ for (t = beam; (long)t <= (long)slur; t = (melismaEnd)((long)t + 1)) {
+ FORLIM1 = count[(long)t];
+ for (i = 1; i <= FORLIM1; i++) {
+ WITH = &lyrinfo[voice-1];
+ switch (t) {
+
+ case slur:
+ sprintf(STR1, "%c%c", slur_melisma, inhibit_slur_melisma);
+ found = removeLast(WITH->melisma, STR1);
+ break;
+
+ case beam:
+ sprintf(STR1, "%c%c", beam_melisma, inhibit_beam_melisma);
+ found = removeLast(WITH->melisma, STR1);
+ break;
+ }
+ if (found == dummy)
+ error3(voice, "Ending a melisma that was never started");
+ LINK->EM = (LINK->EM ||
+ (!OpenMelisma(WITH->melisma) &&
+ pos1(found, (sprintf(STR1, "%c%c", slur_melisma, beam_melisma),
+ STR1)) > 0));
+ }
+ }
+ return LINK->EM;
+}
+
+Local Void startSlurMelisma(voice, LINK)
+voice_index voice;
+struct LOC_getSyllable *LINK;
+{
+ static Char start[2] = {
+ slur_melisma, inhibit_slur_melisma
+ };
+
+ Char slurs[256];
+ short k, FORLIM;
+ Char STR1[256];
+
+ *slurs = '\0';
+ FORLIM = lyrinfo[voice-1].slur_change;
+ for (k = 1; k <= FORLIM; k++)
+ sprintf(slurs, "%c%s",
+ start[noSlurMelisma(voice, 1 - k)], strcpy(STR1, slurs));
+ startMelismas(slurs, LINK);
+}
+
+Local Void startBeamMelisma(voice, LINK)
+voice_index voice;
+struct LOC_getSyllable *LINK;
+{
+ static Char start[2] = {
+ beam_melisma, inhibit_beam_melisma
+ };
+
+ Char beams[256];
+ short k, FORLIM;
+ Char STR1[256];
+
+ *beams = '\0';
+ FORLIM = lyrinfo[voice-1].beam_change;
+ for (k = 1; k <= FORLIM; k++)
+ sprintf(beams, "%c%s", start[noBeamMelisma(voice)], strcpy(STR1, beams));
+ startMelismas(beams, LINK);
+}
+
+Local boolean startMelisma(voice, LINK)
+short voice;
+struct LOC_getSyllable *LINK;
+{
+ LINK->BM = false;
+ startSlurMelisma(voice, LINK);
+ startBeamMelisma(voice, LINK);
+ return LINK->BM;
+}
+
+
+/* Append mtxBM or mtxEM to pretex when appropriate */
+Void getSyllable(voice_, pretex)
+voice_index voice_;
+Char *pretex;
+{
+ struct LOC_getSyllable V;
+ short t;
+ lyrtagtype *WITH;
+ lyrinfotype *WITH1;
+
+ V.voice = voice_;
+ WITH = &tag[V.voice-1];
+ WITH1 = &lyrinfo[V.voice-1];
+ if (WITH->has_lyrics != haslyr)
+ return;
+ t = WITH1->slur_level;
+ WITH1->slur_level = slurLevel(V.voice);
+ WITH1->slur_change = WITH1->slur_level - t;
+ t = WITH1->beam_level;
+ WITH1->beam_level = beamLevel(V.voice);
+ WITH1->beam_change = WITH1->beam_level - t;
+ if (startMelisma(V.voice, &V)) {
+ if (WITH->auxiliary == aux)
+ strcat(pretex, "\\mtxAuxBM");
+ else
+ strcat(pretex, "\\mtxBM");
+ }
+ if (!endMelisma(V.voice, &V))
+ return;
+ if (WITH->auxiliary == aux)
+ strcat(pretex, "\\mtxAuxEM");
+ else
+ strcat(pretex, "\\mtxEM");
+}
+
+
+Static Void getSyllable1(voice, pretex)
+voice_index voice;
+Char *pretex;
+{
+ lyrinfotype *WITH;
+
+ WITH = &lyrinfo[voice-1];
+ printf("voice=%d, slurchange=%d, melisma=%s, beamchange=%d\n",
+ voice, WITH->slur_change, WITH->melisma, WITH->beam_change);
+ getSyllable1(voice, pretex);
+ if (*pretex != '\0')
+ printf("pretex = %s\n", pretex);
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/lyrics.h b/Build/source/utils/mtx/mtx-0.60d/lyrics.h
new file mode 100644
index 00000000000..f225cb0d760
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/lyrics.h
@@ -0,0 +1,37 @@
+/* Header for module lyrics, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef LYRICS_H
+#define LYRICS_H
+
+
+/* Everything related to lyrics */
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+#ifdef LYRICS_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+extern Void initLyrics PV();
+extern Void clearTags PV();
+extern Void reviseLyrics PV();
+extern Void lyrTranslate PP((Char *P, boolean *numbered));
+extern Void getSyllable PP((int voice, Char *pretex));
+extern Char *lyricsReport PP((Char *Result, int voice));
+extern Void maybeLyrics PP((int voice, int parline, Char *w));
+extern Void extractLyrtag PP((int voice, Char *note));
+extern Void lyricsAdjust PP((int voice, Char *note));
+extern Void assignLyrics PP((int stave, Char *lyrassign));
+extern Void lyricsParagraph PV();
+extern boolean hasVerseNumber PP((int voice));
+
+
+#undef vextern
+
+#endif /*LYRICS_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/lyrics.pas b/Build/source/utils/mtx/mtx-0.60d/lyrics.pas
new file mode 100644
index 00000000000..14d7f5046eb
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/lyrics.pas
@@ -0,0 +1,455 @@
+unit lyrics;
+{ Everything related to lyrics }
+
+interface uses globals;
+
+procedure initLyrics;
+procedure clearTags;
+procedure reviseLyrics;
+procedure lyrTranslate(var P: string; var numbered: boolean);
+procedure getSyllable(voice: voice_index; var pretex: string);
+function lyricsReport (voice: voice_index): string;
+procedure maybeLyrics (voice: voice_index; parline: paragraph_index;
+ w: string);
+procedure extractLyrtag (voice: voice_index; var note: string);
+procedure lyricsAdjust (voice: voice_index; var note: string);
+procedure assignLyrics(stave: stave_index; var lyrassign: string);
+procedure lyricsParagraph;
+function hasVerseNumber(voice: voice_index): boolean;
+
+implementation uses control, strings, mtxline, status, files, utility;
+
+{ Symbols used in strings of melismatype }
+const
+ beam_melisma = '[';
+ inhibit_beam_melisma = '<';
+ slur_melisma = '(';
+ inhibit_slur_melisma = '{';
+
+type
+ other_index = 1..10;
+ other_index0 = 0..10;
+ melismatype = string;
+ haslyrtype = (nolyr, haslyr);
+ auxtype= (normal, aux);
+ assigntype = (asbefore, newassign);
+ inittype = (virgin,active);
+ lyrinfotype = record
+ lyr_adjust, slur_level, slur_change, beam_level, beam_change: integer;
+ melisma: melismatype;
+ numbered: boolean;
+ end;
+
+ lyrlinetype = (none_given, global_lyrics, local_lyrics);
+ lyrtagtype = record
+ lyrsource: lyrlinetype;
+ has_lyrics: haslyrtype;
+ auxiliary: auxtype;
+ new_assign: assigntype;
+ initialized: inittype;
+ linecount: integer;
+ tags: string;
+ end;
+
+const maxLyrNums=64;
+ lyrtaglength=40;
+ LyrNum: integer=0;
+
+var lyrmodealter, oldlyrmodealter: array[stave_index] of boolean;
+ tag, oldtag: array[voice_index] of lyrtagtype;
+ lyrinfo: array[voice_index] of lyrinfotype;
+ numberedParagraph: array[1..maxLyrNums] of string[lyrtaglength];
+
+const lyr_adjust_undef = -12345;
+ interstave = 24;
+
+{ Information flow for verse numbers: at the SetLyrics stage, the first
+line of each lyrics paragraph is checked for a verse number, and if
+found, the paragraph tag is remembered. At the AssignLyrics stage,
+the first time that paragraph is encountered, the particular voice
+is marked in lyrinfo as being numbered. When that voice is later processed,
+the mark in lyrinfo is interrogated and turned off: if it was on, the
+mtxVerse pre-TeX string is put into the output. }
+
+function hasVerseNumber(voice: voice_index): boolean;
+begin hasVerseNumber:=lyrinfo[voice].numbered;
+ lyrinfo[voice].numbered:=false;
+end;
+
+function isNumberedLyricsParagraph(tag: string): boolean;
+ var i: integer;
+begin
+ for i:=1 to LyrNum do if tag=numberedParagraph[i] then
+ begin isNumberedLyricsParagraph:=true; exit; end;
+ isNumberedLyricsParagraph:=false;
+end;
+
+function anyTagNumbered(tags: string): boolean;
+ var s: string;
+begin anyTagNumbered:=false;
+ if curtail(tags,'}')>0 then delete1(tags,1);
+ repeat s:=getNextWord(tags,',',dummy);
+ if s='' then exit;
+ if isNumberedLyricsParagraph(s) then
+ begin anyTagNumbered:=true; exit; end;
+ until false;
+end;
+
+{ Save the tag in the numberedParagraph list, stripping off braces if any }
+procedure markNumbered(tag: string);
+begin if LyrNum >= maxLyrNums then
+ begin error('Too many numbered lines in the lyrics',not print); exit; end;
+ inc(LyrNum);
+ if curtail(tag,'}')>0 then delete1(tag,1);
+ numberedParagraph[LyrNum] := tag;
+end;
+
+{ --- end of procedures to keep track of verse numbering --- }
+
+procedure lyricsParagraph;
+ var first, w: string;
+ l, line: paragraph_index0;
+ i, nother: other_index0;
+ other: array[other_index] of string[lyrtaglength];
+ numbered: boolean;
+begin if not doLyrics then exit;
+ w:=NextWord(P[1],blank,dummy); l:=length(w); line_no := orig_line_no[1];
+ if w[l]<>'}' then w:=w+'}';
+ first:=GetNextWord(w,dummy,'}'); nother:=0;
+ while w<>'' do
+ begin if w[1]='=' then predelete(w,1);
+ if w[1]<>'{' then w:='{'+w;
+ inc(nother); other[nother]:=GetNextWord(w,dummy,'}');
+ end;
+ if beVerbose then
+ begin write('---- Paragraph ', paragraph_no, ' starting at line ', line_no,
+ ' has lyrics headed ',first);
+ for i:=1 to nother do write('=',other[i]); writeln;
+ end;
+ tex3(comment+' Paragraph '+toString(paragraph_no)+' line '+
+ toString(line_no)+' bar '+toString(bar_no));
+ tex3('\mtxSetLyrics'+first+'{%');
+ for line:=2 to para_len do
+ begin lyrTranslate(P[line],numbered);
+ if numbered then if (line>2) then warning(
+ 'Verse number not in first line of paragraph treated as lyrics',print)
+ else
+ begin markNumbered(first); for i:=1 to nother do markNumbered(other[i]);
+ end;
+ line_no:=orig_line_no[line];
+ if (length(P[line])>max_lyrics_line_length) and pmx_preamble_done
+ then error('Lyrics line too long',print);
+ if pmx_preamble_done then
+ if line=2 then put('\\\:'+P[line],putspace)
+ else put('\\\ ' + P[line],putspace)
+ else put(P[line],putspace);
+ if line<para_len then
+ if pmx_preamble_done then putLine(' %\')
+ else putLine(' %')
+ else if pmx_preamble_done then putLine('}\')
+ else putLine('}')
+ end;
+ for i:=1 to nother do tex3('\mtxCopyLyrics'+first+other[i]);
+end;
+
+function songraise(voice: voice_index): string;
+ var s: string;
+begin with tag[voice] do with lyrinfo[voice] do
+ if (initialized=virgin) and (lyr_adjust=0) then songraise:='' else
+ begin
+ if auxiliary=aux then s:='Aux' else s:='';
+ songraise:='\mtx'+s+'LyricsAdjust{'+toString(PMXinstr(voiceStave(voice)))
+ +'}{'+toString(lyr_adjust)+'}';
+ end;
+end;
+
+function lyricsReport (voice: voice_index): string;
+ var l: string;
+begin with tag[voice] do
+ if (has_lyrics=nolyr) or (lyrsource=none_given) and (tags='') then
+ lyricsReport := ' but has no own lyrics'
+ else begin
+ l := ' with ';
+ if auxiliary=aux then l := l + 'auxiliary ';
+ l := l + 'lyrics ';
+ if lyrsource=local_lyrics then l:= l + 'locally defined as "'
+ else l := l + 'labelled "';
+ l := l + tags + '"';
+ if anyTagNumbered(tags) then l := l + ' with verse numbers';
+ lyricsReport := l;
+ end;
+end;
+
+procedure initLyrics; { at the start only }
+ var stave: stave_index;
+ voice: voice_index;
+begin for voice:=1 to nvoices do
+ with lyrinfo[voice] do with tag[voice] do
+ begin has_lyrics:=nolyr; lyr_adjust:=lyr_adjust_undef;
+ melisma:=''; slur_level:=0; beam_level:=0; auxiliary:=aux;
+ lyrsource:=none_given; new_assign := asbefore; initialized := virgin;
+ end;
+ for stave:=1 to nstaves do oldlyrmodealter[stave] := false;
+end;
+
+procedure registerLyrics (voice: voice_index; w: string);
+begin
+ with tag[voice] do
+ begin oldtag[voice].tags:=tags;
+ oldtag[voice].lyrsource:=lyrsource;
+ lyrsource:=global_lyrics;
+ case length(w) of
+ 0: tags := '';
+ 1: FatalError('M-Tx system error in registerLyrics');
+ else tags := w;
+ end;
+ end;
+end;
+
+procedure extractLyrtag (voice: voice_index; var note: string);
+ { inline lyrics change }
+begin with tag[voice] do
+ if has_lyrics=nolyr then
+ error3(voice,'Inline lyrics change on no-lyrics line')
+ else begin registerLyrics(voice,note); { was: ''); }
+ note:='\mtxAssignLyrics{'+toString(PMXinstr(voiceStave(voice)))+'}'+note;
+ if auxiliary=aux then note:='\mtxAuxLyr{'+note+'}\' else note:=note+'\';
+ end;
+end;
+
+procedure clearTags; { at start of paragraph analyis }
+ var voice: voice_index;
+begin
+ oldtag:=tag;
+ for voice:=1 to nvoices do with tag[voice] do
+ begin
+ lyrsource:=none_given; tags := ''; linecount:=0;
+ end;
+end;
+
+procedure maybeLyrics (voice: voice_index; parline: paragraph_index;
+ w: string);
+ { during paragraph analysis, parline had L:, already stripped }
+ var k: voice_index0;
+ procedure convertlyrics(var lyn: string; voice: voice_index; mx: auxtype);
+ const setlyr: string = '%%\\\mtxSetLyrics';
+ maxlyrlen = PMXlinelength-15;
+ var btag, thistag, w: string;
+ numbered: boolean;
+ begin
+ w:=NextWord(lyn,blank,dummy); with tag[voice] do
+ begin
+ if w='' then tags:=''
+ else begin
+ has_lyrics:=haslyr; auxiliary:=mx;
+ if w[1]='{' then registerLyrics(voice,w)
+ else begin lyrsource:=local_lyrics;
+ inc(linecount); thistag:=toString(10*voice+linecount);
+ btag := '{'+thistag+'}';
+ if tags='' then tags:=btag
+ else begin tags[length(tags)]:=','; tags:=tags+thistag+'}'; end;
+ trim(lyn); lyrTranslate(lyn,numbered);
+ if numbered then markNumbered(thistag);
+ if length(lyn)+length(btag)>maxlyrlen then
+ lyn := setlyr + btag + '{\'^J'\\\:' + lyn +'}\'
+ else lyn:= setlyr + btag + '{' + lyn +'}\';
+ end;
+ end;
+ end;
+ end;
+begin if not dolyrics then exit;
+ if (length(w)=1) and (voice=0) then
+ warning('Lyrics line above top voice should be labelled',print);
+ if length(w)=1 then {* Standard lyrics line -------- }
+ begin k:=voice; if k=0 then k:=1; convertlyrics(P[parline],k,normal);
+ end
+ else {* Labelled lyrics line -- }
+ begin predelete(w,1); k:=findVoice(w);
+ if k=0 then error('Lyrics line belongs to unknown voice',print)
+ else convertlyrics(P[parline],k,aux);
+ end;
+end;
+
+procedure reviseLyrics; { after paragraph analysis }
+ var voice : voice_index;
+ stave : stave_index;
+begin
+ for voice:=1 to nvoices do with tag[voice] do
+ begin if (oldtag[voice].lyrsource=global_lyrics) and
+ (lyrsource=none_given) then
+ begin tags:=oldtag[voice].tags; lyrsource:=global_lyrics; end;
+ new_assign :=
+ assigntype(ord((has_lyrics=haslyr) and (tags<>oldtag[voice].tags)));
+ if tags='' then has_lyrics := nolyr;
+ oldtag[voice].tags := tags;
+ oldtag[voice].lyrsource := lyrsource;
+ end;
+ for stave:=1 to nstaves do with tag[first_on_stave[stave]] do
+ lyrmodealter[stave] := not aloneOnStave(stave) and
+ (has_lyrics=haslyr) and (auxiliary=normal);
+end;
+
+procedure assignLyrics(stave: stave_index; var lyrassign: string);
+ { at start of new block }
+ var atag, instr, l: string;
+ v1, v2, voice: voice_index;
+ begin lyrassign:=''; instr := toString(pmxinstr(stave));
+ v1:=first_on_stave[stave]; v2:=v1+number_on_stave[stave]-1;
+ if v1<v2 then { don't reassign if other voice takes over };
+ if (tag[v1].auxiliary=tag[v2].auxiliary) and
+ (tag[v1].has_lyrics<>tag[v2].has_lyrics) then
+ for voice:=v1 to v2 do with tag[voice] do
+ if new_assign=newassign then new_assign:=assigntype(has_lyrics);
+ for voice:=v1 to v2 do lyrinfo[voice].numbered:=false;
+ for voice:=v1 to v2 do
+ with tag[voice] do if new_assign=newassign then
+ begin atag:=tags; if atag='' then atag:='{}';
+ l := '\mtxAssignLyrics{' + instr + '}' + atag;
+ if auxiliary=aux then l:='\mtxAuxLyr{' + l + '}';
+ lyrassign := lyrassign + l;
+ if tags='' then has_lyrics:=nolyr;
+ if (has_lyrics=haslyr) and (initialized=virgin) then
+ with lyrinfo[voice] do
+ begin if (auxiliary=aux) and upper(voice) then
+ lyr_adjust:=interstave else lyr_adjust:=0;
+ lyrassign := lyrassign + songraise(voice);
+ initialized := active;
+ end;
+ if anyTagNumbered(atag) then lyrinfo[voice].numbered:=true;
+ end;
+ if lyrmodealter[stave]<>oldlyrmodealter[stave] then
+ begin if lyrmodealter[stave] then
+ lyrassign := lyrassign + '\mtxLyrModeAlter{' + instr + '}'
+ else lyrassign := lyrassign + '\mtxLyrModeNormal{' + instr + '}';
+ oldlyrmodealter[stave] := lyrmodealter[stave];
+ end;
+ end;
+
+procedure lyricsAdjust (voice: voice_index; var note: string);
+ { inline at-word }
+ var adj: integer;
+ force, put_above, put_below: boolean;
+begin with lyrinfo[voice] do with tag[voice] do
+ begin predelete(note,1);
+ force:=note[1]='='; if force then predelete(note,1);
+ put_above:=note[1]='^'; if put_above then predelete(note,1);
+ put_below:=note[1]='v'; if put_below then predelete(note,1);
+ if note<>'' then getNum(note,adj) else adj:=0;
+ if has_lyrics=nolyr then begin note:=''; exit; end;
+ if put_above then lyr_adjust:=interstave
+ else if put_below then lyr_adjust:=0;
+ if force then lyr_adjust:=adj else inc(lyr_adjust,adj);
+ note:=songraise(voice); if note<>'' then note:='\\'+note+'\';
+ end
+end;
+
+procedure lyrTranslate(var P: string; var numbered: boolean);
+ var k, l, number: integer;
+ Q, w: string;
+begin { Test for starting number } w:=NextWord(P,blank,dummy);
+ numbered:=false;
+ if endsWith(w,'.') then begin getNum(w,number); numbered:=number<>0 end;
+ {Translate lyrics link } Q := ''; l:=length(P);
+ for k:=1 to l-1 do
+ if (P[k]<>'_') or (P[k+1]='_') or (P[k+1]=' ') or (pos1(P[k+1],digits)>0)
+ then Q := Q+P[k]
+ else if (k>1) and (P[k-1]='\') then Q := Q+'mtxLowLyrlink '
+ else Q := Q+'\mtxLyrlink ';
+ Q:=Q+P[l];
+ P := Q;
+end;
+
+type melismaEnd = (beam, slur);
+
+function removeLast(var s: string; t: string): char;
+ var i,l: integer;
+begin l:=length(s);
+ for i:=l downto 1 do if pos1(s[i],t)>0 then
+ begin removeLast:=s[i]; delete1(s,i); exit; end;
+ removeLast := dummy;
+end;
+
+function OpenMelisma(s: string): boolean;
+begin OpenMelisma := (pos1(slur_melisma,s)>0) or (pos1(beam_melisma,s)>0);
+end;
+
+{ Append mtxBM or mtxEM to pretex when appropriate }
+procedure getSyllable(voice: voice_index; var pretex: string);
+ var BM, EM: boolean;
+ procedure startMelismas (t: string);
+ var open_before, open_now: boolean;
+ i, k: integer;
+ begin k:=length(t);
+ for i:=1 to k do with lyrinfo[voice] do
+ begin open_before := OpenMelisma(melisma);
+ melisma := melisma + t[i];
+ open_now := OpenMelisma(melisma);
+ BM := BM or (open_now and not open_before)
+ end;
+ end;
+ function endMelisma(voice: integer): boolean;
+ var found: char;
+ i: integer;
+ count: array[melismaEnd] of integer;
+ t: melismaEnd;
+ begin EM := false;
+ count[slur] := -lyrinfo[voice].slur_change;
+ count[beam] := -lyrinfo[voice].beam_change;
+ for t:=beam to slur do for i:=1 to count[t] do with lyrinfo[voice] do
+ begin
+ case t of
+ slur: found := removeLast(melisma,slur_melisma+inhibit_slur_melisma);
+ beam: found := removeLast(melisma,beam_melisma+inhibit_beam_melisma);
+ end;
+ if found=dummy then
+ error3(voice,'Ending a melisma that was never started');
+ EM := EM or (not openMelisma(melisma)
+ and (pos1(found,slur_melisma+beam_melisma)>0))
+ end;
+ endMelisma := EM
+ end;
+ procedure startSlurMelisma(voice: voice_index);
+ const start: array[boolean] of char = (slur_melisma,inhibit_slur_melisma);
+ var slurs: string;
+ k: integer;
+ begin slurs:='';
+ for k:=1 to lyrinfo[voice].slur_change do
+ slurs:=start[noSlurMelisma(voice,1-k)]+slurs;
+ startMelismas(slurs)
+ end;
+ procedure startBeamMelisma(voice: voice_index);
+ const start: array[boolean] of char = (beam_melisma,inhibit_beam_melisma);
+ var beams: string;
+ k: integer;
+ begin beams:='';
+ for k:=1 to lyrinfo[voice].beam_change do
+ beams:=start[noBeamMelisma(voice)]+beams;
+ startMelismas(beams)
+ end;
+ function startMelisma(voice: integer): boolean;
+ begin BM:=false; startSlurMelisma(voice); startBeamMelisma(voice);
+ startMelisma := BM
+ end;
+ var t: integer;
+begin with tag[voice] do with lyrinfo[voice] do
+ begin if has_lyrics<>haslyr then exit;
+ t:=slur_level; slur_level:=slurLevel(voice); slur_change:=slur_level-t;
+ t:=beam_level; beam_level:=beamLevel(voice); beam_change:=beam_level-t;
+ if startMelisma(voice) then if auxiliary=aux
+ then pretex:=pretex+'\mtxAuxBM' else pretex:=pretex+'\mtxBM';
+ if endMelisma(voice) then if auxiliary=aux
+ then pretex:=pretex+'\mtxAuxEM' else pretex:=pretex+'\mtxEM'
+ end
+end;
+
+procedure getSyllable1(voice: voice_index; var pretex: string);
+begin with lyrinfo[voice] do
+ begin
+ writeln('voice=',voice, ', slurchange=',slur_change,
+ ', melisma=',melisma, ', beamchange=', beam_change)
+ end;
+ getSyllable1(voice,pretex);
+ if pretex<>'' then writeln('pretex = ',pretex)
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtx.c b/Build/source/utils/mtx/mtx-0.60d/mtx.c
new file mode 100644
index 00000000000..f4a85564092
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtx.c
@@ -0,0 +1,505 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "mtx.pas" */
+
+
+#include "p2c.h"
+
+
+#define MTX_G
+#include "mtx.h"
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef STATUS_H
+#include "status.h"
+#endif
+
+#ifndef NOTES_H
+#include "notes.h"
+#endif
+
+
+#define flagged "8136"
+
+
+typedef boolean sticky['z' + 1 - 'a'];
+
+
+Static sticky note_attrib[maxvoices], rest_attrib[maxvoices];
+
+
+Static short logTwo(denom)
+short denom;
+{
+ short l = 0;
+
+ while (denom > 1) {
+ l++;
+ denom /= 2;
+ }
+ return l;
+}
+
+
+Local boolean dotted(n)
+short n;
+{
+ boolean Result;
+
+/* p2c: mtx.pas: Note: Eliminated unused assignment statement [338] */
+ if (n == 0)
+ return false;
+ if (n != n / 3 * 3)
+ return false;
+ n /= 3;
+ while ((n & 1) == 0)
+ n /= 2;
+ return (n == 1);
+}
+
+
+/* RESTS should have a third parameter OFFSET. At present we in effect
+ assume OFFSET+LENGTH to be a multiple of METERDENOM. */
+Char *rests(Result, len, meterdenom, blind)
+Char *Result;
+short len, meterdenom;
+boolean blind;
+{
+ Char r[256], bl[256];
+ Char STR1[256];
+
+ if (blind)
+ strcpy(bl, "b");
+ else
+ *bl = '\0';
+ if (len == 0)
+ return strcpy(Result, "");
+ else {
+ if (len == meterdenom * 128) {
+ sprintf(Result, "r9%s ", bl);
+ return Result;
+ } else {
+ if (dotted(len)) {
+ rests(r, len - len / 3, meterdenom, false);
+ r[2] = 'd';
+ sprintf(Result, "%s%s ", r, bl);
+ return Result;
+ } else if (len >= 64 / meterdenom) {
+ sprintf(Result, "%sr%c%s ",
+ rests(STR1, len - 64 / meterdenom, meterdenom, blind),
+ durations[whole + logTwo(meterdenom) - 1], bl);
+ return Result;
+ } else
+ return (rests(Result, len, meterdenom * 2, blind));
+ }
+ }
+}
+
+
+Local Char *attribs(Result, note)
+Char *Result;
+Char *note;
+{
+ Char a[256];
+ short i = 2;
+ short l;
+ Char n;
+
+ *a = '\0';
+ l = strlen(note);
+ while (i <= l) {
+ n = note[i-1];
+ if (n == 'x')
+ i = l;
+ else if (islower(n))
+ sprintf(a + strlen(a), "%c", n);
+ i++;
+ }
+ return strcpy(Result, a);
+}
+
+
+Static Void checkSticky(note, attrib)
+Char *note;
+boolean *attrib;
+{
+ short i = 2;
+ short l;
+ Char c;
+ Char a[256];
+
+ if (*note == '\0')
+ return;
+ l = strlen(note);
+ while (i <= l) {
+ c = note[i-1];
+ if (islower(c)) {
+ if (i < l && note[i] == ':') {
+ delete1(note, i + 1);
+ l--;
+ attrib[c - 'a'] = !attrib[c - 'a'];
+ } else
+ attrib[c - 'a'] = false;
+ }
+ i++;
+ }
+ attribs(a, note);
+ for (c = 'z'; c >= 'a'; c--) {
+ if (attrib[c - 'a'] && pos1(c, a) == 0)
+ insertChar(c, note, 3);
+ }
+}
+
+
+/* Routine was patched by Hiroaki Morimoto, revised 2003/08/15.
+ Rewritten by DPL 2004/05/16 to be more understandable.
+ octaveCode returns octave adjustments in the order
+ [absolute or =],[relative] */
+Void checkOctave(voice, note)
+voice_index voice;
+Char *note;
+{
+ Char code;
+
+ code = octaveCode(note);
+ if (code == '=') {
+ setOctave(voice);
+ removeOctaveCode(code, note);
+ }
+ if (octave(voice) == blank)
+ return;
+ code = octaveCode(note);
+ if (isdigit(code)) {
+ resetOctave(voice);
+ return;
+ }
+ while (code == '+' || code == '-') {
+ newOctave(voice, code);
+ removeOctaveCode(code, note);
+ code = octaveCode(note);
+ }
+ if (code != ' ')
+ error3(voice, "You may have only one absolute octave assignment");
+ insertOctaveCode(octave(voice), note);
+ resetOctave(voice);
+}
+
+
+Void markDebeamed(voice, note)
+voice_index voice;
+Char *note;
+{
+ if (isVocal(voice) && afterSlur(voice) == 0 && unbeamVocal() &&
+ pos1(duration(voice), flagged) > 0)
+ insertChar('a', note, 2);
+}
+
+
+Static short barLength(meter)
+Char *meter;
+{
+ short n1, n2, pn1, pn2;
+
+ getMeter(meter, &n1, &n2, &pn1, &pn2);
+ return (n1 * (64 / n2));
+}
+
+
+Static boolean isMultiBarRest(rest_)
+Char *rest_;
+{
+ boolean Result;
+
+/* p2c: mtx.pas: Note: Eliminated unused assignment statement [338] */
+ if (strlen(rest_) < 3)
+ return false;
+ if (rest_[1] != 'm')
+ return false;
+ if (multi_bar_rest)
+ error("Only one multibar rest allowed per line", print);
+ multi_bar_rest = true;
+ return true;
+}
+
+
+/* Double-length in xtuplet detected by a brute search for D anywhere.
+ Could be more elegant. */
+
+Static short macro_length[20];
+
+Static Char macro_ID[20][3] = {
+ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
+ "15", "16", "17", "18", "19", "20"
+};
+
+
+/* Local variables for scanMusic: */
+struct LOC_scanMusic {
+ voice_index voice;
+ Char note[256];
+ boolean doublex, store_macro;
+ short bar, old_length, bar_length, count, l, mlen, ngrace, nmulti, macroID,
+ playID;
+ Char macro_type;
+} ;
+
+Local Void decmulti(LINK)
+struct LOC_scanMusic *LINK;
+{
+ if (LINK->doublex)
+ LINK->nmulti -= 2;
+ else
+ LINK->nmulti--;
+}
+
+/* Local variables for countIt: */
+struct LOC_countIt {
+ struct LOC_scanMusic *LINK;
+} ;
+
+Local Void incbar(nl, LINK)
+short nl;
+struct LOC_countIt *LINK;
+{
+ LINK->LINK->bar_length += nl;
+ if (LINK->LINK->bar_length > LINK->LINK->bar && meternum > 0)
+ error3(LINK->LINK->voice, "Bar end occurs in mid-note");
+}
+
+Local Void countIt(LINK)
+struct LOC_scanMusic *LINK;
+{
+ struct LOC_countIt V;
+
+ V.LINK = LINK;
+ if (LINK->ngrace > 0) {
+ LINK->ngrace--;
+ return;
+ }
+ if (LINK->nmulti > 0) {
+ decmulti(LINK);
+ return;
+ }
+ if (LINK->count % 3 != 0 &&
+ (LINK->note[0] != rest && note_attrib[LINK->voice-1]['d' - 'a'] ||
+ LINK->note[0] == rest && rest_attrib[LINK->voice-1]['d' - 'a']))
+ LINK->count += LINK->count / 2;
+/* p2c: mtx.pas, line 148:
+ * Note: Using % for possibly-negative arguments [317] */
+ incbar(LINK->count, &V);
+ LINK->l = pos1(multi_group, LINK->note);
+ if (LINK->l <= 0)
+ return;
+ predelete(LINK->note, LINK->l);
+ getNum(LINK->note, &LINK->nmulti);
+ decmulti(LINK);
+}
+
+Local Void maybeGroup(LINK)
+struct LOC_scanMusic *LINK;
+{
+ if (LINK->note[0] != grace_group)
+ return;
+ if (strlen(LINK->note) == 1)
+ LINK->ngrace = 1;
+ else
+ LINK->ngrace = pos1(LINK->note[1], digits);
+ /* bug if ngrace>9 */
+ if (LINK->ngrace > 0)
+ LINK->ngrace--;
+}
+
+Local short identifyMacro(s_, LINK)
+Char *s_;
+struct LOC_scanMusic *LINK;
+{
+ Char s[256];
+ short k;
+
+ strcpy(s, s_);
+ predelete(s, 2);
+ for (k = 1; k <= 20; k++) {
+ if (!strcmp(s, macro_ID[k-1]))
+ return k;
+ }
+ return 0;
+}
+
+Local Void examineMacro(LINK)
+struct LOC_scanMusic *LINK;
+{
+ if (!countMacro())
+ return;
+ if (debugMode())
+ printf("%s: ", LINK->note);
+ if (strlen(LINK->note) == 1) {
+ LINK->mlen = LINK->bar_length - LINK->old_length;
+ if (LINK->macroID < 1 || LINK->macroID > 20)
+ error3(LINK->voice, "Invalid macro ID");
+ macro_length[LINK->macroID-1] = LINK->mlen;
+ if (debugMode())
+ printf("Ending macro %d of type %c, length=%d\n",
+ LINK->macroID, LINK->macro_type, LINK->mlen);
+ if (LINK->macro_type == 'S')
+ LINK->bar_length = LINK->old_length;
+ LINK->store_macro = false;
+ return;
+ }
+ LINK->playID = identifyMacro(LINK->note, LINK);
+ if (LINK->playID < 1 || LINK->playID > 20)
+ error3(LINK->voice, "Invalid macro ID");
+ if (LINK->note[1] == 'P') {
+ if (debugMode())
+ printf("Playing macro %d of length %d\n",
+ LINK->playID, macro_length[LINK->playID-1]);
+ LINK->bar_length += macro_length[LINK->playID-1];
+ return;
+ }
+ if (pos1(LINK->note[1], "SR") <= 0)
+ return;
+ LINK->old_length = LINK->bar_length;
+ LINK->macro_type = LINK->note[1];
+ LINK->macroID = LINK->playID;
+ LINK->store_macro = true;
+ if (debugMode())
+ printf("Defining macro %d of type %c\n", LINK->macroID, LINK->note[1]);
+}
+
+
+Void scanMusic(voice_, left_over)
+voice_index voice_;
+short *left_over;
+{
+ struct LOC_scanMusic V;
+ Char buf[256], enote[256], xnote[256];
+ boolean has_next = false, done = false;
+ Char dur1, lastdur;
+ music_word nscan;
+ Char STR1[256];
+
+ V.voice = voice_;
+ strcpy(terminators, "d.x");
+ resetInfo(V.voice, buf);
+ *left_over = 0;
+ V.store_macro = false;
+ V.bar = full_bar;
+ V.bar_length = 0;
+ V.ngrace = 0;
+ V.nmulti = 0;
+ if (meternum == 0)
+ V.bar = 32000;
+ dur1 = duration(V.voice);
+ lastdur = dur1;
+ do {
+ getNextMusWord(buf, V.note, &nscan);
+ if (*V.note == '\0')
+ break;
+ V.count = 0;
+ /* if isNoteOrRest(note) and not (isPause(note) or isMultibarRest(note))
+ then note:=toStandard(note); */
+ V.doublex = (pos1('D', V.note) > 0);
+ if (nscan == mword) {
+ if (*V.note == '\0')
+ error3(V.voice, "You may not end a line with a meter change");
+ if (V.bar_length > 0)
+ error3(V.voice, "Meter change only allowed at start of bar");
+ else
+ V.bar = barLength(V.note);
+ } else if (nscan == rword) {
+ if (!(isPause(V.note) || isMultiBarRest(V.note))) {
+ processNote(V.note, xnote, dur1, &lastdur, &V.count);
+ checkSticky(V.note, rest_attrib[V.voice-1]);
+ }
+ }
+ if (*V.note != '\0')
+ appendNote(V.voice, nscan);
+ strcpy(enote, V.note);
+ if (nscan == macro || nscan == endmacro)
+ examineMacro(&V);
+ if (nscan == abcdefg) {
+ if (!multi_bar_rest && V.ngrace + V.nmulti == 0) {
+ processNote(enote, xnote, dur1, &lastdur, &V.count);
+ if (*xnote != '\0') {
+ checkSticky(enote, note_attrib[V.voice-1]);
+ appendToLine(V.voice, enote);
+ appendNote(V.voice, nscan);
+ strcpy(enote, xnote);
+ }
+ checkSticky(enote, note_attrib[V.voice-1]);
+ }
+ }
+ appendToLine(V.voice, enote);
+ if (*V.note == '\0') /* !!! else word_bound[here]:=length(line); */
+ done = true;
+ sprintf(STR1, "%c", barsym);
+ if (!strcmp(V.note, STR1)) {
+ if (meternum == 0)
+ error3(V.voice, "You may not use bar lines in barless music");
+ else if (V.bar_length == 0)
+ markBar(V.voice);
+ else if (numberOfBars(V.voice) == 0 && V.bar_length < V.bar) {
+ if (has_next)
+ has_next = false; /*Should check whether pickups are equal*/
+ else if (*left_over > 0)
+ error3(V.voice, "Bar is too short");
+ *left_over = V.bar_length;
+ V.bar_length = 0;
+ }
+ }
+ if (nscan == nextvoice) {
+ if (V.bar_length > 0)
+ error3(V.voice, "Next voice before bar is full");
+ else
+ barForward(V.voice, -1);
+ has_next = true;
+ } else if (isPause(V.note))
+ V.bar_length += V.bar;
+ else if (!multi_bar_rest) { /*do nothing*/
+ if (!done && isNoteOrRest(V.note))
+ countIt(&V);
+ else
+ maybeGroup(&V);
+ }
+ dur1 = lastdur;
+ if (V.bar_length >= V.bar && V.ngrace + V.nmulti == 0 && !V.store_macro) {
+ if (debugMode())
+ printf("%d %d\n", V.voice, V.bar_length);
+ barForward(V.voice, V.bar_length / V.bar);
+ V.bar_length %= V.bar;
+/* p2c: mtx.pas, line 266:
+ * Note: Using % for possibly-negative arguments [317] */
+ }
+ } while (!done);
+ setExtraLength(V.voice, V.bar_length);
+ resetDuration(V.voice, dur1);
+ regroup(V.voice);
+}
+
+
+Void initMTX()
+{
+ voice_index i;
+ Char j;
+
+ for (i = 0; i <= maxvoices - 1; i++) {
+ for (j = 'a'; j <= 'z'; j++)
+ note_attrib[i][j - 'a'] = false;
+ }
+ memcpy(rest_attrib, note_attrib, maxvoices * sizeof(sticky));
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtx.h b/Build/source/utils/mtx/mtx-0.60d/mtx.h
new file mode 100644
index 00000000000..9c4a9811883
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtx.h
@@ -0,0 +1,30 @@
+/* Header for module mtx, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef MTX_H
+#define MTX_H
+
+
+/* Details of M-Tx -> PMX translation */
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+#ifdef MTX_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+extern Void scanMusic PP((int voice, short *left_over));
+extern Void markDebeamed PP((int voice, Char *note));
+extern Void checkOctave PP((int voice, Char *note));
+extern Char *rests PP((Char *Result, int len, int meterdenom, int blind));
+extern Void initMTX PV();
+
+
+#undef vextern
+
+#endif /*MTX_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtx.pas b/Build/source/utils/mtx/mtx-0.60d/mtx.pas
new file mode 100644
index 00000000000..474b24521a3
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtx.pas
@@ -0,0 +1,280 @@
+unit mtx;
+{ Details of M-Tx -> PMX translation }
+
+interface uses globals;
+
+procedure scanMusic(voice: voice_index; var left_over: integer);
+procedure markDebeamed(voice: voice_index; var note: string);
+procedure checkOctave(voice: voice_index; var note: string);
+function rests (len, meterdenom: integer; blind: boolean): string;
+procedure initMTX;
+
+implementation uses control, mtxline, strings, status, notes;
+
+const flagged = '8136';
+
+type sticky = array['a'..'z'] of boolean;
+
+var note_attrib, rest_attrib: array[voice_index] of sticky;
+
+function logTwo(denom: integer): integer;
+ var l: integer;
+begin l:=0; while denom>1 do begin inc(l); denom:=denom div 2; end;
+ logtwo:=l;
+end;
+
+{ RESTS should have a third parameter OFFSET. At present we in effect
+ assume OFFSET+LENGTH to be a multiple of METERDENOM. }
+function rests (len, meterdenom: integer; blind: boolean): string;
+ var r, bl: string;
+ function dotted(n: integer): boolean;
+ begin dotted:=false; if n=0 then exit;
+ if n<>3*(n div 3) then exit;
+ n:=n div 3; while n mod 2 = 0 do n:=n div 2;
+ dotted := n=1;
+ end;
+ begin if blind then bl:='b' else bl:='';
+ if len=0 then rests:='' else
+ if len=128*meterdenom then rests:='r9'+bl+' ' else
+ if dotted(len) then
+ begin r:=rests(len-len div 3,meterdenom,false);
+ r[3]:='d'; rests:=r+bl+' ';
+ end
+ else if len>=64 div meterdenom then
+ rests:=rests(len-64 div meterdenom,meterdenom,blind)+'r'
+ +durations[whole+logtwo(meterdenom)]+bl+' '
+ else rests:=rests(len,meterdenom*2,blind);
+ end;
+
+procedure checkSticky(var note: string; var attrib: sticky);
+ var i,l: integer;
+ c: char;
+ a: string;
+ function attribs(note: string): string;
+ var a: string;
+ i,l: integer;
+ n: char;
+ begin a:=''; i:=2; l:=length(note);
+ while i<=l do
+ begin n:=note[i];
+ if n='x' then i:=l else if (n>='a') and (n<='z') then a:=a+n;
+ inc(i);
+ end;
+ attribs:=a;
+ end;
+begin if note='' then exit;
+ l:=length(note); i:=2;
+ while i<=l do
+ begin c:=note[i];
+ if (c>='a') and (c<='z') then
+ if (i<l) and (note[i+1]=':') then
+ begin delete1(note,i+1); dec(l); attrib[c]:=not attrib[c]; end
+ else attrib[c]:=false;
+ inc(i);
+ end;
+ a:=attribs(note);
+ for c:='z' downto 'a' do
+ if attrib[c] and (pos1(c,a)=0) then insertchar(c,note,3);
+end;
+
+{ Routine was patched by Hiroaki Morimoto, revised 2003/08/15.
+ Rewritten by DPL 2004/05/16 to be more understandable.
+ octaveCode returns octave adjustments in the order
+ [absolute or =],[relative] }
+procedure checkOctave(voice: voice_index; var note: string);
+ var code: char;
+begin
+ code:=octaveCode(note);
+ if code='=' then begin setOctave(voice); removeOctaveCode(code,note); end;
+ if octave(voice)=blank then exit;
+ code:=octaveCode(note);
+ if (code>='0') and (code<='9') then begin resetOctave(voice); exit end;
+ while (code='+') or (code='-') do
+ begin
+ newOctave(voice,code); removeOctaveCode(code,note); code:=octaveCode(note)
+ end;
+ if code<>' ' then error3(voice,'You may have only one absolute octave assignment');
+ insertOctaveCode(octave(voice),note); resetOctave(voice)
+end;
+
+procedure markDebeamed(voice: voice_index; var note: string);
+begin
+ if isVocal(voice) and (afterSlur(voice)=0) and unbeamVocal
+ and (pos1(duration(voice),flagged)>0) then insertchar('a',note,2);
+end;
+
+function barLength (meter: string): integer;
+ var n1, n2, pn1, pn2: integer;
+begin
+ getMeter(meter,n1,n2,pn1,pn2); barLength := n1*(64 div n2);
+end;
+
+function isMultiBarRest(rest: string): boolean;
+begin isMultibarRest:=false; if length(rest)<3 then exit;
+ if rest[2]<>'m' then exit;
+ if multi_bar_rest then error(
+ 'Only one multibar rest allowed per line',print);
+ multi_bar_rest := true; isMultibarRest:=true;
+end;
+
+{ Double-length in xtuplet detected by a brute search for D anywhere.
+ Could be more elegant. }
+
+var macro_length: array[1..20] of integer;
+const macro_ID: array[1..20] of string[2]=('1','2','3','4','5','6','7','8',
+ '9','10','11','12','13','14','15','16','17','18','19','20');
+
+procedure scanMusic(voice: voice_index; var left_over: integer);
+ var buf, note, enote, xnote: string;
+ has_next, done, doublex, store_macro: boolean;
+ bar, old_length, bar_length, count, l, mlen, ngrace, nmulti,
+ macroID, playID: integer;
+ dur1, lastdur, macro_type: char;
+ nscan: music_word;
+
+ procedure decmulti;
+ begin if doublex then dec(nmulti,2) else dec(nmulti)
+ end;
+
+ procedure countIt;
+ procedure incbar(nl: integer);
+ begin inc(bar_length,nl);
+ if (bar_length>bar) and (meternum>0)
+ then error3(voice,'Bar end occurs in mid-note');
+ end;
+ begin
+ if ngrace>0 then dec(ngrace) else
+ if nmulti>0 then decmulti else
+ begin if (count mod 3<>0) and (
+ (note[1]<>rest) and note_attrib[voice,'d'] or
+ (note[1]=rest) and rest_attrib[voice,'d']) then
+ inc(count,count div 2);
+ incbar(count);
+ l := pos1(multi_group,note);
+ if l>0 then
+ begin predelete(note,l); getNum(note,nmulti); decmulti;
+ end;
+ end
+ end;
+
+ procedure maybeGroup;
+ begin if note[1]=grace_group then
+ begin if length(note)=1 then ngrace:=1
+ else ngrace := pos1(note[2],digits); (* bug if ngrace>9 *)
+ if ngrace>0 then dec(ngrace);
+ end;
+ end;
+
+ function identifyMacro(s: string): integer;
+ var k: integer;
+ begin predelete(s,2); for k:=1 to 20 do if s=macro_ID[k] then
+ begin identifyMacro:=k; exit end;
+ identifyMacro:=0
+ end;
+
+ procedure examineMacro;
+ begin if not countMacro then exit;
+ if debugMode then write(note,': '); if length(note)=1 then
+ begin
+ mlen:=bar_length-old_length;
+ if (macroID<1) or (macroID>20) then error3(voice,'Invalid macro ID');
+ macro_length[macroID]:=mlen;
+ if debugMode then
+ writeln('Ending macro ',macroID,' of type ',macro_type,', length=', mlen);
+ if macro_type='S' then bar_length:=old_length; store_macro:=false
+ end
+ else begin playID:=identifyMacro(note);
+ if (playID<1) or (playID>20) then error3(voice,'Invalid macro ID');
+ if note[2]='P' then
+ begin if debugMode then
+ writeln('Playing macro ',playID,' of length ',
+ macro_length[playID]);
+ inc(bar_length,macro_length[playID])
+ end
+ else if pos1(note[2],'SR')>0 then
+ begin old_length:=bar_length; macro_type:=note[2]; macroID:=playID;
+ store_macro:=true;
+ if debugMode then writeln('Defining macro ',macroID,' of type ',note[2])
+ end
+ end
+ end;
+
+begin
+ terminators:='d.x';
+ resetInfo(voice, buf); has_next := false; left_over:=0; store_macro:=false;
+ bar:=full_bar; bar_length:=0; ngrace:=0; nmulti:=0;
+ if meternum=0 then bar:=32000;
+ dur1:=duration(voice); lastdur:=dur1;
+ done:=false;
+ repeat GetNextMusWord(buf,note,nscan); if length(note)=0 then break; count:=0;
+{ if isNoteOrRest(note) and not (isPause(note) or isMultibarRest(note))
+ then note:=toStandard(note); }
+ doublex := pos1('D',note)>0;
+ if nscan=mword then
+ begin
+ if length(note)=0 then
+ Error3(voice,'You may not end a line with a meter change');
+ if bar_length>0 then
+ error3(voice,'Meter change only allowed at start of bar')
+ else bar:=barLength(note);
+ end
+ else if nscan=rword then
+ if not (isPause(note) or isMultiBarRest(note)) then
+ begin
+ processNote(note,xnote,dur1,lastdur,count);
+ checkSticky(note,rest_attrib[voice]);
+ end;
+ if note<>'' then appendNote(voice,nscan);
+ enote := note;
+ if (nscan=macro) or (nscan=endMacro) then examineMacro;
+ if nscan=abcdefg then
+ if (not multi_bar_rest) and (ngrace + nmulti = 0) then
+ begin
+ processNote(enote,xnote,dur1,lastdur,count);
+ if xnote<>'' then
+ begin
+ checkSticky(enote,note_attrib[voice]);
+ appendToLine(voice,enote);
+ appendNote(voice,nscan); enote := xnote;
+ end;
+ checkSticky(enote,note_attrib[voice]);
+ end;
+ appendToLine(voice,enote);
+ if note='' then done:=true; { !!! else word_bound[here]:=length(line); }
+ if (note=barsym) then
+ if meternum=0 then
+ error3(voice,'You may not use bar lines in barless music')
+ else if bar_length=0 then markBar(voice)
+ else if (numberOfBars(voice)=0) and (bar_length<bar) then
+ begin if has_next then
+ has_next:=false {Should check whether pickups are equal}
+ else if left_over>0 then error3(voice,'Bar is too short');
+ left_over:=bar_length; bar_length := 0;
+ end;
+ if nscan=nextvoice then
+ begin if bar_length>0 then error3(voice, 'Next voice before bar is full')
+ else barForward(voice,-1); has_next := true;
+ end
+ else if isPause(note) then inc(bar_length,bar)
+ else if multi_bar_rest then {do nothing}
+ else if not done and isNoteOrRest(note) then countIt
+ else maybeGroup;
+ dur1:=lastdur;
+ if (bar_length>=bar) and (ngrace+nmulti=0) and not store_macro then
+ begin if debugMode then writeln(voice,' ',bar_length);
+ barForward(voice,bar_length div bar); bar_length:=bar_length mod bar
+ end;
+ until done;
+ setExtraLength(voice,bar_length);
+ resetDuration(voice,dur1);
+ regroup(voice)
+end;
+
+procedure initMTX;
+ var i: voice_index; j: char;
+begin for i:=1 to maxvoices do for j:='a' to 'z' do
+ note_attrib[i,j] := false;
+ rest_attrib := note_attrib;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtxline.c b/Build/source/utils/mtx/mtx-0.60d/mtxline.c
new file mode 100644
index 00000000000..f61cee0e24d
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtxline.c
@@ -0,0 +1,844 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "mtxline.pas" */
+
+
+#include "p2c.h"
+
+
+#define MTXLINE_G
+#include "mtxline.h"
+
+
+boolean bind_left[22] = {
+ false, false, true, false, false, true, true, false, true, true, true,
+ false, true, false, true, false, true, false, false, false, false, false
+};
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef NOTES_H
+#include "notes.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+typedef music_word word_scan[max_words];
+
+typedef struct line_info {
+ word_index0 here, nword;
+ bar_index0 nbar;
+ paragraph_index0 voice_pos, voice_stave, mus, chord;
+ short extra;
+ boolean vocal;
+ word_index0 bar_bound[max_bars + 1];
+ short word_bound[max_words + 1];
+ word_scan scan;
+} line_info;
+
+
+Static Char name[22][10] = {
+ "?", "note", "znote", "lyricsTag", "(", ")", ")(", "[", "]", "_", "PMX<",
+ "macro", "endMacro", "meter", "ornament", "rest", "//", "BAR", "TeX", "@",
+ "firstonly", "ERROR"
+};
+
+Static line_info info[maxvoices];
+
+
+/* ------------------------------------------------------------- */
+
+short beatsPerLine(void)
+{
+ short Result;
+ voice_index voice, FORLIM;
+ line_info *WITH;
+
+ FORLIM = nvoices;
+ for (voice = 1; voice <= FORLIM; voice++) {
+ WITH = &info[voice-1];
+ if (WITH->nbar > 0 || WITH->extra > 0) {
+ if (WITH->extra % one_beat > 0) {
+/* p2c: mtxline.pas, line 99:
+ * Note: Using % for possibly-negative arguments [317] */
+ error3(voice, "Line length not an integer number of beats");
+ }
+ Result = WITH->nbar * meternum + WITH->extra / one_beat;
+ }
+ }
+ return Result;
+}
+
+
+void skipChordBar(voice_index voice)
+{
+ line_info *WITH;
+ Char STR1[256];
+
+ WITH = &info[voice-1];
+ if (WITH->chord > 0) {
+ sprintf(STR1, "%c", barsym);
+ if (!strcmp(P[WITH->chord - 1], STR1))
+ predelete(P[WITH->chord - 1], 1);
+ }
+}
+
+
+Char *getBar(Char *Result, voice_index voice, short bar)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ return (substr_(Result, P[WITH->mus - 1],
+ WITH->word_bound[WITH->bar_bound[bar-1]] + 1,
+ WITH->word_bound[WITH->bar_bound[bar]] -
+ WITH->word_bound[WITH->bar_bound[bar-1]]));
+}
+
+
+Char *musicLine(Char *Result, voice_index voice)
+{
+ return strcpy(Result, P[musicLineNo(voice) - 1]);
+}
+
+
+paragraph_index0 musicLineNo(voice_index voice)
+{
+ return (info[voice-1].mus);
+}
+
+
+void setMusicLineNo(voice_index voice, paragraph_index lno)
+{
+ info[voice-1].mus = lno;
+}
+
+
+paragraph_index0 chordLineNo(voice_index voice)
+{
+ return (info[voice-1].chord);
+}
+
+
+void setChordLineNo(voice_index voice, paragraph_index lno)
+{
+ info[voice-1].chord = lno;
+}
+
+
+void setVocal(voice_index voice, boolean voc)
+{
+ info[voice-1].vocal = voc;
+}
+
+
+boolean isVocal(voice_index voice)
+{
+ return (info[voice-1].vocal);
+}
+
+
+void setStavePos(voice_index voice, stave_index stave, stave_index pos)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ WITH->voice_pos = pos;
+ WITH->voice_stave = stave;
+}
+
+
+stave_index voiceStave(voice_index voice)
+{
+ return (info[voice-1].voice_stave);
+}
+
+
+stave_index voicePos(voice_index voice)
+{
+ return (info[voice-1].voice_pos);
+}
+
+
+voice_index companion(voice_index voice)
+{
+ short s;
+
+ s = info[voice-1].voice_stave;
+ if (number_on_stave[s-1] == 1)
+ return voice;
+ else if (info[voice-1].voice_pos == 1)
+ return (voice + 1);
+ else
+ return (voice - 1);
+}
+
+
+void regroup(voice_index voice)
+{
+ word_index0 i, j;
+ word_index0 j2 = 0;
+ line_info *WITH;
+ word_index0 FORLIM;
+
+ WITH = &info[voice-1];
+ if (debugMode())
+ printf("Voice %d has %d bars at ", voice, WITH->nbar);
+ if (debugMode()) {
+ FORLIM = WITH->nbar + 1;
+ for (i = 1; i <= FORLIM; i++)
+ printf("%d ", WITH->bar_bound[i]);
+ }
+ FORLIM = WITH->nbar;
+ for (i = 1; i <= FORLIM; i++) {
+ j2 = WITH->bar_bound[i];
+ j = j2 + 1;
+ while (j <= WITH->here &&
+ (bind_left[(long)WITH->scan[j-1]] || WITH->scan[j-1] == barword)) {
+ WITH->bar_bound[i]++;
+ j++;
+ }
+ }
+ if (WITH->extra > 0)
+ WITH->bar_bound[WITH->nbar + 1] = WITH->here;
+ if (debugMode()) {
+ printf(" regrouped to ");
+ FORLIM = WITH->nbar + 1;
+ for (i = 1; i <= FORLIM; i++)
+ printf("%d ", WITH->bar_bound[i]);
+ }
+ if (debugMode())
+ putchar('\n');
+ WITH->nword = WITH->here;
+}
+
+
+void resetInfo(voice_index voice, Char *buf)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ strcpy(buf, P[WITH->mus - 1]);
+ *P[WITH->mus - 1] = '\0';
+ WITH->bar_bound[0] = 0;
+ WITH->word_bound[0] = 0;
+ WITH->nbar = 0;
+ WITH->here = 0;
+}
+
+
+void clearLabels(void)
+{
+ voice_index voice, FORLIM;
+ line_info *WITH;
+
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++) {
+ WITH = &info[voice];
+ WITH->chord = 0;
+ WITH->mus = 0;
+ }
+}
+
+
+void appendNote(voice_index voice, music_word nscan)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ WITH->here++;
+ if (WITH->here > max_words)
+ error3(voice, "Words per line limit exceeded");
+ WITH->scan[WITH->here - 1] = nscan;
+}
+
+
+void appendToLine(voice_index voice, Char *note)
+{
+ line_info *WITH;
+
+ if (*note == '\0')
+ return;
+ WITH = &info[voice-1];
+ sprintf(P[WITH->mus - 1] + strlen(P[WITH->mus - 1]), "%s%c", note, blank);
+ WITH->word_bound[WITH->here] = strlen(P[WITH->mus - 1]);
+}
+
+
+void markBar(voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ if (WITH->nbar == 0)
+ error3(voice, "Empty bar");
+ else
+ WITH->bar_bound[WITH->nbar] = WITH->here;
+}
+
+
+short numberOfBars(voice_index voice)
+{
+ return (info[voice-1].nbar);
+}
+
+
+void barForward(voice_index voice, short nbars)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ if (WITH->nbar + nbars < 0)
+ error3(voice, "Next voice before bar is full");
+ WITH->nbar += nbars;
+ if (WITH->nbar > max_bars)
+ error3(voice, "Bars per line limit exceeded");
+ if (nbars > 0)
+ WITH->bar_bound[WITH->nbar] = WITH->here;
+}
+
+
+void setExtraLength(voice_index voice, short ext)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ WITH->extra = ext;
+ WITH->scan[WITH->here] = other;
+}
+
+
+short ExtraLength(voice_index voice)
+{
+ return (info[voice-1].extra);
+}
+
+
+voice_index0 findVoice(Char *w_)
+{
+ voice_index0 Result = 0;
+ Char w[256];
+ short i, FORLIM;
+
+ strcpy(w, w_);
+ curtail(w, ':');
+ FORLIM = nvoices;
+ for (i = 1; i <= FORLIM; i++) {
+ if (!strcmp(w, voice_label[i-1]))
+ return i;
+ }
+ getNum(w, &i);
+ if (i == 0)
+ return Result;
+ if (i > 0 && i <= nvoices)
+ return i;
+ error("Numeric label outside range 1..nvoices", print);
+ return Result;
+}
+
+
+Static void info3(voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ printf("In voice \"%s\" near word %d:\n", voice_label[voice-1], WITH->here);
+ printf("%*cV\n", WITH->word_bound[WITH->here], ' ');
+}
+
+
+void error3(voice_index voice, Char *message)
+{
+ Char STR1[256];
+
+ info3(voice);
+ sprintf(STR1, " %s", message);
+ error(STR1, print);
+}
+
+
+void warning3(voice_index voice, Char *message)
+{
+ Char STR1[256];
+
+ info3(voice);
+ sprintf(STR1, " %s", message);
+ warning(STR1, print);
+}
+
+
+Char *nextMusicWord(Char *Result, voice_index voice)
+{
+ return (MusicWord(Result, voice, info[voice-1].here));
+}
+
+
+Char *MusicWord(Char *Result, short voice, short n)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ if (n > 0 && n <= WITH->nword)
+ return (substr_(Result, P[WITH->mus - 1], WITH->word_bound[n-1] + 1,
+ WITH->word_bound[n] - WITH->word_bound[n-1] - 1));
+ else
+ return strcpy(Result, "");
+}
+
+
+music_word thisNote(voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ return (WITH->scan[WITH->here - 2]);
+}
+
+
+music_word nextNote(voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ return (WITH->scan[WITH->here - 1]);
+}
+
+
+boolean endOfBar(voice_index voice, short bar_no)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ return (WITH->here > WITH->bar_bound[bar_no]);
+}
+
+
+void gotoBar(voice_index voice, short bar_no)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ WITH->here = WITH->bar_bound[bar_no-1] + 1;
+}
+
+
+Char *getMusicWord(Char *Result, voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ line_no = orig_line_no[WITH->mus - 1];
+ MusicWord(Result, voice, WITH->here);
+ WITH->here++;
+ return Result;
+}
+
+
+boolean maybeMusicLine(Char *l_)
+{
+ Char l[256];
+ Char w[256];
+ music_word nscan;
+
+ strcpy(l, l_);
+ GetNextWord(w, l, blank, dummy);
+/* p2c: mtxline.pas: Note: Eliminated unused assignment statement [338] */
+ if (pos1(w[0], "abcdefgr()[]{}CMm") == 0)
+ return false;
+ if (pos1(':', w) == 0)
+ return true;
+ getNextMusWord(w, l, &nscan);
+ return (nscan == abcdefg);
+}
+
+
+#define nmacros 99
+
+
+Static boolean macro_initialized = false;
+Static Char macro_text[nmacros][256];
+
+
+Static void macroInit(void)
+{
+ short i;
+
+ if (macro_initialized)
+ return;
+ macro_initialized = true;
+ for (i = 0; i <= nmacros - 1; i++)
+ *macro_text[i] = '\0';
+}
+
+
+Static short identifyMacro(Char *s_)
+{
+ Char s[256];
+ short k;
+
+ strcpy(s, s_);
+ predelete(s, 2);
+ getNum(s, &k);
+ return k;
+}
+
+
+/* Local variables for getNextMusWord: */
+struct LOC_getNextMusWord {
+ Char *buf, *note;
+} ;
+
+Local void expandThisMacro(struct LOC_getNextMusWord *LINK)
+{
+ Char playtag[11];
+ short playID;
+ Char w[256];
+ Char STR1[72];
+ Char STR2[42];
+ Char STR3[68];
+ Char STR4[54];
+ Char STR5[256], STR7[256];
+
+ macroInit();
+ if (strlen(LINK->note) == 1)
+ error("Can't terminate a macro that has not been started", print);
+ playID = identifyMacro(LINK->note);
+ toString(playtag, playID);
+/* p2c: mtxline.pas, line 310:
+ * Note: Possible string truncation in assignment [145] */
+ if (playID < 1 || playID > 99) {
+ sprintf(STR2, "Macro ID %s is not in range 1..99", playtag);
+ error(STR2, print);
+ }
+ if (LINK->note[1] == 'P') {
+ if (*macro_text[playID-1] == '\0') {
+ sprintf(STR3,
+ "Macro %s inserts empty text: did you define it before use?",
+ playtag);
+ warning(STR3, print);
+ }
+ if (strlen(macro_text[playID-1]) + strlen(LINK->buf) <= 255) {
+ if (debugMode())
+ printf("Inserting macro %s text \"%s\"\n",
+ playtag, macro_text[playID-1]);
+ printf("Buffer before insert: %s\n", LINK->buf);
+ sprintf(LINK->buf, "%s%s",
+ macro_text[playID-1], strcpy(STR5, LINK->buf));
+ return;
+ }
+ sprintf(STR4, "Expansion of macro %s causes buffer overflow", playtag);
+ error(STR4, print);
+ }
+ if (pos1(LINK->note[1], "SR") == 0) {
+ sprintf(STR4, "Second character %c of macro word should be in \"PRS\"",
+ LINK->note[1]);
+ error(STR4, print);
+ }
+ *macro_text[playID-1] = '\0';
+ do {
+ GetNextWord(w, LINK->buf, blank, dummy);
+ if (*w == '\0') {
+ sprintf(STR1,
+ "Macro definition %s should be terminated on the same input line",
+ playtag);
+ error(STR1, print);
+ }
+ if (!strcmp(w, "M")) {
+ if (debugMode())
+ printf("Macro %s is: %s\n", playtag, macro_text[playID-1]);
+ break;
+ }
+ if (w[0] == 'M' && strlen(w) > 1) {
+ if (w[1] != 'P' || identifyMacro(w) == playID) {
+ sprintf(STR7, "%s not allowed inside macro definition %s", w, playtag);
+ error(STR7, print);
+ }
+ }
+ sprintf(macro_text[playID-1] + strlen(macro_text[playID-1]), "%s ", w);
+ } while (true);
+ if (LINK->note[1] == 'R') {
+ LINK->note[1] = 'P';
+ sprintf(LINK->buf, "%s %s", LINK->note, strcpy(STR7, LINK->buf));
+ }
+}
+
+
+void getNextMusWord(Char *buf_, Char *note_, music_word *nscan)
+{
+ struct LOC_getNextMusWord V;
+ Char maybe_error[256];
+ Char STR2[256];
+
+ V.buf = buf_;
+ V.note = note_;
+ GetNextWord(V.note, V.buf, blank, dummy);
+ if (*V.note == '\0')
+ return;
+ if (V.note[0] == 'M' && expandMacro()) {
+ expandThisMacro(&V);
+ getNextMusWord(V.buf, V.note, nscan);
+ return;
+ }
+ if (V.note[0] == '\\') {
+ *maybe_error = '\0';
+ if (V.note[strlen(V.note) - 1] != '\\')
+ strcpy(maybe_error, V.note);
+ while (*V.buf != '\0' && V.note[strlen(V.note) - 1] != '\\')
+ sprintf(V.note + strlen(V.note), " %s",
+ GetNextWord(STR2, V.buf, blank, dummy));
+ if (V.note[strlen(V.note) - 1] != '\\')
+ error("Unterminated TeX literal", print);
+ *nscan = texword;
+ if (*maybe_error != '\0') {
+ sprintf(STR2, "Possible unterminated TeX literal: %s", maybe_error);
+ warning(STR2, print);
+ }
+ return;
+ }
+ if (solfaNoteNames()) {
+ translateSolfa(V.note);
+ if (V.note[0] == '"')
+ predelete(V.note, 1);
+ }
+ switch (V.note[0]) {
+
+ case '_':
+ *nscan = pmxprefix;
+ delete1(V.note, 1);
+ break;
+
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ *nscan = abcdefg;
+ break;
+
+ case 'z':
+ *nscan = zword;
+ break;
+
+ case '(':
+ *nscan = lparen;
+ break;
+
+ case '{':
+ if (V.note[strlen(V.note) - 1] == '}')
+ *nscan = lyrtag;
+ else
+ *nscan = lparen;
+ break;
+
+ case ')':
+ if (pos1('(', V.note) == 0)
+ *nscan = rparen;
+ else
+ *nscan = rlparen;
+ break;
+
+ case '}':
+ if (pos1('{', V.note) == 0)
+ *nscan = rparen;
+ else
+ *nscan = rlparen;
+ break;
+
+ case '[':
+ *nscan = lbrac;
+ break;
+
+ case ']':
+ *nscan = rbrac;
+ break;
+
+ case '@':
+ *nscan = atword;
+ break;
+
+ case 'm':
+ *nscan = mword;
+ break;
+
+ case 'r':
+ *nscan = rword;
+ break;
+
+ case '#':
+ case '-':
+ case 'n':
+ case 'x':
+ case '?':
+ case 's':
+ case 't':
+ case 'D':
+ *nscan = pmxl;
+ break;
+
+ case 'M':
+ if (!strcmp(V.note, "M"))
+ *nscan = endmacro;
+ else
+ *nscan = macro;
+ break;
+
+ case 'G':
+ if (pos1('A', V.note) > 0)
+ *nscan = pmxl;
+ else
+ *nscan = other;
+ break;
+
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (pos1('/', V.note) > 0)
+ *nscan = mword;
+ else
+ *nscan = pmxl;
+ break;
+
+ case 'o':
+ *nscan = oword;
+ break;
+
+ case 'A':
+ case 'V':
+ *nscan = FirstOnly;
+ break;
+
+ case '/':
+ if (!strcmp(V.note, "//"))
+ *nscan = nextvoice;
+ else if (!strcmp(V.note, "/")) {
+ strcpy(V.note, "//");
+ warning("/ changed to //", print);
+ *nscan = nextvoice;
+ } else {
+ error("Word starts with /: do you mean \\?", print);
+ *nscan = err;
+ }
+ break;
+
+ default:
+ if (pos1('|', V.note) > 0)
+ *nscan = barword;
+ else
+ *nscan = other;
+ break;
+ }
+}
+
+
+boolean upper(voice_index voice)
+{
+ line_info *WITH;
+
+ WITH = &info[voice-1];
+ if (WITH->voice_pos == 1 && voice < nvoices)
+ return (WITH->voice_stave == info[voice].voice_stave);
+ else
+ return false;
+}
+
+
+void describeVoice(voice_index voice, Char *describe_lyr)
+{
+ short bar, w;
+ line_info *WITH;
+ Char STR1[256];
+ line_info *WITH1;
+ short FORLIM;
+
+ WITH = &info[voice-1];
+ printf("Voice `%s' is on line %d", voice_label[voice-1], WITH->mus);
+ if (WITH->vocal) {
+ printf(", is vocal");
+ puts(describe_lyr);
+ } else {
+ if (WITH->chord > 0)
+ printf(" and has chords on line %d", WITH->chord);
+ putchar('\n');
+ }
+ if (!debugMode())
+ return;
+ WITH1 = &info[voice-1];
+ printf("Line has %d bars", WITH1->nbar);
+ if (WITH1->extra > 0)
+ printf(" + %d/64 notes\n", WITH1->extra);
+ else
+ putchar('\n');
+ printf("Bars:");
+ FORLIM = WITH1->nbar;
+ for (bar = 1; bar <= FORLIM; bar++)
+ printf(" %s ", getBar(STR1, voice, bar));
+ printf("\nWord types:");
+ FORLIM = WITH1->nword;
+ for (w = 0; w <= FORLIM - 1; w++)
+ printf(" %s", name[(long)WITH1->scan[w]]);
+ putchar('\n');
+}
+
+
+boolean aloneOnStave(stave_index stave)
+{
+ voice_index v;
+
+ if (number_on_stave[stave-1] != 2)
+ return true;
+ else {
+ v = first_on_stave[stave-1];
+ return (info[v-1].mus == 0 || info[v].mus == 0);
+ }
+}
+
+
+void selectVoices(Char *line_)
+{
+ Char line[256];
+ short i = 0;
+ short k;
+ Char word[256];
+ short FORLIM;
+
+ strcpy(line, line_);
+ FORLIM = nvoices;
+ for (k = 0; k <= FORLIM - 1; k++)
+ selected[k] = false;
+ printf("Voice change to: %s = ", line);
+ while (i < nvoices) {
+ GetNextWord(word, line, blank, dummy);
+ if (*word == '\0') {
+ putchar('\n');
+ return;
+ }
+ i++;
+ printf("%s ", word);
+ k = findVoice(word);
+ if (k == 0)
+ error("This voice is not in the style", print);
+ selected[k-1] = true;
+ }
+ putchar('\n');
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtxline.h b/Build/source/utils/mtx/mtx-0.60d/mtxline.h
new file mode 100644
index 00000000000..23fc05be32c
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtxline.h
@@ -0,0 +1,83 @@
+/* Header for module mtxline, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef MTXLINE_H
+#define MTXLINE_H
+
+
+/* Break input up into words, classify them. Supply words and
+ information about them. */
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+#ifdef MTXLINE_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+
+typedef enum {
+ other, abcdefg, zword, lyrtag, lparen, rparen, rlparen, lbrac, rbrac,
+ pmxprefix, pmxl, macro, endmacro, mword, oword, rword, nextvoice, barword,
+ texword, atword, FirstOnly, err
+} music_word;
+
+
+extern boolean bind_left[22];
+
+/* changed bind_left[barword] to false */
+
+vextern boolean selected[maxvoices];
+
+
+extern void error3(voice_index voice, Char *message);
+extern void warning3(voice_index voice, Char *message);
+extern void getNextMusWord(Char *buf, Char *note, music_word *nscan);
+extern Char *MusicWord(Char *Result, short voice, short n);
+extern Char *nextMusicWord(Char *Result, voice_index voice);
+extern music_word thisNote(voice_index voice);
+extern music_word nextNote(voice_index voice);
+extern Char *getMusicWord(Char *Result, voice_index voice);
+extern void gotoBar(voice_index voice, short bar_no);
+extern boolean endOfBar(voice_index voice, short bar_no);
+extern Char *getBar(Char *Result, voice_index voice, short bar);
+extern boolean upper(voice_index voice);
+extern void clearLabels(void);
+extern voice_index0 findVoice(Char *w);
+extern void selectVoices(Char *line);
+extern void resetInfo(voice_index voice, Char *buf);
+extern void setVocal(voice_index voice, boolean voc);
+extern boolean isVocal(voice_index voice);
+extern void setStavePos(voice_index voice, stave_index stave, stave_index pos);
+extern stave_index voiceStave(voice_index voice);
+extern stave_index voicePos(voice_index voice);
+extern boolean aloneOnStave(stave_index stave);
+extern voice_index companion(voice_index voice);
+extern void appendNote(voice_index voice, music_word nscan);
+extern void appendToLine(voice_index voice, Char *note);
+extern void markBar(voice_index voice);
+extern short numberOfBars(voice_index voice);
+extern void barForward(voice_index voice, short nbars);
+extern void regroup(voice_index voice);
+
+extern short beatsPerLine(void);
+extern void setExtraLength(voice_index voice, short ext);
+extern short ExtraLength(voice_index voice);
+extern paragraph_index0 musicLineNo(voice_index voice);
+extern void setMusicLineNo(voice_index voice, paragraph_index lno);
+extern paragraph_index0 chordLineNo(voice_index voice);
+extern void setChordLineNo(voice_index voice, paragraph_index lno);
+extern void skipChordBar(voice_index voice);
+
+extern void describeVoice(voice_index voice, Char *describe_lyr);
+extern boolean maybeMusicLine(Char *l);
+extern Char *musicLine(Char *Result, voice_index voice);
+
+
+#undef vextern
+
+#endif /*MTXLINE_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/mtxline.pas b/Build/source/utils/mtx/mtx-0.60d/mtxline.pas
new file mode 100644
index 00000000000..cd3e0b27bcc
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/mtxline.pas
@@ -0,0 +1,447 @@
+unit mtxline;
+{ Break input up into words, classify them. Supply words and
+ information about them. }
+
+interface uses globals;
+
+type
+ music_word = (other, abcdefg, zword, lyrtag,
+ lparen, rparen, rlparen, lbrac, rbrac,
+ pmxl, macro, endmacro, mword, oword, rword, nextvoice,
+ barword, texword, atword, FirstOnly, err );
+
+const
+ bind_left: array[music_word] of boolean = (
+ false, false, true, false,
+ false, true, true, false, true,
+ true, false, true, false, true, false, true,
+ false, false, false, false, false );
+{ changed bind_left[barword] to false }
+
+var selected: array[voice_index] of boolean;
+
+procedure error3(voice: voice_index; message: string );
+procedure warning3(voice: voice_index; message: string );
+procedure getNextMusWord (var buf, note: string; var nscan: music_word);
+function MusicWord(voice, n: integer): string;
+function nextMusicWord(voice: voice_index): string;
+function thisNote(voice: voice_index): music_word;
+function nextNote(voice: voice_index): music_word;
+function getMusicWord(voice: voice_index): string;
+procedure gotoBar(voice: voice_index; bar_no: integer);
+function endOfBar(voice: voice_index; bar_no: integer): boolean;
+function getBar(voice:voice_index; bar: integer): string;
+function upper(voice: voice_index): boolean;
+procedure clearLabels;
+function findVoice(w: string): voice_index0;
+procedure selectVoices(line: string);
+procedure resetInfo(voice: voice_index; var buf: string);
+procedure setVocal(voice: voice_index; voc: boolean);
+function isVocal(voice: voice_index): boolean;
+procedure setStavePos(voice: voice_index; stave, pos: stave_index);
+function voiceStave(voice: voice_index): stave_index;
+function voicePos(voice: voice_index): stave_index;
+function aloneOnStave(stave: stave_index): boolean;
+function companion(voice: voice_index): voice_index;
+procedure appendNote(voice: voice_index; nscan: music_word);
+procedure appendToLine(voice: voice_index; note: string);
+procedure markBar(voice: voice_index);
+function numberOfBars(voice: voice_index): integer;
+procedure barForward(voice: voice_index; nbars: integer);
+procedure regroup(voice: voice_index);
+
+function beatsPerLine: integer;
+procedure setExtraLength(voice: voice_index; ext: integer);
+function ExtraLength(voice: voice_index): integer;
+function musicLineNo(voice: voice_index): paragraph_index0;
+procedure setMusicLineNo(voice: voice_index; lno: paragraph_index);
+function chordLineNo(voice: voice_index): paragraph_index0;
+procedure setChordLineNo(voice: voice_index; lno: paragraph_index);
+procedure skipChordBar(voice: voice_index);
+
+procedure describeVoice(voice: voice_index; describe_lyr: string);
+function maybeMusicLine(l: string): boolean;
+function musicLine(voice: voice_index): string;
+
+implementation uses strings, notes, control, utility;
+
+const
+
+ name: array[music_word] of string[9] = (
+ '?', 'note', 'znote', 'lyricsTag',
+ '(', ')', ')(', '[', ']',
+ 'PMX<', 'macro', 'endMacro', 'meter', 'ornament', 'rest', '//',
+ 'BAR', 'TeX', '@', 'firstonly', 'ERROR');
+
+type
+ word_scan = array[1..max_words] of music_word;
+
+ line_info = record
+ here, nword: word_index0;
+ nbar: bar_index0;
+ voice_pos, voice_stave, mus, chord: paragraph_index0;
+ extra: integer;
+ vocal: boolean;
+ bar_bound: array[bar_index0] of word_index0;
+ word_bound: array[word_index0] of integer;
+ scan: word_scan;
+ end;
+
+var info: array[voice_index] of line_info;
+
+{ ------------------------------------------------------------- }
+
+function beatsPerLine: integer;
+ var voice: voice_index;
+begin for voice:=1 to nvoices do with info[voice] do
+ if (nbar>0) or (extra>0) then
+ begin
+ if extra mod one_beat > 0
+ then error3(voice,'Line length not an integer number of beats');
+ beatsPerLine := nbar*meternum + extra div one_beat;
+ end;
+end;
+
+procedure skipChordBar(voice: voice_index);
+begin with info[voice] do
+ if chord>0 then if P[chord]=barsym then predelete(P[chord],1);
+end;
+
+function getBar(voice: voice_index; bar: integer): string;
+begin with info[voice] do
+ getBar := substr(P[mus],word_bound[bar_bound[bar-1]]+1,
+ word_bound[bar_bound[bar]]-word_bound[bar_bound[bar-1]]);
+end;
+
+function musicLine(voice: voice_index): string;
+begin musicLine:=P[musicLineNo(voice)]; end;
+
+function musicLineNo(voice: voice_index): paragraph_index0;
+begin musicLineNo := info[voice].mus; end;
+
+procedure setMusicLineNo(voice: voice_index; lno: paragraph_index);
+begin info[voice].mus := lno; end;
+
+function chordLineNo(voice: voice_index): paragraph_index0;
+begin chordLineNo := info[voice].chord; end;
+
+procedure setChordLineNo(voice: voice_index; lno: paragraph_index);
+begin info[voice].chord := lno; end;
+
+procedure setVocal(voice: voice_index; voc: boolean);
+begin info[voice].vocal:=voc; end;
+
+function isVocal(voice: voice_index): boolean;
+begin isVocal := info[voice].vocal; end;
+
+procedure setStavePos(voice: voice_index; stave, pos: stave_index);
+begin with info[voice] do begin voice_pos:=pos; voice_stave:=stave; end;
+end;
+
+function voiceStave(voice: voice_index): stave_index;
+begin voiceStave:=info[voice].voice_stave; end;
+
+function voicePos(voice: voice_index): stave_index;
+begin voicePos:=info[voice].voice_pos; end;
+
+function companion(voice: voice_index): voice_index;
+ var s: integer;
+begin s:=info[voice].voice_stave;
+ if number_on_stave[s]=1 then companion:=voice
+ else if info[voice].voice_pos=1 then companion:=voice+1
+ else companion:=voice-1;
+end;
+
+procedure regroup(voice: voice_index);
+ var i, j, j2: word_index0;
+begin j2 := 0; with info[voice] do
+ begin if debugMode then write('Voice ',voice,' has ',nbar,' bars at ');
+ if debugMode then for i:=1 to nbar+1 do write(bar_bound[i],' ');
+ for i:=1 to nbar do
+ begin j2:=bar_bound[i]; j:=j2+1;
+ while (j<=here) and (bind_left[scan[j]] or (scan[j]=barword)) do
+ begin inc(bar_bound[i]); inc(j) end;
+ end;
+ if extra>0 then bar_bound[nbar+1]:=here;
+ if debugMode then
+ begin write(' regrouped to ');
+ for i:=1 to nbar+1 do write(bar_bound[i],' ')
+ end;
+ if debugMode then writeln;
+ nword := here
+ end;
+end;
+
+procedure resetInfo(voice: voice_index; var buf: string);
+begin with info[voice] do
+ begin buf := P[mus]; P[mus]:='';
+ bar_bound[0]:=0; word_bound[0]:=0; nbar:=0; here := 0;
+ end;
+end;
+
+procedure clearLabels;
+ var voice: voice_index;
+begin for voice:=1 to nvoices do with info[voice] do
+ begin chord:=0; mus:=0; end;
+end;
+
+procedure appendNote(voice: voice_index; nscan: music_word);
+begin with info[voice] do
+ begin inc(here); if here>max_words then
+ error3(voice,'Words per line limit exceeded');
+ scan[here]:=nscan; end;
+end;
+
+procedure appendToLine(voice: voice_index; note: string);
+begin if note<>'' then with info[voice] do
+ begin P[mus]:=P[mus]+note+blank; word_bound[here]:=length(P[mus]); end;
+end;
+
+procedure markBar(voice: voice_index);
+begin with info[voice] do
+ if nbar=0 then error3(voice,'Empty bar') else bar_bound[nbar]:=here
+end;
+
+function numberOfBars(voice: voice_index): integer;
+begin numberOfBars := info[voice].nbar; end;
+
+procedure barForward(voice: voice_index; nbars: integer);
+begin with info[voice] do
+ begin
+ if (nbar+nbars<0) then error3(voice, 'Next voice before bar is full');
+ inc(nbar,nbars);
+ if nbar>max_bars then error3(voice,'Bars per line limit exceeded');
+ if nbars>0 then bar_bound[nbar]:=here;
+ end;
+end;
+
+procedure setExtraLength(voice: voice_index; ext: integer);
+begin with info[voice] do begin extra:=ext; scan[here+1]:=other; end;
+end;
+
+function ExtraLength(voice: voice_index): integer;
+begin ExtraLength := info[voice].extra; end;
+
+function findVoice(w: string): voice_index0;
+ var i: integer;
+begin curtail(w,':'); findVoice:=0;
+ for i:=1 to nvoices do
+ if w=voice_label[i] then begin findVoice:=i; exit end;
+ getNum(w,i); if i=0 then exit;
+ if (i>0) and (i<=nvoices) then findVoice:=i
+ else error('Numeric label outside range 1..nvoices',print);
+end;
+
+procedure info3(voice: voice_index);
+begin with info[voice] do
+ begin
+ writeln ('In voice "', voice_label[voice], '" near word ', here, ':');
+ writeln(' ':word_bound[here],'V')
+ end
+end;
+
+procedure error3(voice: voice_index; message: string );
+begin info3(voice); error(' '+message,print) end;
+
+procedure warning3(voice: voice_index; message: string );
+begin info3(voice); warning(' '+message,print) end;
+
+function nextMusicWord(voice: voice_index): string;
+begin nextMusicWord := MusicWord(voice,info[voice].here); end;
+
+function MusicWord(voice, n: integer): string;
+ begin with info[voice] do if (n>0) and (n<=nword) then
+ MusicWord := substr(P[mus],word_bound[n-1]+1,
+ word_bound[n]-word_bound[n-1]-1)
+ else MusicWord := '';
+ end;
+
+function thisNote(voice: voice_index): music_word;
+begin with info[voice] do thisNote := scan[here-1]; end;
+
+function nextNote(voice: voice_index): music_word;
+begin with info[voice] do nextNote := scan[here]; end;
+
+function endOfBar(voice: voice_index; bar_no: integer): boolean;
+begin with info[voice] do endOfBar := here > bar_bound[bar_no]; end;
+
+procedure gotoBar(voice: voice_index; bar_no: integer);
+begin with info[voice] do here := bar_bound[bar_no-1]+1; end;
+
+function getMusicWord(voice: voice_index): string;
+begin with info[voice] do
+ begin line_no := orig_line_no[mus];
+ GetMusicWord := MusicWord(voice,here); inc(here);
+ end
+end;
+
+function maybeMusicLine(l: string): boolean;
+ var w: string;
+ nscan: music_word;
+begin w:=GetNextWord(l,blank,dummy); maybeMusicLine := false;
+ if pos1(w[1],'abcdefgr()[]{}CMm')=0 then begin maybeMusicLine := false; exit end;
+ if pos1(':',w)=0 then begin maybeMusicLine := true; exit end;
+ GetNextMusWord(w,l,nscan); maybeMusicLine := nscan=abcdefg;
+end;
+
+const macro_initialized: boolean=false;
+ nmacros = 99;
+var macro_text: array[1..nmacros] of string;
+procedure macroInit;
+ var i: integer;
+begin if macro_initialized then exit else macro_initialized:=true;
+ for i:=1 to nmacros do macro_text[i]:=''
+end;
+
+function identifyMacro(s: string): integer;
+ var k: integer;
+begin predelete(s,2); getNum(s,k); identifyMacro:=k
+end;
+
+procedure GetNextMusWord (var buf, note: string; var nscan: music_word);
+ var maybe_error: string;
+
+ procedure expandThisMacro;
+ var playtag: string[10];
+ playID: integer;
+ w: string;
+ begin macroInit; if length(note)=1 then
+ error('Can''t terminate a macro that has not been started',print);
+ playID:=identifyMacro(note); playtag:=toString(playID);
+ if (playID<1) or (playID>99) then
+ error('Macro ID '+playtag+' is not in range 1..99',print);
+ if note[2]='P' then
+ begin if macro_text[playID]='' then
+ warning('Macro '+playtag+
+ ' inserts empty text: did you define it before use?',print);
+ if length(macro_text[playID])+length(buf)>255
+ then error('Expansion of macro '+playtag+' causes buffer overflow',print)
+ else begin if debugMode then writeln('Inserting macro '+playtag+' text "'
+ +macro_text[playID]+'"');
+ writeln('Buffer before insert: ',buf);
+ buf:=macro_text[playID]+buf; exit
+ end
+ end;
+ if pos1(note[2],'SR')=0 then error('Second character '+note[2]+
+ ' of macro word should be in "PRS"',print);
+ macro_text[playID]:='';
+ repeat w:=getNextWord(buf,blank,dummy);
+ if w='' then error('Macro definition '+playtag+
+ ' should be terminated on the same input line',print);
+ if w='M' then begin
+ if debugMode then writeln('Macro '+playtag+' is: '+macro_text[playID]);
+ break
+ end;
+ if (w[1]='M') and (length(w)>1) then
+ if (w[2]<>'P') or (identifyMacro(w)=playID) then
+ error(w+' not allowed inside macro definition '+playtag,print);
+ macro_text[playID]:=macro_text[playID]+w+' '
+ until false;
+ if note[2]='R' then begin note[2]:='P'; buf:=note+' '+buf end
+ end;
+
+ begin note:=GetNextWord(buf,blank,dummy);
+ if note='' then exit;
+ if (note[1]='M') and expandMacro then
+ begin expandThisMacro; GetNextMusWord(buf,note,nscan); exit end;
+ if note[1]='\' then
+ begin maybe_error:='';
+ if note[length(note)]<>'\' then maybe_error:=note;
+ while (buf<>'') and (note[length(note)]<>'\') do
+ note:=note+' '+GetNextWord(buf,blank,dummy);
+ if note[length(note)]<>'\' then
+ error('Unterminated TeX literal',print);
+ nscan:=texword;
+ if maybe_error<>'' then
+ warning('Possible unterminated TeX literal: '+maybe_error,print);
+ exit;
+ end;
+ if solfaNoteNames then
+ begin translateSolfa(note[1]); if note[1]='"' then predelete(note,1);
+ end;
+ case note[1] of
+'a'..'g': nscan:=abcdefg;
+'z': nscan:=zword;
+'(': nscan:=lparen;
+'{': if note[length(note)]='}' then nscan:=lyrtag else nscan:=lparen;
+')': if pos1('(',note)=0 then nscan:=rparen else nscan:=rlparen;
+'}': if pos1('{',note)=0 then nscan:=rparen else nscan:=rlparen;
+'[': nscan:=lbrac;
+']': nscan:=rbrac;
+'@': nscan:=atword;
+'m': nscan:=mword;
+'r': nscan:=rword;
+'#','-','n','x','?','s','t','D': nscan:=pmxl;
+'M': if note='M' then nscan:=endMacro else nscan:=macro;
+'G': if pos1('A',note)>0 then nscan:=pmxl else nscan:=other;
+'1'..'9': if pos1('/',note)>0 then nscan:=mword else nscan:=pmxl;
+'o': nscan:=oword;
+'A', 'V': nscan:=FirstOnly;
+'/': if note='//' then nscan:=nextvoice
+ else if note='/' then
+ begin note:='//'; warning('/ changed to //',print); nscan:=nextvoice;
+ end
+ else begin error('Word starts with /: do you mean \?',print);
+ nscan:=err;
+ end;
+ else if pos1('|',note)>0 then nscan:=barword else
+ nscan:=other;
+ end;
+ end;
+
+function upper(voice: voice_index): boolean;
+begin with info[voice] do
+ if (voice_pos=1) and (voice<nvoices) then
+ upper:=(voice_stave=info[voice+1].voice_stave)
+ else upper:=false;
+end;
+
+procedure describeVoice(voice: voice_index; describe_lyr: string);
+ var bar, w: integer;
+begin with info[voice] do
+ begin write('Voice `',voice_label[voice],''' is on line ',mus);
+ if vocal then
+ begin write(', is vocal'); writeln(describe_lyr); end
+ else
+ begin if chord>0 then write(' and has chords on line ',chord);
+ writeln;
+ end;
+ if debugMode then with info[voice] do
+ begin write('Line has ', nbar, ' bars');
+ if extra>0 then writeln(' + ', extra, '/64 notes') else writeln;
+ write('Bars:');
+ for bar:=1 to nbar do write(' ',getBar(voice,bar),' ');
+ writeln; write('Word types:');
+ for w:=1 to nword do write(' ',name[scan[w]]); writeln;
+ end;
+ end;
+end;
+
+function aloneOnStave(stave: stave_index): boolean;
+ var v: voice_index;
+begin
+ if number_on_stave[stave]<>2 then aloneOnStave:=true else
+ begin v:=first_on_stave[stave];
+ aloneOnStave:= (info[v].mus=0) or (info[v+1].mus=0)
+ end
+end;
+
+procedure selectVoices(line: string);
+ var i, k: integer;
+ word: string;
+ begin
+ for k:=1 to nvoices do selected[k]:=false;
+ write('Voice change to: ',line,' = ');
+ i:=0;
+ while i<nvoices do
+ begin word:=GetNextWord(line,blank,dummy);
+ if word='' then begin writeln; exit; end;
+ inc(i); write(word,' ');
+ k:=findVoice(word);
+ if k=0 then error('This voice is not in the style',print);
+ selected[k]:=true;
+ end;
+ writeln;
+ end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/multfile.c b/Build/source/utils/mtx/mtx-0.60d/multfile.c
new file mode 100644
index 00000000000..b0e78943650
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/multfile.c
@@ -0,0 +1,235 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "multfile.pas" */
+
+
+#include "p2c.h"
+
+
+#define MULTFILE_G
+#include "multfile.h"
+
+
+Char nextData[256] = "";
+
+
+typedef struct filenode {
+ Char name[256];
+ FILE *actualfile;
+ struct filenode *prev;
+ short lineno;
+ Char actualfile_NAME[_FNSIZE];
+} filenode;
+
+
+Static filenode *current = NULL;
+Static boolean inputerror = false;
+Static short reportitem = reportnewfile + reportoldfile + reporterror +
+ reportrecursive;
+
+
+void report(short items)
+{
+ reportitem = items;
+}
+
+
+Static boolean recursive(Char *filename)
+{
+ boolean Result;
+ filenode *previous;
+
+ if (current == NULL)
+ return false;
+ previous = current;
+/* p2c: multfile.pas: Note: Eliminated unused assignment statement [338] */
+ while (previous != NULL) {
+ if (!strcmp(filename, previous->name))
+ return true;
+ previous = previous->prev;
+ }
+ return false;
+}
+
+
+void pushFile(Char *filename)
+{
+ filenode *newnode;
+ Char STR3[256];
+
+ if (recursive(filename)) {
+ printf("===! Ignoring recursive include of file %s\n", filename);
+ return;
+ }
+ newnode = malloc(sizeof(filenode));
+ newnode->actualfile = NULL;
+ strcpy(newnode->name, filename);
+ newnode->prev = current;
+ newnode->lineno = 0;
+ strcpy(newnode->actualfile_NAME, filename);
+ if (newnode->actualfile != NULL)
+ newnode->actualfile = freopen(newnode->actualfile_NAME, "r",
+ newnode->actualfile);
+ else
+ newnode->actualfile = fopen(newnode->actualfile_NAME, "r");
+ _SETIO(newnode->actualfile != NULL, FileNotFound);
+ inputerror = (P_ioresult != 0);
+ if (inputerror)
+ Free(newnode);
+ else
+ current = newnode;
+ if (!inputerror && (reportitem & reportnewfile) > 0)
+ printf("==>> Input from file %s\n", currentFilename(STR3));
+ if (inputerror && (reportitem & reporterror) > 0)
+ printf("==!! Could not open file %s\n", filename);
+}
+
+
+void popFile(void)
+{
+ filenode *previous;
+ Char STR2[256];
+ Char STR3[256];
+
+ if (current == NULL)
+ return;
+ if ((reportitem & reportclose) > 0)
+ printf("==>> Closing file %s at line number %d\n",
+ currentFilename(STR2), currentLineNo());
+ if (current->actualfile != NULL)
+ fclose(current->actualfile);
+ current->actualfile = NULL;
+ previous = current->prev;
+ Free(current);
+ current = previous;
+ if (current != NULL && (reportitem & reportoldfile) > 0)
+ printf("==>> Resuming input from file %s at line number %d\n",
+ currentFilename(STR3), currentLineNo());
+}
+
+
+void closeAll(void)
+{
+ do {
+ popFile();
+ } while (current != NULL);
+}
+
+
+boolean eofCurrent(void)
+{
+ return P_eof(current->actualfile);
+}
+
+
+Char *readLine(Char *Result)
+{
+ Char s[256];
+ Char *TEMP;
+ Char STR2[256];
+
+ if (*nextData != '\0') {
+ strcpy(Result, nextData);
+ *nextData = '\0';
+ return Result;
+ }
+ if (eofAll())
+ return strcpy(Result, "");
+ _SETIO(fgets(s, 256, current->actualfile) != NULL, EndOfFile);
+ TEMP = strchr(s, '\n');
+ if (TEMP != NULL)
+ *TEMP = 0;
+ strcpy(Result, s);
+ inputerror = (P_ioresult != 0);
+ if (!inputerror)
+ current->lineno++;
+ if (inputerror && (reportitem & reporterror) > 0)
+ printf("==!! Could not read from file %s\n", currentFilename(STR2));
+ return Result;
+}
+
+
+boolean isEmpty(Char *s)
+{
+ short i, FORLIM;
+
+ if (*s == '\0')
+ return true;
+ FORLIM = strlen(s);
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (s[i] != ' ')
+ return false;
+ }
+ return true;
+}
+
+
+Char *readData(Char *Result)
+{
+ Char s[256];
+
+ if (!isEmpty(nextData)) {
+ strcpy(Result, nextData);
+ *nextData = '\0';
+ return Result;
+ }
+ while (!eofAll()) {
+ readLine(s);
+ if (!isEmpty(s))
+ return strcpy(Result, s);
+ }
+ return strcpy(Result, "");
+}
+
+
+void skipBlanks(void)
+{
+ while (*nextData == '\0') {
+ readData(nextData);
+ if (eofAll())
+ return;
+ }
+}
+
+
+boolean eofAll(void)
+{
+ boolean Result;
+
+/* p2c: multfile.pas: Note: Eliminated unused assignment statement [338] */
+ if (current == NULL)
+ return true;
+ if (eofCurrent()) {
+ popFile();
+ return (eofAll());
+ }
+ return false;
+}
+
+
+short currentLineNo(void)
+{
+ if (current == NULL)
+ return 0;
+ else
+ return (current->lineno);
+}
+
+
+Char *currentFilename(Char *Result)
+{
+ if (current == NULL)
+ return strcpy(Result, "No file open yet");
+ else
+ return strcpy(Result, current->name);
+}
+
+
+boolean fileError(void)
+{
+ return inputerror;
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/multfile.h b/Build/source/utils/mtx/mtx-0.60d/multfile.h
new file mode 100644
index 00000000000..aaa094cdae7
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/multfile.h
@@ -0,0 +1,87 @@
+/* Header for module multfile, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef MULTFILE_H
+#define MULTFILE_H
+
+
+#ifdef MULTFILE_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* DPL 2004-03-06
+(* Support for including files into an input stream.
+(* Intended for an application that does not require Pascal formatting,
+(* but reads complete lines one at a time.
+(* You never actually work with any files, except by supplying the
+( filename when the file is opened.
+(* At any stage, you can switch the input to a new file.
+(* When the new file is at EOF, and a "read" is issued, the file is
+(* closed and the previous one resumed transparently. This inclusion
+(* can be nested to any level, memory permitting.
+(* --- Normal mode of operation, replacing the usual Pascal style ---
+ Instead of: assign(textfile,filename); reset(textfile)
+ use: pushFile(filename)
+ When another file should be included before the current file is done,
+ use: pushFile(newfilename)
+ Instead of: readln(textfile,line)
+ use: line:=readLine
+ Instead of: eof(textfilen)
+ or: eofAll; {Are all files at EOF?}
+(* --- Abnormal mode of operation ---
+ To abort a file before EOF is reached:
+ use: popFile;
+ To abort all files:
+ use: closeAll;
+ To test whether only the current file is at EOF:
+ use: eofCurrent;
+(* Additional features:
+ fileError: boolean function, was there an error during file open or read?
+ currentFilename: string function, name of current file
+ currentLineNo: integer function, number of line just read from current file
+ isEmpty(var s: string): boolean function, is s empty?
+ readData: string function, like readLine, but continue reading until
+ a non-blank line is found, return blank only at EOF
+ skipBlanks: skip blank lines in input: next call to readLine will be
+ non-blank unless EOF is encountered
+ report(items): procedure to control which messages are printed,
+ "items" is the sum of the following options
+ (constants with the appropriate values are defined in the interface)
+ 1: reportnewfile - file is opened
+ 2: reportoldfile - file is resumed
+ 4: reportclose - file is closed
+ 8: reporterror - a file error is encountered
+ 16: reportrecursive - there is a recursive include
+ The default value is items=27 (all the above except reportclose)
+ At present you cannot turn reportrecursive off.
+ */
+
+extern void pushFile(Char *filename);
+extern void popFile(void);
+extern void closeAll(void);
+extern void report(short items);
+extern Char *currentFilename(Char *Result);
+extern boolean eofAll(void);
+extern boolean eofCurrent(void);
+extern boolean fileError(void);
+extern Char *readLine(Char *Result);
+extern Char *readData(Char *Result);
+extern boolean isEmpty(Char *s);
+extern short currentLineNo(void);
+extern void skipBlanks(void);
+
+
+#define reportnewfile 1
+#define reportoldfile 2
+#define reportclose 4
+#define reporterror 8
+#define reportrecursive 16
+
+
+extern Char nextData[256];
+
+
+#undef vextern
+
+#endif /*MULTFILE_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/multfile.pas b/Build/source/utils/mtx/mtx-0.60d/multfile.pas
new file mode 100644
index 00000000000..6c272992a3f
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/multfile.pas
@@ -0,0 +1,196 @@
+unit multfile; (* DPL 2004-03-06
+(* Support for including files into an input stream.
+(* Intended for an application that does not require Pascal formatting,
+(* but reads complete lines one at a time.
+(* You never actually work with any files, except by supplying the
+( filename when the file is opened.
+(* At any stage, you can switch the input to a new file.
+(* When the new file is at EOF, and a "read" is issued, the file is
+(* closed and the previous one resumed transparently. This inclusion
+(* can be nested to any level, memory permitting.
+(* --- Normal mode of operation, replacing the usual Pascal style ---
+ Instead of: assign(textfile,filename); reset(textfile)
+ use: pushFile(filename)
+ When another file should be included before the current file is done,
+ use: pushFile(newfilename)
+ Instead of: readln(textfile,line)
+ use: line:=readLine
+ Instead of: eof(textfilen)
+ or: eofAll; {Are all files at EOF?}
+(* --- Abnormal mode of operation ---
+ To abort a file before EOF is reached:
+ use: popFile;
+ To abort all files:
+ use: closeAll;
+ To test whether only the current file is at EOF:
+ use: eofCurrent;
+(* Additional features:
+ fileError: boolean function, was there an error during file open or read?
+ currentFilename: string function, name of current file
+ currentLineNo: integer function, number of line just read from current file
+ isEmpty(var s: string): boolean function, is s empty?
+ readData: string function, like readLine, but continue reading until
+ a non-blank line is found, return blank only at EOF
+ skipBlanks: skip blank lines in input: next call to readLine will be
+ non-blank unless EOF is encountered
+ report(items): procedure to control which messages are printed,
+ "items" is the sum of the following options
+ (constants with the appropriate values are defined in the interface)
+ 1: reportnewfile - file is opened
+ 2: reportoldfile - file is resumed
+ 4: reportclose - file is closed
+ 8: reporterror - a file error is encountered
+ 16: reportrecursive - there is a recursive include
+ The default value is items=27 (all the above except reportclose)
+ At present you cannot turn reportrecursive off.
+ *)
+interface
+
+ procedure pushFile(filename: string);
+ procedure popFile;
+ procedure closeAll;
+ procedure report(items: integer);
+ function currentFilename: string;
+ function eofAll: boolean;
+ function eofCurrent: boolean;
+ function fileError: boolean;
+ function readLine: string;
+ function readData: string;
+ function isEmpty(var s: string): boolean;
+ function currentLineNo: integer;
+ procedure skipBlanks;
+ const nextData: string = '';
+
+const
+ reportnewfile = 1;
+ reportoldfile = 2;
+ reportclose = 4;
+ reporterror = 8;
+ reportrecursive = 16;
+
+implementation
+
+ type
+ pfilenode = ^filenode;
+ filenode = record
+ name: string;
+ actualfile: text;
+ prev: pfilenode;
+ lineno: integer;
+ end;
+
+ const current: pfilenode = NIL;
+ inputerror: boolean = false;
+ reportitem: integer = reportnewfile + reportoldfile
+ + reporterror + reportrecursive;
+
+ procedure report(items: integer); begin reportitem := items end;
+
+ function recursive (filename: string): boolean;
+ var previous: pfilenode;
+ begin if current=NIL then begin recursive:=false; exit; end;
+ previous := current; recursive:=true;
+ while previous <> NIL do
+ begin
+ if filename=previous^.name then exit;
+ previous := previous^.prev;
+ end;
+ recursive:=false
+ end;
+
+ procedure pushFile(filename: string);
+ var newnode: pfilenode;
+ begin
+ if recursive(filename) then
+ begin writeln('===! Ignoring recursive include of file ',filename); exit;
+ end;
+ new(newnode); newnode^.name := filename; newnode^.prev := current;
+ newnode^.lineno := 0;
+{$I-}
+ assign(newnode^.actualfile,filename); reset(newnode^.actualfile);
+{$I+}
+ inputerror := ioresult<>0;
+ if inputerror then dispose(newnode) else current := newnode;
+ if not inputerror and ((reportitem and reportnewfile)>0) then writeln
+ ('==>> Input from file ',currentFilename);
+ if inputerror and ((reportitem and reporterror)>0) then writeln
+ ('==!! Could not open file ',filename);
+ end;
+
+ procedure popFile;
+ var previous: pfilenode;
+ begin if current=NIL then exit;
+ if (reportitem and reportclose)>0 then writeln
+ ('==>> Closing file ',currentFilename,' at line number ', currentLineNo:1);
+ close(current^.actualfile); previous := current^.prev; dispose(current);
+ current := previous;
+ if (current<>NIL) and ((reportitem and reportoldfile)>0) then writeln
+ ('==>> Resuming input from file ',currentFilename,' at line number ',
+ currentLineNo:1);
+ end;
+
+ procedure closeAll; begin repeat popFile until current=NIL; end;
+
+ function eofCurrent: boolean;
+ begin eofCurrent := eof(current^.actualfile);
+ end;
+
+ function readLine: string;
+ var s: string;
+ begin if nextData<>'' then
+ begin readLine:=nextData; nextData:=''; exit end;
+ if eofAll then begin readLine:=''; exit end;
+{$I-}
+ readln(current^.actualfile,s); readLine:=s;
+{$I+}
+ inputerror := ioresult<>0;
+ if not inputerror then inc(current^.lineno);
+ if inputerror and ((reportitem and reporterror)>0) then writeln
+ ('==!! Could not read from file ',currentFilename);
+ end;
+
+ function isEmpty(var s: string): boolean;
+ var i: integer;
+ begin if length(s)=0 then begin isEmpty:=true; exit; end;
+ for i:=1 to length(s) do if s[i]<>' ' then
+ begin isEmpty:=false; exit; end;
+ isEmpty:=true
+ end;
+
+ function readData: string;
+ var s: string;
+ begin if not isEmpty(nextData) then
+ begin readData:=nextData; nextData:=''; exit end;
+ while not eofAll do
+ begin s:=readLine;
+ if not isEmpty(s) then begin readData:=s; exit end;
+ end;
+ readData:='';
+ end;
+
+ procedure skipBlanks;
+ begin while nextData='' do
+ begin nextData:=readData; if eofAll then exit
+ end
+ end;
+
+ function eofAll: boolean;
+ begin eofAll := true;
+ if current=NIL then exit else
+ if eofCurrent then begin popFile; eofAll:=eofAll; exit end;
+ eofAll:=false
+ end;
+
+ function currentLineNo: integer;
+ begin if current = NIL then currentLineNo := 0
+ else currentLineNo := current^.lineno;
+ end;
+
+ function currentFilename: string;
+ begin if current = NIL then currentFilename := 'No file open yet'
+ else currentFilename := current^.name;
+ end;
+
+ function fileError: boolean; begin fileError := inputerror; end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/notes.c b/Build/source/utils/mtx/mtx-0.60d/notes.c
new file mode 100644
index 00000000000..c212896cf90
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/notes.c
@@ -0,0 +1,547 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "notes.pas" */
+
+
+#include "p2c.h"
+
+
+#define NOTES_G
+#include "notes.h"
+
+
+short count64['9' + 1 - '0'] = {
+ 64, 4, 32, 2, 16, 0, 1, 0, 8, 128
+};
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+typedef struct parsedNote {
+ Char name;
+ Char duration[2];
+ Char octave[9];
+ Char accidental[17], whatever[17], dotgroup[17], xtuplet[17];
+ Char shortcut[33];
+} parsedNote;
+
+
+Static Void printNote(n)
+parsedNote n;
+{
+ printf("%c|%s|%s|%s|%s|%s|%s|%s\n",
+ n.name, n.duration, n.octave, n.accidental, n.whatever, n.dotgroup,
+ n.xtuplet, n.shortcut);
+}
+
+
+/* If rearrangeNote is TRUE, translate original note to the following form:
+ 1. Note name.
+ 2. Duration.
+ 3. Octave adjustments.
+ 4. Everything except the other six items.
+ 5. Accidental with adjustments (rest: height adjustment)
+ 6. Dot with adjustments.
+ 7. Xtuplet group.
+*/
+
+Void translateSolfa(nt)
+Char *nt;
+{
+ short k;
+
+ if (!solfaNoteNames())
+ return;
+ k = pos1(*nt, solfa_names);
+ if (k > 0)
+ *nt = has_duration[k-1];
+}
+
+
+Char durationCode(note)
+Char *note;
+{
+ Char Result = unspecified;
+ Char code;
+
+ if (strlen(note) <= 1)
+ return Result;
+ code = note[1];
+ if (pos1(code, durations) > 0)
+ return code;
+ return Result;
+}
+
+
+Static Char half(dur)
+Char dur;
+{
+ Char Result;
+ short k;
+ Char STR1[20];
+ Char STR2[24];
+
+ k = pos1(dur, durations);
+ Result = dur;
+ if (k == 0) {
+ sprintf(STR1, "Invalid duration %c", dur);
+ error(STR1, print);
+ return Result;
+ }
+ if (k <= ndurs)
+ return (durations[k]);
+ sprintf(STR2, "%c is too short to halve", dur);
+ error(STR2, print);
+ return Result;
+}
+
+
+Static Void addDuration(note, dur)
+Char *note;
+Char dur;
+{
+ if (insertDuration())
+ insertChar(dur, note, 2);
+}
+
+
+/* Extract procedures. All of these remove part of "note" (sometimes
+ the part is empty) and put it somewhere else. The part may be anywhere
+ in "note", except when otherwise specified.*/
+
+/* Unconditionally extracts the first character. */
+
+Static Void extractFirst(note, first)
+Char *note;
+Char *first;
+{
+ *first = note[0];
+ predelete(note, 1);
+}
+
+
+/* Extracts at most one of the characters in "hits". */
+
+Static Void extractOneOf(note, hits, hit)
+Char *note;
+Char *hits;
+Char *hit;
+{
+ short i, l;
+
+ l = strlen(note);
+ *hit = '\0';
+ for (i = 1; i <= l; i++) {
+ if (pos1(note[i-1], hits) > 0) {
+ sprintf(hit, "%c", note[i-1]);
+ delete1(note, i);
+ return;
+ }
+ }
+}
+
+
+/* Extracts contiguous characters in "hits" until no more are found.
+ There may be more later. */
+
+Static Void extractContiguous(note, hits, hit)
+Char *note;
+Char *hits;
+Char *hit;
+{
+ short i, l, len;
+
+ l = strlen(note);
+ len = l;
+ *hit = '\0';
+ for (i = 1; i <= l; i++) {
+ if (pos1(note[i-1], hits) > 0) {
+ do {
+ if (pos1(note[i-1], hits) == 0)
+ return;
+ sprintf(hit + strlen(hit), "%c", note[i-1]);
+ delete1(note, i);
+ len--;
+ } while (len >= i);
+ return;
+ }
+ }
+}
+
+
+/* Extracts the specified character and everything after it. */
+
+Static Void extractAfter(note, delim, tail)
+Char *note;
+Char delim;
+Char *tail;
+{
+ short newlen;
+
+ newlen = pos1(delim, note);
+ *tail = '\0';
+ if (newlen == 0)
+ return;
+ newlen--;
+ strcpy(tail, note);
+ predelete(tail, newlen);
+ note[(long)((int)newlen)] = '\0';
+/* p2c: notes.pas, line 108:
+ * Note: Modification of string length may translate incorrectly [146] */
+}
+
+
+/* Extracts the dot shortcut part of a note: comma shortcut is no problem
+ because a comma cannot be part of a number. */
+
+Static Void extractDotShortcut(note, tail)
+Char *note, *tail;
+{
+ Char names[256], tail2[256];
+ short l = 1;
+ short lt;
+ Char ch;
+
+ extractAfter(note, '.', tail);
+ lt = strlen(tail);
+ if (l < lt && tail[1] == '.')
+ l = 2;
+ if (solfaNoteNames())
+ strcpy(names, solfa_names);
+ else
+ strcpy(names, has_duration);
+ if (l < lt && pos1(tail[l], names) > 0) {
+ translateSolfa(&tail[l]);
+ return;
+ }
+ if (l == 2)
+ error("\"..\" followed by non-note", print);
+ if (l >= lt) {
+ strcat(note, tail);
+ *tail = '\0';
+ return;
+ }
+ ch = tail[0];
+ predelete(tail, 1);
+ extractDotShortcut(tail, tail2);
+ sprintf(note + strlen(note), "%c%s", ch, tail);
+ strcpy(tail, tail2);
+}
+
+
+/* Extracts a signed number. */
+
+Static Void extractSignedNumber(note, number)
+Char *note, *number;
+{
+ short k;
+ Char note0[256];
+
+ k = pos1('+', note);
+ if (k == 0)
+ k = pos1('-', note);
+ *number = '\0';
+ if (k == 0)
+ return;
+ strcpy(note0, note);
+ do {
+ sprintf(number + strlen(number), "%c", note[k-1]);
+ delete1(note, k);
+ } while (k <= strlen(note) &&
+ (note[k-1] == '0' || pos1(note[k-1], digits) != 0));
+ if (strlen(number) == 1) {
+ strcpy(note, note0);
+ *number = '\0';
+ }
+}
+
+
+/* Local variables for extractGroup: */
+struct LOC_extractGroup {
+ Char *group;
+ short gl, k;
+ boolean probe, nonumber;
+} ;
+
+Local Void tryMore(LINK)
+struct LOC_extractGroup *LINK;
+{
+ while (LINK->k <= LINK->gl && LINK->group[LINK->k-1] == LINK->group[0])
+ LINK->k++;
+}
+
+Local Void try_(s, LINK)
+Char *s;
+struct LOC_extractGroup *LINK;
+{
+ LINK->probe = (LINK->k < LINK->gl && pos1(LINK->group[LINK->k-1], s) > 0);
+ if (LINK->probe)
+ LINK->k++;
+}
+
+Local Void tryNumber(LINK)
+struct LOC_extractGroup *LINK;
+{
+ boolean dot_ = false;
+
+ LINK->nonumber = true;
+ while (LINK->k <= LINK->gl && pos1(LINK->group[LINK->k-1], digitsdot) > 0) {
+ LINK->k++;
+ if (LINK->group[LINK->k-1] == '.') {
+ if (dot_)
+ error("Extra dot in number", print);
+ else
+ dot_ = true;
+ } else
+ LINK->nonumber = false;
+ }
+}
+
+
+/* Extracts a symbol followed by optional +- or <> shift indicators */
+
+Static Void extractGroup(note, delim, group_)
+Char *note;
+Char delim;
+Char *group_;
+{
+ struct LOC_extractGroup V;
+ short k0;
+ Char tail[256];
+
+ V.group = group_;
+ extractAfter(note, delim, V.group);
+ if (*V.group == '\0')
+ return;
+ V.gl = strlen(V.group);
+ V.k = 2;
+ if (V.gl > 1 && V.group[1] == ':')
+ V.k = 3;
+ else {
+ tryMore(&V);
+ k0 = V.k;
+ try_("+-<>", &V);
+ if (V.probe)
+ tryNumber(&V);
+ if (V.nonumber)
+ V.k = k0;
+ k0 = V.k;
+ try_("+-<>", &V);
+ if (V.probe)
+ tryNumber(&V);
+ if (V.nonumber)
+ V.k = k0;
+ }
+ strcpy(tail, V.group);
+ V.k--;
+ V.group[(long)((int)V.k)] = '\0';
+/* p2c: notes.pas, line 169:
+ * Note: Modification of string length may translate incorrectly [146] */
+ predelete(tail, V.k);
+ strcat(note, tail);
+}
+
+
+Static Void parseNote(note_, pnote)
+Char *note_;
+parsedNote *pnote;
+{
+ Char note[256];
+ Char onlymidi[256];
+ Char STR1[256];
+ Char STR2[10];
+
+ strcpy(note, note_);
+ *pnote->shortcut = '\0';
+ *pnote->xtuplet = '\0';
+ *pnote->accidental = '\0';
+ *pnote->dotgroup = '\0';
+ *pnote->duration = '\0';
+ *pnote->octave = '\0';
+ *onlymidi = '\0';
+ extractFirst(note, &pnote->name);
+ extractAfter(note, 'x', pnote->xtuplet);
+ extractAfter(note, ',', pnote->shortcut);
+ if (*pnote->shortcut == '\0')
+ extractDotShortcut(note, pnote->shortcut);
+ if (pnote->name != rest) {
+ extractGroup(note, 's', pnote->accidental);
+ if (*pnote->accidental == '\0')
+ extractGroup(note, 'f', pnote->accidental);
+ if (*pnote->accidental == '\0')
+ extractGroup(note, 'n', pnote->accidental);
+ }
+ /* Look for 'i' or 'c' anywhere in what is left of note.*/
+ if (*pnote->accidental != '\0') {
+ extractOneOf(note, "ic", onlymidi);
+ strcat(pnote->accidental, onlymidi);
+/* p2c: notes.pas, line 191:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ extractGroup(note, 'd', pnote->dotgroup);
+ if (pnote->name == rest)
+ extractSignedNumber(note, pnote->accidental);
+ extractOneOf(note, durations, pnote->duration);
+ sprintf(STR1, "%c", rest);
+ if (strcmp(note, STR1))
+ extractContiguous(note, "=+-", pnote->octave);
+ if (*note != '\0' && isdigit(note[0])) {
+ sprintf(STR2, "%c%s", note[0], pnote->octave);
+ strcpy(pnote->octave, STR2);
+/* p2c: notes.pas, line 197:
+ * Note: Possible string truncation in assignment [145] */
+ delete1(note, 1);
+ }
+ strcpy(pnote->whatever, note);
+/* p2c: notes.pas, line 199:
+ * Note: Possible string truncation in assignment [145] */
+}
+
+
+/* On input: "note" is a note word; "dur1" is the default duration.
+ On output: "note" has possibly been modified;
+ possibly been split into two parts, the second being "shortcut";
+ "dur" is the suggested new default duration;
+ "count" is the count of the total of "note" and "shortcut" */
+Void processNote(note, xnote, dur1, dur, count)
+Char *note, *xnote;
+Char dur1, *dur;
+short *count;
+{
+ Char sc[3], origdur[3];
+ short multiplicity, l;
+ parsedNote pnote;
+ Char STR1[36];
+ Char STR3[256];
+
+ *xnote = '\0';
+ *dur = dur1;
+ if (*note == '\0' || !isNoteOrRest(note) || isPause(note))
+ return;
+ parseNote(note, &pnote);
+ if (debugMode()) {
+ printf("%s => ", note);
+ printNote(pnote);
+ }
+ if (pos1('.', pnote.whatever) > 0) {
+ sprintf(STR3, "Suspicious dot in word %s", note);
+ warning(STR3, print);
+ }
+ strcpy(origdur, pnote.duration);
+ if (*pnote.duration == '\0')
+ *dur = dur1;
+ else
+ *dur = pnote.duration[0];
+ *count = count64[*dur - '0'];
+ if (*pnote.dotgroup != '\0') {
+ *count += *count / 2;
+ if (startsWith(pnote.dotgroup, "dd"))
+ *count += *count / 6;
+ }
+ sprintf(pnote.duration, "%c", *dur);
+ if (*pnote.shortcut != '\0') {
+ if (*pnote.dotgroup != '\0')
+ error("You may not explicitly dot a note with a shortcut", print);
+ sprintf(sc, "%c", pnote.shortcut[0]);
+ predelete(pnote.shortcut, 1);
+ if (!strcmp(sc, ".")) {
+ multiplicity = 1;
+ if (pnote.shortcut[0] == '.') {
+ multiplicity++;
+ predelete(pnote.shortcut, 1);
+ strcat(sc, ".");
+/* p2c: notes.pas, line 233:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ *count += *count;
+ dur1 = pnote.duration[0];
+ for (l = 1; l <= multiplicity; l++) {
+ sprintf(pnote.dotgroup + strlen(pnote.dotgroup), "%c", dotcode);
+/* p2c: notes.pas, line 236:
+ * Note: Possible string truncation in assignment [145] */
+ dur1 = half(dur1);
+ }
+ addDuration(pnote.shortcut, dur1);
+ } else {
+ addDuration(pnote.shortcut, half(pnote.duration[0]));
+ *count += *count / 2;
+ }
+ }
+ if (!insertDuration()) {
+ strcpy(pnote.duration, origdur);
+/* p2c: notes.pas, line 243:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ if (rearrangeNote())
+ sprintf(note, "%c%s%s%s%s%s%s",
+ pnote.name, pnote.duration, pnote.octave, pnote.whatever,
+ pnote.accidental, pnote.dotgroup, pnote.xtuplet);
+ else
+ strcpy(pnote.shortcut, " ");
+ if (!insertDuration() && *pnote.shortcut != '\0') {
+ sprintf(STR1, "%s%s", sc, pnote.shortcut);
+ strcpy(pnote.shortcut, STR1);
+/* p2c: notes.pas, line 248:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ strcpy(xnote, pnote.shortcut);
+}
+
+
+Char octaveCode(note)
+Char *note;
+{ /*if debugMode then write('Octave code in note "',note,'" is ');*/
+ parsedNote pnote;
+
+ parseNote(note, &pnote);
+ /*if debugMode then writeln('"',octave,'"');*/
+ if (*pnote.octave == '\0')
+ return ' ';
+ else
+ return (pnote.octave[0]);
+}
+
+
+Void removeOctaveCode(code, note)
+Char code;
+Char *note;
+{ /*if debugMode then writeln('remove ',code,' from ',note);*/
+ short k, l;
+
+ l = strlen(note);
+ for (k = 1; k <= l; k++) {
+ if (note[k-1] == code) {
+ if (k == l || note[k] < '0' || note[k] > '9') {
+ delete1(note, k);
+ return;
+ }
+ }
+ }
+ fatalerror("Code not found in note");
+}
+
+
+Void insertOctaveCode(code, note)
+Char code;
+Char *note;
+{ /*if debugMode then writeln('insert ',code,' into ',note); */
+ short l;
+
+ l = strlen(note);
+ if (l < 2 || note[1] < '0' || note[1] > '9')
+ fatalerror("Trying to insert octave into note without duration");
+ if (l <= 2 || note[2] < '0' || note[2] > '9')
+ insertChar(code, note, 3);
+ else
+ printf("Not inserting \"%c\", note already has octave code\"\n", code);
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/notes.h b/Build/source/utils/mtx/mtx-0.60d/notes.h
new file mode 100644
index 00000000000..1b534b44186
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/notes.h
@@ -0,0 +1,34 @@
+/* Header for module notes, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef NOTES_H
+#define NOTES_H
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+
+#ifdef NOTES_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+
+extern short count64['9' + 1 - '0'];
+
+
+extern Void processNote PP((Char *note, Char *xnote, int dur1, Char *dur,
+ short *count));
+extern Char durationCode PP((Char *note));
+extern Char octaveCode PP((Char *note));
+extern Void removeOctaveCode PP((int code, Char *note));
+extern Void insertOctaveCode PP((int code, Char *note));
+extern Void translateSolfa PP((Char *nt));
+
+
+#undef vextern
+
+#endif /*NOTES_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/notes.pas b/Build/source/utils/mtx/mtx-0.60d/notes.pas
new file mode 100644
index 00000000000..3fdb9edb3c2
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/notes.pas
@@ -0,0 +1,280 @@
+unit notes;
+
+interface uses control;
+
+const count64: array['0'..'9'] of integer =
+ ( 64, 4, 32, 2, 16, 0, 1, 0, 8, 128 );
+
+procedure processNote(var note, xnote: string; dur1: char; var dur: char;
+ var count: integer);
+function durationCode (note: string): char;
+function octaveCode (note: string): char;
+procedure removeOctaveCode(code: char; var note: string);
+procedure insertOctaveCode(code: char; var note: string);
+procedure translateSolfa(var nt: char);
+
+implementation uses strings, globals;
+
+type
+
+parsedNote = record
+ name: char;
+ duration: string[1];
+ octave: string[8];
+ accidental, whatever, dotgroup, xtuplet: string[16];
+ shortcut: string[32];
+end;
+
+procedure printNote(n: parsedNote);
+begin with n do writeln(name,'|',duration,'|',octave,'|',accidental,'|',
+ whatever,'|',dotgroup,'|',xtuplet,'|',shortcut)
+end;
+
+{ If rearrangeNote is TRUE, translate original note to the following form:
+ 1. Note name.
+ 2. Duration.
+ 3. Octave adjustments.
+ 4. Everything except the other six items.
+ 5. Accidental with adjustments (rest: height adjustment)
+ 6. Dot with adjustments.
+ 7. Xtuplet group.
+}
+
+procedure translateSolfa(var nt: char);
+ var k: integer;
+begin if solfaNoteNames then
+ begin k:=pos1(nt,solfa_names); if k>0 then nt:=has_duration[k]
+ end
+end;
+
+function durationCode (note: string): char;
+ var code: char;
+ begin durationCode:=unspecified; if length(note)>1 then
+ begin code:=note[2]; if pos1(code,durations)>0 then durationCode:=code
+ end
+ end;
+
+function half ( dur: char ) : char;
+ var k: integer;
+ begin k:= pos1 (dur, durations ); half := dur;
+ if k=0 then error ('Invalid duration '+dur,print)
+ else if k>ndurs then error (dur+' is too short to halve',print)
+ else half := durations[k+1];
+ end;
+
+procedure addDuration ( var note: string; dur: char);
+begin if insertDuration then insertchar(dur,note,2); end;
+
+{ Extract procedures. All of these remove part of "note" (sometimes
+ the part is empty) and put it somewhere else. The part may be anywhere
+ in "note", except when otherwise specified.}
+
+{ Unconditionally extracts the first character. }
+
+procedure extractFirst(var note: string; var first: char);
+begin first:=note[1]; predelete(note,1)
+end;
+
+{ Extracts at most one of the characters in "hits". }
+
+procedure extractOneOf(var note: string; hits: string; var hit: string);
+ var i, l: integer;
+begin l:=length(note); hit:='';
+ for i:=1 to l do if pos1(note[i],hits)>0 then
+ begin hit:=note[i]; delete1(note,i); exit;
+ end;
+end;
+
+{ Extracts contiguous characters in "hits" until no more are found.
+ There may be more later. }
+
+procedure extractContiguous(var note: string; hits: string; var hit: string);
+ var i, l, len: integer;
+begin l:=length(note); len:=l; hit:='';
+ for i:=1 to l do if pos1(note[i],hits)>0 then
+ begin
+ repeat if pos1(note[i],hits)=0 then exit;
+ hit:=hit+note[i]; delete1(note,i); dec(len)
+ until len<i;
+ exit;
+ end;
+end;
+
+{ Extracts the specified character and everything after it. }
+
+procedure extractAfter(var note: string; delim: char; var tail: string);
+ var newlen: integer;
+begin newlen:=pos1(delim,note); tail:=''; if newlen=0 then exit;
+ dec(newlen); tail:=note; predelete(tail,newlen); note[0]:=char(newlen);
+end;
+
+{ Extracts the dot shortcut part of a note: comma shortcut is no problem
+ because a comma cannot be part of a number. }
+
+procedure extractDotShortcut(var note: string; var tail: string);
+ var names, tail2: string;
+ l, lt: integer;
+ ch: char;
+begin extractAfter(note,'.',tail); l:=1; lt:=length(tail);
+ if (l<lt) and (tail[2]='.') then l:=2;
+ if solfaNoteNames then names:=solfa_names else names:=has_duration;
+ if (l<lt) and (pos1(tail[l+1],names)>0) then
+ begin translateSolfa(tail[l+1]); exit end;
+ if l=2 then error('".." followed by non-note',print);
+ if l>=lt then begin note:=note+tail; tail:=''; exit end;
+ ch:=tail[1]; predelete(tail,1);
+ extractDotShortcut(tail,tail2); note:=note+ch+tail; tail:=tail2;
+end;
+
+{ Extracts a signed number. }
+
+procedure extractSignedNumber(var note, number: string);
+ var k: integer;
+ note0: string;
+begin k:=pos1('+',note); if k=0 then k:=pos1('-',note);
+ number:=''; if k=0 then exit;
+ note0:=note;
+ repeat number:=number+note[k]; delete1(note,k)
+ until (k>length(note)) or (note[k]<>'0') and (pos1(note[k],digits)=0);
+ if length(number)=1 then begin note:=note0; number:='' end
+end;
+
+{ Extracts a symbol followed by optional +- or <> shift indicators }
+
+procedure extractGroup(var note: string; delim: char; var group: string);
+ var gl, k, k0: integer;
+ probe, nonumber: boolean;
+ tail: string;
+ procedure tryMore;
+ begin while (k<=gl) and (group[k]=group[1]) do inc(k) end;
+ procedure try(s: string);
+ begin probe:=(k<gl) and (pos1(group[k],s)>0); if probe then inc(k)
+ end;
+ procedure tryNumber;
+ var dot: boolean;
+ begin nonumber:=true; dot:=false;
+ while (k<=gl) and (pos1(group[k],digitsdot)>0) do
+ begin inc(k); if group[k]='.' then
+ if dot then error('Extra dot in number',print) else dot:=true
+ else nonumber:=false
+ end
+ end;
+begin extractAfter(note,delim,group); if group='' then exit;
+ gl:=length(group); k:=2;
+ if (gl>1) and (group[2]=':') then k:=3 else
+ begin tryMore;
+ k0:=k; try('+-<>'); if probe then tryNumber; if nonumber then k:=k0;
+ k0:=k; try('+-<>'); if probe then tryNumber; if nonumber then k:=k0;
+ end;
+ tail:=group; dec(k); group[0]:=char(k); predelete(tail,k);
+ note:=note+tail
+end;
+
+procedure parseNote(note: string; var pnote: parsedNote);
+var onlymidi: string;
+begin with pnote do
+ begin
+ shortcut:=''; xtuplet:=''; accidental:=''; dotgroup:='';
+ duration:=''; octave:=''; onlymidi:='';
+ extractFirst(note,name);
+ extractAfter(note,'x',xtuplet);
+ extractAfter(note,',',shortcut);
+ if shortcut='' then extractDotShortcut(note,shortcut);
+ if name<>rest then
+ begin extractGroup(note,'s',accidental);
+ if accidental='' then extractGroup(note,'f',accidental);
+ if accidental='' then extractGroup(note,'n',accidental);
+ end;
+{ Look for 'i' or 'c' anywhere in what is left of note.}
+ if accidental<>'' then
+ begin extractOneOf(note,'ic',onlymidi); accidental:=accidental+onlymidi
+ end;
+ extractGroup(note,'d',dotgroup);
+ if name=rest then extractSignedNumber(note,accidental);
+ extractOneOf(note,durations,duration);
+ if note<>rest then extractContiguous(note,'=+-',octave);
+ if (length(note)>0) and (note[1]>='0') and (note[1]<='9')
+ then begin octave:=note[1]+octave; delete1(note,1) end;
+ whatever := note
+ end
+end;
+
+{ On input: "note" is a note word; "dur1" is the default duration.
+ On output: "note" has possibly been modified;
+ possibly been split into two parts, the second being "shortcut";
+ "dur" is the suggested new default duration;
+ "count" is the count of the total of "note" and "shortcut" }
+procedure processNote(var note, xnote: string; dur1: char; var dur: char;
+ var count: integer);
+var sc, origdur: string[2];
+ multiplicity, l: integer;
+ pnote: parsedNote;
+begin xnote:=''; dur:=dur1;
+ if (note='') or not isNoteOrRest(note) or isPause(note) then exit;
+ parseNote(note, pnote);
+ if debugMode then begin write(note,' => '); printNote(pnote) end;
+ with pnote do
+ begin
+ if pos1('.',whatever)>0 then warning('Suspicious dot in word '+note,print);
+ origdur := duration;
+ if duration='' then dur:=dur1 else dur:=duration[1];
+ count:=count64[dur]; if dotgroup<>'' then
+ begin inc(count,count div 2);
+ if startswith(dotgroup,'dd') then inc(count,count div 6)
+ end;
+ duration:=dur; if shortcut<>'' then
+ begin
+ if dotgroup<>'' then
+ error('You may not explicitly dot a note with a shortcut',print);
+ sc:=shortcut[1]; predelete(shortcut,1);
+ if sc='.' then
+ begin multiplicity:=1;
+ if shortcut[1]='.' then
+ begin inc(multiplicity); predelete(shortcut,1); sc:=sc+'.' end;
+ inc(count,count); dur1:=duration[1];
+ for l:=1 to multiplicity do
+ begin dotgroup:=dotgroup+dotcode; dur1:=half(dur1) end;
+ addDuration(shortcut,dur1);
+ end else
+ begin addDuration(shortcut,half(duration[1]));
+ inc(count,count div 2)
+ end
+ end;
+ if not insertDuration then duration := origdur;
+ if rearrangeNote
+ then note := name + duration + octave + whatever
+ + accidental + dotgroup + xtuplet
+ else shortcut:=' ';
+ if not insertDuration and (shortcut<>'') then shortcut:=sc+shortcut;
+ xnote:=shortcut
+ end
+end;
+
+function octaveCode (note: string): char;
+ var pnote: parsedNote;
+begin {if debugMode then write('Octave code in note "',note,'" is ');}
+ parseNote(note,pnote); with pnote do
+ begin {if debugMode then writeln('"',octave,'"');}
+ if octave='' then octaveCode:=' ' else octaveCode:=octave[1]; end
+end;
+
+procedure removeOctaveCode(code: char; var note: string);
+ var k, l: integer;
+begin {if debugMode then writeln('remove ',code,' from ',note);} l:=length(note);
+ for k:=1 to l do if note[k]=code then
+ if (k=l) or (note[k+1]<'0') or (note[k+1]>'9') then
+ begin delete1(note,k); exit end;
+ fatalError('Code not found in note')
+end;
+
+procedure insertOctaveCode(code: char; var note: string);
+ var l: integer;
+begin {if debugMode then writeln('insert ',code,' into ',note); }
+ l:=length(note);
+ if (l<2) or (note[2]<'0') or (note[2]>'9') then
+ fatalError('Trying to insert octave into note without duration');
+ if (l<=2) or (note[3]<'0') or (note[3]>'9') then insertChar(code,note,3)
+ else writeln('Not inserting "',code,'", note already has octave code"')
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/preamble.c b/Build/source/utils/mtx/mtx-0.60d/preamble.c
new file mode 100644
index 00000000000..53e4a5b4576
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/preamble.c
@@ -0,0 +1,1134 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "preamble.pas" */
+
+
+#include "p2c.h"
+
+
+#define PREAMBLE_G
+#include "preamble.h"
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef MULTFILE_H
+#include "multfile.h"
+#endif
+
+#ifndef FILES_H
+#include "files.h"
+#endif
+
+#ifndef STATUS_H
+#include "status.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+/* fpc mistakenly thinks CONTROL is not used */
+
+#define blank_ ' '
+#define colon_ ':'
+#define semicolon ';'
+#define comma_ ','
+
+#define max_styles 24
+
+
+typedef enum {
+ none, title, composer, pmx, options, msize, bars, shortnote, style, sharps,
+ flats, meter, space, pages, systems, enable, disable, name, indent, poet,
+ part, only, octave_, start
+} command_type;
+
+typedef enum {
+ unknown, colon_line, command_line, comment_line, plain_line
+} line_type;
+
+typedef char style_index;
+
+typedef char style_index0;
+
+
+#define c1 title
+#define cn start
+
+
+Static short known_styles = 12;
+Static boolean warn_redefine = false;
+
+Static Char commands[24][17] = {
+ "NONE", "TITLE", "COMPOSER", "PMX", "OPTIONS", "SIZE", "BARS/LINE", "SHORT",
+ "STYLE", "SHARPS", "FLATS", "METER", "SPACE", "PAGES", "SYSTEMS", "ENABLE",
+ "DISABLE", "NAME", "INDENT", "POET", "PART", "ONLY", "OCTAVE", "START"
+};
+
+Static Char cline[24][256] = {
+ "", "", "", "", "", "", "", "1/4", "", "0", "", "C", "", "1", "1", "", "",
+ "", "", "", "", "", "", ""
+};
+
+Static boolean redefined[24] = {
+ false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false,
+ false, false
+};
+
+/** Known styles */
+
+Static Char known_style[max_styles][256] = {
+ "SATB: Voices S,A T,B; Choral; Clefs G F",
+ "SATB4: Voices S A T B; Choral; Clefs G G G8 F",
+ "SINGER: Voices Voice; Vocal; Clefs G",
+ "PIANO: Voices RH LH; Continuo; Clefs G F",
+ "ORGAN: Voices RH LH Ped; Continuo; Clefs G F F",
+ "SOLO: Voices V; Clefs G", "DUET: Voices V1 Vc; Clefs G F",
+ "TRIO: Voices V1 Va Vc; Clefs G C F",
+ "QUARTET: Voices V1 V2 Va Vc; Clefs G G C F",
+ "QUINTET: Voices V1 V2 Va Vc1 Vc2; Clefs G G C F F",
+ "SEXTET: Voices V1 V2 Va1 Va2 Vc1 Vc2; Clefs G G C C F F",
+ "SEPTET: Voices V1 V2 Va1 Va2 Vc1 Vc2 Cb; Clefs G G C C F F F", "", "", "",
+ "", "", "", "", "", "", "", "", ""
+};
+
+Static style_index old_known_styles;
+Static boolean style_used[max_styles];
+Static boolean omit_line[lines_in_paragraph];
+Static style_index0 orig_style_line[max_styles];
+
+Static short nclefs, n_pages, n_systems, n_sharps, ngroups;
+Static Char part_line[256], title_line[256], composer_line[256],
+ pmx_line[256], options_line[256], start_line[256], voices[256],
+ clefs[256];
+Static short group_start[maxgroups], group_stop[maxgroups];
+Static Char instr_name[maxstaves][41];
+Static boolean style_supplied;
+
+
+/* ------------------ Styles ------------------ */
+
+Static voice_index0 voiceCount(s_)
+Char *s_;
+{
+ Char s[256];
+ short i, l;
+
+ strcpy(s, s_);
+ l = strlen(s);
+ for (i = 0; i <= l - 1; i++) {
+ if (s[i] == comma_)
+ s[i] = blank_;
+ }
+ return (wordCount(s));
+}
+
+
+Static style_index0 findStyle(s_)
+Char *s_;
+{
+ style_index0 Result = 0;
+ Char s[256];
+ style_index0 i = 0;
+
+ strcpy(s, s_);
+ sprintf(s + strlen(s), "%c", colon_);
+ while (i < known_styles) {
+ i++;
+ if (startsWithIgnoreCase(known_style[i-1], s))
+ return i;
+ }
+ return Result;
+}
+
+
+Static Void addStyle(S)
+Char *S;
+{
+ style_index0 sn;
+ Char STR1[256];
+
+ sn = findStyle(NextWord(STR1, S, colon_, dummy));
+ if (sn > 0) {
+ strcpy(known_style[sn-1], S);
+ return;
+ }
+ if (known_styles < max_styles) {
+ known_styles++;
+ strcpy(known_style[known_styles-1], S);
+ } else
+ error("Can't add another style - table full", print);
+}
+
+
+Static Void readStyles()
+{
+ boolean eofstyle;
+ Char S[256];
+ style_index0 l = 0;
+ Char *TEMP;
+
+ if (styleFileFound())
+ eofstyle = true;
+ else
+ eofstyle = P_eof(stylefile);
+ while (!eofstyle) {
+ fgets(S, 256, stylefile);
+ TEMP = strchr(S, '\n');
+ if (TEMP != NULL)
+ *TEMP = 0;
+ if (*S != '\0') {
+ addStyle(S);
+ l++;
+ orig_style_line[known_styles-1] = l;
+ }
+ eofstyle = P_eof(stylefile);
+ }
+}
+
+
+Static Void applyStyle(s_, stylename, first_inst, first_stave)
+Char *s_, *stylename;
+stave_index first_inst, first_stave;
+{
+ Char s[256];
+ Char clef[256], subline[256], subcommand[256];
+ stave_index0 i, last_inst, last_stave;
+ boolean continuo = false, toosoon = false, vocal = false;
+ Char STR2[256];
+
+ strcpy(s, s_);
+ last_inst = first_inst - 1;
+ GetNextWord(subline, s, blank_, colon_);
+ while (*s != '\0') {
+ GetNextWord(subline, s, semicolon, dummy);
+ i = curtail(subline, semicolon);
+ GetNextWord(subcommand, subline, blank_, dummy);
+ if (equalsIgnoreCase(subcommand, "VOICES")) {
+ sprintf(voices + strlen(voices), " %s", subline);
+ last_stave = first_stave + wordCount(subline) - 1;
+ last_inst = first_inst + voiceCount(subline) - 1;
+ } else if (equalsIgnoreCase(subcommand, "CLEFS")) {
+ strcpy(clef, subline);
+ sprintf(clefs + strlen(clefs), " %s", clef);
+ } else if (equalsIgnoreCase(subcommand, "VOCAL")) {
+ if (last_inst < first_inst)
+ toosoon = true;
+ else {
+ some_vocal = true;
+ vocal = true;
+ for (i = first_inst; i <= last_inst; i++)
+ setVocal(i, true);
+ }
+ } else if (equalsIgnoreCase(subcommand, "CHORAL") ||
+ equalsIgnoreCase(subcommand, "GROUP")) {
+ if (last_inst < first_inst)
+ toosoon = true;
+ else {
+ if (equalsIgnoreCase(subcommand, "CHORAL")) {
+ some_vocal = true;
+ vocal = true;
+ for (i = first_inst; i <= last_inst; i++)
+ setVocal(i, true);
+ }
+ if (ngroups == maxgroups)
+ error("Too many groups", print);
+ else {
+ ngroups++;
+ group_start[ngroups-1] = first_stave;
+ group_stop[ngroups-1] = last_stave;
+ }
+ }
+ } else if (equalsIgnoreCase(subcommand, "CONTINUO"))
+ continuo = true;
+ else {
+ sprintf(STR2, "Subcommand %s in STYLE unknown", subcommand);
+ error(STR2, print);
+ }
+ if (toosoon) {
+ sprintf(STR2, "You must first give VOICES before specifying %s",
+ subcommand);
+ error(STR2, print);
+ }
+ }
+ if (vocal && continuo)
+ error("A continuo instrument may not be vocal", print);
+ if (wordCount(clef) != last_stave - first_stave + 1)
+ error("Number of clefs does not match number of voices", print);
+ if (first_stave == last_stave || continuo) {
+ strcpy(instr_name[first_stave-1], stylename);
+/* p2c: preamble.pas, line 184:
+ * Note: Possible string truncation in assignment [145] */
+ } else {
+ for (i = first_stave - 1; i <= last_stave - 1; i++)
+ *instr_name[i] = '\0';
+ }
+ if (continuo) {
+ ninstr++;
+ stave[ninstr-1] = first_stave;
+ for (i = first_stave - 1; i <= last_stave - 1; i++)
+ instr[i] = ninstr;
+ return;
+ }
+ for (i = first_stave; i <= last_stave; i++) {
+ ninstr++;
+ stave[ninstr-1] = i;
+ instr[i-1] = ninstr;
+ }
+}
+
+
+Static Void applyStyles()
+{
+ short n1, n2, sn;
+ Char s[256];
+ Char STR2[256];
+
+ *voices = '\0';
+ *clefs = '\0';
+ ninstr = 0;
+ while (*cline[(long)style] != '\0') {
+ n1 = voiceCount(voices) + 1;
+ n2 = wordCount(voices) + 1;
+ GetNextWord(s, cline[(long)style], blank_, comma_);
+ curtail(s, comma_);
+ sn = findStyle(s);
+ if (sn == 0) {
+ sprintf(STR2, "Style %s unknown", s);
+ error(STR2, print);
+ }
+ line_no = orig_style_line[sn-1];
+ applyStyle(known_style[sn-1], s, n1, n2);
+ style_used[sn-1] = true;
+ }
+}
+
+
+/* ------------------------------------------------------------- */
+
+Static Void wipeCommands()
+{
+ command_type c;
+
+ for (c = c1; (long)c <= (long)cn; c = (command_type)((long)c + 1))
+ *cline[(long)c] = '\0';
+}
+
+
+boolean omitLine(line)
+paragraph_index line;
+{
+ if (line == 0)
+ return true;
+ else
+ return (omit_line[line-1]);
+}
+
+
+Static Void setName()
+{
+ short i, FORLIM;
+
+ if (!redefined[(long)name])
+ return;
+ setFeature("instrumentNames", true);
+ FORLIM = ninstr;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ GetNextWord(instr_name[i], cline[(long)name], blank_, dummy);
+/* p2c: preamble.pas, line 224:
+ * Note: Possible string truncation in assignment [145] */
+ }
+}
+
+
+Static Void setIndent()
+{
+ if (redefined[(long)indent])
+ strcpy(fracindent, cline[(long)indent]);
+}
+
+
+Static Void setInitOctave()
+{
+ if (redefined[(long)octave_])
+ initOctaves(cline[(long)octave_]);
+}
+
+
+Local Void checkLabel(w)
+Char *w;
+{
+ voice_index j, FORLIM;
+ Char STR1[256], STR2[256];
+
+ FORLIM = nvoices;
+ for (j = 0; j <= FORLIM - 1; j++) {
+ if (!strcmp(w, voice_label[j])) {
+ sprintf(STR2, "Voice label %s not unique", w);
+ warning(STR2, print);
+ return;
+ }
+ }
+ if (strlen(w) > 2)
+ return;
+ if (pos1(w[0], "CLU") > 0) {
+ if (strlen(w) > 1) {
+ if (pos1(w[1], "123456789") == 0)
+ return;
+ }
+ } else if (pos1(w[0], "123456789") == 0)
+ return;
+ sprintf(STR1, "Voice label %s conflicts with reserved label", w);
+ error(STR1, print);
+}
+
+
+Static Void setVoices(line)
+Char *line;
+{
+ short k;
+ Char s[256], w[256];
+ Char STR1[256];
+ short FORLIM;
+
+ nvoices = 0;
+ nstaves = 0;
+ do {
+ GetNextWord(s, line, blank_, dummy);
+ if (*s != '\0') {
+ nstaves++;
+ k = 0;
+ first_on_stave[nstaves-1] = nvoices + 1;
+ do {
+ GetNextWord(w, s, blank_, comma_);
+ curtail(w, comma_);
+ if (*w != '\0') {
+ k++;
+ if (k <= 2) {
+ nvoices++;
+ checkLabel(w);
+ strcpy(voice_label[nvoices-1], w);
+ if (*instr_name[nstaves-1] == '\0') {
+ strcpy(instr_name[nstaves-1], w);
+/* p2c: preamble.pas, line 264:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ setStavePos(nvoices, nstaves, k);
+ }
+ }
+ } while (*w != '\0');
+ if (k > 2) {
+ sprintf(STR1, "More than two voices per stave: %s", s);
+ error(STR1, print);
+ }
+ if (k == 2) {
+ sprintf(instr_name[nstaves-1], "\\mtxTwoInstruments{%s}{%s}",
+ voice_label[nvoices-2], voice_label[nvoices-1]);
+/* p2c: preamble.pas, line 271:
+ * Note: Possible string truncation in assignment [145] */
+ }
+ number_on_stave[nstaves-1] = k;
+ }
+ } while (*line != '\0');
+ FORLIM = nvoices;
+ for (k = 0; k <= FORLIM - 1; k++)
+ selected[k] = true;
+}
+
+
+Static Void setClefs(line_)
+Char *line_;
+{
+ Char line[256];
+ Char s[256];
+
+ strcpy(line, line_);
+ nclefs = 0;
+ do {
+ GetNextWord(s, line, blank_, dummy);
+ if (*s != '\0') {
+ nclefs++;
+ if (strlen(s) == 1)
+ clef[nclefs-1] = s[0];
+ else
+ clef[nclefs-1] = s[1];
+ }
+ } while (*s != '\0');
+}
+
+
+Static Void setSize(line_)
+Char *line_;
+{
+ Char line[256];
+ stave_index0 i = 0;
+ Char word[256];
+ stave_index0 FORLIM;
+
+ strcpy(line, line_);
+ while (i < ninstr) {
+ GetNextWord(word, line, blank_, dummy);
+ if (*word == '\0')
+ break;
+ i++;
+ getNum(word, &musicsize);
+ stave_size[i-1] = musicsize;
+ }
+ if ((unsigned)musicsize >= 32 || ((1L << musicsize) & 0x110000L) == 0) {
+ FORLIM = ninstr;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (stave_size[i] == unspec)
+ stave_size[i] = musicsize;
+ }
+ }
+ if (musicsize < 16)
+ musicsize = 16;
+ else if (musicsize > 20)
+ musicsize = 20;
+}
+
+
+Static command_type findCommand(command)
+Char *command;
+{
+ command_type j;
+
+ curtail(command, ':');
+ if (equalsIgnoreCase(command, "STYLE"))
+ style_supplied = true;
+ for (j = c1; (long)j <= (long)cn; j = (command_type)((long)j + 1)) {
+ if (equalsIgnoreCase(command, commands[(long)j]))
+ return j;
+ }
+ return none;
+}
+
+
+boolean isCommand(command_)
+Char *command_;
+{
+ Char command[256];
+
+ strcpy(command, command_);
+ return (findCommand(command) != none);
+}
+
+
+Static Void doEnable(line, choice)
+Char *line;
+boolean choice;
+{
+ Char word[256];
+ Char STR1[256];
+
+ do {
+ GetNextWord(word, line, blank_, dummy);
+ if (*word != '\0') {
+ if (!setFeature(word, choice)) {
+ sprintf(STR1, "No such feature: %s", word);
+ error(STR1, !print);
+ }
+ }
+ } while (*word != '\0');
+}
+
+
+Static line_type doCommand(line_)
+Char *line_;
+{
+ line_type Result;
+ Char line[256];
+ Char command[256];
+ command_type last_command;
+ boolean starts_with_note;
+ Char STR1[256], STR2[256];
+
+ strcpy(line, line_);
+ if (line[0] == comment)
+ return comment_line;
+ starts_with_note = maybeMusicLine(line);
+ GetNextWord(command, line, blank_, colon_);
+ sprintf(STR1, "%c", colon_);
+ if (endsWith(command, STR1)) {
+ last_command = findCommand(command);
+ Result = command_line;
+ if (last_command == enable)
+ doEnable(line, true);
+ else if (last_command == disable)
+ doEnable(line, false);
+ if (last_command != none) {
+ strcpy(cline[(long)last_command], line);
+ if (last_command == start)
+ strcpy(start_line, line);
+ if (warn_redefine && redefined[(long)last_command]) {
+ sprintf(STR2, "You have redefined preamble command %s", command);
+ warning(STR2, print);
+ }
+ redefined[(long)last_command] = true;
+ return Result;
+ }
+ Result = colon_line;
+ sprintf(STR2, "%s%c %s", command, colon_, line);
+ addStyle(STR2);
+ orig_style_line[known_styles-1] = line_no;
+ return Result;
+ } else if (starts_with_note)
+ return plain_line;
+ else
+ return unknown;
+ return Result;
+}
+
+
+Void setOnly(line_)
+Char *line_;
+{
+ Char line[256];
+ short num, num1, num2, l;
+ Char s[256];
+ Char STR1[256];
+
+ strcpy(line, line_);
+ if (*line == '\0')
+ return;
+ if (startsWithIgnoreCase(line, "only"))
+ GetNextWord(STR1, line, colon_, dummy);
+ for (l = 0; l <= lines_in_paragraph - 1; l++)
+ omit_line[l] = true;
+ do {
+ GetNextWord(s, line, blank_, comma_);
+ if (*s == '\0')
+ return;
+ curtail(s, comma_);
+ if (pos1('-', s) == 0) {
+ getNum(s, &num);
+ if (num > 0 && num <= lines_in_paragraph)
+ omit_line[num-1] = false;
+ else
+ warning("Invalid line number in Only: is skipped", print);
+ } else {
+ getTwoNums(s, &num1, &num2);
+ if (num1 > 0 && num2 <= lines_in_paragraph) {
+ for (num = num1 - 1; num <= num2 - 1; num++)
+ omit_line[num] = false;
+ } else
+ warning("Invalid line range in Only: is skipped", print);
+ }
+ } while (true);
+}
+
+
+Void interpretCommands()
+{
+ short i, num, den, nbars;
+ Char STR2[256];
+ short FORLIM;
+
+ strcpy(title_line, cline[(long)title]);
+ strcpy(part_line, cline[(long)part]);
+ if (*cline[(long)poet] != '\0' || *cline[(long)composer] != '\0')
+ sprintf(composer_line, "\\mtxComposerLine{%s}{%s}",
+ cline[(long)poet], cline[(long)composer]);
+ else
+ *composer_line = '\0';
+ strcpy(pmx_line, cline[(long)pmx]);
+ GetNextWord(options_line, cline[(long)options], blank_, dummy);
+ FORLIM = known_styles;
+ for (i = 0; i <= FORLIM - 1; i++)
+ style_used[i] = false;
+ applyStyles();
+ setVoices(voices);
+ FORLIM = known_styles;
+ for (i = old_known_styles; i <= FORLIM - 1; i++) {
+ if (!style_used[i]) {
+ warning("The following style was supplied but not used", !print);
+ puts(known_style[i]);
+ }
+ }
+ setClefs(clefs);
+ if (!redefined[(long)meter]) {
+ sprintf(STR2, "You have not defined Meter, assuming \"%s\" ",
+ cline[(long)meter]);
+ warning(STR2, !print);
+ }
+ getMeter(cline[(long)meter], &meternum, &meterdenom, &pmnum, &pmdenom);
+ setDefaultDuration(meterdenom);
+ if (meternum == 0 &&
+ !(redefined[(long)pages] || redefined[(long)systems] ||
+ redefined[(long)bars])) {
+ strcpy(cline[(long)bars], "1");
+ redefined[(long)bars] = true;
+ }
+ if (redefined[(long)pages] || redefined[(long)systems]) {
+ if (redefined[(long)bars])
+ warning("BARS/LINE ignored since you specified PAGES or SYSTEMS", print);
+ if (redefined[(long)systems])
+ getNum(cline[(long)systems], &n_systems);
+ else
+ warning("PAGES specified but not SYSTEMS", !print);
+ if (redefined[(long)pages])
+ getNum(cline[(long)pages], &n_pages);
+ else
+ warning("SYSTEMS specified but not PAGES", !print);
+ } else if (redefined[(long)bars]) {
+ getNum(cline[(long)bars], &nbars);
+ if (nbars > 0) {
+ n_pages = 0;
+ n_systems = nbars;
+ }
+ }
+ getNum(cline[(long)sharps], &n_sharps);
+ setSpace(cline[(long)space]);
+ setSize(cline[(long)msize]);
+ getTwoNums(cline[(long)shortnote], &num, &den);
+ if (den == 0)
+ den = 1;
+ short_note = num * 64 / den;
+ if (*cline[(long)flats] != '\0') {
+ getNum(cline[(long)flats], &n_sharps);
+ n_sharps = -n_sharps;
+ }
+ setName();
+ setIndent();
+ setInitOctave();
+ setOnly(cline[(long)only]);
+ if (*options_line != '\0') {
+ warning("\"Options\" is cryptic and obsolescent.", !print);
+ printf(" Use \"Enable\" and \"Disable\" instead.\n");
+ }
+ FORLIM = strlen(options_line);
+ for (i = 0; i <= FORLIM - 1; i++)
+ processOption(options_line[i]);
+}
+
+
+Void preambleDefaults()
+{
+ short i;
+
+ xmtrnum0 = 0.0;
+ strcpy(fracindent, "0");
+ musicsize = 20;
+ *start_line = '\0';
+ some_vocal = false;
+ ngroups = 0;
+ style_supplied = false;
+ for (i = 1; i <= maxvoices; i++)
+ setVocal(i, false);
+ for (i = 0; i <= maxstaves - 1; i++) {
+ nspace[i] = unspec;
+ stave_size[i] = unspec;
+ }
+ n_pages = 1;
+ n_systems = 1;
+ readStyles();
+ old_known_styles = known_styles;
+ for (i = 0; i <= lines_in_paragraph - 1; i++)
+ omit_line[i] = false;
+}
+
+
+Static Void preambleGuess(maybe_voices)
+voice_index maybe_voices;
+{
+ switch (maybe_voices) {
+
+ case 1:
+ strcpy(cline[(long)style], "Solo");
+ break;
+
+ case 2:
+ strcpy(cline[(long)style], "Duet");
+ break;
+
+ case 3:
+ strcpy(cline[(long)style], "Trio");
+ break;
+
+ case 4:
+ strcpy(cline[(long)style], "Quartet");
+ break;
+
+ case 5:
+ strcpy(cline[(long)style], "Quintet");
+ break;
+
+ case 6:
+ strcpy(cline[(long)style], "Sextet");
+ break;
+
+ case 7:
+ strcpy(cline[(long)style], "Septet");
+ break;
+
+ default:
+ error("I cannot guess a style", !print);
+ return;
+ break;
+ }
+ printf("I guess this piece is a %s for strings in C major.\n",
+ cline[(long)style]);
+ printf(" Why not provide a STYLE in the setup paragraph to make sure?\n");
+}
+
+
+/* ------------------------------------------------------------------ */
+
+Void nonMusic()
+{
+ paragraph_index i, FORLIM;
+
+ FORLIM = para_len;
+ for (i = 0; i <= FORLIM - 1; i++)
+ doCommand(P[i]);
+ setOnly(cline[(long)only]);
+ wipeCommands();
+}
+
+
+boolean thisCase()
+{
+ boolean Result;
+
+/* p2c: preamble.pas: Note: Eliminated unused assignment statement [338] */
+ if (!startsWithIgnoreCase(P[0], "case:"))
+ return true;
+ Result = (choice != ' ' && pos1(choice, P[0]) > 0);
+ strcpy(P[0], "%");
+ return Result;
+}
+
+
+Void augmentPreamble(control_para)
+boolean control_para;
+{
+ paragraph_index i;
+ line_type l;
+ short s[5];
+ paragraph_index FORLIM;
+
+ if (!thisCase())
+ return;
+ for (l = unknown; (long)l <= (long)plain_line; l = (line_type)((long)l + 1))
+ s[(long)l] = 0;
+ FORLIM = para_len;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ line_no = orig_line_no[i];
+ l = doCommand(P[i]);
+ s[(long)l]++;
+ if (l == comment_line && P[i][1] == comment) {
+ predelete(P[i], 2);
+ putLine(P[i]);
+ }
+ if (!control_para && l == unknown)
+ error("Unidentifiable line", print);
+ }
+ if (!control_para && s[(long)command_line] > 0 && s[(long)plain_line] > 0)
+ error("Mixture of preamble commands and music", !print);
+}
+
+
+Void doPreamble()
+{
+ paragraph_index i;
+ voice_index0 maybe_voices = 0;
+ paragraph_index FORLIM;
+
+ if (style_supplied) /*augmentPreamble(not known);*/
+ return;
+ if (true)
+ warning("No STYLE supplied", !print);
+ FORLIM = para_len;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (maybeMusicLine(P[i]))
+ maybe_voices++;
+ }
+ if (maybe_voices > 0)
+ preambleGuess(maybe_voices);
+ else
+ error("No voices found", !print);
+}
+
+
+Void respace()
+{
+ stave_index i, j;
+ Char STR1[256];
+ Char STR2[256], STR3[256];
+
+ for (i = ninstr; i >= 2; i--) {
+ j = ninstr - i + 1;
+ if (nspace[j-1] != unspec) {
+ sprintf(STR3, "\\mtxInterInstrument{%s}{%s}",
+ toString(STR1, i - 1), toString(STR2, nspace[j-1]));
+ tex3(STR3);
+ }
+ }
+ if (nspace[ninstr-1] != unspec) {
+ sprintf(STR3, "\\mtxStaffBottom{%s}", toString(STR1, nspace[ninstr-1]));
+ tex3(STR3);
+ }
+ must_respace = false;
+}
+
+
+Void restyle()
+{
+ must_restyle = false;
+}
+
+
+Static short clefno(cl)
+Char cl;
+{
+ short Result;
+
+ switch (cl) {
+
+ case 'G':
+ case '0':
+ case 't':
+ case '8':
+ Result = 0;
+ break;
+
+ case 's':
+ case '1':
+ Result = 1;
+ break;
+
+ case 'm':
+ case '2':
+ Result = 2;
+ break;
+
+ case 'a':
+ case '3':
+ Result = 3;
+ break;
+
+ case 'n':
+ case '4':
+ Result = 4;
+ break;
+
+ case 'r':
+ case '5':
+ Result = 5;
+ break;
+
+ case 'F':
+ case 'b':
+ case '6':
+ Result = 6;
+ break;
+
+ case 'C':
+ Result = 3;
+ break;
+
+ default:
+ warning("Unknown clef code - replaced by treble", print);
+ Result = 0;
+ break;
+ }
+ return Result;
+}
+
+
+Static Void doTenorClefs()
+{
+ voice_index i;
+ Char c;
+ voice_index FORLIM;
+ Char STR1[256];
+ Char STR3[256];
+
+ FORLIM = nclefs;
+ for (i = 1; i <= FORLIM; i++) {
+ c = clef[i-1];
+ if (c == '8' || c == 't') {
+ sprintf(STR3, "\\\\mtxTenorClef{%s}\\", toString(STR1, PMXinstr(i)));
+ putLine(STR3);
+ }
+ }
+}
+
+
+Local Char *pmxMeter(Result)
+Char *Result;
+{
+ short denom, num;
+ Char STR1[256], STR3[256], STR4[256], STR5[256];
+
+ if (meternum == 0) {
+ num = beatsPerLine(); /** denom := 0; **/
+ meterChange(old_meter_word, num, meterdenom, true);
+ } else
+ num = meternum; /** denom := pmdenom; **/
+ /* CMO: unconditonally assign value of pmdenom to denom */
+ denom = pmdenom;
+ sprintf(Result, "%s %s %s %s",
+ toString(STR1, num), toString(STR3, PMXmeterdenom(meterdenom)),
+ toString(STR4, pmnum), toString(STR5, denom));
+ return Result;
+}
+
+Local Char *sizecode(Result, k)
+Char *Result;
+short k;
+{
+ strcpy(Result, "\\mtxNormalSize");
+ switch (k) {
+
+ case 13:
+ if (musicsize == 20)
+ strcpy(Result, "\\mtxTinySize");
+ else
+ strcpy(Result, "\\mtxSmallSize");
+ break;
+
+ case 16:
+ if (musicsize == 20)
+ strcpy(Result, "\\mtxSmallSize");
+ break;
+
+ case 20:
+ if (musicsize == 16)
+ strcpy(Result, "\\mtxLargeSize");
+ break;
+
+ case 24:
+ if (musicsize == 20)
+ strcpy(Result, "\\mtxLargeSize");
+ else
+ strcpy(Result, "\\mtxHugeSize");
+ break;
+
+ case 29:
+ strcpy(Result, "\\mtxHugeSize");
+ break;
+
+ default:
+ error("Valid sizes are 13, 16, 20, 24, 29", print);
+ break;
+ }
+ return Result;
+}
+
+
+Void doPMXpreamble()
+{
+ static Char clefcode[9] = "0123456";
+ short i, j;
+ Char clefs[256];
+ Char STR1[256];
+ Char STR2[256];
+ Char STR3[58];
+ short FORLIM;
+ Char STR5[256];
+
+ if (*composer_line != '\0')
+ putLine(composer_line);
+ if (*title_line != '\0') {
+ sprintf(STR2, "\\mtxTitleLine{%s}", title_line);
+ putLine(STR2);
+ }
+ putLine("---");
+ if (instrumentNames() && !redefined[(long)indent])
+ strcpy(fracindent, "0.12");
+ fprintf(outfile, "%d", nstaves);
+ fprintf(outfile, " %d", -ninstr);
+ stave[ninstr] = nstaves + 1;
+ for (j = ninstr; j >= 1; j--)
+ fprintf(outfile, " %d", stave[j] - stave[j-1]);
+ fprintf(outfile, " %s %8.5f %d %d %d %d %s\n",
+ pmxMeter(STR1), xmtrnum0, n_sharps, n_pages, n_systems, musicsize,
+ fracindent);
+ FORLIM = ninstr;
+ for (i = 1; i <= FORLIM; i++) {
+ if (!instrumentNames())
+ putLine("");
+ else {
+ sprintf(STR3, "\\mtxInstrName{%s}", instr_name[ninstr - i]);
+ putLine(STR3);
+ }
+ }
+ *clefs = '\0';
+ for (i = nclefs - 1; i >= 0; i--)
+ sprintf(clefs + strlen(clefs), "%c", clefcode[clefno(clef[i])]);
+ putLine(clefs);
+ if (*texdir == '\0')
+ strcpy(texdir, "./");
+ putLine(texdir);
+
+ pmx_preamble_done = true;
+ respace();
+
+ FORLIM = ngroups;
+ for (j = 1; j <= FORLIM; j++)
+ fprintf(outfile, "\\\\mtxGroup{%s}{%s}{%s}\\\n",
+ toString(STR1, j), toString(STR2, ninstr - group_start[j-1] + 1),
+ toString(STR5, ninstr - group_stop[j-1] + 1));
+ FORLIM = ninstr;
+ for (j = 1; j <= FORLIM; j++) {
+ if (stave_size[j-1] != unspec) {
+ sprintf(STR5, "\\\\mtxSetSize{%s}{%s}\\",
+ toString(STR1, ninstr - j + 1),
+ sizecode(STR2, stave_size[j-1]));
+ putLine(STR5);
+ }
+ }
+ if (*part_line != '\0') {
+ putLine("Ti");
+ putLine(part_line);
+ }
+ if (*title_line != '\0') {
+ putLine("Tt");
+ putLine("\\mtxTitle");
+ }
+ if (*composer_line != '\0') {
+ putLine("Tc");
+ putLine("\\mtxPoetComposer");
+ }
+ if (*pmx_line != '\0')
+ putLine(pmx_line);
+ doTenorClefs();
+ wipeCommands();
+}
+
+
+Char *startString(Result, voice)
+Char *Result;
+voice_index0 voice;
+{
+ Char s[256], w[256];
+ voice_index j;
+
+ strcpy(s, start_line);
+ for (j = 1; j <= voice; j++)
+ GetNextWord(w, s, dummy, ';');
+ curtail(w, ';');
+ if (*w != '\0') {
+ sprintf(Result, "%s ", w);
+ return Result;
+ } else
+ return strcpy(Result, w);
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/preamble.h b/Build/source/utils/mtx/mtx-0.60d/preamble.h
new file mode 100644
index 00000000000..ef854aa0dcb
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/preamble.h
@@ -0,0 +1,42 @@
+/* Header for module preamble, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef PREAMBLE_H
+#define PREAMBLE_H
+
+
+/*$X+*/
+/* Interpret preamble paragraph, compose PMX preamble */
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+
+#ifdef PREAMBLE_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+extern boolean thisCase PV();
+extern Void preambleDefaults PV();
+extern Void interpretCommands PV();
+extern Void doPreamble PV();
+extern Void doPMXpreamble PV();
+extern Void respace PV();
+extern Void restyle PV();
+extern Char *startString PP((Char *Result, int voice));
+extern Void augmentPreamble PP((int control_para));
+extern boolean omitLine PP((int line));
+extern Void nonMusic PV();
+extern Void setOnly PP((Char *line));
+extern boolean isCommand PP((Char *command));
+
+
+#define known true
+
+
+#undef vextern
+
+#endif /*PREAMBLE_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/preamble.pas b/Build/source/utils/mtx/mtx-0.60d/preamble.pas
new file mode 100644
index 00000000000..9ece7d67adc
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/preamble.pas
@@ -0,0 +1,624 @@
+unit preamble;
+{$X+}
+{ Interpret preamble paragraph, compose PMX preamble }
+
+interface uses globals;
+
+function thisCase: boolean;
+procedure preambleDefaults;
+procedure interpretCommands;
+procedure doPreamble;
+procedure doPMXpreamble;
+procedure respace;
+procedure restyle;
+function startString(voice: voice_index0): string;
+procedure augmentPreamble(control_para: boolean);
+function omitLine(line: paragraph_index): boolean;
+procedure nonMusic;
+procedure setOnly(line: string);
+function isCommand(command: string): boolean;
+
+const known = true;
+
+implementation uses control, mtxline, strings, files, status, utility;
+{ fpc mistakenly thinks CONTROL is not used }
+
+const blank = ' ';
+ colon = ':';
+ semicolon = ';';
+ comma = ',';
+ known_styles: integer = 12;
+ max_styles = 24;
+ warn_redefine: boolean = false;
+
+type command_type =
+ ( none, title, composer, pmx, options, msize, bars, shortnote,
+ style, sharps, flats, meter, space, pages, systems,
+ enable, disable, name, indent,
+ poet, part, only, octave, start );
+
+ line_type = ( unknown, colon_line, command_line, comment_line,
+ plain_line );
+
+ style_index = 1..max_styles;
+ style_index0 = 0..max_styles;
+
+const c1 = title; cn = start;
+ commands: array[command_type] of string[16] =
+ ( 'NONE', 'TITLE', 'COMPOSER', 'PMX', 'OPTIONS',
+ 'SIZE', 'BARS/LINE', 'SHORT',
+ 'STYLE', 'SHARPS', 'FLATS', 'METER', 'SPACE', 'PAGES', 'SYSTEMS',
+ 'ENABLE', 'DISABLE',
+ 'NAME', 'INDENT', 'POET', 'PART', 'ONLY', 'OCTAVE', 'START');
+ cline: array[command_type] of string =
+ ( '', '', '', '', '', '', '', '1/4',
+ '', '0', '', 'C', '', '1', '1', '', '', '', '', '', '', '', '', '' );
+ redefined: array[command_type] of boolean =
+ ( false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false );
+
+(** Known styles *)
+ known_style: array[style_index] of string = (
+'SATB: Voices S,A T,B; Choral; Clefs G F',
+'SATB4: Voices S A T B; Choral; Clefs G G G8 F',
+'SINGER: Voices Voice; Vocal; Clefs G',
+'PIANO: Voices RH LH; Continuo; Clefs G F',
+'ORGAN: Voices RH LH Ped; Continuo; Clefs G F F',
+'SOLO: Voices V; Clefs G',
+'DUET: Voices V1 Vc; Clefs G F',
+'TRIO: Voices V1 Va Vc; Clefs G C F',
+'QUARTET: Voices V1 V2 Va Vc; Clefs G G C F',
+'QUINTET: Voices V1 V2 Va Vc1 Vc2; Clefs G G C F F',
+'SEXTET: Voices V1 V2 Va1 Va2 Vc1 Vc2; Clefs G G C C F F',
+'SEPTET: Voices V1 V2 Va1 Va2 Vc1 Vc2 Cb; Clefs G G C C F F F',
+'', '', '', '', '', '', '', '', '', '', '', '');
+
+var old_known_styles: style_index;
+ style_used: array[style_index] of boolean;
+ omit_line: array[paragraph_index] of boolean;
+ orig_style_line: array[style_index] of style_index0;
+
+var nclefs, n_pages, n_systems, n_sharps, ngroups: integer;
+ part_line, title_line, composer_line, pmx_line, options_line,
+ start_line, voices, clefs: string;
+ group_start, group_stop: array[1..maxgroups] of integer;
+ instr_name: array[stave_index] of string[40];
+ style_supplied: boolean;
+
+{ ------------------ Styles ------------------ }
+
+function voiceCount(s: string): voice_index0;
+ var i, l: integer;
+ begin l:=length(s); for i:=1 to l do if s[i]=comma then s[i]:=blank;
+ voiceCount:=wordCount(s);
+ end;
+
+function findStyle(s: string): style_index0;
+ var i: style_index0;
+begin
+ i:=0; s:=s+colon; findStyle:=0;
+ while i<known_styles do
+ begin inc(i);
+ if startsWithIgnoreCase(known_style[i],s) then
+ begin findStyle:=i; exit; end;
+ end;
+end;
+
+procedure addStyle (S: string);
+ var sn: style_index0;
+begin
+ sn:=findStyle(NextWord(S,colon,dummy));
+ if sn>0 then known_style[sn] := S
+ else if known_styles < max_styles then
+ begin inc(known_styles);
+ known_style[known_styles] := S;
+ end
+ else error('Can''t add another style - table full',print);
+end;
+
+procedure readStyles;
+ var eofstyle: boolean;
+ S: string;
+ l: style_index0;
+begin if styleFileFound then eofstyle:=true else eofstyle := eof(stylefile);
+ l:=0;
+ while not eofstyle do
+ begin readln(stylefile,S); if S<>'' then
+ begin addStyle(S); inc(l); orig_style_line[known_styles]:=l; end;
+ eofstyle := eof(stylefile);
+ end;
+end;
+
+procedure applyStyle(s, stylename: string;
+ first_inst, first_stave: stave_index);
+ var clef, subline, subcommand: string;
+ i, last_inst, last_stave: stave_index0;
+ continuo, toosoon, vocal: boolean;
+ begin last_inst:=first_inst-1;
+ toosoon := false; continuo:=false; vocal := false;
+ subline:=GetNextWord(s,blank,colon);
+ while s<>'' do
+ begin subline:=GetNextWord(s,semicolon,dummy);
+ i:=curtail(subline,semicolon);
+ subcommand:=GetNextWord(subline,blank,dummy);
+ if equalsIgnoreCase(subcommand,'VOICES') then
+ begin voices:=voices+' '+subline;
+ last_stave := first_stave + wordCount(subline) - 1;
+ last_inst := first_inst + voiceCount(subline) - 1;
+ end
+ else if equalsIgnoreCase(subcommand,'CLEFS')
+ then
+ begin clef:=subline; clefs:=clefs+' '+clef; end
+ else if equalsIgnoreCase(subcommand,'VOCAL') then
+ if last_inst<first_inst then toosoon:=true
+ else begin some_vocal := true; vocal := true;
+ for i:=first_inst to last_inst do setVocal(i,true);
+ end
+ else if equalsIgnoreCase(subcommand,'CHORAL') or
+ equalsIgnoreCase(subcommand,'GROUP') then
+ if last_inst<first_inst then toosoon:=true
+ else begin
+ if equalsIgnoreCase(subcommand,'CHORAL') then
+ begin some_vocal := true; vocal := true;
+ for i:=first_inst to last_inst do setVocal(i,true);
+ end;
+ if ngroups=maxgroups then error('Too many groups',print)
+ else begin inc(ngroups);
+ group_start[ngroups] := first_stave;
+ group_stop[ngroups] := last_stave;
+ end
+ end
+ else if equalsIgnoreCase(subcommand,'CONTINUO') then continuo := true
+ else error('Subcommand ' + subcommand + ' in STYLE unknown',print);
+ if toosoon then
+ error('You must first give VOICES before specifying ' + subcommand,
+ print);
+ end;
+ if vocal and continuo then error(
+ 'A continuo instrument may not be vocal',print);
+ if wordCount(clef)<>last_stave-first_stave+1 then error(
+ 'Number of clefs does not match number of voices',print);
+ if (first_stave=last_stave) or continuo
+ then instr_name[first_stave]:=stylename
+ else for i:=first_stave to last_stave do instr_name[i]:='';
+ if continuo then
+ begin inc(ninstr); stave[ninstr] := first_stave;
+ for i:=first_stave to last_stave do instr[i]:=ninstr;
+ end
+ else for i:=first_stave to last_stave do
+ begin inc(ninstr); stave[ninstr] := i; instr[i] := ninstr;
+ end;
+ end;
+
+procedure applyStyles;
+ var n1, n2, sn: integer;
+ s: string;
+ begin voices:=''; clefs:=''; ninstr:=0;
+ while cline[style]<>'' do
+ begin n1:=voiceCount(voices)+1;
+ n2:=wordCount(voices)+1;
+ s:=GetNextWord(cline[style],blank,comma);
+ curtail(s,comma);
+ sn:=findStyle(s); if sn=0 then error ('Style ' + s +' unknown',print);
+ line_no := orig_style_line[sn]; applyStyle(known_style[sn],s,n1,n2);
+ style_used[sn] := true;
+ end;
+ end;
+
+{ ------------------------------------------------------------- }
+
+procedure wipeCommands;
+ var c: command_type;
+begin for c:=c1 to cn do cline[c]:='';
+end;
+
+function omitLine(line: paragraph_index): boolean;
+begin if line=0 then omitLine:=true else omitLine:=omit_line[line] end;
+
+procedure setName;
+ var i: integer;
+begin if not redefined[name] then exit;
+ setFeature('instrumentNames',true);
+ for i:=1 to ninstr do
+ instr_name[i] := getNextWord(cline[name],blank,dummy);
+end;
+
+procedure setIndent;
+begin if redefined[indent] then fracindent := cline[indent];
+end;
+
+procedure setInitOctave;
+begin if redefined[octave] then initOctaves(cline[octave]);
+end;
+
+procedure setVoices(var line: string);
+ var k: integer;
+ s, w: string;
+ procedure checkLabel(w: string);
+ var j: voice_index;
+ begin
+ for j:=1 to nvoices do if w=voice_label[j] then
+ begin warning('Voice label '+w+' not unique',print); exit;
+ end;
+ if length(w)>2 then exit;
+ if pos1(w[1],'CLU')>0 then
+ if length(w)>1 then if pos1(w[2],'123456789')=0 then exit
+ else
+ else
+ else if pos1(w[1],'123456789')=0 then exit;
+ error('Voice label '+w+' conflicts with reserved label',print);
+ end;
+begin nvoices:=0; nstaves:=0;
+ repeat s:=GetNextWord(line,blank,dummy);
+ if length(s)>0 then
+ begin inc(nstaves); k:=0;
+ first_on_stave[nstaves] := nvoices + 1;
+ repeat
+ w:=GetNextWord(s,blank,comma); curtail(w, comma);
+ if w<>'' then
+ begin
+ inc(k); if k<=2 then
+ begin inc(nvoices); checkLabel(w);
+ voice_label[nvoices]:=w;
+ if instr_name[nstaves]='' then instr_name[nstaves]:=w;
+ setStavePos(nvoices,nstaves,k);
+ end
+ end;
+ until w='';
+ if k>2 then error('More than two voices per stave: ' + s,print);
+ if k=2 then instr_name[nstaves]:='\mtxTwoInstruments{'
+ + voice_label[nvoices-1] + '}{'+ voice_label[nvoices] + '}';
+ number_on_stave[nstaves] := k;
+ end
+ until length(line)=0;
+ for k:=1 to nvoices do selected[k]:=true;
+end;
+
+procedure setClefs(line: string);
+ var s: string;
+begin
+ nclefs:=0;
+ repeat
+ s:=getnextword(line,blank,dummy);
+ if s<>'' then
+ begin inc(nclefs);
+ if length(s)=1 then clef[nclefs]:=s[1] else clef[nclefs]:=s[2];
+ end;
+ until s='';
+end;
+
+procedure setSize(line: string);
+ var i: stave_index0;
+ word: string;
+ begin i:=0;
+ while i<ninstr do
+ begin word:=GetNextWord(line,blank,dummy);
+ if word='' then exit;
+ inc(i); getNum(word,musicsize);
+ stave_size[i] := musicsize;
+ end;
+ if musicsize<16 then musicsize:=16
+ else if musicsize>20 then musicsize:=20;
+ end;
+
+function findCommand(var command: string): command_type;
+ var j: command_type;
+begin curtail(command,':');
+ if equalsIgnoreCase(command,'STYLE') then style_supplied := true;
+ for j:=c1 to cn do if equalsIgnoreCase(command,commands[j]) then
+ begin findCommand:=j; exit; end;
+ findCommand:=none;
+end;
+
+function isCommand(command: string): boolean;
+begin isCommand:=findCommand(command)<>none end;
+
+procedure doEnable(var line: string; choice: boolean);
+ var word: string;
+begin
+ repeat word:=GetNextWord(line,blank,dummy);
+ if word<>'' then if not setFeature(word,choice) then
+ Error('No such feature: '+word,not print)
+ until word=''
+end;
+
+function doCommand(line: string): line_type;
+ var command: string;
+ last_command: command_type;
+ starts_with_note: boolean;
+begin
+ if line[1]=comment then begin doCommand:=comment_line; exit; end;
+ starts_with_note := maybeMusicLine(line);
+ command:=GetNextWord(line,blank,colon);
+ if endsWith(command,colon) then
+ begin last_command:=findCommand(command);
+ doCommand:=command_line;
+ if last_command = enable then doEnable(line,true)
+ else if last_command = disable then doEnable(line,false);
+ if last_command<>none then
+ begin cline[last_command]:=line;
+ if last_command=start then start_line:=line;
+ if warn_redefine and redefined[last_command] then
+ warning('You have redefined preamble command '+command,print);
+ redefined[last_command]:=true;
+ end
+ else begin doCommand:=colon_line; addStyle(command+colon+' '+line);
+ orig_style_line[known_styles] := line_no;
+ end
+ end
+ else if starts_with_note then doCommand:=plain_line
+ else doCommand:=unknown;
+end;
+
+procedure setOnly(line: string);
+ var num, num1, num2, l: integer;
+ s: string;
+begin if line='' then exit;
+ if startsWithIgnoreCase(line,'only') then GetNextWord(line,colon,dummy);
+ for l:=1 to lines_in_paragraph do omit_line[l]:=true;
+ repeat s:=GetNextWord(line,blank,comma); if s='' then exit;
+ curtail(s, comma);
+ if pos1('-',s)=0 then
+ begin getNum(s,num);
+ if (num>0) and (num<=lines_in_paragraph) then omit_line[num]:=false
+ else warning('Invalid line number in Only: is skipped',print);
+ end else
+ begin getTwoNums(s,num1,num2);
+ if (num1>0) and (num2<=lines_in_paragraph) then
+ for num:=num1 to num2 do omit_line[num]:=false
+ else warning('Invalid line range in Only: is skipped',print);
+ end;
+ until false;
+end;
+
+procedure interpretCommands;
+ var i, num, den, nbars: integer;
+begin
+ title_line := cline[title];
+ part_line := cline[part];
+ if (cline[poet]<>'') or (cline[composer]<>'') then
+ composer_line:='\mtxComposerLine{'+cline[poet]+'}{'+cline[composer]+'}'
+ else composer_line:='';
+ pmx_line := cline[pmx];
+ options_line := GetNextWord(cline[options],blank,dummy);
+ for i:=1 to known_styles do style_used[i] := false;
+ applyStyles; setVoices(voices);
+ for i:=old_known_styles+1 to known_styles do
+ if not style_used[i] then
+ begin warning('The following style was supplied but not used',not print);
+ writeln(known_style[i]);
+ end;
+ setClefs(clefs);
+ if not redefined[meter] then warning(
+ 'You have not defined Meter, assuming "'+cline[meter]+'" ',not print);
+ getMeter(cline[meter],meternum, meterdenom, pmnum, pmdenom);
+ setDefaultDuration(meterdenom);
+ if (meternum=0) and
+ not (redefined[pages] or redefined[systems] or redefined[bars])
+ then begin cline[bars] := '1'; redefined[bars]:=true; end;
+ if redefined[pages] or redefined[systems] then
+ begin if redefined[bars] then
+ warning('BARS/LINE ignored since you specified PAGES or SYSTEMS',print);
+ if redefined[systems] then getNum(cline[systems],n_systems)
+ else warning('PAGES specified but not SYSTEMS',not print);
+ if redefined[pages] then getNum(cline[pages],n_pages)
+ else warning('SYSTEMS specified but not PAGES',not print);
+ end
+ else if redefined[bars] then
+ begin getNum(cline[bars],nbars); if nbars>0 then
+ begin n_pages:=0; n_systems:=nbars end;
+ end;
+ getNum(cline[sharps],n_sharps);
+ setSpace(cline[space]);
+ setSize(cline[msize]);
+ getTwoNums(cline[shortnote],num, den); if den=0 then den:=1;
+ short_note := (num*64) div den;
+ if cline[flats]<>'' then
+ begin getNum(cline[flats],n_sharps); n_sharps:=-n_sharps; end;
+ setName; setIndent; setInitOctave; setOnly(cline[only]);
+ if options_line <>'' then begin
+ warning('"Options" is cryptic and obsolescent.', not print);
+ writeln(' Use "Enable" and "Disable" instead.')
+ end;
+ for i:=1 to length(options_line) do processOption(options_line[i]);
+end;
+
+procedure preambleDefaults;
+ var i: integer;
+begin
+ xmtrnum0:=0; fracindent:='0'; musicsize:=20; start_line:='';
+ some_vocal:=false; ngroups:=0;
+ style_supplied := false;
+ for i:=1 to maxvoices do setVocal(i,false);
+ for i:=1 to maxstaves do
+ begin nspace[i]:=unspec; stave_size[i]:=unspec; end;
+ n_pages:=1; n_systems:=1;
+ readStyles; old_known_styles := known_styles;
+ for i:=1 to lines_in_paragraph do omit_line[i]:=false;
+end;
+
+procedure preambleGuess(maybe_voices: voice_index);
+begin
+ case maybe_voices of
+ 1: cline[style] := 'Solo';
+ 2: cline[style] := 'Duet';
+ 3: cline[style] := 'Trio';
+ 4: cline[style] := 'Quartet';
+ 5: cline[style] := 'Quintet';
+ 6: cline[style] := 'Sextet';
+ 7: cline[style] := 'Septet';
+ else begin error('I cannot guess a style',not print); exit; end;
+ end;
+ writeln('I guess this piece is a ',cline[style],
+ ' for strings in C major.');
+ writeln(' Why not provide a STYLE in the setup paragraph to make sure?');
+end;
+
+{ ------------------------------------------------------------------ }
+
+procedure nonMusic;
+ var i: paragraph_index;
+begin for i:=1 to para_len do doCommand(P[i]);
+ setOnly(cline[only]); wipeCommands;
+end;
+
+function thisCase: boolean;
+begin thisCase:=true;
+ if not startsWithIgnoreCase(P[1],'case:') then exit;
+ thisCase:=(choice<>' ') and (pos1(choice,P[1])>0); P[1]:='%';
+end;
+
+procedure augmentPreamble(control_para: boolean);
+ var i: paragraph_index;
+ l: line_type;
+ s: array[line_type] of integer;
+begin
+ if not thisCase then exit;
+ for l:=unknown to plain_line do s[l]:=0;
+ for i:=1 to para_len do
+ begin line_no:=orig_line_no[i]; l:=doCommand(P[i]);
+ inc(s[l]);
+ if (l=comment_line) and (P[i,2]=comment)
+ then begin predelete(P[i],2); putLine(P[i]); end;
+ if not control_para and (l=unknown) then
+ error('Unidentifiable line',print);
+ end;
+ if not control_para and (s[command_line]>0) and (s[plain_line]>0)
+ then error('Mixture of preamble commands and music',not print);
+end;
+
+procedure doPreamble;
+ var i: paragraph_index;
+ maybe_voices: voice_index0;
+begin maybe_voices:=0;
+ if not style_supplied then
+ begin {augmentPreamble(not known);}
+ if not style_supplied then warning('No STYLE supplied',not print);
+ for i:=1 to para_len do if maybeMusicLine(P[i]) then
+ inc(maybe_voices);
+ if maybe_voices>0 then preambleGuess(maybe_voices)
+ else error('No voices found',not print);
+ end
+end;
+
+procedure respace;
+ var i, j: stave_index;
+ begin
+ for i:=ninstr downto 2 do
+ begin j:=ninstr-i+1;
+ if nspace[j]<>unspec then tex3('\mtxInterInstrument{'+toString(i-1)+
+ '}{'+toString(nspace[j])+'}');
+ end;
+ if nspace[ninstr]<>unspec then tex3('\mtxStaffBottom{'+
+ toString(nspace[ninstr])+'}');
+ must_respace:=false;
+ end;
+
+procedure restyle;
+begin
+ must_restyle:=false;
+end;
+
+function clefno ( cl: char ): integer;
+begin
+ case cl of
+'G','0','t','8': clefno:=0;
+'s','1': clefno:=1;
+'m','2': clefno:=2;
+'a','3': clefno:=3;
+'n','4': clefno:=4;
+'r','5': clefno:=5;
+'F','b','6': clefno:=6;
+'C': clefno:=3;
+ else
+ begin warning('Unknown clef code - replaced by treble',print);
+ clefno:=0;
+ end;
+ end
+end;
+
+procedure doTenorClefs;
+ var i: voice_index;
+ c: char;
+begin for i:=1 to nclefs do
+ begin
+ c:=clef[i]; if (c='8') or (c='t') then
+ putLine('\\mtxTenorClef{' + toString(PMXinstr(i)) + '}\' );
+ end;
+end;
+
+procedure doPMXpreamble;
+ const clefcode: string[8]='0123456';
+ var i, j: integer;
+ clefs: string;
+ function pmxMeter: string;
+ var denom, num: integer;
+ begin if meternum=0 then
+ begin num := beatsPerLine; denom := 0;
+ old_meter_word := meterChange(num,meterdenom,true);
+ end
+ else begin num := meternum; denom := pmdenom; end;
+ pmxMeter := toString(num) + ' ' + toString(meterdenom) +
+ ' ' + toString(pmnum) + ' ' + toString(denom);
+ end;
+ function sizecode(k: integer): string;
+ begin sizecode:='\mtxNormalSize';
+ case k of
+13: if musicsize=20 then sizecode:='\mtxTinySize' else sizecode:='\mtxSmallSize';
+16: if musicsize=20 then sizecode:='\mtxSmallSize';
+20: if musicsize=16 then sizecode:='\mtxLargeSize';
+24: if musicsize=20 then sizecode:='\mtxLargeSize' else sizecode:='\mtxHugeSize';
+29: sizecode:='\mtxHugeSize';
+ else error('Valid sizes are 13, 16, 20, 24, 29',print);
+ end;
+ end;
+begin
+ if composer_line <> '' then putline(composer_line);
+ if title_line <> '' then putline('\mtxTitleLine{'+title_line+'}');
+ putLine('---');
+ if instrumentNames and not redefined[indent] then fracindent:='0.12';
+ write(outfile, nstaves);
+ write(outfile, ' ', -ninstr);
+ stave[ninstr+1]:=nstaves+1;
+ for j:=ninstr downto 1 do write(outfile, ' ', stave[j+1] - stave[j]);
+ writeln(outfile, ' ', pmxMeter, ' ',xmtrnum0:8:5, ' ',n_sharps,
+ ' ', n_pages, ' ',n_systems, ' ',musicsize, ' ',fracindent);
+ for i:=1 to ninstr do if not instrumentNames then putLine('')
+ else putLine('\mtxInstrName{'+instr_name[ninstr+1-i]+'}');
+ clefs:='';
+ for i:=nclefs downto 1 do clefs:=clefs+clefcode[1+clefno(clef[i])];
+ putLine(clefs);
+ if texdir='' then texdir := './';
+ putLine(texdir);
+
+ pmx_preamble_done:=true; respace;
+
+ for j:=1 to ngroups do
+ writeln(outfile,'\\mtxGroup{'+toString(j)+'}{'
+ +toString(ninstr+1-group_start[j])+'}{'
+ +toString(ninstr+1-group_stop[j])+'}\');
+ for j:=1 to ninstr do
+ if (stave_size[j]<>unspec) then
+ putLine(
+ '\\mtxSetSize{'+toString(ninstr+1-j)+'}{'+sizecode(stave_size[j])+'}\');
+ if part_line <> '' then
+ begin putLine('Ti'); putLine(part_line); end;
+ if title_line <> '' then
+ begin putLine('Tt'); putLine('\mtxTitle'); end;
+ if composer_line <> '' then
+ begin putLine('Tc'); putLine('\mtxPoetComposer'); end;
+ if pmx_line <> '' then putLine(pmx_line);
+ doTenorClefs;
+ wipeCommands;
+end;
+
+function startString(voice: voice_index0): string;
+ var s, w: string;
+ j: voice_index;
+begin s:=start_line;
+ for j:=1 to voice do w:=getNextWord(s,dummy,';');
+ curtail(w,';'); if w<>'' then startString:=w+' ' else startString:=w;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/prepmx.c b/Build/source/utils/mtx/mtx-0.60d/prepmx.c
new file mode 100644
index 00000000000..ba186a63e13
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/prepmx.c
@@ -0,0 +1,887 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "prepmx.pas" */
+
+
+#include "p2c.h"
+
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+#ifndef PREAMBLE_H
+#include "preamble.h"
+#endif
+
+#ifndef LYRICS_H
+#include "lyrics.h"
+#endif
+
+#ifndef MTX_H
+#include "mtx.h"
+#endif
+
+#ifndef ANALYZE_H
+#include "analyze.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef STATUS_H
+#include "status.h"
+#endif
+
+#ifndef UPTEXT_H
+#include "uptext.h"
+#endif
+
+#ifndef NOTES_H
+#include "notes.h"
+#endif
+
+#ifndef MULTFILE_H
+#include "multfile.h"
+#endif
+
+#ifndef FILES_H
+#include "files.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+/* fpc mistakenly thinks CONTROL and GLOBALS are not used */
+
+/* CMO: addition/change by Christian Mondrup */
+
+/** M-Tx preprocessor to PMX Dirk Laurie */
+
+#define version "0.60d"
+#define version_date "<11 October 2008>"
+
+/** See file "Corrections" for updates later than those listed below
+*/
+
+/** Changes since 0.52b
+ Uses mtx.tex file
+ More than one # or % per word treated correctly in uptext
+ Better way of handling line numbers in lyrics
+*/
+
+/** To do next:
+ Take notice of recent improvements in musixtex, pmx and musixlyr
+{* Current bugs:
+{* Old bugs:
+ Does not check PMX syntax
+{* Weaknesses that may later cause bugs:
+ Decisions sometimes made on note, sometimes on scan
+ Can 'here' overrun?
+ Where does one note stop and the next begin?
+ See comment on '!' in uptext
+*/
+
+#define chord_flat 't'
+#define chord_left 'l'
+
+#define blind true
+#define visible false
+
+
+Static boolean last_bar;
+Static Char multibar[256];
+Static Char repeat_sign[256];
+Static short bar_of_line, bars_of_rest, rest_spacing;
+
+
+/* --------------- Bars and rests --------------- */
+
+Static Void writeRepeat(bar)
+Char *bar;
+{
+ Char repcode[256];
+ Char STR1[256];
+
+ if (*bar == '\0')
+ return;
+ *repcode = '\0';
+ if (!strcmp(bar, "||"))
+ strcpy(repcode, "Rd");
+ else if (!strcmp(bar, "|]"))
+ strcpy(repcode, "RD");
+ else if (!strcmp(bar, "|:"))
+ strcpy(repcode, "Rl");
+ else if (!strcmp(bar, ":|:"))
+ strcpy(repcode, "Rlr");
+ else if (!strcmp(bar, ":|"))
+ strcpy(repcode, "Rr");
+ else if (last_bar && !strcmp(bar, "|"))
+ strcpy(repcode, "Rb");
+ if (*repcode != '\0') {
+ sprintf(STR1, " %s", repcode);
+ putLine(STR1);
+ }
+ *bar = '\0';
+}
+
+
+Static Void supplyRests(voice)
+voice_index voice;
+{
+ Char STR2[4];
+ Char STR3[256];
+
+ if (multi_bar_rest) {
+ put(multibar, putspace);
+ return;
+ }
+ if (bar_of_line == 1 && pedanticWarnings()) {
+ printf("Bar %d Voice %d", bar_no, voice);
+ warning(" Filling missing voice with rests", !print);
+ }
+ if (pickup > 0)
+ put(rests(STR3, pickup, meterdenom, visible), nospace);
+ sprintf(STR2, "%s ", pause);
+ put(STR2, putspace);
+}
+
+
+Static Void countBars(note_)
+Char *note_;
+{
+ Char note[256];
+ short k, adjust;
+ short sign = 1;
+
+ strcpy(note, note_);
+ predelete(note, 2);
+ k = pos1('+', note);
+ if (k == 0) {
+ k = pos1('-', note);
+ if (k > 0)
+ sign = -1;
+ }
+ if (k > 0) {
+ note[k-1] = '/';
+ getTwoNums(note, &bars_of_rest, &adjust);
+ } else {
+ getNum(note, &bars_of_rest);
+ adjust = 0;
+ }
+ rest_spacing = adjust * sign + 14;
+}
+
+
+/* FIXME This procedure had a serious bug. It now has a smaller bug.
+ Basically there should be a test on whether a break between staves
+ is a break between instruments, in which case the procedure is (now)
+ right; or a break between staves of the same instrument, in which
+ case a '|' instead of a '&' should be output (as it was). If the Space
+ feature is not used, the bug does not show up. */
+Static Void putMBRest()
+{
+ stave_index i, FORLIM;
+ Char STR1[256];
+ Char STR2[256], STR3[256];
+
+ put("\\\\\\def\\atnextbar{\\znotes", nospace);
+ FORLIM = nstaves;
+ for (i = 1; i <= FORLIM; i++) {
+ sprintf(STR3, "\\mbrest{%s}{%s}0",
+ toString(STR1, bars_of_rest), toString(STR2, rest_spacing));
+ put(STR3, nospace);
+ if (i < nstaves)
+ put("&", nospace);
+ else
+ putLine("\\en}\\");
+ }
+ sprintf(STR3, "\\\\\\advance\\barno%s\\", toString(STR1, bars_of_rest - 1));
+ putLine(STR3);
+ bar_no += bars_of_rest - 1;
+}
+
+
+/* Local variables for processLine: */
+struct LOC_processLine {
+ voice_index voice;
+ Char chords[256], note[256], cutnote[256], pretex[256];
+ short ngrace, nmulti;
+ boolean no_chords, no_uptext;
+
+ short l;
+ boolean in_group;
+} ;
+
+Local Void output(note_, LINK)
+Char *note_;
+struct LOC_processLine *LINK;
+{
+ Char note[256];
+ Char STR2[256];
+
+ strcpy(note, note_);
+ if (*note != '\0')
+ { /* pretex is saved up until a spacing note or rest comes */
+ if (endsWith(note, "\\") && note[1] != '\\') {
+ curtail(note, '\\');
+ strcat(LINK->pretex, note);
+ *note = '\0';
+ return;
+ }
+ if (*LINK->pretex != '\0' && isNoteOrRest(note)) {
+ sprintf(note, "%s\\ %s", LINK->pretex, strcpy(STR2, note));
+ *LINK->pretex = '\0';
+ }
+ if (outlen > 0 && note[0] != ' ')
+ sprintf(note, " %s", strcpy(STR2, note));
+ put(note, nospace);
+ }
+ if (thisNote(LINK->voice) == nextvoice)
+ putLine("");
+}
+
+Local Void maybeDotted(note, LINK)
+Char *note;
+struct LOC_processLine *LINK;
+{
+ if (strlen(note) < 2)
+ return;
+ if (note[1] == '"') {
+ note[1] = note[0];
+ strcat(LINK->pretex, "\\mtxDotted");
+ }
+}
+
+/* Local variables for addChords: */
+struct LOC_addChords {
+ struct LOC_processLine *LINK;
+ Char nt[256], labels[256];
+ boolean tieme;
+ Char lab;
+ int5 pitches;
+} ;
+
+Local Void outChord(LINK)
+struct LOC_addChords *LINK;
+{
+ short k;
+ Char STR2[256];
+ short FORLIM;
+
+ if (*LINK->nt == '\0')
+ return;
+ LINK->tieme = (LINK->nt[0] == '{');
+ if (LINK->tieme)
+ predelete(LINK->nt, 1);
+ if (*LINK->nt == '\0' || LINK->nt[0] < 'a' || LINK->nt[0] > 'g') {
+ sprintf(STR2, "Must have a note name at the start of \"%s\", not \"%c\"",
+ LINK->nt, LINK->nt[0]);
+ error(STR2, print);
+ }
+ renewChordPitch(LINK->LINK->voice, LINK->nt);
+ sprintf(LINK->LINK->chords + strlen(LINK->LINK->chords), " z%s", LINK->nt);
+ *LINK->nt = '\0';
+ FORLIM = strlen(LINK->labels);
+ for (k = 0; k <= FORLIM - 1; k++) {
+ if (chordPitch(LINK->LINK->voice) == LINK->pitches[k]) {
+ sprintf(LINK->LINK->chords + strlen(LINK->LINK->chords), " s%ct",
+ LINK->labels[k]);
+ LINK->labels[k] = ' ';
+ }
+ }
+ if (LINK->tieme) {
+ chordTie(LINK->LINK->voice, &LINK->lab);
+ sprintf(LINK->LINK->chords + strlen(LINK->LINK->chords), " s%ct",
+ LINK->lab);
+ }
+}
+
+Local Void addChords(LINK)
+struct LOC_processLine *LINK;
+{
+ struct LOC_addChords V;
+ Char w[256];
+ short j = 1;
+ short mus_line;
+ paragraph_index0 chord_line;
+ boolean arpeggio;
+ Char STR1[256];
+ short FORLIM;
+
+ V.LINK = LINK;
+ saveStatus(LINK->voice);
+ getChordTies(LINK->voice, V.pitches, V.labels);
+ *LINK->chords = '\0';
+ chord_line = chordLineNo(LINK->voice);
+ if (chord_line == 0)
+ LINK->no_chords = true;
+ if (LINK->no_chords)
+ return;
+ GetNextWord(w, P[chord_line-1], blank, dummy);
+ sprintf(STR1, "%c", barsym);
+ if (!strcmp(w, STR1) || *w == '\0')
+ LINK->no_chords = true;
+ sprintf(STR1, "%c", tilde);
+ if (!strcmp(w, STR1) || LINK->no_chords)
+ return;
+ mus_line = line_no;
+ line_no = orig_line_no[chord_line-1];
+ arpeggio = (w[0] == '?');
+ if (arpeggio) {
+ strcpy(LINK->chords, " ?");
+ predelete(w, 1);
+ }
+ *V.nt = '\0';
+ while (j <= strlen(w)) {
+ if (w[j-1] == '{' || strcmp(V.nt, "{") && w[j-1] >= 'a' && w[j-1] <= 'g')
+ outChord(&V);
+ else if (w[j-1] == chord_flat)
+ w[j-1] = 'f';
+ else if (w[j-1] == chord_left)
+ w[j-1] = 'e';
+ sprintf(V.nt + strlen(V.nt), "%c", w[j-1]);
+ j++;
+ }
+ if (*V.nt != '\0')
+ outChord(&V);
+ if (arpeggio)
+ strcat(LINK->chords, " ?");
+ strcat(LINK->note, LINK->chords);
+ FORLIM = strlen(V.labels);
+ for (j = 0; j <= FORLIM - 1; j++) {
+ if (V.labels[j] != ' ')
+ error("Tie on chord note started but not finished", print);
+ }
+ line_no = mus_line;
+}
+
+Local Char *processOther(Result, note_, LINK)
+Char *Result;
+Char *note_;
+struct LOC_processLine *LINK;
+{
+ Char note[256];
+
+ strcpy(note, note_);
+ switch (thisNote(LINK->voice)) {
+
+ case other:
+ if (note[0] == grace_group) {
+ if (strlen(note) == 1)
+ LINK->ngrace = 1;
+ else
+ LINK->ngrace = pos1(note[1], digits);
+ if (LINK->ngrace > 0)
+ LINK->ngrace--;
+ }
+ break;
+
+ /* For a zword, take note of pitch but do not change the contents */
+ /* Add spurious duration because repich expects duration to be present */
+ case zword:
+ strcpy(LINK->cutnote, note);
+ predelete(LINK->cutnote, 1);
+ insertChar('4', LINK->cutnote, 2);
+ checkOctave(LINK->voice, LINK->cutnote);
+ renewPitch(LINK->voice, LINK->cutnote);
+ break;
+
+ case lyrtag:
+ extractLyrtag(LINK->voice, note);
+ break;
+
+ case rbrac:
+ endBeam(LINK->voice);
+ break;
+
+ case rparen:
+ case rlparen:
+ endSlur(LINK->voice, note);
+ break;
+
+ case lbrac:
+ beginBeam(LINK->voice, note);
+ break;
+
+ case lparen:
+ maybeDotted(note, LINK);
+ beginSlur(LINK->voice, note);
+ break;
+
+ case mword:
+ error3(LINK->voice, "Meter change must be the first word of its bar");
+ break;
+
+ case atword:
+ lyricsAdjust(LINK->voice, note);
+ break;
+ }
+ return strcpy(Result, note);
+}
+
+Local Void lookahead(LINK)
+struct LOC_processLine *LINK;
+{
+ Char STR2[256];
+ Char STR3[256];
+
+ while (bind_left[(long)nextNote(LINK->voice)])
+ sprintf(LINK->note + strlen(LINK->note), " %s",
+ processOther(STR2, getMusicWord(STR3, LINK->voice), LINK));
+}
+
+Local Void processNote_(LINK)
+struct LOC_processLine *LINK;
+{
+ if (hasVerseNumber(LINK->voice))
+ strcat(LINK->pretex, "\\mtxVerse");
+ LINK->l = pos1(multi_group, LINK->note);
+ if (LINK->l > 0)
+ scan1(LINK->note, LINK->l + 1, &LINK->nmulti);
+ activateBeamsAndSlurs(LINK->voice);
+ LINK->in_group = false;
+ if (LINK->ngrace > 0) {
+ LINK->in_group = true;
+ LINK->ngrace--;
+ } else {
+ if (LINK->nmulti > 0) {
+ LINK->in_group = true;
+ LINK->nmulti--;
+ }
+ }
+ checkOctave(LINK->voice, LINK->note);
+ renewPitch(LINK->voice, LINK->note);
+ if (!LINK->in_group) {
+ resetDuration(LINK->voice, durationCode(LINK->note));
+ markDebeamed(LINK->voice, LINK->note);
+ }
+ lookahead(LINK);
+ getSyllable(LINK->voice, LINK->pretex);
+ addUptext(LINK->voice, &LINK->no_uptext, LINK->pretex);
+ addChords(LINK);
+}
+
+
+/* ---------------------------------------------------------------- */
+
+Static Void processLine(voice_, bar_no)
+voice_index voice_;
+short bar_no;
+{
+ struct LOC_processLine V;
+ paragraph_index par_line;
+ Char STR2[256];
+
+ V.voice = voice_;
+ *V.pretex = '\0';
+ V.no_chords = false;
+ V.no_uptext = false;
+ par_line = musicLineNo(V.voice);
+ V.nmulti = 0;
+ V.ngrace = 0;
+ line_no = orig_line_no[par_line-1];
+ do {
+ getMusicWord(V.note, V.voice);
+ if (*V.note == '\0')
+ return;
+ if (debugMode())
+ printf("%d %s\n", V.voice, V.note);
+ switch (thisNote(V.voice)) {
+
+ case rword:
+ if (multi_bar_rest) {
+ countBars(V.note);
+ strcpy(V.note, multibar);
+ if (uptextOnRests())
+ addUptext(V.voice, &V.no_uptext, V.pretex);
+ } else {
+ V.l = pos1(multi_group, V.note);
+ if (V.l > 0)
+ scan1(V.note, V.l + 1, &V.nmulti);
+ if (V.nmulti > 0) {
+ V.in_group = true;
+ V.nmulti--;
+ }
+ if (uptextOnRests())
+ addUptext(V.voice, &V.no_uptext, V.pretex);
+ if (!isPause(V.note))
+ resetDuration(V.voice, durationCode(V.note));
+ }
+ break;
+
+ case abcdefg:
+ processNote_(&V);
+ break;
+
+ case barword:
+ if (V.voice == nvoices) {
+ if (endOfBar(V.voice, bar_no))
+ strcpy(repeat_sign, V.note);
+ else
+ writeRepeat(V.note);
+ }
+ sprintf(STR2, "%c", barsym);
+ if (strcmp(V.note, STR2))
+ *V.note = '\0';
+ V.no_chords = false;
+ break;
+
+ case FirstOnly:
+ if (V.voice != nvoices)
+ *V.note = '\0';
+ else
+ strcpy(V.note, processOther(STR2, V.note, &V));
+ break;
+
+ default:
+ strcpy(V.note, processOther(STR2, V.note, &V));
+ break;
+ }
+ output(V.note, &V);
+ } while (!endOfBar(V.voice, bar_no));
+ if (!V.no_chords)
+ skipChordBar(V.voice);
+}
+
+
+/* ------------------------------------------------------------------- */
+
+Static Void getMeterChange(voice, new_meter)
+voice_index voice;
+Char *new_meter;
+{
+ short pn1, pn2;
+ Char w[256], new_command[256];
+
+ if (nextNote(voice) != mword)
+ return;
+ getMusicWord(w, voice);
+ getMeter(w, &meternum, &meterdenom, &pn1, &pn2);
+ full_bar = meternum * (64 / meterdenom);
+ /* CMO: process denominator value with function PMXmeterdenom */
+ meterWord(new_command, meternum, PMXmeterdenom(meterdenom), pn1, pn2);
+ if (*new_meter != '\0' && strcmp(new_meter, new_command))
+ error3(voice, "The same meter change must appear in all voices");
+ strcpy(new_meter, new_command);
+}
+
+
+/* Local variables for musicParagraph: */
+struct LOC_musicParagraph {
+ Char new_meter[256];
+} ;
+
+Local Void putPMXlines(LINK)
+struct LOC_musicParagraph *LINK;
+{
+ paragraph_index i, FORLIM;
+
+ FORLIM = para_len;
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (startsWith(P[i], double_comment)) {
+ predelete(P[i], 2);
+ putLine(P[i]);
+ strcpy(P[i], "%");
+ }
+ }
+}
+
+Local Void processOneBar(LINK)
+struct LOC_musicParagraph *LINK;
+{
+ paragraph_index0 m, cm;
+ short n1, n2;
+ voice_index voice, cvoice;
+ boolean ignore_voice;
+ boolean wrote_repeat = false;
+ boolean alone;
+ Char STR2[256];
+ Char STR3[256];
+
+ if (bar_of_line > 1) {
+ sprintf(STR3, "%cBar %s", comment, toString(STR2, bar_no));
+ putLine(STR3);
+ }
+ last_bar = (bar_of_line == nbars && final_paragraph);
+ if (last_bar && !strcmp(repeat_sign, "|"))
+ *repeat_sign = '\0';
+ writeRepeat(repeat_sign);
+ *LINK->new_meter = '\0';
+ for (voice = nvoices; voice >= 1; voice--) {
+ if (musicLineNo(voice) > 0) {
+ gotoBar(voice, bar_of_line);
+ getMeterChange(voice, LINK->new_meter);
+ }
+ }
+ if (last_bar && *LINK->new_meter == '\0' && nleft > pickup && meternum > 0)
+ meterChange(LINK->new_meter, nleft, 64, true);
+ if (*LINK->new_meter != '\0')
+ putLine(LINK->new_meter);
+ if (multi_bar_rest) {
+ n1 = meternum * 64;
+ n2 = meterdenom;
+ cancel(&n1, &n2, 1);
+ rests(multibar, n1, n2, blind);
+ }
+ for (voice = nvoices; voice >= 1; voice--) {
+ ignore_voice = !selected[voice-1];
+ cvoice = companion(voice);
+ m = musicLineNo(voice);
+ cm = musicLineNo(cvoice);
+ alone = (voice == cvoice || m > 0 && cm == 0 ||
+ m == 0 && cm == 0 && voice < cvoice || !selected[cvoice-1]);
+ if (selected[voice-1]) {
+ if (m > 0)
+ processLine(voice, bar_of_line);
+ else if (alone)
+ supplyRests(voice);
+ else
+ ignore_voice = true;
+ if (last_bar && *repeat_sign != '\0' && !wrote_repeat) {
+ writeRepeat(repeat_sign);
+ wrote_repeat = true;
+ }
+ if (!ignore_voice) {
+ if (alone || voicePos(voice) == 1)
+ putLine(" /");
+ else
+ putLine(" //");
+ }
+ }
+ }
+ if (multi_bar_rest)
+ putMBRest();
+ bar_no++;
+ pickup = 0;
+ putLine("");
+}
+
+Local Void putMeter(new_meter_word, LINK)
+Char *new_meter_word;
+struct LOC_musicParagraph *LINK;
+{
+ if (strcmp(new_meter_word, old_meter_word))
+ putLine(new_meter_word);
+ strcpy(old_meter_word, new_meter_word);
+}
+
+
+Static Void musicParagraph()
+{
+ struct LOC_musicParagraph V;
+ voice_index0 j, nvoice;
+ Char lyrassign[256];
+ Char STR1[256];
+ Char STR2[256];
+ Char STR3[256], STR4[256], STR5[256];
+ voice_index0 FORLIM;
+ short FORLIM1;
+
+ paragraphSetup(&nvoice);
+ if (nvoice == 0) {
+ nonMusic();
+ return;
+ }
+ if (nvoice > nvoices) {
+ if (nvoice == 0)
+ error("No voices! Did you remember to to supply a Style?", !print);
+ sprintf(STR4, "Paragraph has %s voices but Style allows only %s",
+ toString(STR1, nvoice), toString(STR2, nvoices));
+ error(STR4, !print);
+ return;
+ }
+ if (first_paragraph)
+ includeStartString();
+ if (pmx_preamble_done && (!final_paragraph || nvoice > 0)) {
+ sprintf(STR5, "%c Paragraph %s line %s bar %s",
+ comment, toString(STR1, paragraph_no),
+ toString(STR2, orig_line_no[0]), toString(STR3, bar_no));
+ putLine(STR5);
+ }
+ testParagraph();
+ rememberDurations();
+ if (beVerbose())
+ describeParagraph();
+ /* ---- Knowing the score, we can start setting music ---------------- */
+ if (!pmx_preamble_done) {
+ doPMXpreamble();
+ sprintf(STR3, "%c Paragraph %s line %s bar ",
+ comment, toString(STR1, paragraph_no),
+ toString(STR2, orig_line_no[0]));
+ put(STR3, putspace);
+ if (pickup > 0)
+ putLine("0");
+ else
+ putLine("1");
+ }
+ putPMXlines(&V);
+ if (must_restyle)
+ restyle();
+ if (some_vocal && (nvoice > 0 || !final_paragraph)) {
+ FORLIM = ninstr;
+ for (j = 1; j <= FORLIM; j++) {
+ assignLyrics(j, lyrassign);
+ if (*lyrassign != '\0') {
+ sprintf(STR2, "\\\\%s\\", lyrassign);
+ putLine(STR2);
+ }
+ }
+ }
+ if (must_respace)
+ respace();
+ if (meternum == 0)
+ putMeter(meterChange(STR2, beatsPerLine(), meterdenom, true), &V);
+ if (nleft > 0)
+ nbars++;
+ if (nbars == 0 && multi_bar_rest)
+ nbars = 1;
+ FORLIM1 = nbars;
+ for (bar_of_line = 1; bar_of_line <= FORLIM1; bar_of_line++)
+ processOneBar(&V);
+ restoreDurations();
+}
+
+
+/* ----------------------------------------------------------------------- */
+
+Static boolean no_commands_yet;
+
+
+Static Void doMusic()
+{
+ Char STR1[256], STR2[256];
+ Char STR4[256];
+
+ first_paragraph = true;
+ pmx_preamble_done = false;
+ bar_no = 1;
+ *repeat_sign = '\0';
+ must_respace = false;
+ must_restyle = false;
+ do {
+ final_paragraph = endOfInfile();
+ if (para_len > 0 && !ignore_input && thisCase()) {
+ if (no_commands_yet) {
+ interpretCommands();
+ printFeatures(false);
+ one_beat = 64 / meterdenom;
+ full_bar = meternum * one_beat;
+ if (nvoices > standardPMXvoices) {
+ sprintf(STR4, "You have %s voices; standard PMX can only handle %s",
+ toString(STR1, nvoices), toString(STR2, standardPMXvoices));
+ warning(STR4, !print);
+ }
+ initMTX();
+ initUptext();
+ initStatus();
+ initLyrics();
+ no_commands_yet = false;
+ }
+ if (startsWithBracedWord(P[0]))
+ lyricsParagraph();
+ else {
+ musicParagraph();
+ first_paragraph = false;
+ writeRepeat(repeat_sign);
+ }
+ }
+ readParagraph(P, orig_line_no, &para_len);
+ } while (para_len != 0);
+}
+
+
+Static boolean control_paragraph, no_report_errors;
+
+
+Static boolean isControlParagraph(P, para_len)
+Char (*P)[256];
+paragraph_index para_len;
+{
+ paragraph_index0 commands = 0, labels = 0, voices = 0, guff = 0;
+ paragraph_index0 i;
+ Char w[256];
+
+/* p2c: prepmx.pas: Note: Eliminated unused assignment statement [338] */
+ for (i = 0; i <= para_len - 1; i++) {
+ if (!startsWith(P[i], "%")) {
+ NextWord(w, P[i], ' ', ':');
+ if (!endsWith(w, ":"))
+ guff++;
+ else if (strlen(w) < 3 || findVoice(w) > 0)
+ voices++;
+ else if (isCommand(w))
+ commands++;
+ else
+ labels++;
+ }
+ }
+ if (voices + guff > commands)
+ return false;
+ return true;
+}
+
+
+Static Void topOfPMXfile()
+{
+ Char STR2[24];
+ Char STR3[34];
+
+ putLine("---");
+ sprintf(STR2, "\\def\\mtxversion{%s}", version);
+ putLine(STR2);
+ sprintf(STR3, "\\def\\mtxdate{%s}", version_date);
+ putLine(STR3);
+ putLine("\\input mtx");
+}
+
+
+main(argc, argv)
+int argc;
+Char *argv[];
+{ /* ---- Main program ------------------------ */
+ PASCAL_MAIN(argc, argv);
+ strcpy(this_version, version);
+ strcpy(this_version_date, version_date);
+ printf("==> This is M-Tx %s (Music from TeXt) %s\n", version, version_date);
+ mtxLevel(version);
+ OpenFiles();
+ no_commands_yet = true;
+ preambleDefaults();
+ no_report_errors = false;
+ topOfPMXfile();
+ do {
+ readParagraph(P, orig_line_no, &para_len);
+ control_paragraph = isControlParagraph(P, para_len);
+ if (control_paragraph) {
+ augmentPreamble(no_report_errors);
+ no_report_errors = true;
+ if (para_len == 0)
+ error("No music paragraphs!", !print);
+ }
+ } while (control_paragraph);
+ doPreamble();
+ doMusic();
+ if (!pmx_preamble_done)
+ error("No music paragraphs!", !print);
+ putLine("% Coded by M-Tx");
+ CloseFiles();
+ printf("PrePMX done. Now run PMX.\n");
+ _Escape(0);
+ exit(EXIT_SUCCESS);
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/prepmx.pas b/Build/source/utils/mtx/mtx-0.60d/prepmx.pas
new file mode 100644
index 00000000000..0b246e04f7d
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/prepmx.pas
@@ -0,0 +1,444 @@
+program prepmx;
+uses control, strings, globals, preamble, lyrics, mtx, analyze,
+ mtxline, status, uptext, notes, files, utility;
+{ fpc mistakenly thinks CONTROL and GLOBALS are not used }
+
+{* M-Tx preprocessor to PMX Dirk Laurie }
+const version = '0.60';
+ version_date = '<16 March 2005>';
+
+{* See file "Corrections" for updates later than those listed below
+}
+
+{* Changes since 0.52b
+ Uses mtx.tex file
+ More than one # or % per word treated correctly in uptext
+ Better way of handling line numbers in lyrics
+}
+
+{* To do next:
+ Take notice of recent improvements in musixtex, pmx and musixlyr
+{* Current bugs:
+{* Old bugs:
+ Does not check PMX syntax
+{* Weaknesses that may later cause bugs:
+ Decisions sometimes made on note, sometimes on scan
+ Can 'here' overrun?
+ Where does one note stop and the next begin?
+ See comment on '!' in uptext
+}
+ chord_flat = 't';
+ chord_left = 'l';
+ blind = true;
+ visible = false;
+
+var
+ last_bar: boolean;
+ multibar: string;
+ repeat_sign: string;
+ bar_of_line, bars_of_rest, rest_spacing: integer;
+
+{ --------------- Bars and rests --------------- }
+
+procedure writeRepeat(var bar: string);
+ var repcode: string;
+ begin if bar='' then exit;
+ repcode:='';
+ if bar='||' then repcode:='Rd'
+ else if (bar='|]') then repcode:='RD'
+ else if bar='|:' then repcode:='Rl'
+ else if bar=':|:' then repcode:='Rlr'
+ else if bar=':|' then repcode:='Rr'
+ else if last_bar and (bar='|') then repcode:='Rb';
+ if repcode<>'' then putLine(' '+repcode);
+ bar:='';
+ end;
+
+procedure supplyRests(voice: voice_index);
+begin
+ if multi_bar_rest then
+ begin put(multibar,putspace); exit; end;
+ if (bar_of_line=1) and pedanticWarnings then
+ begin write('Bar ', bar_no, ' Voice ', voice);
+ warning(' Filling missing voice with rests',not print);
+ end;
+ if pickup>0 then
+ put(rests(pickup,meterdenom,visible),nospace);
+ put(pause+' ',putspace);
+end;
+
+procedure countBars(note: string);
+ var k, adjust, sign: integer;
+begin predelete(note,2); k:=pos1('+',note); sign:=1;
+ if k=0 then
+ begin k:=pos1('-',note); if k>0 then sign:=-1; end;
+ if k>0 then
+ begin note[k]:='/'; getTwoNums(note,bars_of_rest,adjust); end
+ else begin getNum(note,bars_of_rest); adjust:=0; end;
+ rest_spacing := 14 + adjust*sign;
+end;
+
+(* FIXME This procedure had a serious bug. It now has a smaller bug.
+ Basically there should be a test on whether a break between staves
+ is a break between instruments, in which case the procedure is (now)
+ right; or a break between staves of the same instrument, in which
+ case a '|' instead of a '&' should be output (as it was). If the Space
+ feature is not used, the bug does not show up. *)
+procedure putMBRest;
+ var i: stave_index;
+begin
+ put('\\\def\atnextbar{\znotes',nospace);
+ for i:=1 to nstaves do
+ begin put('\mbrest{'+toString(bars_of_rest)+'}{'+toString(rest_spacing)
+ +'}0',nospace);
+ if i<nstaves then put('&',nospace) else putLine('\en}\');
+ end;
+ putline('\\\advance\barno'+toString(bars_of_rest-1)+'\');
+ inc(bar_no,bars_of_rest-1);
+end;
+
+{ ---------------------------------------------------------------- }
+
+procedure processLine(voice: voice_index; bar_no: integer);
+ var chords, note, cutnote, pretex: string;
+ par_line: paragraph_index;
+ ngrace, nmulti: integer;
+ no_chords, no_uptext: boolean;
+
+ procedure output(note: string);
+ begin if note<>'' then
+ begin { pretex is saved up until a spacing note or rest comes }
+ if endsWith(note,'\') and (note[2]<>'\') then
+ begin curtail(note,'\'); pretex:=pretex+note; note:=''; exit end;
+ if (pretex<>'') and isNoteOrRest(note) then
+ begin note:=pretex+'\ '+note; pretex:='' end;
+ if (outlen>0) and (note[1]<>' ') then note:=' '+note;
+ put(note,nospace);
+ end;
+ if thisNote(voice)=nextvoice then putLine('');
+ end;
+
+ procedure maybeDotted(var note: string);
+ begin if length(note)<2 then exit;
+ if note[2]='"' then
+ begin note[2]:=note[1]; pretex:=pretex+'\mtxDotted' end
+ end;
+
+ procedure addChords;
+ var w, nt, labels: string;
+ j, mus_line: integer;
+ chord_line: paragraph_index0;
+ arpeggio, tieme: boolean;
+ lab: char;
+ pitches: int5;
+ procedure outChord;
+ var k: integer;
+ begin if nt='' then exit; tieme:=nt[1]='{'; if tieme then predelete(nt,1);
+ if (nt='') or (nt[1]<'a') or (nt[1]>'g') then
+ error('Must have a note name at the start of "'+nt
+ +'", not "'+nt[1]+'"',print);
+ renewChordPitch(voice,nt);
+ chords := chords+' z'+nt; nt:='';
+ for k:=1 to length(labels) do if chordPitch(voice)=pitches[k] then
+ begin chords:=chords+' s'+labels[k]+'t'; labels[k]:=' ' end;
+ if tieme then begin chordTie(voice,lab); chords:=chords+' s'+lab+'t' end
+ end;
+ begin saveStatus(voice);
+ getChordTies(voice, pitches, labels);
+ chords:=''; chord_line:=chordLineNo(voice);
+ if chord_line=0 then no_chords:=true;
+ if no_chords then exit;
+ w := getNextWord(P[chord_line],blank,dummy);
+ if (w=barsym) or (w='') then no_chords:=true;
+ if (w=tilde) or no_chords then exit;
+ mus_line:=line_no; line_no:=orig_line_no[chord_line];
+ arpeggio := w[1]='?'; if arpeggio then
+ begin chords:=' ?'; predelete(w,1); end;
+ j:=1; nt:='';
+ while j<=length(w) do
+ begin
+ if (w[j]='{') or ((nt<>'{') and (w[j]>='a') and (w[j]<='g')) then outChord
+ else if w[j]=chord_flat then w[j]:='f'
+ else if w[j]=chord_left then w[j]:='e';
+ nt:=nt+w[j]; j:=j+1
+ end;
+ if nt<>'' then outChord; if arpeggio then chords:=chords+' ?';
+ note:=note+chords;
+ for j:=1 to length(labels) do if labels[j]<>' ' then
+ error('Tie on chord note started but not finished',print);
+ line_no:=mus_line;
+ end;
+
+ function processOther(note: string): string;
+ begin
+ case thisNote(voice) of
+other: if note[1]=grace_group then
+ begin if length(note)=1 then ngrace:=1
+ else ngrace := pos1(note[2],digits);
+ if ngrace>0 then dec(ngrace);
+ end;
+{ For a zword, take note of pitch but do not change the contents }
+{ Add spurious duration because repich expects duration to be present }
+zword: begin cutnote:=note; predelete(cutnote,1); insertchar('4',cutnote,2);
+ checkOctave(voice,cutnote); renewPitch(voice,cutnote)
+ end;
+lyrtag: extractLyrtag(voice,note);
+rbrac: endBeam(voice);
+rparen, rlparen: endSlur(voice,note);
+lbrac: beginBeam(voice,note);
+lparen: begin maybeDotted(note); beginSlur(voice,note); end;
+mword: error3(voice,'Meter change must be the first word of its bar');
+atword: lyricsAdjust(voice, note);
+ end;
+ processOther:=note;
+ end;
+
+ procedure lookahead;
+ begin while bind_left[nextNote(voice)] do
+ note:=note+' '+processOther(getMusicWord(voice));
+ end;
+
+ var l: integer;
+ in_group: boolean;
+
+ procedure processNote;
+ begin
+ begin if hasVerseNumber(voice) then pretex:=pretex+'\mtxVerse';
+ l := pos1(multi_group,note);
+ if l>0 then scan1(note,l+1,nmulti);
+ activateBeamsAndSlurs(voice);
+ in_group:=false;
+ if ngrace>0 then begin in_group:=true; dec(ngrace) end else
+ if nmulti>0 then begin in_group:=true; dec(nmulti); end;
+ checkOctave(voice,note); renewPitch(voice,note);
+ if not in_group then
+ begin resetDuration(voice,durationCode(note)); markDebeamed(voice,note) end;
+ lookahead; getSyllable(voice,pretex);
+ addUptext(voice, no_uptext, pretex);
+ addChords;
+ end;
+ end;
+
+begin
+ pretex:=''; no_chords:=false; no_uptext := false;
+ par_line:=musicLineNo(voice);
+ nmulti :=0; ngrace := 0; line_no:=orig_line_no[par_line];
+ repeat note:=getMusicWord(voice); if note='' then exit;
+ if debugMode then writeln(voice,' ',note);
+ case thisNote(voice) of
+ rword: begin if multi_bar_rest then
+ begin countBars(note); note:=multibar;
+ if uptextOnRests then
+ addUptext(voice, no_uptext, pretex);
+ end
+ else begin
+ l := pos1(multi_group,note);
+ if l>0 then scan1(note,l+1,nmulti);
+ if nmulti>0 then begin in_group:=true; dec(nmulti); end;
+ if uptextOnRests then
+ addUptext(voice, no_uptext, pretex);
+ if not isPause(note) then resetDuration(voice,durationCode(note));
+ end
+ end;
+ abcdefg: processNote;
+ barword: begin
+ if voice=nvoices then
+ if endOfBar(voice,bar_no) then repeat_sign := note
+ else writeRepeat(note);
+ if note<>barsym then note:='';
+ no_chords:=false;
+ end;
+ FirstOnly: if voice<>nvoices then note:='' else
+ note:=processOther(note);
+ else note:=processOther(note);
+ end;
+ output(note);
+ until endOfBar(voice,bar_no);
+ if not no_chords then skipChordBar(voice);
+end;
+
+{ ------------------------------------------------------------------- }
+
+procedure getMeterChange(voice: voice_index; var new_meter: string);
+ var pn1, pn2: integer;
+ w, new_command: string;
+begin if nextNote(voice)<>mword then exit;
+ w:=getMusicWord(voice);
+ getMeter(w, meternum, meterdenom, pn1, pn2);
+ full_bar := meternum*(64 div meterdenom);
+ new_command := meterWord(meternum, meterdenom, pn1, pn2);
+ if (new_meter<>'') and (new_meter<>new_command)
+ then error3(voice,'The same meter change must appear in all voices');
+ new_meter:=new_command;
+end;
+
+procedure musicParagraph;
+ var j, nvoice: voice_index0;
+ new_meter, lyrassign: string;
+
+ procedure putPMXlines;
+ var i: paragraph_index;
+ begin for i:=1 to para_len do
+ if startsWith(P[i],double_comment) then
+ begin predelete(P[i],2); putLine(P[i]); P[i]:='%'; end;
+ end;
+
+ procedure processOneBar;
+ var m, cm: paragraph_index0;
+ n1, n2: integer;
+ voice, cvoice: voice_index;
+ ignore_voice, wrote_repeat, alone: boolean;
+ begin
+ if bar_of_line>1 then putLine(comment+'Bar '+toString(bar_no));
+ last_bar := (bar_of_line=nbars) and final_paragraph;
+ if last_bar and (repeat_sign='|') then repeat_sign:='';
+ writeRepeat(repeat_sign); new_meter := '';
+ for voice:=nvoices downto 1 do
+ if musicLineNo(voice)>0 then
+ begin gotoBar(voice,bar_of_line); getMeterChange(voice,new_meter);
+ end;
+ if last_bar and (new_meter='') and (nleft>pickup) and (meternum>0) then
+ new_meter := meterChange(nleft,64,true);
+ if new_meter<>'' then putLine(new_meter);
+ wrote_repeat := false; if multi_bar_rest then
+ begin n1:=64*meternum; n2:=meterdenom; cancel(n1,n2,1);
+ multibar:=rests(n1,n2,blind);
+ end;
+ for voice:=nvoices downto 1 do
+ begin ignore_voice:=not selected[voice]; cvoice:=companion(voice);
+ m:=musicLineNo(voice); cm:=musicLineNo(cvoice);
+ alone:=(voice=cvoice) or ((m>0) and (cm=0))
+ or ((m=0) and (cm=0) and (voice<cvoice)) or not selected[cvoice];
+ if selected[voice] then
+ begin
+ if m>0 then processLine(voice,bar_of_line)
+ else if alone then supplyRests(voice) else ignore_voice:=true;
+ if last_bar and (repeat_sign<>'') and not wrote_repeat then
+ begin writeRepeat(repeat_sign); wrote_repeat := true; end;
+ if not ignore_voice then
+ if alone or (voicePos(voice)=1) then putLine(' /')
+ else putLine(' //');
+ end;
+ end;
+ if multi_bar_rest then putMBRest;
+ inc(bar_no); pickup:=0; putLine('');
+ end;
+
+ procedure putMeter(new_meter_word: string);
+ begin if new_meter_word<>old_meter_word then putLine(new_meter_word);
+ old_meter_word := new_meter_word;
+ end;
+
+begin
+ paragraphSetup(nvoice);
+ if nvoice=0 then begin nonMusic; exit end
+ else if nvoice>nvoices then
+ begin if nvoice=0 then
+ error('No voices! Did you remember to to supply a Style?',not print);
+ error('Paragraph has '+toString(nvoice)+
+ ' voices but Style allows only '+toString(nvoices),not print); exit;
+ end;
+ if first_paragraph then includeStartString;
+ if pmx_preamble_done and (not final_paragraph or (nvoice>0)) then
+ putLine(comment +' Paragraph ' + toString(paragraph_no) +
+ ' line ' + toString(orig_line_no[1]) + ' bar ' + toString(bar_no));
+ testParagraph; rememberDurations;
+ if beVerbose then describeParagraph;
+ { ---- Knowing the score, we can start setting music ---------------- }
+ if not pmx_preamble_done then
+ begin doPMXpreamble;
+ put( comment + ' Paragraph ' + toString(paragraph_no) + ' line ' +
+ toString(orig_line_no[1]) + ' bar ',putspace);
+ if pickup>0 then putLine('0') else putLine('1');
+ end;
+ putPMXlines;
+ if must_restyle then restyle;
+ if some_vocal and ((nvoice>0) or not final_paragraph) then
+ for j:=1 to ninstr do
+ begin assignLyrics(j,lyrassign);
+ if lyrassign<>'' then putLine('\\'+lyrassign+'\');
+ end;
+ if must_respace then respace;
+ if (meternum=0) then putMeter(meterChange(beatsPerLine,meterdenom,true));
+ if nleft > 0 then inc(nbars);
+ if (nbars=0) and multi_bar_rest then nbars:=1;
+ for bar_of_line:=1 to nbars do
+ processOneBar;
+ restoreDurations;
+end;
+
+{ ----------------------------------------------------------------------- }
+
+var no_commands_yet: boolean;
+
+procedure doMusic;
+begin first_paragraph:=true; pmx_preamble_done:=false; bar_no:=1;
+ repeat_sign:=''; must_respace:=false; must_restyle:=false;
+ repeat final_paragraph := endOfInfile;
+ if (para_len>0) and not ignore_input and thisCase then
+ begin if no_commands_yet then
+ begin interpretCommands; printFeatures(false);
+ one_beat := 64 div meterdenom; full_bar := meternum*one_beat;
+ if nvoices>standardPMXvoices then warning('You have '
+ +toString(nvoices)+' voices; standard PMX can only handle '
+ +toString(standardPMXvoices),not print);
+ initMTX; initUptext; initStatus; initLyrics;
+ no_commands_yet:=false
+ end;
+ if startsWithBracedWord(P[1]) then lyricsParagraph else
+ begin musicParagraph; first_paragraph:=false;
+ writeRepeat(repeat_sign);
+ end
+ end;
+ readParagraph(P,orig_line_no,para_len);
+ until para_len=0;
+end;
+
+var control_paragraph, no_report_errors: boolean;
+
+function isControlParagraph (var P: paragraph; para_len: paragraph_index)
+ : boolean;
+ var commands, labels, voices, guff, i: paragraph_index0;
+ w: string;
+begin isControlParagraph:=true; commands:=0; labels:=0; voices:=0; guff:=0;
+ for i:=1 to para_len do
+ if not (startsWith(P[i],'%')) then
+ begin w:=nextWord(P[i],' ',':');
+ if not endsWith(w,':') then inc(guff)
+ else if (length(w)<3) or (findVoice(w)>0) then inc(voices)
+ else if isCommand(w) then inc(commands)
+ else inc(labels)
+ end;
+ if (voices+guff>commands) then isControlParagraph:=false
+end;
+
+procedure topOfPMXfile;
+begin
+ putLine('---');
+ putLine('\def\mtxversion{'+version+'}');
+ putline('\def\mtxdate{'+version_date+'}');
+ putline('\input mtx');
+end;
+
+begin { ---- Main program ------------------------ }
+ this_version := version; this_version_date := version_date;
+ writeln ('==> This is M-Tx ' + version + ' (Music from TeXt) ' +
+ version_date );
+ mtxLevel(version); OpenFiles; no_commands_yet:=true; preambleDefaults;
+ no_report_errors:=false;
+ topOfPMXfile;
+ repeat readParagraph(P,orig_line_no,para_len);
+ control_paragraph:=isControlParagraph(P,para_len);
+ if control_paragraph then
+ begin augmentPreamble(no_report_errors);
+ no_report_errors:=true;
+ if para_len=0 then error('No music paragraphs!',not print)
+ end
+ until not control_paragraph;
+ doPreamble; doMusic;
+ if not pmx_preamble_done then error('No music paragraphs!',not print);
+ putline('% Coded by M-Tx');
+ CloseFiles;
+ writeln ('PrePMX done. Now run PMX.'); halt(0);
+end.
+
diff --git a/Build/source/utils/mtx/mtx-0.60d/status.c b/Build/source/utils/mtx/mtx-0.60d/status.c
new file mode 100644
index 00000000000..aef14b88a7b
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/status.c
@@ -0,0 +1,649 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "status.pas" */
+
+
+#include "p2c.h"
+
+
+#define STATUS_G
+#include "status.h"
+
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef CONTROL_H
+#include "control.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+#ifndef NOTES_H
+#include "notes.h"
+#endif
+
+
+#define lowest_pitch (-9)
+#define highest_pitch 61
+
+
+typedef struct line_status {
+ short pitch, chord_pitch, octave_adjust, beam_level, slur_level, after_slur;
+ Char octave, lastnote, chord_lastnote, duration, slurID, tieID;
+ boolean beamnext, beamed, slurnext, slurred, no_beam_melisma;
+ boolean no_slur_melisma[12];
+ int5 chord_tie_pitch;
+ Char chord_tie_label[6];
+} line_status;
+
+
+Static Char init_oct[256] = "";
+Static line_status current[maxvoices];
+Static Char lastdur[maxvoices];
+
+
+Void chordTie(voice, lab)
+short voice;
+Char *lab;
+{
+ short n;
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ n = strlen(WITH->chord_tie_label);
+ if (n == 5)
+ error3(voice, "Only five slur ties allowed per voice");
+ if (n == 0)
+ *lab = 'T';
+ else
+ *lab = WITH->chord_tie_label[n-1];
+ (*lab)++;
+ sprintf(WITH->chord_tie_label + strlen(WITH->chord_tie_label), "%c", *lab);
+/* p2c: status.pas, line 66:
+ * Note: Possible string truncation in assignment [145] */
+ n++;
+ WITH->chord_tie_pitch[n-1] = WITH->chord_pitch;
+}
+
+
+Void getChordTies(voice, pitches, labels)
+short voice;
+short *pitches;
+Char *labels;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ memcpy(pitches, WITH->chord_tie_pitch, sizeof(int5));
+ strcpy(labels, WITH->chord_tie_label);
+ *WITH->chord_tie_label = '\0';
+}
+
+
+Void rememberDurations()
+{
+ voice_index v, FORLIM;
+
+ FORLIM = nvoices;
+ for (v = 1; v <= FORLIM; v++)
+ lastdur[v-1] = duration(v);
+}
+
+
+Void restoreDurations()
+{
+ voice_index v, FORLIM;
+
+ FORLIM = nvoices;
+ for (v = 1; v <= FORLIM; v++)
+ resetDuration(v, lastdur[v-1]);
+}
+
+
+Char duration(voice)
+short voice;
+{
+ return (current[voice-1].duration);
+}
+
+
+Void resetDuration(voice, dur)
+short voice;
+Char dur;
+{
+ if (pos1(dur, durations) == 0) {
+ printf("Trying to set duration to %c; ", dur);
+ error3(voice, "M-Tx system error: resetDuration");
+ }
+ current[voice-1].duration = dur;
+}
+
+
+Void activateBeamsAndSlurs(voice)
+short voice;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ if (WITH->beamnext) {
+ WITH->beamed = true;
+ WITH->beamnext = false;
+ }
+ if (WITH->slurnext) {
+ WITH->slurred = true;
+ WITH->slurnext = false;
+ }
+ if (WITH->slurred)
+ WITH->after_slur++;
+}
+
+
+Void saveStatus(voice)
+short voice;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ WITH->chord_pitch = WITH->pitch;
+ WITH->chord_lastnote = WITH->lastnote;
+}
+
+
+boolean noBeamMelisma(voice)
+short voice;
+{
+ return (current[voice-1].no_beam_melisma);
+}
+
+
+short afterSlur(voice)
+short voice;
+{
+ short Result;
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ Result = WITH->after_slur;
+ if (WITH->after_slur > 0 && WITH->slur_level < 1)
+ error3(voice, "M-Tx system error: afterSlur and slur_level incompatible)");
+ return Result;
+}
+
+
+Char octave(voice)
+short voice;
+{
+ return (current[voice-1].octave);
+}
+
+
+Void resetOctave(voice)
+short voice;
+{
+ current[voice-1].octave = ' ';
+}
+
+
+Void initOctaves(octaves)
+Char *octaves;
+{
+ short i = 1;
+
+ strcpy(init_oct, octaves);
+ while (i <= strlen(init_oct)) {
+ if (init_oct[i-1] == ' ')
+ delete1(init_oct, i);
+ else
+ i++;
+ }
+}
+
+
+Static Char initOctave(voice_stave)
+stave_index voice_stave;
+{
+ if (voice_stave > strlen(init_oct)) {
+ if (pos1(clef[voice_stave-1], "Gt08") > 0)
+ return '4';
+ else
+ return '3';
+ } else
+ return (init_oct[voice_stave-1]);
+}
+
+
+Void setOctave(voice)
+short voice;
+{
+ current[voice-1].octave = initOctave(voiceStave(voice));
+}
+
+
+Void newOctave(voice, dir)
+short voice;
+Char dir;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ switch (dir) {
+
+ case '+':
+ WITH->octave++;
+ break;
+
+ case '-':
+ WITH->octave--;
+ break;
+ }
+}
+
+
+Static short newPitch(voice, note_, pitch, lastnote)
+short voice;
+Char *note_;
+short pitch;
+Char lastnote;
+{
+ Char note[256];
+ short interval, npitch;
+ Char oct;
+
+ strcpy(note, note_);
+ /*if debugMode then
+ write('New pitch for note ',note,' relative to ',lastnote,
+ ' at pitch ',pitch);*/
+ oct = octaveCode(note);
+ if (oct == '=')
+ oct = initOctave(voiceStave(voice));
+ if (isdigit(oct)) {
+ pitch = (oct - '0') * 7 - 3;
+ lastnote = 'f';
+ removeOctaveCode(oct, note);
+ oct = octaveCode(note);
+ }
+ interval = note[0] - lastnote;
+ if (interval > 3)
+ interval -= 7;
+ if (interval < -3)
+ interval += 7;
+ npitch = pitch + interval; /*if debugMode then write(' was ',npitch);*/
+ while (oct != ' ') {
+ if (oct == '+')
+ npitch += 7;
+ else if (oct == '-')
+ npitch -= 7;
+ removeOctaveCode(oct, note);
+ oct = octaveCode(note);
+ }
+ /*if debugMode then writeln(' is ',npitch);*/
+ return npitch;
+}
+
+
+Local Void delins(note, c1, c2, l)
+Char *note;
+Char c1, c2;
+short l;
+{
+ short i, n;
+
+ n = strlen(note);
+ i = pos1(c1, note);
+ if (i == 0)
+ i = n + 1;
+ while (l > 0 && i <= n) {
+ delete1(note, i);
+ n--;
+ l--;
+ }
+ i = pos1(c2, note);
+ if (i == 0) {
+ if (strlen(note) < 2)
+ error("M-Tx program error", print);
+ else
+ i = 3;
+ }
+ while (l > 0) {
+ insertChar(c2, note, i);
+ l--;
+ }
+}
+
+
+Static Void repitch(note, diff)
+Char *note;
+short diff;
+{
+ diff /= 7;
+ if (diff > 0)
+ delins(note, '-', '+', diff);
+ else
+ delins(note, '+', '-', -diff);
+}
+
+
+Void setUnbeamed(voice)
+short voice;
+{
+ current[voice-1].beamed = false;
+}
+
+
+Void setUnslurred(voice)
+short voice;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ WITH->slurred = false;
+ WITH->after_slur = 0;
+}
+
+
+Void beginBeam(voice, note)
+short voice;
+Char *note;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ if (WITH->beamed)
+ error3(voice, "Starting a forced beam while another is open");
+ if (WITH->beam_level > 0)
+ error3(voice,
+ "Starting a forced beam while another is open (beamlevel>0)");
+ WITH->beam_level++;
+ WITH->beamnext = true;
+ WITH->no_beam_melisma = startsWith(note, "[[");
+ if (WITH->no_beam_melisma)
+ predelete(note, 1);
+}
+
+
+Void endBeam(voice)
+short voice;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ if (WITH->beam_level < 1)
+ error3(voice, "Closing a beam that was never opened");
+ WITH->beam_level--;
+ setUnbeamed(voice);
+}
+
+
+short slurLevel(voice)
+short voice;
+{
+ return (current[voice-1].slur_level);
+}
+
+
+short beamLevel(voice)
+short voice;
+{
+ return (current[voice-1].beam_level);
+}
+
+
+boolean noSlurMelisma(voice, history)
+short voice, history;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ return (WITH->no_slur_melisma[WITH->slur_level + history - 1]);
+}
+
+
+Static Char *slurLabel(Result, voice, note)
+Char *Result;
+short voice;
+Char *note;
+{
+ Char sl;
+
+ if (*note == '\0')
+ return strcpy(Result, "");
+ if (strlen(note) < 2)
+ return strcpy(Result, " ");
+ if (note[1] >= '0' && note[1] <= 'Z')
+ sl = note[1];
+ else
+ sl = ' ';
+ if (sl >= 'I' && sl <= 'T')
+ warning3(voice, "Slur label in the range I..T may cause conflict");
+ sprintf(Result, "%c", sl);
+ return Result;
+}
+
+
+Static Void labelSlur(voice, note)
+short voice;
+Char *note;
+{
+ Char sl;
+ line_status *WITH;
+
+ if (*note == '\0')
+ return;
+ WITH = &current[voice-1];
+ if (note[0] == ')')
+ WITH->slurID += 2;
+ else if (note[0] == '}')
+ WITH->tieID += 2;
+ /** CMO 0.60a: replace assigning tieID to sl by space charater
+ if (note[1]='(') or (note[1]=')') then sl:=slurID else sl:=tieID; */
+ if (note[0] == '(' || note[0] == ')')
+ sl = WITH->slurID;
+ else
+ sl = ' ';
+ /** CMO 0.60d: omit insertchar in case of tie
+ insertchar(sl,note,2); */
+ if (note[0] == '(' || note[0] == ')')
+ insertChar(sl, note, 2);
+ if (note[0] == '(')
+ WITH->slurID -= 2;
+ else if (note[0] == '{')
+ WITH->tieID -= 2;
+ if (WITH->slurID < 'I')
+ warning3(voice, "Too many nested slurs may cause conflict");
+ if (WITH->tieID < 'I')
+ warning3(voice, "Too many nested ties may cause conflict");
+}
+
+
+Void beginSlur(voice, note)
+short voice;
+Char *note;
+{
+ short posblind;
+ line_status *WITH;
+ Char STR1[256], STR2[256];
+
+ WITH = &current[voice-1];
+ WITH->slur_level++;
+ if (WITH->slur_level > 12)
+ error3(voice, "Too many open slurs");
+ WITH->no_slur_melisma[WITH->slur_level - 1] = (startsWith(note, "((") ||
+ startsWith(note, "{{"));
+ if (WITH->no_slur_melisma[WITH->slur_level - 1])
+ predelete(note, 1);
+ if (!strcmp(slurLabel(STR1, voice, note), "0"))
+ delete1(note, 2);
+ else {
+ if (!strcmp(slurLabel(STR2, voice, note), " "))
+ labelSlur(voice, note);
+ }
+ posblind = pos1('~', note);
+ if (posblind > 0) {
+ if (hideBlindSlurs())
+ *note = '\0';
+ else
+ delete1(note, posblind);
+ }
+ WITH->slurnext = true;
+}
+
+
+Void endSlur(voice, note)
+short voice;
+Char *note;
+{
+ short poscontinue, posblind;
+ Char contslur[256];
+ line_status *WITH;
+ Char STR1[256], STR2[256];
+
+ WITH = &current[voice-1];
+ *contslur = '\0';
+ if (WITH->slur_level < 1)
+ error3(voice, "Ending a slur that was never started");
+ if (note[0] == ')')
+ poscontinue = pos1('(', note);
+ else if (note[0] == '}')
+ poscontinue = pos1('{', note);
+ if (poscontinue == 0)
+ WITH->slur_level--;
+ else {
+ poscontinue--;
+ strcpy(contslur, note);
+ predelete(contslur, poscontinue);
+ shorten(note, poscontinue);
+ }
+ if (WITH->slur_level == 0)
+ setUnslurred(voice);
+ if (!strcmp(slurLabel(STR1, voice, note), "0"))
+ delete1(note, 2);
+ else {
+ if (!strcmp(slurLabel(STR2, voice, note), " "))
+ labelSlur(voice, note);
+ }
+ if (!strcmp(slurLabel(STR1, voice, contslur), "0"))
+ delete1(contslur, 2);
+ else {
+ if (!strcmp(slurLabel(STR2, voice, contslur), " "))
+ labelSlur(voice, contslur);
+ }
+ if (poscontinue > 0) {
+ if (note[0] == '}')
+ strcat(note, "t");
+ note[0] = 's';
+ if (contslur[0] == '{')
+ strcat(contslur, "t");
+ contslur[0] = 's';
+ }
+ posblind = pos1('~', note);
+ if (posblind > 0) {
+ if (hideBlindSlurs())
+ *note = '\0';
+ else
+ delete1(note, posblind);
+ }
+ if (*note != '\0' && *contslur != '\0')
+ sprintf(note + strlen(note), " %s", contslur);
+}
+
+
+Void renewPitch(voice, note)
+short voice;
+Char *note;
+{
+ short pstat;
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ pstat = newPitch(voice, note, WITH->chord_pitch, WITH->chord_lastnote);
+ if (debugMode())
+ printf("Current pitch in voice %d is %d, last note was %c, this note is %s",
+ voice, WITH->pitch, WITH->lastnote, note);
+ WITH->pitch = newPitch(voice, note, WITH->pitch, WITH->lastnote);
+ if (WITH->pitch != pstat)
+ repitch(note, WITH->pitch - pstat);
+ if (WITH->pitch < lowest_pitch && checkPitch()) {
+ printf("Pitch of note %s following %c reported as %d",
+ note, WITH->lastnote, WITH->pitch);
+ error3(voice, "Pitch too low");
+ }
+ if (WITH->pitch > highest_pitch && checkPitch()) {
+ printf("Pitch of note %s following %c reported as %d",
+ note, WITH->lastnote, WITH->pitch);
+ error3(voice, "Pitch too high");
+ }
+ WITH->lastnote = note[0];
+ if (debugMode())
+ printf(", repitched to %d\n", WITH->pitch);
+ if (debugMode() && WITH->pitch != pstat)
+ printf("Pitch from melodic line = %d from last chordal note = %d\n",
+ WITH->pitch, pstat);
+}
+
+
+short chordPitch(voice)
+short voice;
+{
+ return (current[voice-1].chord_pitch);
+}
+
+
+Void renewChordPitch(voice, note)
+short voice;
+Char *note;
+{
+ line_status *WITH;
+
+ WITH = &current[voice-1];
+ WITH->chord_pitch = newPitch(voice, note, WITH->chord_pitch,
+ WITH->chord_lastnote);
+ if (WITH->chord_pitch < lowest_pitch)
+ error3(voice, "Pitch in chord too low");
+ if (WITH->chord_pitch > highest_pitch)
+ error3(voice, "Pitch in chord too high");
+ WITH->chord_lastnote = note[0];
+}
+
+
+Void initStatus()
+{
+ short voice, FORLIM;
+ line_status *WITH;
+
+ FORLIM = nvoices;
+ for (voice = 1; voice <= FORLIM; voice++) {
+ WITH = &current[voice-1];
+ WITH->duration = default_duration;
+ WITH->octave_adjust = 0;
+ WITH->slur_level = 0;
+ WITH->beam_level = 0;
+ WITH->beamed = false;
+ WITH->beamnext = false;
+ WITH->slurred = false;
+ WITH->slurnext = false;
+ WITH->after_slur = 0;
+ WITH->octave = initOctave(voiceStave(voice));
+ WITH->slurID = 'S';
+ WITH->tieID = 'T';
+ WITH->lastnote = 'f';
+ WITH->pitch = (WITH->octave - '0') * 7 - 3;
+ *WITH->chord_tie_label = '\0';
+ saveStatus(voice);
+ }
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/status.h b/Build/source/utils/mtx/mtx-0.60d/status.h
new file mode 100644
index 00000000000..1a81d124398
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/status.h
@@ -0,0 +1,57 @@
+/* Header for module status, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef STATUS_H
+#define STATUS_H
+
+
+#ifdef STATUS_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* Keep track of duration, octave, slur and beam status. */
+
+
+extern Void initStatus PV();
+extern Void saveStatus PP((int voice));
+
+extern Void resetDuration PP((int voice, int dur));
+extern Char duration PP((int voice));
+
+extern short slurLevel PP((int voice));
+extern short beamLevel PP((int voice));
+extern boolean noBeamMelisma PP((int voice));
+extern boolean noSlurMelisma PP((int voice, int history));
+extern short afterSlur PP((int voice));
+extern Void setUnbeamed PP((int voice));
+extern Void setUnslurred PP((int voice));
+extern Void beginBeam PP((int voice, Char *note));
+extern Void endBeam PP((int voice));
+extern Void beginSlur PP((int voice, Char *note));
+extern Void endSlur PP((int voice, Char *note));
+extern Void activateBeamsAndSlurs PP((int voice));
+
+extern Void setOctave PP((int voice));
+extern Void resetOctave PP((int voice));
+extern Char octave PP((int voice));
+extern Void newOctave PP((int voice, int dir));
+extern Void initOctaves PP((Char *octaves));
+
+extern Void renewPitch PP((int voice, Char *note));
+extern short chordPitch PP((int voice));
+extern Void renewChordPitch PP((int voice, Char *note));
+extern Void rememberDurations PV();
+extern Void restoreDurations PV();
+extern Void chordTie PP((int voice, Char *lab));
+
+
+typedef short int5[5];
+
+
+extern Void getChordTies PP((int voice, short *pitches, Char *labels));
+
+
+#undef vextern
+
+#endif /*STATUS_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/status.pas b/Build/source/utils/mtx/mtx-0.60d/status.pas
new file mode 100644
index 00000000000..9056dbe1917
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/status.pas
@@ -0,0 +1,348 @@
+unit status;
+{ Keep track of duration, octave, slur and beam status. }
+
+interface
+
+procedure initStatus;
+procedure saveStatus(voice: integer);
+
+procedure resetDuration (voice: integer; dur: char);
+function duration(voice: integer): char;
+
+function slurLevel(voice: integer): integer;
+function beamLevel(voice: integer): integer;
+function noBeamMelisma(voice: integer): boolean;
+function noSlurMelisma(voice, history: integer): boolean;
+function afterSlur(voice: integer): integer;
+procedure setUnbeamed(voice: integer);
+procedure setUnslurred(voice: integer);
+procedure beginBeam(voice: integer; var note: string);
+procedure endBeam(voice: integer);
+procedure beginSlur(voice: integer; var note: string);
+procedure endSlur(voice: integer; var note: string);
+procedure activateBeamsAndSlurs(voice: integer);
+
+procedure setOctave(voice: integer);
+procedure resetOctave(voice: integer);
+function octave(voice: integer): char;
+procedure newOctave(voice: integer; dir: char);
+procedure initOctaves(octaves: string);
+
+procedure renewPitch (voice: integer; var note: string);
+function chordPitch(voice: integer): integer;
+procedure renewChordPitch (voice: integer; note: string);
+procedure rememberDurations;
+procedure restoreDurations;
+procedure chordTie(voice: integer; var lab: char);
+type int5 = array[1..5] of integer;
+procedure getChordTies(voice: integer; var pitches: int5; var labels: string);
+
+implementation uses globals, strings, mtxline, control, utility, notes;
+
+const
+ init_oct: string = '';
+ lowest_pitch = -9;
+ highest_pitch = 61;
+
+type
+ line_status = record
+ pitch, chord_pitch, octave_adjust, beam_level, slur_level, after_slur: integer;
+ octave, lastnote, chord_lastnote, duration, slurID, tieID: char;
+ beamnext, beamed, slurnext, slurred, no_beam_melisma: boolean;
+ no_slur_melisma: array[1..12] of boolean;
+ chord_tie_pitch: int5;
+ chord_tie_label: string[5];
+ end;
+
+var current: array[voice_index] of line_status;
+ lastdur: array[voice_index] of char;
+
+procedure chordTie(voice: integer; var lab: char);
+ var n: integer;
+begin with current[voice] do
+ begin n:=length(chord_tie_label);
+ if n=5 then error3(voice,'Only five slur ties allowed per voice');
+ if n=0 then lab:='T' else lab:=chord_tie_label[n];
+ inc(lab); chord_tie_label:=chord_tie_label+lab;
+ inc(n); chord_tie_pitch[n]:=chord_pitch
+ end
+end;
+
+procedure getChordTies(voice: integer; var pitches: int5; var labels: string);
+begin with current[voice] do
+ begin pitches:=chord_tie_pitch; labels:=chord_tie_label; chord_tie_label:='' end
+end;
+
+procedure rememberDurations;
+ var v: voice_index;
+begin for v:=1 to nvoices do lastdur[v]:=duration(v) end;
+
+procedure restoreDurations;
+ var v: voice_index;
+begin for v:=1 to nvoices do resetDuration(v,lastdur[v]) end;
+
+function duration(voice: integer): char;
+begin duration := current[voice].duration; end;
+
+procedure resetDuration(voice: integer; dur: char);
+begin if pos1(dur,durations)=0 then
+ begin write('Trying to set duration to ',dur,'; ');
+ error3(voice,'M-Tx system error: resetDuration');
+ end;
+ current[voice].duration := dur
+end;
+
+
+procedure activateBeamsAndSlurs(voice: integer);
+begin with current[voice] do
+ begin
+ if beamnext then begin beamed:=true; beamnext:=false; end;
+ if slurnext then begin slurred:=true; slurnext:=false; end;
+ if slurred then inc(after_slur);
+ end
+end;
+
+procedure saveStatus(voice: integer);
+begin with current[voice] do
+ begin chord_pitch := pitch; chord_lastnote := lastnote; end;
+end;
+
+function noBeamMelisma(voice: integer): boolean;
+begin noBeamMelisma := current[voice].no_beam_melisma; end;
+
+function afterSlur(voice: integer): integer;
+begin with current[voice] do
+ begin afterSlur := after_slur; if (after_slur>0) and (slur_level<1) then
+ error3(voice,'M-Tx system error: afterSlur and slur_level incompatible)')
+ end
+end;
+
+function octave(voice: integer): char;
+begin octave := current[voice].octave; end;
+
+procedure resetOctave(voice: integer);
+begin current[voice].octave := ' '; end;
+
+procedure initOctaves(octaves: string);
+ var i: integer;
+begin init_oct:=octaves;
+ i:=1;
+ while i<=length(init_oct) do
+ if init_oct[i]=' ' then delete1(init_oct,i) else inc(i);
+end;
+
+function initOctave(voice_stave: stave_index): char;
+begin
+ if voice_stave>length(init_oct) then
+ if pos1(clef[voice_stave],'Gt08')>0
+ then initOctave:='4' else initOctave:='3'
+ else initOctave:=init_oct[voice_stave];
+end;
+
+procedure setOctave(voice: integer);
+begin current[voice].octave:=initOctave(voiceStave(voice)); end;
+
+procedure newOctave(voice: integer; dir: char);
+begin with current[voice] do case dir of
+ '+': inc(octave);
+ '-': dec(octave);
+ end;
+end;
+
+function newPitch (voice: integer; note: string; pitch: integer;
+ lastnote: char): integer;
+ var interval, npitch: integer;
+ oct: char;
+begin {if debugMode then
+ write('New pitch for note ',note,' relative to ',lastnote,
+ ' at pitch ',pitch);}
+ oct:=octaveCode(note);
+ if oct='=' then oct:=initOctave(voiceStave(voice));
+ if (oct>='0') and (oct<='9') then
+ begin pitch:=7*(ord(oct)-ord('0'))-3; lastnote:='f';
+ removeOctaveCode(oct,note); oct:=octaveCode(note)
+ end;
+ interval := ord(note[1])-ord(lastnote);
+ if interval>3 then dec(interval,7);
+ if interval<-3 then inc(interval,7);
+ npitch:=pitch+interval; {if debugMode then write(' was ',npitch);}
+ while oct<>' ' do
+ begin if oct='+' then inc(npitch,7) else if oct='-' then dec(npitch,7);
+ removeOctaveCode(oct,note); oct:=octaveCode(note)
+ end;
+ {if debugMode then writeln(' is ',npitch);}
+ newPitch:=npitch
+end;
+
+procedure repitch(var note: string; diff: integer);
+ procedure delins(var note: string; c1, c2: char; l: integer);
+ var i, n: integer;
+ begin n:=length(note); i:=pos1(c1,note); if i=0 then i:=n+1;
+ while (l>0) and (i<=n) do begin delete1(note,i); dec(n); dec(l); end;
+ i:=pos1(c2,note);
+ if i=0 then if length(note)<2 then error('M-Tx program error',print)
+ else i:=3;
+ while l>0 do begin insertchar(c2,note,i); dec(l); end;
+ end;
+ begin diff:=diff div 7;
+ if diff>0 then delins(note, '-','+',diff)
+ else delins(note, '+','-',-diff);
+ end;
+
+procedure setUnbeamed(voice: integer);
+begin current[voice].beamed:=false end;
+
+procedure setUnslurred(voice: integer);
+begin with current[voice] do
+ begin slurred:=false; after_slur:=0; end;
+end;
+
+procedure beginBeam(voice: integer; var note: string);
+begin with current[voice] do
+ begin if beamed then
+ error3(voice, 'Starting a forced beam while another is open');
+ if beam_level>0 then error3(voice,
+ 'Starting a forced beam while another is open (beamlevel>0)');
+ inc(beam_level);
+ beamnext := true; no_beam_melisma:=startsWith(note,'[[');
+ if no_beam_melisma then predelete(note,1);
+ end;
+end;
+
+procedure endBeam(voice: integer);
+begin with current[voice] do
+ begin if beam_level<1 then error3(voice, 'Closing a beam that was never opened');
+ dec(beam_level)
+ end;
+ setUnbeamed(voice)
+end;
+
+function slurLevel(voice: integer): integer;
+begin slurLevel := current[voice].slur_level; end;
+
+function beamLevel(voice: integer): integer;
+begin beamLevel := current[voice].beam_level; end;
+
+function noSlurMelisma(voice, history: integer): boolean;
+begin with current[voice] do
+ noSlurMelisma := no_slur_melisma[slur_level+history];
+end;
+
+function slurLabel(voice: integer; note: string): string;
+ var sl: char;
+begin if note='' then begin slurLabel:=''; exit end;
+ if length(note)<2 then begin slurLabel:=' '; exit end;
+ if (note[2]>='0') and (note[2]<='Z') then sl:=note[2] else sl:=' ';
+ if (sl>='I') and (sl<='T') then
+ warning3(voice,'Slur label in the range I..T may cause conflict');
+ slurLabel:=sl
+end;
+
+procedure labelSlur(voice: integer; var note: string);
+ var sl: char;
+begin if note='' then exit;
+ with current[voice] do
+ begin
+ if note[1]=')' then inc(slurID,2) else if note[1]='}' then inc(tieID,2);
+ if (note[1]='(') or (note[1]=')') then sl:=slurID else sl:=tieID;
+ insertchar(sl,note,2);
+ if note[1]='(' then dec(slurID,2) else if note[1]='{' then dec(tieID,2);
+ if slurID<'I' then warning3(voice,'Too many nested slurs may cause conflict');
+ if tieID<'I' then warning3(voice,'Too many nested ties may cause conflict')
+ end
+end;
+
+procedure beginSlur(voice: integer; var note: string);
+ var posblind: integer;
+begin
+ with current[voice] do
+ begin
+ inc(slur_level); if slur_level>12 then Error3(voice,'Too many open slurs');
+ no_slur_melisma[slur_level] := startsWith(note,'((') or startsWith(note,'{{');
+ if no_slur_melisma[slur_level] then predelete(note,1);
+ if slurLabel(voice,note)='0' then delete1(note,2) else
+ if slurLabel(voice,note)=' ' then labelSlur(voice,note);
+ posblind:=pos1('~',note); if posblind>0 then
+ if hideBlindSlurs then note:='' else delete1(note,posblind);
+ slurnext := true;
+ end;
+end;
+
+procedure endSlur(voice: integer; var note: string);
+ var poscontinue, posblind: integer;
+ contslur: string;
+begin with current[voice] do
+ begin contslur:='';
+ if slur_level<1 then Error3(voice,'Ending a slur that was never started');
+ if note[1]=')' then poscontinue:=pos1('(',note)
+ else if note[1]='}' then poscontinue:=pos1('{',note);
+ if poscontinue=0 then dec(slur_level) else
+ begin dec(poscontinue); contslur:=note; predelete(contslur,poscontinue);
+ shorten(note,poscontinue);
+ end;
+ if slur_level=0 then setUnslurred(voice);
+ if slurLabel(voice,note)='0' then delete1(note,2) else
+ if slurLabel(voice,note)=' ' then labelSlur(voice,note);
+ if slurLabel(voice,contslur)='0' then delete1(contslur,2) else
+ if slurLabel(voice,contslur)=' ' then labelSlur(voice,contslur);
+ if poscontinue>0 then
+ begin if note[1]='}' then note:=note+'t'; note[1]:='s';
+ if contslur[1]='{' then contslur:=contslur+'t'; contslur[1]:='s';
+ end;
+ posblind:=pos1('~',note); if posblind>0 then
+ if hideBlindSlurs then note:='' else delete1(note,posblind);
+ if (note<>'') and (contslur<>'') then note := note + ' ' + contslur;
+ end;
+end;
+
+procedure renewPitch (voice: integer; var note: string);
+ var pstat: integer;
+begin with current[voice] do
+ begin pstat:=newPitch (voice, note, chord_pitch, chord_lastnote);
+ if debugMode then write('Current pitch in voice ',voice,' is ',pitch,
+ ', last note was ',lastnote,', this note is ',note);
+ pitch := newPitch (voice, note, pitch, lastnote);
+ if pitch<>pstat then repitch(note,pitch-pstat);
+ if (pitch<lowest_pitch) and checkPitch then
+ begin write('Pitch of note ',note,' following ',lastnote,' reported as ',pitch);
+ error3(voice,'Pitch too low')
+ end;
+ if (pitch>highest_pitch) and checkPitch then
+ begin write('Pitch of note ',note,' following ',lastnote,' reported as ',pitch);
+ error3(voice,'Pitch too high')
+ end;
+ lastnote:=note[1];
+ if debugMode then writeln(', repitched to ',pitch);
+ if debugMode and (pitch<>pstat) then
+ writeln('Pitch from melodic line = ',pitch,
+ ' from last chordal note = ', pstat);
+ end;
+end;
+
+function chordPitch(voice: integer): integer;
+begin chordPitch:=current[voice].chord_pitch end;
+
+procedure renewChordPitch (voice: integer; note: string);
+begin with current[voice] do
+ begin chord_pitch:=newPitch(voice,note,chord_pitch,chord_lastnote);
+ if chord_pitch<lowest_pitch then error3(voice,'Pitch in chord too low');
+ if chord_pitch>highest_pitch then error3(voice,'Pitch in chord too high');
+ chord_lastnote:=note[1];
+ end
+end;
+
+procedure initStatus;
+ var voice: integer;
+begin for voice:=1 to nvoices do with current[voice] do
+ begin duration:=default_duration;
+ octave_adjust:=0; slur_level:=0; beam_level:=0;
+ beamed:=false; beamnext:=false;
+ slurred:=false; slurnext:=false; after_slur:=0;
+ octave:=initOctave(voiceStave(voice)); slurID:='S'; tieID:='T';
+ lastnote:='f'; pitch:=7*(ord(octave)-ord('0'))-3;
+ chord_tie_label:='';
+ saveStatus(voice);
+ end;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/strings.h b/Build/source/utils/mtx/mtx-0.60d/strings.h
new file mode 100644
index 00000000000..6e0bcdfae8e
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/strings.h
@@ -0,0 +1,34 @@
+/* Header for module strings, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef STRINGS_H
+#define STRINGS_H
+
+
+#ifdef STRINGS_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* String handling primitives. */
+/* These should be recoded in C instead of using the p2c code. */
+
+
+extern Void scan1 PP((Char *s, int p, short *n));
+/* Read an integer at position p of s */
+extern boolean startsWith PP((Char *s1, Char *s2));
+extern short pos1 PP((int c, Char *s));
+extern short posNot PP((int c, Char *s));
+extern Void insertChar PP((int c, Char *s, int p));
+extern Char *substr_ PP((Char *Result, Char *s, int start, int count));
+extern Void getNum PP((Char *line, short *k));
+extern Void getTwoNums PP((Char *line, short *k1, short *k2));
+extern Void toUpper PP((Char *s));
+extern Void delete1 PP((Char *s, int p));
+extern Void predelete PP((Char *s, int l));
+extern Void shorten PP((Char *s, int new_length));
+
+
+#undef vextern
+
+#endif /*STRINGS_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/uptext.c b/Build/source/utils/mtx/mtx-0.60d/uptext.c
new file mode 100644
index 00000000000..eb5b2772e02
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/uptext.c
@@ -0,0 +1,277 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "uptext.pas" */
+
+
+#include "p2c.h"
+
+
+#define UPTEXT_G
+#include "uptext.h"
+
+
+#ifndef GLOBALS_H
+#include "globals.h"
+#endif
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+#ifndef MTXLINE_H
+#include "mtxline.h"
+#endif
+
+#ifndef UTILITY_H
+#include "utility.h"
+#endif
+
+
+typedef struct uptext_info {
+ short uptext, uptext_adjust, uptext_lcz;
+ Char uptext_font[256];
+} uptext_info;
+
+
+Static uptext_info U[maxvoices];
+
+
+short uptextLineNo(voice)
+short voice;
+{
+ return (U[voice-1].uptext);
+}
+
+
+Void setUptextLineNo(voice, lno)
+short voice, lno;
+{
+ U[voice-1].uptext = lno;
+}
+
+
+Void clearUptext()
+{
+ voice_index voice, FORLIM;
+
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++)
+ U[voice].uptext = 0;
+}
+
+
+Void initUptext()
+{
+ voice_index voice, FORLIM;
+ uptext_info *WITH;
+
+ FORLIM = nvoices;
+ for (voice = 0; voice <= FORLIM - 1; voice++) {
+ WITH = &U[voice];
+ WITH->uptext_adjust = 0;
+ WITH->uptext_lcz = 3;
+ *WITH->uptext_font = '\0';
+ }
+}
+
+
+Static Void textTranslate(uptext, font)
+Char *uptext, *font;
+{
+ short k;
+ Char STR1[256], STR2[256], STR3[256], STR4[256];
+ short FORLIM;
+
+ if (*uptext == '\0')
+ return;
+ do {
+ k = pos1('%', uptext);
+ if (k > 0) {
+ sprintf(STR4, "%s{\\mtxFlat}%s",
+ substr_(STR1, uptext, 1, k - 1),
+ substr_(STR3, uptext, k + 1, strlen(uptext) - k));
+ strcpy(uptext, STR4);
+ }
+ } while (k != 0);
+ do {
+ k = pos1('#', uptext);
+ if (k > 0) {
+ sprintf(STR2, "%s{\\mtxSharp}%s",
+ substr_(STR1, uptext, 1, k - 1),
+ substr_(STR4, uptext, k + 1, strlen(uptext) - k));
+ strcpy(uptext, STR2);
+ }
+ } while (k != 0);
+ switch (uptext[0]) {
+
+ case '<':
+ if (!strcmp(uptext, "<"))
+ strcpy(uptext, "\\mtxIcresc");
+ else if (!strcmp(uptext, "<."))
+ strcpy(uptext, "\\mtxTcresc");
+ else {
+ predelete(uptext, 1);
+ sprintf(uptext, "\\mtxCresc{%s}", strcpy(STR4, uptext));
+ }
+ break;
+
+ case '>':
+ if (!strcmp(uptext, ">"))
+ strcpy(uptext, "\\mtxIdecresc");
+ else if (!strcmp(uptext, ">."))
+ strcpy(uptext, "\\mtxTdecresc");
+ else {
+ predelete(uptext, 1);
+ sprintf(uptext, "\\mtxDecresc{%s}", strcpy(STR1, uptext));
+ }
+ break;
+
+ default:
+ FORLIM = strlen(uptext);
+ for (k = 0; k <= FORLIM - 1; k++) {
+ if (pos1(uptext[k], "mpfzrs~") == 0)
+ return;
+ }
+ break;
+ }
+ strcpy(font, "\\mtxPF");
+}
+
+
+#define default_ 10
+#define under (-14)
+
+
+/* Local variables for addUptext: */
+struct LOC_addUptext {
+ short voice;
+ Char w[256];
+ short adj;
+} ;
+
+Local Void adjustUptext(LINK)
+struct LOC_addUptext *LINK;
+{
+ Char letter;
+ boolean force = false;
+ uptext_info *WITH1;
+
+ delete1(LINK->w, 1);
+ while (*LINK->w != '\0') {
+/* p2c: uptext.pas: Note: Eliminated unused assignment statement [338] */
+ letter = LINK->w[0];
+ delete1(LINK->w, 1);
+ WITH1 = &U[LINK->voice-1];
+ switch (letter) {
+
+ case '<':
+ if (WITH1->uptext_lcz > 1)
+ WITH1->uptext_lcz--;
+ break;
+
+ case '>':
+ if (WITH1->uptext_lcz < 3)
+ WITH1->uptext_lcz++;
+ break;
+
+ case '^':
+ WITH1->uptext_adjust = 0;
+ break;
+
+ case 'v':
+ WITH1->uptext_adjust = under;
+ break;
+
+ case '=':
+ force = true;
+ break;
+
+ case '+':
+ case '-':
+ if (*LINK->w != '\0')
+ getNum(LINK->w, &LINK->adj);
+ else
+ LINK->adj = 0;
+ if (letter == '-')
+ LINK->adj = -LINK->adj;
+ if (force)
+ WITH1->uptext_adjust = LINK->adj;
+ else
+ WITH1->uptext_adjust += LINK->adj;
+ *LINK->w = '\0';
+ break;
+
+ default:
+ error3(LINK->voice, "Unknown uptext adjustment");
+ break;
+ }
+ }
+ strcpy(LINK->w, "!");
+}
+
+
+Void addUptext(voice_, no_uptext, pretex)
+short voice_;
+boolean *no_uptext;
+Char *pretex;
+{
+ struct LOC_addUptext V;
+ Char font[256];
+ static Char lcz[4] = "lcz";
+ uptext_info *WITH;
+ Char STR1[256], STR2[256], STR3[256];
+
+ V.voice = voice_;
+ WITH = &U[V.voice-1];
+ if (WITH->uptext == 0)
+ *no_uptext = true;
+ if (*no_uptext)
+ return;
+ do {
+ GetNextWord(V.w, P[WITH->uptext - 1], blank, dummy);
+ sprintf(STR1, "%c", barsym);
+ if (!strcmp(V.w, STR1) || *V.w == '\0')
+ *no_uptext = true;
+ sprintf(STR1, "%c", tilde);
+ if (!strcmp(V.w, STR1) || *no_uptext)
+ return;
+ if (V.w[0] == '!') {
+ strcpy(WITH->uptext_font, V.w);
+ WITH->uptext_font[0] = '\\';
+ }
+ if (V.w[0] == '@')
+ adjustUptext(&V);
+ } while (V.w[0] == '!'); /* ! is a kludge, will get me in trouble later */
+ strcpy(font, WITH->uptext_font);
+ textTranslate(V.w, font);
+ if (*font != '\0')
+ sprintf(V.w, "%s{%s}", font, strcpy(STR1, V.w));
+ switch (lcz[WITH->uptext_lcz - 1]) {
+
+ case 'l':
+ sprintf(V.w, "\\mtxLchar{%s}{%s}",
+ toString(STR1, default_ + WITH->uptext_adjust),
+ strcpy(STR3, V.w));
+ break;
+
+ case 'c':
+ sprintf(V.w, "\\mtxCchar{%s}{%s}",
+ toString(STR1, default_ + WITH->uptext_adjust),
+ strcpy(STR2, V.w));
+ break;
+
+ case 'z':
+ sprintf(V.w, "\\mtxZchar{%s}{%s}",
+ toString(STR1, default_ + WITH->uptext_adjust),
+ strcpy(STR3, V.w));
+ break;
+ }
+ strcat(pretex, V.w);
+}
+
+#undef default_
+#undef under
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/uptext.h b/Build/source/utils/mtx/mtx-0.60d/uptext.h
new file mode 100644
index 00000000000..8a9a1643dea
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/uptext.h
@@ -0,0 +1,25 @@
+/* Header for module uptext, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef UPTEXT_H
+#define UPTEXT_H
+
+
+#ifdef UPTEXT_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* Insert and translate uptext */
+
+
+extern Void initUptext PV();
+extern Void clearUptext PV();
+extern short uptextLineNo PP((int voice));
+extern Void setUptextLineNo PP((int voice, int lno));
+extern Void addUptext PP((int voice, boolean *no_uptext, Char *pretex));
+
+
+#undef vextern
+
+#endif /*UPTEXT_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/uptext.pas b/Build/source/utils/mtx/mtx-0.60d/uptext.pas
new file mode 100644
index 00000000000..16bebc7556f
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/uptext.pas
@@ -0,0 +1,119 @@
+unit uptext;
+{ Insert and translate uptext }
+
+interface
+
+procedure initUptext;
+procedure clearUptext;
+function uptextLineNo(voice: integer): integer;
+procedure setUptextLineNo(voice, lno: integer);
+procedure addUptext(voice: integer; var no_uptext: boolean;
+ var pretex: string);
+
+implementation uses globals, strings, mtxline, utility;
+
+type uptext_info = record
+ uptext, uptext_adjust, uptext_lcz: integer;
+ uptext_font: string;
+ end;
+
+var U: array[voice_index] of uptext_info;
+
+function uptextLineNo(voice: integer): integer;
+begin uptextLineNo := U[voice].uptext; end;
+
+procedure setUptextLineNo(voice, lno: integer);
+begin U[voice].uptext := lno; end;
+
+procedure clearUptext;
+ var voice: voice_index;
+begin for voice:=1 to nvoices do U[voice].uptext:=0; end;
+
+procedure initUptext;
+ var voice: voice_index;
+begin for voice:=1 to nvoices do with U[voice] do
+ begin
+ uptext_adjust:=0; uptext_lcz:=3; uptext_font:='';
+ end;
+end;
+
+procedure textTranslate(var uptext, font: string);
+ var k: integer;
+begin
+ if uptext='' then exit;
+ repeat k := pos1('%',uptext);
+ if k>0 then uptext:=
+ substr(uptext,1,k-1)+'{\mtxFlat}'+substr(uptext,k+1,length(uptext)-k);
+ until k=0;
+ repeat k := pos1('#',uptext);
+ if k>0 then uptext:=
+ substr(uptext,1,k-1)+'{\mtxSharp}'+substr(uptext,k+1,length(uptext)-k);
+ until k=0;
+ case uptext[1] of
+ '<': if uptext='<' then uptext:='\mtxIcresc'
+ else if uptext='<.' then uptext:='\mtxTcresc'
+ else begin
+ predelete(uptext,1); uptext:='\mtxCresc{'+uptext+'}'
+ end;
+ '>': if uptext='>' then uptext:='\mtxIdecresc'
+ else if uptext='>.' then uptext:='\mtxTdecresc'
+ else begin
+ predelete(uptext,1); uptext:='\mtxDecresc{'+uptext+'}'
+ end;
+ else for k:=1 to length(uptext) do if pos1(uptext[k],'mpfzrs~')=0 then exit;
+ end;
+ font:='\mtxPF';
+end;
+
+procedure addUptext(voice: integer; var no_uptext: boolean;
+ var pretex: string);
+ var w, font: string;
+ adj: integer;
+ const default = 10; under = -14;
+ lcz: string[3] = 'lcz';
+ procedure adjustUptext;
+ var letter: char;
+ force: boolean;
+ begin delete1(w,1); force:=false;
+ while w<>'' do with U[voice] do
+ begin letter:=w[1]; delete1(w,1); with U[voice] do
+ case letter of
+ '<': if uptext_lcz>1 then dec(uptext_lcz);
+ '>': if uptext_lcz<3 then inc(uptext_lcz);
+ '^': uptext_adjust:=0;
+ 'v': uptext_adjust:=under;
+ '=': force:=true;
+'+','-': begin if w<>'' then getNum(w,adj) else adj:=0;
+ if letter = '-' then adj := -adj;
+ if force then uptext_adjust := adj else inc(uptext_adjust,adj);
+ w:='';
+ end;
+ else error3(voice,'Unknown uptext adjustment');
+ end;
+ end;
+ w:='!';
+ end;
+
+ begin
+ with U[voice] do begin
+ if uptext=0 then no_uptext := true;
+ if no_uptext then exit;
+ repeat
+ w := GetNextWord(P[uptext],blank,dummy);
+ if (w=barsym) or (w='') then no_uptext:=true;
+ if (w=tilde) or no_uptext then exit;
+ if w[1]='!' then begin uptext_font:=w; uptext_font[1]:='\'; end;
+ if w[1]='@' then adjustUptext;
+ until w[1]<>'!'; { ! is a kludge, will get me in trouble later }
+ font:=uptext_font; textTranslate(w,font);
+ if font<>'' then w:=font+'{'+w+'}';
+ case lcz[uptext_lcz] of
+'l': w:='\mtxLchar{' + toString(default+uptext_adjust) + '}{' + w + '}';
+'c': w:='\mtxCchar{' + toString(default+uptext_adjust) + '}{' + w + '}';
+'z': w:='\mtxZchar{' + toString(default+uptext_adjust) + '}{' + w + '}';
+ end;
+ pretex:=pretex+w;
+ end;
+ end;
+
+end.
diff --git a/Build/source/utils/mtx/mtx-0.60d/utility.c b/Build/source/utils/mtx/mtx-0.60d/utility.c
new file mode 100644
index 00000000000..225936909d1
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/utility.c
@@ -0,0 +1,393 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "utility.pas" */
+
+
+#include "p2c.h"
+
+
+#define UTILITY_G
+#include "utility.h"
+
+
+#ifndef STRINGS_H
+#include "strings.h"
+#endif
+
+
+#define blank ' '
+#define dummy '\0'
+
+
+short wordCount(s)
+Char *s;
+{
+ short i, n, FORLIM;
+
+ if (*s == '\0')
+ return 0;
+ if (s[0] == blank)
+ n = 0;
+ else
+ n = 1;
+ FORLIM = strlen(s);
+ for (i = 1; i <= FORLIM - 1; i++) {
+ if (s[i-1] == blank && s[i] != blank)
+ n++;
+ }
+ return n;
+}
+
+
+Char *GetNextWord(Result, s, Delim, Term)
+Char *Result;
+Char *s;
+Char Delim, Term;
+{
+ /* A delimiter is a character that separates words, but forms no part
+ of them. A terminator is a character that appears at the end of
+ a word. */
+ short n = 1;
+ short start, last;
+
+ last = strlen(s);
+ while (n <= last && s[n-1] == Delim)
+ n++;
+ start = n;
+ while (n <= last && s[n-1] != Term && s[n-1] != Delim)
+ n++;
+ if (n <= last && s[n-1] == Term)
+ n++;
+ substr_(Result, s, start, n - start);
+ while (n <= last && s[n-1] == Delim)
+ n++;
+ predelete(s, n - 1);
+ return Result;
+}
+
+
+Char *NextWord(Result, s_, Delim, Term)
+Char *Result;
+Char *s_;
+Char Delim, Term;
+{
+ Char s[256];
+
+ strcpy(s, s_);
+ return (GetNextWord(Result, s, Delim, Term));
+}
+
+
+Char *plural(Result, n)
+Char *Result;
+short n;
+{
+ if (n == 1)
+ return strcpy(Result, "");
+ else
+ return strcpy(Result, "s");
+}
+
+
+short curtail(s, c)
+Char *s;
+Char c;
+{
+ short Result = 0;
+ short l;
+
+ l = strlen(s);
+ if (s[l-1] == c) {
+ shorten(s, l - 1);
+ return l;
+ }
+ return Result;
+}
+
+
+Char *toString(Result, n)
+Char *Result;
+short n;
+{
+ Char s[256];
+
+ sprintf(s, "%d", n);
+ return strcpy(Result, s);
+}
+
+
+short digit(c)
+Char c;
+{
+ return (c - '0');
+}
+
+
+boolean equalsIgnoreCase(s1_, s2_)
+Char *s1_, *s2_;
+{
+ Char s1[256], s2[256];
+
+ strcpy(s1, s1_);
+ strcpy(s2, s2_);
+ toUpper(s1);
+ toUpper(s2);
+ return (strcmp(s1, s2) == 0);
+}
+
+
+boolean startsWithIgnoreCase(s1_, s2_)
+Char *s1_, *s2_;
+{
+ Char s1[256], s2[256];
+
+ strcpy(s1, s1_);
+ strcpy(s2, s2_);
+ toUpper(s1);
+ toUpper(s2);
+ return (startsWith(s1, s2));
+}
+
+
+boolean startsWithBracedWord(P_)
+Char *P_;
+{
+ Char P[256];
+ Char w[256];
+
+ strcpy(P, P_);
+ GetNextWord(w, P, blank, dummy);
+ return (w[0] == '{' && w[strlen(w) - 1] == '}');
+}
+
+
+Void trim(s)
+Char *s;
+{
+ short k;
+
+ k = posNot(blank, s);
+ if (k > 1)
+ predelete(s, k - 1);
+ else if (k == 0)
+ *s = '\0';
+}
+
+
+boolean endsWith(s1_, s2)
+Char *s1_, *s2;
+{
+ Char s1[256];
+ short l1, l2;
+
+ strcpy(s1, s1_);
+ l1 = strlen(s1);
+ l2 = strlen(s2);
+ if (l1 < l2)
+ return false;
+ predelete(s1, l1 - l2);
+ return (strcmp(s1, s2) == 0);
+}
+
+
+/* Local variables for grep: */
+struct LOC_grep {
+ Char *source, *pattern;
+ short p1[10], p2[10];
+ short i, p, s, index;
+ boolean matching;
+} ;
+
+Local Void remember(s1, s2, LINK)
+short s1, s2;
+struct LOC_grep *LINK;
+{
+ if (LINK->index > 9)
+ _Escape(9999);
+ LINK->p1[LINK->index] = s1;
+ LINK->p2[LINK->index] = s2;
+ LINK->s = s2 + 1;
+ LINK->index++;
+}
+
+Local Void matchnum(LINK)
+struct LOC_grep *LINK;
+{
+ boolean allowsign = false, allowpoint = false, quit = false;
+ short s0;
+
+ LINK->matching = false;
+ s0 = LINK->s;
+ if (LINK->p < strlen(LINK->pattern)) {
+ if (LINK->pattern[LINK->p] == '#') {
+ LINK->p++;
+ allowsign = true;
+ if (LINK->p < strlen(LINK->pattern)) {
+ if (LINK->pattern[LINK->p] == '#') {
+ LINK->p++;
+ allowpoint = true;
+ }
+ }
+ }
+ }
+ if (allowsign &&
+ (LINK->source[LINK->s-1] == '-' || LINK->source[LINK->s-1] == '+')) {
+ LINK->s++;
+ if (LINK->s > strlen(LINK->source))
+ return;
+ }
+ while (!quit && LINK->s <= strlen(LINK->source)) {
+ if (LINK->source[LINK->s-1] == '.') {
+ if (!allowpoint)
+ quit = true;
+ else {
+ LINK->s++;
+ allowpoint = false;
+ }
+ }
+ if (isdigit(LINK->source[LINK->i-1])) {
+ LINK->s++;
+ LINK->matching = true;
+ } else
+ quit = true;
+ }
+ if (LINK->matching)
+ remember(s0, LINK->s - 1, LINK);
+}
+
+Local Void matchmeta(LINK)
+struct LOC_grep *LINK;
+{
+ if (LINK->p < strlen(LINK->pattern))
+ LINK->p++;
+ if (LINK->source[LINK->s-1] == LINK->pattern[LINK->p-1]) {
+ LINK->s++;
+ LINK->p++;
+ } else
+ LINK->matching = false;
+}
+
+Local Void subgrep(LINK)
+struct LOC_grep *LINK;
+{
+ LINK->matching = true;
+ if (LINK->pattern[LINK->p-1] == '*') {
+ remember(LINK->s, strlen(LINK->source), LINK);
+ LINK->p++;
+ return;
+ }
+ if (LINK->pattern[LINK->p-1] == '?') {
+ remember(LINK->s, LINK->s, LINK);
+ LINK->p++;
+ return;
+ }
+ if (LINK->pattern[LINK->p-1] == '#') {
+ matchnum(LINK);
+ return;
+ }
+ if (LINK->pattern[LINK->p-1] == '\\') {
+ matchmeta(LINK);
+ return;
+ }
+ if (LINK->source[LINK->s-1] == LINK->pattern[LINK->p-1]) {
+ LINK->s++;
+ LINK->p++;
+ } else
+ LINK->matching = false;
+}
+
+
+/*--- Match/Replace package --- */
+
+/* Search and replace. Stops when pattern no longer matches source.
+ Pattern wildcards:
+ ? Any single character
+ * Any string
+ # An unsigned integer
+ ## A signed integer
+ ### A signed number maybe with a decimal part
+ Pattern metacharacters:
+ \x where x is any character, stands for that character
+ Target wildcards
+ \0 to \9 Value of corresponding source wildcard
+ Target metacharacters
+ \ When not followed by 0..9 or \, stands for itself
+ \\ Backslash
+*/
+Void grep(source_, pattern_, target)
+Char *source_, *pattern_, *target;
+{
+ struct LOC_grep V;
+ short j, t, reg;
+ Char product[256];
+ boolean trigger = false;
+ short FORLIM, FORLIM1;
+ Char STR2[256];
+
+ V.source = source_;
+ V.pattern = pattern_;
+ V.index = 0;
+ V.s = 1;
+ V.p = 1;
+ for (V.i = 0; V.i <= 9; V.i++) {
+ V.p1[V.i] = 1;
+ V.p2[V.i] = 0;
+ }
+ while (V.matching && V.p <= strlen(V.pattern) && V.s <= strlen(V.source))
+ subgrep(&V);
+ *product = '\0';
+ FORLIM = strlen(target);
+ for (t = 0; t <= FORLIM - 1; t++) {
+ if (trigger) {
+ reg = digit(target[t]);
+ if ((unsigned)reg <= 9) {
+ FORLIM1 = V.p2[reg];
+ for (j = V.p1[reg] - 1; j <= FORLIM1 - 1; j++)
+ sprintf(product + strlen(product), "%c", V.source[j]);
+ } else if (target[t] == '\\')
+ strcat(product, "\\");
+ else
+ sprintf(product + strlen(product), "\\%c", target[t]);
+ trigger = false;
+ } else if (target[t] == '\\' && t + 1 < strlen(target))
+ trigger = true;
+ else
+ sprintf(product + strlen(product), "%c", target[t]);
+ }
+ strcpy(V.source, substr_(STR2, V.source, V.s, strlen(V.source)));
+ strcpy(V.pattern, substr_(STR2, V.pattern, V.p, strlen(V.pattern)));
+ strcpy(target, product);
+}
+
+
+/* "match" tests whether the source matches the pattern exactly */
+boolean match(source_, pattern_)
+Char *source_, *pattern_;
+{
+ Char source[256], pattern[256];
+ static Char target[256] = "";
+
+ strcpy(source, source_);
+ strcpy(pattern, pattern_);
+ grep(source, pattern, target);
+ return (*source == '\0' && *pattern == '\0');
+}
+
+
+/* "translate" replaces the pattern by the target in the source. */
+Char *translate(Result, source_, pattern_, target_)
+Char *Result;
+Char *source_, *pattern_, *target_;
+{
+ Char source[256], pattern[256], target[256];
+
+ strcpy(source, source_);
+ strcpy(pattern, pattern_);
+ strcpy(target, target_);
+ grep(source, pattern, target);
+ return strcpy(Result, target);
+}
+
+
+
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/utility.h b/Build/source/utils/mtx/mtx-0.60d/utility.h
new file mode 100644
index 00000000000..eee95a563b7
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/utility.h
@@ -0,0 +1,41 @@
+/* Header for module utility, generated by p2c 1.21alpha-07.Dec.93 */
+#ifndef UTILITY_H
+#define UTILITY_H
+
+
+#ifdef UTILITY_G
+# define vextern
+#else
+# define vextern extern
+#endif
+/* DPL 2004-03-22 */
+
+/* Utilities, mainly aids to parsing */
+
+
+extern boolean equalsIgnoreCase PP((Char *s1, Char *s2));
+extern boolean startsWithIgnoreCase PP((Char *s1, Char *s2));
+extern boolean endsWith PP((Char *s1, Char *s2));
+extern boolean startsWithBracedWord PP((Char *P));
+extern Char *GetNextWord PP((Char *Result, Char *s, int Delim, int Term));
+extern Char *NextWord PP((Char *Result, Char *s, int Delim, int Term));
+extern short wordCount PP((Char *s));
+extern Char *plural PP((Char *Result, int n));
+extern short curtail PP((Char *s, int c));
+/* Remove last character if it equals c and return its position;
+ otherwise return 0 */
+extern Char *toString PP((Char *Result, int n));
+extern Void trim PP((Char *s));
+extern short digit PP((int c));
+extern boolean match PP((Char *source, Char *pattern));
+extern Char *translate PP((Char *Result, Char *source, Char *pattern,
+ Char *target));
+extern Void grep PP((Char *source, Char *pattern, Char *target));
+/* See Implementation for what this currently does. */
+
+
+#undef vextern
+
+#endif /*UTILITY_H*/
+
+/* End. */
diff --git a/Build/source/utils/mtx/mtx-0.60d/utility.pas b/Build/source/utils/mtx/mtx-0.60d/utility.pas
new file mode 100644
index 00000000000..42cc76d15d5
--- /dev/null
+++ b/Build/source/utils/mtx/mtx-0.60d/utility.pas
@@ -0,0 +1,194 @@
+unit utility; { DPL 2004-03-22 }
+
+{ Utilities, mainly aids to parsing }
+
+interface
+
+function equalsIgnoreCase(s1, s2: string): boolean;
+function startsWithIgnoreCase(s1, s2: string): boolean;
+function endsWith(s1, s2: string): boolean;
+function startsWithBracedWord (P: string): boolean;
+function GetNextWord (var s: string; Delim, Term: char): string;
+function NextWord (s: string; Delim, Term: char): string;
+function wordCount (s: string): integer;
+function plural (n: integer): string;
+function curtail (var s: string; c: char): integer;
+ { Remove last character if it equals c and return its position;
+ otherwise return 0 }
+function toString(n: integer): string;
+procedure trim(var s: string);
+function digit(c: char): integer;
+function match(source, pattern: string): boolean;
+function translate(source, pattern, target: string): string;
+procedure grep(var source, pattern, target: string);
+ { See Implementation for what this currently does. }
+
+implementation uses strings;
+
+const blank = ' '; dummy = #0;
+
+function wordCount (s: string): integer;
+ var i, n: integer;
+ begin if length(s)=0 then
+ begin wordCount:=0; exit; end;
+ if s[1]=blank then n:=0 else n:=1;
+ for i:=1 to length(s)-1 do
+ if (s[i]=blank) and (s[i+1]<>blank) then inc(n);
+ wordCount:=n;
+ end;
+
+function GetNextWord (var s: string; Delim, Term: char): string;
+{ A delimiter is a character that separates words, but forms no part
+ of them. A terminator is a character that appears at the end of
+ a word. }
+ var n, start, last: integer;
+begin last:=length(s); n:=1;
+ while (n<=last) and (s[n] = Delim) do inc(n);
+ start:=n;
+ while (n<=last) and not (s[n] in [Delim,Term]) do inc(n);
+ if (n<=last) and (s[n] = Term) then inc(n);
+ GetNextWord:=substr(s,start,n-start);
+ while (n<=last) and (s[n] = Delim) do inc(n);
+ predelete(s,n-1);
+end;
+
+function NextWord (s: string; Delim, Term: char): string;
+ begin NextWord:=GetNextWord(s,Delim,Term); end;
+
+function plural (n: integer): string;
+ begin if n=1 then plural:='' else plural:='s'; end;
+
+function curtail (var s: string; c: char): integer;
+ var l: integer;
+ begin l:=length(s); curtail:=0;
+ if s[l]=c then begin shorten(s,l-1); curtail:=l; end;
+ end;
+
+function toString(n: integer): string;
+ var s: string;
+begin str(n,s); toString:=s; end;
+
+function digit(c: char): integer;
+ begin digit:=ord(c)-ord('0'); end;
+
+function equalsIgnoreCase(s1, s2: string): boolean;
+begin toUpper(s1); toUpper(s2); equalsIgnoreCase:=s1=s2;
+end;
+
+function startsWithIgnoreCase(s1, s2: string): boolean;
+begin toUpper(s1); toUpper(s2); startsWithIgnoreCase:=startsWith(s1,s2);
+end;
+
+function startsWithBracedWord (P: string): boolean;
+ var w: string;
+begin w := getNextWord(P,blank,dummy);
+ startsWithBracedWord := (w[1]='{') and (w[length(w)]='}');
+end;
+
+procedure trim(var s: string);
+ var k: integer;
+ begin k:=posnot(blank,s);
+ if k>1 then predelete(s,k-1) else if k=0 then s:='';
+ end;
+
+function endsWith(s1, s2: string): boolean;
+ var l1, l2: integer;
+begin l1:=length(s1); l2:=length(s2);
+ if l1<l2 then begin endsWith:=false; exit end;
+ predelete(s1,l1-l2); endsWith:=s1=s2
+end;
+
+{--- Match/Replace package --- }
+
+{ Search and replace. Stops when pattern no longer matches source.
+ Pattern wildcards:
+ ? Any single character
+ * Any string
+ # An unsigned integer
+ ## A signed integer
+ ### A signed number maybe with a decimal part
+ Pattern metacharacters:
+ \x where x is any character, stands for that character
+ Target wildcards
+ \0 to \9 Value of corresponding source wildcard
+ Target metacharacters
+ \ When not followed by 0..9 or \, stands for itself
+ \\ Backslash
+}
+procedure grep(var source, pattern, target: string);
+ var p1, p2: array[0..9] of integer;
+ i, j, p, s, t, index, reg: integer;
+ product: string;
+ trigger, matching: boolean;
+ procedure remember(s1, s2: integer);
+ begin if index>9 then halt(9999);
+ p1[index] := s1; p2[index] := s2; s := s2+1; inc(index)
+ end;
+ procedure matchnum;
+ var allowsign, allowpoint, quit: boolean;
+ s0: integer;
+ begin allowsign := false; allowpoint := false; matching := false; s0 := s;
+ if p<length(pattern) then if pattern[p+1]='#' then
+ begin inc(p); allowsign := true;
+ if p<length(pattern) then if pattern[p+1]='#' then
+ begin inc(p); allowpoint := true end
+ end;
+ if allowsign and ((source[s]='-') or (source[s]='+')) then
+ begin inc(s); if s>length(source) then exit end;
+ quit := false;
+ while (not quit) and (s<=length(source)) do
+ begin if source[s]='.' then if not allowpoint then quit := true else
+ begin inc(s); allowpoint := false end;
+ if (source[i]>='0') and (source[i]<='9') then
+ begin inc(s); matching := true end
+ else quit := true
+ end;
+ if matching then remember(s0,s-1)
+ end;
+ procedure matchmeta;
+ begin if p<length(pattern) then inc(p);
+ if source[s]=pattern[p] then begin inc(s); inc(p) end
+ else matching := false
+ end;
+ procedure subgrep;
+ begin matching := true;
+ if pattern[p]='*' then begin remember(s,length(source)); inc(p) end
+ else if pattern[p]='?' then begin remember(s,s); inc(p) end
+ else if pattern[p]='#' then matchnum
+ else if pattern[p]='\' then matchmeta
+ else if source[s]=pattern[p] then begin inc(s); inc(p) end
+ else matching := false
+ end;
+begin
+ index := 0; s := 1; p := 1;
+ for i:=0 to 9 do begin p1[i]:=1; p2[i]:=0 end;
+ while matching and (p<=length(pattern)) and (s<=length(source)) do subgrep;
+ product := ''; trigger := false;
+ for t:=1 to length(target) do if trigger then
+ begin reg := digit(target[t]); if (reg>=0) and (reg<=9) then
+ for j:=p1[reg] to p2[reg] do product := product + source[j]
+ else if target[t]='\' then product := product + '\'
+ else product := product + '\' + target[t];
+ trigger := false
+ end
+ else if (target[t]='\') and (t<length(target)) then trigger := true
+ else product := product + target[t];
+ source := substr(source,s,length(source));
+ pattern := substr(pattern,p,length(pattern));
+ target := product
+end;
+
+
+{ "match" tests whether the source matches the pattern exactly }
+function match(source, pattern: string): boolean;
+ const target: string = '';
+begin grep(source, pattern, target);
+ match := (source='') and (pattern='')
+end;
+
+{ "translate" replaces the pattern by the target in the source. }
+function translate(source, pattern, target: string): string;
+begin grep(source, pattern, target); translate := target;
+end;
+
+end.
diff --git a/Build/source/utils/mtx/version.ac b/Build/source/utils/mtx/version.ac
new file mode 100644
index 00000000000..cfad6555f7b
--- /dev/null
+++ b/Build/source/utils/mtx/version.ac
@@ -0,0 +1,11 @@
+dnl
+dnl Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+dnl
+dnl This file is free software; the copyright holder
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl --------------------------------------------------------
+dnl
+dnl m4-include this file to define the current mtx version
+m4_define([mtx_version], [0.60d])