libmikmod-3.1.16/0000755000000000000000000000000012262343244012251 5ustar rootrootlibmikmod-3.1.16/include/0000755000000000000000000000000012262343244013674 5ustar rootrootlibmikmod-3.1.16/include/Makefile.in0000644000000000000000000003622512260336527015755 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/mikmod.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = mikmod.h mikmod_build.h CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(nodist_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ ### @#!&*%$@ autoconf wants to have a mikmod_build.h.in file !!! EXTRA_DIST = mikmod_internals.h mikmod_build.h.in # don't distribute generated mikmod.h nodist_include_HEADERS = mikmod.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mikmod.h: $(top_builddir)/config.status $(srcdir)/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mikmod_build.h: $(top_builddir)/config.status $(srcdir)/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_includeHEADERS: $(nodist_include_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) 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) @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 check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nodist_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: 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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nodist_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am 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-nodist_includeHEADERS \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-nodist_includeHEADERS # 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: libmikmod-3.1.16/include/mikmod_internals.h0000644000000000000000000005471712256076252017427 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library internal definitions ==============================================================================*/ #ifndef _MIKMOD_INTERNALS_H #define _MIKMOD_INTERNALS_H #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_MALLOC_H #include #endif #include #if defined(__OS2__) || defined(__EMX__) || (defined(_WIN32) && !defined(__MINGW32__)) #define strcasecmp(s,t) stricmp(s,t) #endif #ifndef MIKMOD_UNIX #if (defined(unix) || defined(__unix__) || defined(__unix) || \ (defined(__APPLE__) && defined(__MACH__))) && \ !(defined(__DJGPP__) || defined(_WIN32) || defined(__OS2__) || defined(__EMX__)) #define MIKMOD_UNIX 1 #endif #endif /* MIKMOD_UNIX */ #include /*========== More type definitions */ /* SLONGLONG: 64bit, signed */ #if !defined(_WIN32) && (defined(_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x64_64) || defined(__powerpc64__)) typedef long SLONGLONG; #define NATIVE_64BIT_INT #elif defined(_WIN64) /* win64 is LLP64, not LP64 */ #define NATIVE_64BIT_INT typedef long long SLONGLONG; #elif defined(__WATCOMC__) typedef __int64 SLONGLONG; #elif defined(_WIN32) && !defined(__MWERKS__) typedef LONGLONG SLONGLONG; #elif defined(macintosh) && !TYPE_LONGLONG #include typedef SInt64 SLONGLONG; #else typedef long long SLONGLONG; #endif /* pointer-sized signed int (ssize_t/intptr_t) : */ #if defined(_WIN64) /* win64 is LLP64, not LP64 */ typedef long long SINTPTR_T; #else /* long should be pointer-sized for all others : */ typedef long SINTPTR_T; #endif /*========== Error handling */ #define _mm_errno MikMod_errno #define _mm_critical MikMod_critical extern MikMod_handler_t _mm_errorhandler; /*========== Memory allocation */ /* _mm_malloc and _mm_free clash with Windows malloc.h */ #undef _mm_malloc #undef _mm_calloc #undef _mm_free extern void* _mm_malloc(size_t); extern void* _mm_calloc(size_t,size_t); #define _mm_free(p) do { if (p) free(p); p = NULL; } while(0) /*========== MT stuff */ #ifdef HAVE_PTHREAD #include #define DECLARE_MUTEX(name) \ extern pthread_mutex_t _mm_mutex_##name #define MUTEX_LOCK(name) \ pthread_mutex_lock(&_mm_mutex_##name) #define MUTEX_UNLOCK(name) \ pthread_mutex_unlock(&_mm_mutex_##name) #elif defined(__OS2__)||defined(__EMX__) #define DECLARE_MUTEX(name) \ extern HMTX _mm_mutex_##name #define MUTEX_LOCK(name) \ if(_mm_mutex_##name)\ DosRequestMutexSem(_mm_mutex_##name,SEM_INDEFINITE_WAIT) #define MUTEX_UNLOCK(name) \ if(_mm_mutex_##name)\ DosReleaseMutexSem(_mm_mutex_##name) #elif defined(_WIN32) #include #define DECLARE_MUTEX(name) \ extern HANDLE _mm_mutex_##name #define MUTEX_LOCK(name) \ if(_mm_mutex_##name)\ WaitForSingleObject(_mm_mutex_##name,INFINITE) #define MUTEX_UNLOCK(name) \ if(_mm_mutex_##name)\ ReleaseMutex(_mm_mutex_##name) #else #define DECLARE_MUTEX(name) \ extern void *_mm_mutex_##name #define MUTEX_LOCK(name) #define MUTEX_UNLOCK(name) #endif DECLARE_MUTEX(lists); DECLARE_MUTEX(vars); /*========== Portable file I/O */ extern MREADER* _mm_new_file_reader(FILE* fp); extern void _mm_delete_file_reader(MREADER*); extern MWRITER* _mm_new_file_writer(FILE *fp); extern void _mm_delete_file_writer(MWRITER*); extern BOOL _mm_FileExists(const CHAR *fname); #define _mm_write_SBYTE(x,y) y->Put(y,(int)x) #define _mm_write_UBYTE(x,y) y->Put(y,(int)x) #define _mm_read_SBYTE(x) (SBYTE)x->Get(x) #define _mm_read_UBYTE(x) (UBYTE)x->Get(x) #define _mm_skip_BYTE(x) (void)x->Get(x) #define _mm_write_SBYTES(x,y,z) z->Write(z,(void *)x,y) #define _mm_write_UBYTES(x,y,z) z->Write(z,(void *)x,y) #define _mm_read_SBYTES(x,y,z) z->Read(z,(void *)x,y) #define _mm_read_UBYTES(x,y,z) z->Read(z,(void *)x,y) #define _mm_fseek(x,y,z) x->Seek(x,y,z) #define _mm_ftell(x) x->Tell(x) #define _mm_rewind(x) _mm_fseek(x,0,SEEK_SET) #define _mm_eof(x) x->Eof(x) extern void _mm_iobase_setcur(MREADER*); extern void _mm_iobase_revert(void); extern FILE* _mm_fopen(const CHAR *, const CHAR *); extern int _mm_fclose(FILE *); extern void _mm_write_string(CHAR*,MWRITER*); extern BOOL _mm_read_string (CHAR*,int,MREADER*); extern SWORD _mm_read_M_SWORD(MREADER*); extern SWORD _mm_read_I_SWORD(MREADER*); extern UWORD _mm_read_M_UWORD(MREADER*); extern UWORD _mm_read_I_UWORD(MREADER*); extern SLONG _mm_read_M_SLONG(MREADER*); extern SLONG _mm_read_I_SLONG(MREADER*); extern ULONG _mm_read_M_ULONG(MREADER*); extern ULONG _mm_read_I_ULONG(MREADER*); extern BOOL _mm_read_M_SWORDS(SWORD*,int,MREADER*); extern BOOL _mm_read_I_SWORDS(SWORD*,int,MREADER*); extern BOOL _mm_read_M_UWORDS(UWORD*,int,MREADER*); extern BOOL _mm_read_I_UWORDS(UWORD*,int,MREADER*); extern BOOL _mm_read_M_SLONGS(SLONG*,int,MREADER*); extern BOOL _mm_read_I_SLONGS(SLONG*,int,MREADER*); extern BOOL _mm_read_M_ULONGS(ULONG*,int,MREADER*); extern BOOL _mm_read_I_ULONGS(ULONG*,int,MREADER*); extern void _mm_write_M_SWORD(SWORD,MWRITER*); extern void _mm_write_I_SWORD(SWORD,MWRITER*); extern void _mm_write_M_UWORD(UWORD,MWRITER*); extern void _mm_write_I_UWORD(UWORD,MWRITER*); extern void _mm_write_M_SLONG(SLONG,MWRITER*); extern void _mm_write_I_SLONG(SLONG,MWRITER*); extern void _mm_write_M_ULONG(ULONG,MWRITER*); extern void _mm_write_I_ULONG(ULONG,MWRITER*); extern void _mm_write_M_SWORDS(SWORD*,int,MWRITER*); extern void _mm_write_I_SWORDS(SWORD*,int,MWRITER*); extern void _mm_write_M_UWORDS(UWORD*,int,MWRITER*); extern void _mm_write_I_UWORDS(UWORD*,int,MWRITER*); extern void _mm_write_M_SLONGS(SLONG*,int,MWRITER*); extern void _mm_write_I_SLONGS(SLONG*,int,MWRITER*); extern void _mm_write_M_ULONGS(ULONG*,int,MWRITER*); extern void _mm_write_I_ULONGS(ULONG*,int,MWRITER*); /*========== Samples */ /* This is a handle of sorts attached to any sample registered with SL_RegisterSample. Generally, this only need be used or changed by the loaders and drivers of mikmod. */ typedef struct SAMPLOAD { struct SAMPLOAD *next; ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ UWORD infmt,outfmt; int scalefactor; SAMPLE* sample; MREADER* reader; } SAMPLOAD; /*========== Sample and waves loading interface */ extern void SL_HalveSample(SAMPLOAD*,int); extern void SL_Sample8to16(SAMPLOAD*); extern void SL_Sample16to8(SAMPLOAD*); extern void SL_SampleSigned(SAMPLOAD*); extern void SL_SampleUnsigned(SAMPLOAD*); extern int SL_LoadSamples(void); extern SAMPLOAD* SL_RegisterSample(SAMPLE*,int,MREADER*); extern int SL_Load(void*,SAMPLOAD*,ULONG); extern BOOL SL_Init(SAMPLOAD*); extern void SL_Exit(SAMPLOAD*); /*========== Internal module representation (UniMod) interface */ /* number of notes in an octave */ #define OCTAVE 12 extern void UniSetRow(UBYTE*); extern UBYTE UniGetByte(void); extern UWORD UniGetWord(void); extern UBYTE* UniFindRow(UBYTE*,UWORD); extern void UniSkipOpcode(void); extern void UniReset(void); extern void UniWriteByte(UBYTE); extern void UniWriteWord(UWORD); extern void UniNewline(void); extern UBYTE* UniDup(void); extern BOOL UniInit(void); extern void UniCleanup(void); extern void UniEffect(UWORD,UWORD); #define UniInstrument(x) UniEffect(UNI_INSTRUMENT,x) #define UniNote(x) UniEffect(UNI_NOTE,x) extern void UniPTEffect(UBYTE,UBYTE); extern void UniVolEffect(UWORD,UBYTE); /*========== Module Commands */ enum { /* Simple note */ UNI_NOTE = 1, /* Instrument change */ UNI_INSTRUMENT, /* Protracker effects */ UNI_PTEFFECT0, /* arpeggio */ UNI_PTEFFECT1, /* porta up */ UNI_PTEFFECT2, /* porta down */ UNI_PTEFFECT3, /* porta to note */ UNI_PTEFFECT4, /* vibrato */ UNI_PTEFFECT5, /* dual effect 3+A */ UNI_PTEFFECT6, /* dual effect 4+A */ UNI_PTEFFECT7, /* tremolo */ UNI_PTEFFECT8, /* pan */ UNI_PTEFFECT9, /* sample offset */ UNI_PTEFFECTA, /* volume slide */ UNI_PTEFFECTB, /* pattern jump */ UNI_PTEFFECTC, /* set volume */ UNI_PTEFFECTD, /* pattern break */ UNI_PTEFFECTE, /* extended effects */ UNI_PTEFFECTF, /* set speed */ /* Scream Tracker effects */ UNI_S3MEFFECTA, /* set speed */ UNI_S3MEFFECTD, /* volume slide */ UNI_S3MEFFECTE, /* porta down */ UNI_S3MEFFECTF, /* porta up */ UNI_S3MEFFECTI, /* tremor */ UNI_S3MEFFECTQ, /* retrig */ UNI_S3MEFFECTR, /* tremolo */ UNI_S3MEFFECTT, /* set tempo */ UNI_S3MEFFECTU, /* fine vibrato */ UNI_KEYOFF, /* note off */ /* Fast Tracker effects */ UNI_KEYFADE, /* note fade */ UNI_VOLEFFECTS, /* volume column effects */ UNI_XMEFFECT4, /* vibrato */ UNI_XMEFFECT6, /* dual effect 4+A */ UNI_XMEFFECTA, /* volume slide */ UNI_XMEFFECTE1, /* fine porta up */ UNI_XMEFFECTE2, /* fine porta down */ UNI_XMEFFECTEA, /* fine volume slide up */ UNI_XMEFFECTEB, /* fine volume slide down */ UNI_XMEFFECTG, /* set global volume */ UNI_XMEFFECTH, /* global volume slide */ UNI_XMEFFECTL, /* set envelope position */ UNI_XMEFFECTP, /* pan slide */ UNI_XMEFFECTX1, /* extra fine porta up */ UNI_XMEFFECTX2, /* extra fine porta down */ /* Impulse Tracker effects */ UNI_ITEFFECTG, /* porta to note */ UNI_ITEFFECTH, /* vibrato */ UNI_ITEFFECTI, /* tremor (xy not incremented) */ UNI_ITEFFECTM, /* set channel volume */ UNI_ITEFFECTN, /* slide / fineslide channel volume */ UNI_ITEFFECTP, /* slide / fineslide channel panning */ UNI_ITEFFECTT, /* slide tempo */ UNI_ITEFFECTU, /* fine vibrato */ UNI_ITEFFECTW, /* slide / fineslide global volume */ UNI_ITEFFECTY, /* panbrello */ UNI_ITEFFECTZ, /* resonant filters */ UNI_ITEFFECTS0, /* UltraTracker effects */ UNI_ULTEFFECT9, /* Sample fine offset */ /* OctaMED effects */ UNI_MEDSPEED, UNI_MEDEFFECTF1,/* play note twice */ UNI_MEDEFFECTF2,/* delay note */ UNI_MEDEFFECTF3,/* play note three times */ /* Oktalyzer effects */ UNI_OKTARP, /* arpeggio */ UNI_LAST }; extern UWORD unioperands[UNI_LAST]; /* IT / S3M Extended SS effects: */ enum { SS_GLISSANDO = 1, SS_FINETUNE, SS_VIBWAVE, SS_TREMWAVE, SS_PANWAVE, SS_FRAMEDELAY, SS_S7EFFECTS, SS_PANNING, SS_SURROUND, SS_HIOFFSET, SS_PATLOOP, SS_NOTECUT, SS_NOTEDELAY, SS_PATDELAY }; /* IT Volume column effects */ enum { VOL_VOLUME = 1, VOL_PANNING, VOL_VOLSLIDE, VOL_PITCHSLIDEDN, VOL_PITCHSLIDEUP, VOL_PORTAMENTO, VOL_VIBRATO }; /* IT resonant filter information */ #define UF_MAXMACRO 0x10 #define UF_MAXFILTER 0x100 #define FILT_CUT 0x80 #define FILT_RESONANT 0x81 typedef struct FILTER { UBYTE filter,inf; } FILTER; /*========== Instruments */ /* Instrument format flags */ #define IF_OWNPAN 1 #define IF_PITCHPAN 2 /* Envelope flags: */ #define EF_ON 1 #define EF_SUSTAIN 2 #define EF_LOOP 4 #define EF_VOLENV 8 /* New Note Action Flags */ #define NNA_CUT 0 #define NNA_CONTINUE 1 #define NNA_OFF 2 #define NNA_FADE 3 #define NNA_MASK 3 #define DCT_OFF 0 #define DCT_NOTE 1 #define DCT_SAMPLE 2 #define DCT_INST 3 #define DCA_CUT 0 #define DCA_OFF 1 #define DCA_FADE 2 #define KEY_KICK 0 #define KEY_OFF 1 #define KEY_FADE 2 #define KEY_KILL (KEY_OFF|KEY_FADE) #define KICK_ABSENT 0 #define KICK_NOTE 1 #define KICK_KEYOFF 2 #define KICK_ENV 4 #define AV_IT 1 /* IT vs. XM vibrato info */ /*========== Playing */ #define POS_NONE (-2) /* no loop position defined */ #define LAST_PATTERN (UWORD)(-1) /* special ``end of song'' pattern */ typedef struct ENVPR { UBYTE flg; /* envelope flag */ UBYTE pts; /* number of envelope points */ UBYTE susbeg; /* envelope sustain index begin */ UBYTE susend; /* envelope sustain index end */ UBYTE beg; /* envelope loop begin */ UBYTE end; /* envelope loop end */ SWORD p; /* current envelope counter */ UWORD a; /* envelope index a */ UWORD b; /* envelope index b */ ENVPT* env; /* envelope points */ } ENVPR; typedef struct MP_CHANNEL { INSTRUMENT* i; SAMPLE *s; UBYTE sample; /* which sample number */ UBYTE note; /* the audible note as heard, direct rep of period */ SWORD outvolume; /* output volume (vol + sampcol + instvol) */ SBYTE chanvol; /* channel's "global" volume */ UWORD fadevol; /* fading volume rate */ SWORD panning; /* panning position */ UBYTE kick; /* if true = sample has to be restarted */ UWORD period; /* period to play the sample at */ UBYTE nna; /* New note action type + master/slave flags */ UBYTE volflg; /* volume envelope settings */ UBYTE panflg; /* panning envelope settings */ UBYTE pitflg; /* pitch envelope settings */ UBYTE keyoff; /* if true = fade out and stuff */ SWORD handle; /* which sample-handle */ UBYTE notedelay; /* (used for note delay) */ SLONG start; /* The starting byte index in the sample */ } MP_CHANNEL; typedef struct MP_CONTROL { struct MP_CHANNEL main; struct MP_VOICE* slave; /* Audio Slave of current effects control channel */ UBYTE slavechn; /* Audio Slave of current effects control channel */ UBYTE muted; /* if set, channel not played */ UWORD ultoffset; /* fine sample offset memory */ UBYTE anote; /* the note that indexes the audible */ UBYTE oldnote; SWORD ownper; SWORD ownvol; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE* row; /* row currently playing on this channel */ SBYTE retrig; /* retrig value (0 means don't retrig) */ ULONG speed; /* what finetune to use */ SWORD volume; /* amiga volume (0 t/m 64) to play the sample at */ SWORD tmpvolume; /* tmp volume */ UWORD tmpperiod; /* tmp period */ UWORD wantedperiod;/* period to slide to (with effect 3 or 5) */ UBYTE arpmem; /* arpeggio command memory */ UBYTE pansspd; /* panslide speed */ UWORD slidespeed; UWORD portspeed; /* noteslide speed (toneportamento) */ UBYTE s3mtremor; /* s3m tremor (effect I) counter */ UBYTE s3mtronof; /* s3m tremor ontime/offtime */ UBYTE s3mvolslide;/* last used volslide */ SBYTE sliding; UBYTE s3mrtgspeed;/* last used retrig speed */ UBYTE s3mrtgslide;/* last used retrig slide */ UBYTE glissando; /* glissando (0 means off) */ UBYTE wavecontrol; SBYTE vibpos; /* current vibrato position */ UBYTE vibspd; /* "" speed */ UBYTE vibdepth; /* "" depth */ SBYTE trmpos; /* current tremolo position */ UBYTE trmspd; /* "" speed */ UBYTE trmdepth; /* "" depth */ UBYTE fslideupspd; UBYTE fslidednspd; UBYTE fportupspd; /* fx E1 (extra fine portamento up) data */ UBYTE fportdnspd; /* fx E2 (extra fine portamento dn) data */ UBYTE ffportupspd;/* fx X1 (extra fine portamento up) data */ UBYTE ffportdnspd;/* fx X2 (extra fine portamento dn) data */ ULONG hioffset; /* last used high order of sample offset */ UWORD soffset; /* last used low order of sample-offset (effect 9) */ UBYTE sseffect; /* last used Sxx effect */ UBYTE ssdata; /* last used Sxx data info */ UBYTE chanvolslide;/* last used channel volume slide */ UBYTE panbwave; /* current panbrello waveform */ UBYTE panbpos; /* current panbrello position */ SBYTE panbspd; /* "" speed */ UBYTE panbdepth; /* "" depth */ UWORD newsamp; /* set to 1 upon a sample / inst change */ UBYTE voleffect; /* Volume Column Effect Memory as used by IT */ UBYTE voldata; /* Volume Column Data Memory */ SWORD pat_reppos; /* patternloop position */ UWORD pat_repcnt; /* times to loop */ } MP_CONTROL; /* Used by NNA only player (audio control. AUDTMP is used for full effects control). */ typedef struct MP_VOICE { struct MP_CHANNEL main; ENVPR venv; ENVPR penv; ENVPR cenv; UWORD avibpos; /* autovibrato pos */ UWORD aswppos; /* autovibrato sweep pos */ ULONG totalvol; /* total volume of channel (before global mixings) */ BOOL mflag; SWORD masterchn; UWORD masterperiod; MP_CONTROL* master; /* index of "master" effects channel */ } MP_VOICE; /*========== Loaders */ typedef struct MLOADER { struct MLOADER* next; CHAR* type; CHAR* version; BOOL (*Init)(void); BOOL (*Test)(void); BOOL (*Load)(BOOL); void (*Cleanup)(void); CHAR* (*LoadTitle)(void); } MLOADER; /* internal loader variables */ extern MREADER* modreader; extern UWORD finetune[16]; extern MODULE of; /* static unimod loading space */ extern UWORD npertab[7*OCTAVE]; /* used by the original MOD loaders */ extern SBYTE remap[UF_MAXCHAN]; /* for removing empty channels */ extern UBYTE* poslookup; /* lookup table for pattern jumps after blank pattern removal */ extern UWORD poslookupcnt; extern UWORD* origpositions; extern BOOL filters; /* resonant filters in use */ extern UBYTE activemacro; /* active midi macro number for Sxx */ extern UBYTE filtermacros[UF_MAXMACRO]; /* midi macro settings */ extern FILTER filtersettings[UF_MAXFILTER]; /* computed filter settings */ extern int* noteindex; /*========== Internal loader interface */ extern BOOL ReadComment(UWORD); extern BOOL ReadLinedComment(UWORD,UWORD); extern BOOL AllocPositions(int); extern BOOL AllocPatterns(void); extern BOOL AllocTracks(void); extern BOOL AllocInstruments(void); extern BOOL AllocSamples(void); extern CHAR* DupStr(CHAR*, UWORD, BOOL); /* loader utility functions */ extern int* AllocLinear(void); extern void FreeLinear(void); extern int speed_to_finetune(ULONG,int); extern void S3MIT_ProcessCmd(UBYTE,UBYTE,unsigned int); extern void S3MIT_CreateOrders(BOOL); /* flags for S3MIT_ProcessCmd */ #define S3MIT_OLDSTYLE 1 /* behave as old scream tracker */ #define S3MIT_IT 2 /* behave as impulse tracker */ #define S3MIT_SCREAM 4 /* enforce scream tracker specific limits */ /* used to convert c4spd to linear XM periods (IT and IMF loaders). */ extern UWORD getlinearperiod(UWORD,ULONG); extern ULONG getfrequency(UWORD,ULONG); /* loader shared data */ #define STM_NTRACKERS 3 extern const CHAR *STM_Signatures[STM_NTRACKERS]; /*========== Player interface */ extern int Player_Init(MODULE*); extern void Player_Exit(MODULE*); extern void Player_HandleTick(void); /*========== Drivers */ /* max. number of handles a driver has to provide. (not strict) */ #define MAXSAMPLEHANDLES 384 /* These variables can be changed at ANY time and results will be immediate */ extern UWORD md_bpm; /* current song / hardware BPM rate */ /* Variables below can be changed via MD_SetNumVoices at any time. However, a call to MD_SetNumVoicess while the driver is active will cause the sound to skip slightly. */ extern UBYTE md_numchn; /* number of song + sound effects voices */ extern UBYTE md_sngchn; /* number of song voices */ extern UBYTE md_sfxchn; /* number of sound effects voices */ extern UBYTE md_hardchn; /* number of hardware mixed voices */ extern UBYTE md_softchn; /* number of software mixed voices */ /* This is for use by the hardware drivers only. It points to the registered tickhandler function. */ extern void (*md_player)(void); extern SWORD MD_SampleLoad(SAMPLOAD*,int); extern void MD_SampleUnload(SWORD); extern ULONG MD_SampleSpace(int); extern ULONG MD_SampleLength(int,SAMPLE*); /* uLaw conversion */ extern void unsignedtoulaw(char *,int); /* Parameter extraction helper */ extern CHAR *MD_GetAtom(CHAR*, CHAR*, BOOL); /* Internal software mixer stuff */ extern void VC_SetupPointers(void); extern int VC1_Init(void); extern int VC2_Init(void); #if (MIKMOD_UNIX) /* POSIX helper functions */ extern BOOL MD_Access(CHAR *); extern int MD_DropPrivileges(void); #endif /* Macro to define a missing driver, yet allowing binaries to dynamically link with the library without missing symbol errors */ #define MISSING(a) MDRIVER a = { NULL, NULL, NULL, 0, 0 } /*========== Prototypes for non-MT safe versions of some public functions */ extern void _mm_registerdriver(struct MDRIVER*); extern void _mm_registerloader(struct MLOADER*); extern BOOL MikMod_Active_internal(void); extern void MikMod_DisableOutput_internal(void); extern int MikMod_EnableOutput_internal(void); extern void MikMod_Exit_internal(void); extern int MikMod_SetNumVoices_internal(int,int); extern void Player_Exit_internal(MODULE*); extern void Player_Stop_internal(void); extern BOOL Player_Paused_internal(void); extern void Sample_Free_internal(SAMPLE*); extern void Voice_Play_internal(SBYTE,SAMPLE*,ULONG); extern void Voice_SetFrequency_internal(SBYTE,ULONG); extern void Voice_SetPanning_internal(SBYTE,ULONG); extern void Voice_SetVolume_internal(SBYTE,UWORD); extern void Voice_Stop_internal(SBYTE); extern BOOL Voice_Stopped_internal(SBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/include/mikmod.h.in0000644000000000000000000006327712262033674015754 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library include file ==============================================================================*/ #ifndef _MIKMOD_H_ #define _MIKMOD_H_ #include #include #ifdef __cplusplus extern "C" { #endif /* * ========== Compiler magic for shared libraries * * ========== NOTE TO WINDOWS DEVELOPERS: * If you are compiling for Windows and will link to the static library * (libmikmod.a with MinGW, or mikmod_static.lib with MSVC or LCC, etc), * you must define MIKMOD_STATIC in your project. Otherwise, dllimport * will be assumed. */ #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MIKMOD_BUILD) && defined(DLL_EXPORT) /* building libmikmod as a dll for windows */ # define MIKMODAPI __declspec(dllexport) # elif defined(MIKMOD_BUILD) || defined(MIKMOD_STATIC) /* building or using static libmikmod for windows */ # define MIKMODAPI # else # define MIKMODAPI __declspec(dllimport) /* using libmikmod dll for windows */ # endif /* SYM_VISIBILITY should be defined if both the compiler * and the target support the visibility attributes. the * configury does that automatically. for the standalone * makefiles, etc, the developer should add the required * flags, i.e.: -DSYM_VISIBILITY -fvisibility=hidden */ #elif defined(MIKMOD_BUILD) && defined(SYM_VISIBILITY) # define MIKMODAPI __attribute__((visibility("default"))) #else # define MIKMODAPI #endif /* * ========== Library version */ #define LIBMIKMOD_VERSION_MAJOR @LIBMIKMOD_MAJOR_VERSION@L #define LIBMIKMOD_VERSION_MINOR @LIBMIKMOD_MINOR_VERSION@L #define LIBMIKMOD_REVISION @LIBMIKMOD_MICRO_VERSION@L #define LIBMIKMOD_VERSION \ ((LIBMIKMOD_VERSION_MAJOR<<16)| \ (LIBMIKMOD_VERSION_MINOR<< 8)| \ (LIBMIKMOD_REVISION)) MIKMODAPI extern long MikMod_GetVersion(void); /* * ========== Platform independent-type definitions */ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include /* Avoid conflicts with windef.h */ #define SBYTE _mm_SBYTE #define UBYTE _mm_UBYTE #define SWORD _mm_SWORD #define UWORD _mm_UWORD #define SLONG _mm_SLONG #define ULONG _mm_ULONG #define BOOL _mm_BOOL #define CHAR _mm_CHAR #endif #if defined(__OS2__)||defined(__EMX__) #define INCL_DOSSEMAPHORES #include #else typedef char CHAR; #endif @DOES_NOT_HAVE_SIGNED@ #if defined (_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) /* 64 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed int SLONG; /* 4 bytes, signed */ typedef unsigned int ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #else /* 32 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed long SLONG; /* 4 bytes, signed */ #if !defined(__OS2__)&&!defined(__EMX__) typedef unsigned long ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #endif #endif /* * ========== Error codes */ enum { MMERR_OPENING_FILE = 1, MMERR_OUT_OF_MEMORY, MMERR_DYNAMIC_LINKING, MMERR_SAMPLE_TOO_BIG, MMERR_OUT_OF_HANDLES, MMERR_UNKNOWN_WAVE_TYPE, MMERR_LOADING_PATTERN, MMERR_LOADING_TRACK, MMERR_LOADING_HEADER, MMERR_LOADING_SAMPLEINFO, MMERR_NOT_A_MODULE, MMERR_NOT_A_STREAM, MMERR_MED_SYNTHSAMPLES, MMERR_ITPACK_INVALID_DATA, MMERR_DETECTING_DEVICE, MMERR_INVALID_DEVICE, MMERR_INITIALIZING_MIXER, MMERR_OPENING_AUDIO, MMERR_8BIT_ONLY, MMERR_16BIT_ONLY, MMERR_STEREO_ONLY, MMERR_ULAW, MMERR_NON_BLOCK, MMERR_AF_AUDIO_PORT, MMERR_AIX_CONFIG_INIT, MMERR_AIX_CONFIG_CONTROL, MMERR_AIX_CONFIG_START, MMERR_GUS_SETTINGS, MMERR_GUS_RESET, MMERR_GUS_TIMER, MMERR_HP_SETSAMPLESIZE, MMERR_HP_SETSPEED, MMERR_HP_CHANNELS, MMERR_HP_AUDIO_OUTPUT, MMERR_HP_AUDIO_DESC, MMERR_HP_BUFFERSIZE, MMERR_OSS_SETFRAGMENT, MMERR_OSS_SETSAMPLESIZE, MMERR_OSS_SETSTEREO, MMERR_OSS_SETSPEED, MMERR_SGI_SPEED, MMERR_SGI_16BIT, MMERR_SGI_8BIT, MMERR_SGI_STEREO, MMERR_SGI_MONO, MMERR_SUN_INIT, MMERR_OS2_MIXSETUP, MMERR_OS2_SEMAPHORE, MMERR_OS2_TIMER, MMERR_OS2_THREAD, MMERR_DS_PRIORITY, MMERR_DS_BUFFER, MMERR_DS_FORMAT, MMERR_DS_NOTIFY, MMERR_DS_EVENT, MMERR_DS_THREAD, MMERR_DS_UPDATE, MMERR_WINMM_HANDLE, MMERR_WINMM_ALLOCATED, MMERR_WINMM_DEVICEID, MMERR_WINMM_FORMAT, MMERR_WINMM_UNKNOWN, MMERR_MAC_SPEED, MMERR_MAC_START, ___filler_MMERR=(MMERR_MAC_START+22),/* 65-86 exist only in libmikmod3. */ MMERR_ALSA_NOCONFIG, MMERR_ALSA_SETPARAMS, MMERR_ALSA_SETFORMAT, MMERR_ALSA_SETRATE, MMERR_ALSA_SETCHANNELS, MMERR_ALSA_BUFFERSIZE, MMERR_ALSA_PCM_START, MMERR_ALSA_PCM_WRITE, MMERR_ALSA_PCM_RECOVER, MMERR_MAX }; /* * ========== Error handling */ typedef void (MikMod_handler)(void); typedef MikMod_handler *MikMod_handler_t; MIKMODAPI extern int MikMod_errno; MIKMODAPI extern BOOL MikMod_critical; MIKMODAPI extern char *MikMod_strerror(int); MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t); /* * ========== Library initialization and core functions */ struct MDRIVER; MIKMODAPI extern void MikMod_RegisterAllDrivers(void); MIKMODAPI extern CHAR* MikMod_InfoDriver(void); MIKMODAPI extern void MikMod_RegisterDriver(struct MDRIVER*); MIKMODAPI extern int MikMod_DriverFromAlias(CHAR*); MIKMODAPI extern int MikMod_Init(CHAR*); MIKMODAPI extern void MikMod_Exit(void); MIKMODAPI extern int MikMod_Reset(CHAR*); MIKMODAPI extern int MikMod_SetNumVoices(int,int); MIKMODAPI extern BOOL MikMod_Active(void); MIKMODAPI extern int MikMod_EnableOutput(void); MIKMODAPI extern void MikMod_DisableOutput(void); MIKMODAPI extern void MikMod_Update(void); MIKMODAPI extern BOOL MikMod_InitThreads(void); MIKMODAPI extern void MikMod_Lock(void); MIKMODAPI extern void MikMod_Unlock(void); /* * ========== Reader, Writer */ typedef struct MREADER { int (*Seek)(struct MREADER*,long,int); long (*Tell)(struct MREADER*); BOOL (*Read)(struct MREADER*,void*,size_t); int (*Get)(struct MREADER*); BOOL (*Eof)(struct MREADER*); } MREADER; typedef struct MWRITER { int (*Seek)(struct MWRITER*, long, int); long (*Tell)(struct MWRITER*); BOOL (*Write)(struct MWRITER*, void*, size_t); int (*Put)(struct MWRITER*, int); } MWRITER; /* * ========== Samples */ /* Sample playback should not be interrupted */ #define SFX_CRITICAL 1 /* Sample format [loading and in-memory] flags: */ #define SF_16BITS 0x0001 #define SF_STEREO 0x0002 #define SF_SIGNED 0x0004 #define SF_BIG_ENDIAN 0x0008 #define SF_DELTA 0x0010 #define SF_ITPACKED 0x0020 #define SF_FORMATMASK 0x003F /* General Playback flags */ #define SF_LOOP 0x0100 #define SF_BIDI 0x0200 #define SF_REVERSE 0x0400 #define SF_SUSTAIN 0x0800 #define SF_PLAYBACKMASK 0x0C00 /* Module-only Playback Flags */ #define SF_OWNPAN 0x1000 #define SF_UST_LOOP 0x2000 #define SF_EXTRAPLAYBACKMASK 0x3000 /* Panning constants */ #define PAN_LEFT 0 #define PAN_HALFLEFT 64 #define PAN_CENTER 128 #define PAN_HALFRIGHT 192 #define PAN_RIGHT 255 #define PAN_SURROUND 512 /* panning value for Dolby Surround */ typedef struct SAMPLE { SWORD panning; /* panning (0-255 or PAN_SURROUND) */ ULONG speed; /* Base playing speed/frequency of note */ UBYTE volume; /* volume 0-64 */ UWORD inflags; /* sample format on disk */ UWORD flags; /* sample format in memory */ ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ ULONG susbegin; /* sustain loop begin (in samples) \ Not Supported */ ULONG susend; /* sustain loop end / Yet! */ /* Variables used by the module player only! (ignored for sound effects) */ UBYTE globvol; /* global volume */ UBYTE vibflags; /* autovibrato flag stuffs */ UBYTE vibtype; /* Vibratos moved from INSTRUMENT to SAMPLE */ UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; CHAR* samplename; /* name of the sample */ /* Values used internally only */ UWORD avibpos; /* autovibrato pos [player use] */ UBYTE divfactor; /* for sample scaling, maintains proper period slides */ ULONG seekpos; /* seek position in file */ SWORD handle; /* sample handle used by individual drivers */ } SAMPLE; /* Sample functions */ MIKMODAPI extern SAMPLE *Sample_Load(CHAR*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern void Voice_SetVolume(SBYTE,UWORD); MIKMODAPI extern UWORD Voice_GetVolume(SBYTE); MIKMODAPI extern void Voice_SetFrequency(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetFrequency(SBYTE); MIKMODAPI extern void Voice_SetPanning(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetPanning(SBYTE); MIKMODAPI extern void Voice_Play(SBYTE,SAMPLE*,ULONG); MIKMODAPI extern void Voice_Stop(SBYTE); MIKMODAPI extern BOOL Voice_Stopped(SBYTE); MIKMODAPI extern SLONG Voice_GetPosition(SBYTE); MIKMODAPI extern ULONG Voice_RealVolume(SBYTE); /* * ========== Internal module representation (UniMod) */ /* Instrument definition - for information only, the only field which may be of use in user programs is the name field */ /* Instrument note count */ #define INSTNOTES 120 /* Envelope point */ typedef struct ENVPT { SWORD pos; SWORD val; } ENVPT; /* Envelope point count */ #define ENVPOINTS 32 /* Instrument structure */ typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS]; } INSTRUMENT; struct MP_CONTROL; struct MP_VOICE; /* Module definition */ /* maximum master channels supported */ #define UF_MAXCHAN 64 /* Module flags */ #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */ #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */ #define UF_INST 0x0004 /* Instruments are used */ #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */ #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */ #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */ #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */ #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */ #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */ #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */ #define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */ typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */ struct INSTRUMENT* instruments; /* all instruments */ struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */ struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */ struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */ } MODULE; /* * ========== Module loaders */ struct MLOADER; MIKMODAPI extern CHAR* MikMod_InfoLoader(void); MIKMODAPI extern void MikMod_RegisterAllLoaders(void); MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*); MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */ MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */ MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */ MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */ MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */ MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */ MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */ MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */ MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */ MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */ MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */ MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */ MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */ MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */ /* * ========== Module player */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*); MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*); MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern void Player_Stop(void); MIKMODAPI extern void Player_TogglePause(void); MIKMODAPI extern BOOL Player_Paused(void); MIKMODAPI extern void Player_NextPosition(void); MIKMODAPI extern void Player_PrevPosition(void); MIKMODAPI extern void Player_SetPosition(UWORD); MIKMODAPI extern BOOL Player_Muted(UBYTE); MIKMODAPI extern void Player_SetVolume(SWORD); MIKMODAPI extern MODULE* Player_GetModule(void); MIKMODAPI extern void Player_SetSpeed(UWORD); MIKMODAPI extern void Player_SetTempo(UWORD); MIKMODAPI extern void Player_Unmute(SLONG,...); MIKMODAPI extern void Player_Mute(SLONG,...); MIKMODAPI extern void Player_ToggleMute(SLONG,...); MIKMODAPI extern int Player_GetChannelVoice(UBYTE); MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE); typedef void (*MikMod_player_t)(void); MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t); #define MUTE_EXCLUSIVE 32000 #define MUTE_INCLUSIVE 32001 /* * ========== Drivers */ enum { MD_MUSIC = 0, MD_SNDFX }; enum { MD_HARDWARE = 0, MD_SOFTWARE }; /* Mixing flags */ /* These ones take effect only after MikMod_Init or MikMod_Reset */ #define DMODE_16BITS 0x0001 /* enable 16 bit output */ #define DMODE_STEREO 0x0002 /* enable stereo output */ #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */ #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */ #define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */ /* These take effect immediately. */ #define DMODE_SURROUND 0x0100 /* enable surround sound */ #define DMODE_INTERP 0x0200 /* enable interpolation */ #define DMODE_REVERSE 0x0400 /* reverse stereo */ struct SAMPLOAD; typedef struct MDRIVER { struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR* Alias; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); int (*Init) (void); void (*Exit) (void); int (*Reset) (void); int (*SetNumVoices) (void); int (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE); } MDRIVER; /* These variables can be changed at ANY time and results will be immediate */ MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */ MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */ MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */ MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */ MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) */ /* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */ MIKMODAPI extern UWORD md_device; /* device */ MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */ MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above */ /* The following variable should not be changed! */ MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. */ /* Known drivers list */ MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */ MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */ MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */ MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */ MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */ MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */ MIKMODAPI extern struct MDRIVER drv_sam9407;/* Linux sam9407 driver */ MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */ MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */ MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */ MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */ MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */ MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */ MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */ MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */ MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */ MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */ MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */ MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */ MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */ /*========== Virtual channel mixer interface (for user-supplied drivers only) */ MIKMODAPI extern int VC_Init(void); MIKMODAPI extern void VC_Exit(void); MIKMODAPI extern int VC_SetNumVoices(void); MIKMODAPI extern ULONG VC_SampleSpace(int); MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*); MIKMODAPI extern int VC_PlayStart(void); MIKMODAPI extern void VC_PlayStop(void); MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int); MIKMODAPI extern void VC_SampleUnload(SWORD); MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG); MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG); MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD); MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE); MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE); MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE); MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); MIKMODAPI extern void VC_VoiceStop(UBYTE); MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE); MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE); MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/include/Makefile.am0000644000000000000000000000027412223520050015720 0ustar rootroot### @#!&*%$@ autoconf wants to have a mikmod_build.h.in file !!! EXTRA_DIST = mikmod_internals.h mikmod_build.h.in # don't distribute generated mikmod.h nodist_include_HEADERS = mikmod.h libmikmod-3.1.16/include/mikmod_build.h.in0000644000000000000000000000000010003535131017064 0ustar rootrootlibmikmod-3.1.16/libmikmod.m40000644000000000000000000002202012237151100014444 0ustar rootroot# Configure paths for libmikmod # # Derived from glib.m4 (Owen Taylor 97-11-3) # Improved by Chris Butler # dnl AM_PATH_LIBMIKMOD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libmikmod, and define LIBMIKMOD_CFLAGS, LIBMIKMOD_LIBS and dnl LIBMIKMOD_LDADD dnl AC_DEFUN([AM_PATH_LIBMIKMOD], [dnl dnl Get the cflags and libraries from the libmikmod-config script dnl AC_ARG_WITH(libmikmod-prefix,[ --with-libmikmod-prefix=PFX Prefix where libmikmod is installed (optional)], libmikmod_config_prefix="$withval", libmikmod_config_prefix="") AC_ARG_WITH(libmikmod-exec-prefix,[ --with-libmikmod-exec-prefix=PFX Exec prefix where libmikmod is installed (optional)], libmikmod_config_exec_prefix="$withval", libmikmod_config_exec_prefix="") AC_ARG_ENABLE(libmikmodtest, [ --disable-libmikmodtest Do not try to compile and run a test libmikmod program], , enable_libmikmodtest=yes) if test x$libmikmod_config_exec_prefix != x ; then libmikmod_config_args="$libmikmod_config_args --exec-prefix=$libmikmod_config_exec_prefix" if test x${LIBMIKMOD_CONFIG+set} != xset ; then LIBMIKMOD_CONFIG=$libmikmod_config_exec_prefix/bin/libmikmod-config fi fi if test x$libmikmod_config_prefix != x ; then libmikmod_config_args="$libmikmod_config_args --prefix=$libmikmod_config_prefix" if test x${LIBMIKMOD_CONFIG+set} != xset ; then LIBMIKMOD_CONFIG=$libmikmod_config_prefix/bin/libmikmod-config fi fi AC_PATH_PROG(LIBMIKMOD_CONFIG, libmikmod-config, no) min_libmikmod_version=ifelse([$1], ,3.1.5,$1) AC_MSG_CHECKING(for libmikmod - version >= $min_libmikmod_version) no_libmikmod="" if test "$LIBMIKMOD_CONFIG" = "no" ; then no_libmikmod=yes else LIBMIKMOD_CFLAGS=`$LIBMIKMOD_CONFIG $libmikmod_config_args --cflags` LIBMIKMOD_LIBS=`$LIBMIKMOD_CONFIG $libmikmod_config_args --libs` LIBMIKMOD_LDADD=`$LIBMIKMOD_CONFIG $libmikmod_config_args --ldadd` libmikmod_config_major_version=`$LIBMIKMOD_CONFIG $libmikmod_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\).*/\1/'` libmikmod_config_minor_version=`$LIBMIKMOD_CONFIG $libmikmod_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\).*/\2/'` libmikmod_config_micro_version=`$LIBMIKMOD_CONFIG $libmikmod_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\).*/\3/'` if test "x$enable_libmikmodtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" AC_LANG_SAVE AC_LANG_C CFLAGS="$CFLAGS $LIBMIKMOD_CFLAGS $LIBMIKMOD_LDADD" LIBS="$LIBMIKMOD_LIBS $LIBS" dnl dnl Now check if the installed libmikmod is sufficiently new. (Also sanity dnl checks the results of libmikmod-config to some extent dnl rm -f conf.mikmodtest AC_TRY_RUN([ #include #include #include #include char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *) malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main() { int major,minor,micro; int libmikmod_major_version,libmikmod_minor_version,libmikmod_micro_version; char *tmp_version; system("touch conf.mikmodtest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_libmikmod_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_libmikmod_version"); exit(1); } libmikmod_major_version=(MikMod_GetVersion() >> 16) & 255; libmikmod_minor_version=(MikMod_GetVersion() >> 8) & 255; libmikmod_micro_version=(MikMod_GetVersion() ) & 255; if ((libmikmod_major_version != $libmikmod_config_major_version) || (libmikmod_minor_version != $libmikmod_config_minor_version) || (libmikmod_micro_version != $libmikmod_config_micro_version)) { printf("\n*** 'libmikmod-config --version' returned %d.%d.%d, but libmikmod (%d.%d.%d)\n", $libmikmod_config_major_version, $libmikmod_config_minor_version, $libmikmod_config_micro_version, libmikmod_major_version, libmikmod_minor_version, libmikmod_micro_version); printf ("*** was found! If libmikmod-config was correct, then it is best\n"); printf ("*** to remove the old version of libmikmod. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If libmikmod-config was wrong, set the environment variable LIBMIKMOD_CONFIG\n"); printf("*** to point to the correct copy of libmikmod-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } else if ((libmikmod_major_version != LIBMIKMOD_VERSION_MAJOR) || (libmikmod_minor_version != LIBMIKMOD_VERSION_MINOR) || (libmikmod_micro_version != LIBMIKMOD_REVISION)) { printf("*** libmikmod header files (version %d.%d.%d) do not match\n", LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION); printf("*** library (version %d.%d.%d)\n", libmikmod_major_version, libmikmod_minor_version, libmikmod_micro_version); } else { if ((libmikmod_major_version > major) || ((libmikmod_major_version == major) && (libmikmod_minor_version > minor)) || ((libmikmod_major_version == major) && (libmikmod_minor_version == minor) && (libmikmod_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of libmikmod (%d.%d.%d) was found.\n", libmikmod_major_version, libmikmod_minor_version, libmikmod_micro_version); printf("*** You need a version of libmikmod newer than %d.%d.%d.\n", major, minor, micro); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the libmikmod-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of libmikmod, but you can also set the LIBMIKMOD_CONFIG environment to point to the\n"); printf("*** correct copy of libmikmod-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_libmikmod=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" AC_LANG_RESTORE fi fi if test "x$no_libmikmod" = x ; then AC_MSG_RESULT([yes, `$LIBMIKMOD_CONFIG --version`]) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$LIBMIKMOD_CONFIG" = "no" ; then echo "*** The libmikmod-config script installed by libmikmod could not be found" echo "*** If libmikmod was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the LIBMIKMOD_CONFIG environment variable to the" echo "*** full path to libmikmod-config." else if test -f conf.mikmodtest ; then : else echo "*** Could not run libmikmod test program, checking why..." CFLAGS="$CFLAGS $LIBMIKMOD_CFLAGS" LIBS="$LIBS $LIBMIKMOD_LIBS" AC_LANG_SAVE AC_LANG_C AC_TRY_LINK([ #include #include ], [ return (MikMod_GetVersion()!=0); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding libmikmod or finding the wrong" echo "*** version of libmikmod. If it is not finding libmikmod, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location. Also, make sure you have run ldconfig if that" echo "*** is required on your system." echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means libmikmod was incorrectly installed" echo "*** or that you have moved libmikmod since it was installed. In the latter case, you" echo "*** may want to edit the libmikmod-config script: $LIBMIKMOD_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" AC_LANG_RESTORE fi fi LIBMIKMOD_CFLAGS="" LIBMIKMOD_LIBS="" LIBMIKMOD_LDADD="" ifelse([$3], , :, [$3]) fi AC_SUBST(LIBMIKMOD_CFLAGS) AC_SUBST(LIBMIKMOD_LIBS) AC_SUBST(LIBMIKMOD_LDADD) rm -f conf.mikmodtest ]) libmikmod-3.1.16/Makefile.in0000644000000000000000000014570712260336530014332 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/libmikmod-config.in $(srcdir)/libmikmod.pc.in \ $(srcdir)/libmikmod.spec.in $(top_srcdir)/configure AUTHORS \ COPYING.LESSER COPYING.LIB INSTALL NEWS TODO autotools/compile \ autotools/config.guess autotools/config.sub autotools/depcomp \ autotools/install-sh autotools/ltmain.sh autotools/missing \ autotools/mkinstalldirs autotools/texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(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 = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libmikmod-config libmikmod.pc libmikmod.spec CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)" LTLIBRARIES = $(lib_LTLIBRARIES) LIBOBJDIR = posix/ libmikmod_la_DEPENDENCIES = @LTLIBOBJS@ am__dirstamp = $(am__leading_dot)dirstamp am_libmikmod_la_OBJECTS = dlapi/dl_hpux.lo drivers/drv_AF.lo \ drivers/drv_aix.lo drivers/drv_alsa.lo drivers/drv_dart.lo \ drivers/drv_ds.lo drivers/drv_esd.lo drivers/drv_hp.lo \ drivers/drv_mac.lo drivers/drv_nos.lo drivers/drv_os2.lo \ drivers/drv_oss.lo drivers/drv_pipe.lo drivers/drv_raw.lo \ drivers/drv_sam9407.lo drivers/drv_sgi.lo \ drivers/drv_stdout.lo drivers/drv_sun.lo drivers/drv_ultra.lo \ drivers/drv_wav.lo drivers/drv_win.lo loaders/load_669.lo \ loaders/load_amf.lo loaders/load_dsm.lo loaders/load_far.lo \ loaders/load_gdm.lo loaders/load_imf.lo loaders/load_it.lo \ loaders/load_m15.lo loaders/load_med.lo loaders/load_mod.lo \ loaders/load_mtm.lo loaders/load_okt.lo loaders/load_s3m.lo \ loaders/load_stm.lo loaders/load_stx.lo loaders/load_ult.lo \ loaders/load_uni.lo loaders/load_xm.lo mmio/mmalloc.lo \ mmio/mmerror.lo mmio/mmio.lo playercode/mdreg.lo \ playercode/mdriver.lo playercode/mdulaw.lo \ playercode/mloader.lo playercode/mlreg.lo playercode/mlutil.lo \ playercode/mplayer.lo playercode/munitrk.lo playercode/mwav.lo \ playercode/npertab.lo playercode/sloader.lo \ playercode/virtch.lo playercode/virtch2.lo \ playercode/virtch_common.lo libmikmod_la_OBJECTS = $(am_libmikmod_la_OBJECTS) libmikmod_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmikmod_la_LDFLAGS) $(LDFLAGS) -o $@ SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libmikmod_la_SOURCES) DIST_SOURCES = $(libmikmod_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(m4data_DATA) $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) 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 am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" 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@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ AUTOMAKE_OPTIONS = foreign SUBDIRS = drivers include loaders mmio playercode posix \ dlapi macintosh os2 win32 docs bin_SCRIPTS = libmikmod-config EXTRA_DIST = libmikmod-config.in libmikmod.m4 libmikmod.pc.in \ libmikmod.spec.in libmikmod.spec COPYING.LESSER m4datadir = $(datadir)/aclocal m4data_DATA = libmikmod.m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmikmod.pc ACLOCAL_AMFLAGS = -I m4 # always define MIKMOD_BUILD when building libmikmod # regardless of static build or shared library build.. AM_CFLAGS = -DMIKMOD_BUILD=1 AM_CPPFLAGS = -I@top_builddir@/include -I@top_srcdir@/include lib_LTLIBRARIES = libmikmod.la libmikmod_la_SOURCES = \ dlapi/dl_hpux.c \ drivers/drv_AF.c \ drivers/drv_aix.c \ drivers/drv_alsa.c \ drivers/drv_dart.c \ drivers/drv_ds.c \ drivers/drv_esd.c \ drivers/drv_hp.c \ drivers/drv_mac.c \ drivers/drv_nos.c \ drivers/drv_os2.c \ drivers/drv_oss.c \ drivers/drv_pipe.c \ drivers/drv_raw.c \ drivers/drv_sam9407.c \ drivers/drv_sgi.c \ drivers/drv_stdout.c \ drivers/drv_sun.c \ drivers/drv_ultra.c \ drivers/drv_wav.c \ drivers/drv_win.c \ loaders/load_669.c \ loaders/load_amf.c \ loaders/load_dsm.c \ loaders/load_far.c \ loaders/load_gdm.c \ loaders/load_imf.c \ loaders/load_it.c \ loaders/load_m15.c \ loaders/load_med.c \ loaders/load_mod.c \ loaders/load_mtm.c \ loaders/load_okt.c \ loaders/load_s3m.c \ loaders/load_stm.c \ loaders/load_stx.c \ loaders/load_ult.c \ loaders/load_uni.c \ loaders/load_xm.c \ mmio/mmalloc.c \ mmio/mmerror.c \ mmio/mmio.c \ playercode/mdreg.c \ playercode/mdriver.c \ playercode/mdulaw.c \ playercode/mloader.c \ playercode/mlreg.c \ playercode/mlutil.c \ playercode/mplayer.c \ playercode/munitrk.c \ playercode/mwav.c \ playercode/npertab.c \ playercode/sloader.c \ playercode/virtch.c \ playercode/virtch2.c \ playercode/virtch_common.c libmikmod_la_LDFLAGS = -no-undefined -version-info @MIKMOD_LT_CURRENT@:@MIKMOD_LT_REVISION@:@MIKMOD_LT_AGE@ libmikmod_la_LIBADD = @LTLIBOBJS@ @LIBRARY_LIB@ all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .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): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 libmikmod-config: $(top_builddir)/config.status $(srcdir)/libmikmod-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ libmikmod.pc: $(top_builddir)/config.status $(srcdir)/libmikmod.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ libmikmod.spec: $(top_builddir)/config.status $(srcdir)/libmikmod.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done dlapi/$(am__dirstamp): @$(MKDIR_P) dlapi @: > dlapi/$(am__dirstamp) dlapi/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) dlapi/$(DEPDIR) @: > dlapi/$(DEPDIR)/$(am__dirstamp) dlapi/dl_hpux.lo: dlapi/$(am__dirstamp) \ dlapi/$(DEPDIR)/$(am__dirstamp) drivers/$(am__dirstamp): @$(MKDIR_P) drivers @: > drivers/$(am__dirstamp) drivers/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) drivers/$(DEPDIR) @: > drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_AF.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_aix.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_alsa.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_dart.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_ds.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_esd.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_hp.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_mac.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_nos.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_os2.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_oss.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_pipe.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_raw.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_sam9407.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_sgi.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_stdout.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_sun.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_ultra.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_wav.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) drivers/drv_win.lo: drivers/$(am__dirstamp) \ drivers/$(DEPDIR)/$(am__dirstamp) loaders/$(am__dirstamp): @$(MKDIR_P) loaders @: > loaders/$(am__dirstamp) loaders/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) loaders/$(DEPDIR) @: > loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_669.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_amf.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_dsm.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_far.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_gdm.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_imf.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_it.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_m15.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_med.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_mod.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_mtm.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_okt.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_s3m.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_stm.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_stx.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_ult.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_uni.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) loaders/load_xm.lo: loaders/$(am__dirstamp) \ loaders/$(DEPDIR)/$(am__dirstamp) mmio/$(am__dirstamp): @$(MKDIR_P) mmio @: > mmio/$(am__dirstamp) mmio/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) mmio/$(DEPDIR) @: > mmio/$(DEPDIR)/$(am__dirstamp) mmio/mmalloc.lo: mmio/$(am__dirstamp) mmio/$(DEPDIR)/$(am__dirstamp) mmio/mmerror.lo: mmio/$(am__dirstamp) mmio/$(DEPDIR)/$(am__dirstamp) mmio/mmio.lo: mmio/$(am__dirstamp) mmio/$(DEPDIR)/$(am__dirstamp) playercode/$(am__dirstamp): @$(MKDIR_P) playercode @: > playercode/$(am__dirstamp) playercode/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) playercode/$(DEPDIR) @: > playercode/$(DEPDIR)/$(am__dirstamp) playercode/mdreg.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mdriver.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mdulaw.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mloader.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mlreg.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mlutil.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mplayer.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/munitrk.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/mwav.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/npertab.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/sloader.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/virtch.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/virtch2.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) playercode/virtch_common.lo: playercode/$(am__dirstamp) \ playercode/$(DEPDIR)/$(am__dirstamp) libmikmod.la: $(libmikmod_la_OBJECTS) $(libmikmod_la_DEPENDENCIES) $(EXTRA_libmikmod_la_DEPENDENCIES) $(libmikmod_la_LINK) -rpath $(libdir) $(libmikmod_la_OBJECTS) $(libmikmod_la_LIBADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; 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 \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f dlapi/dl_hpux.$(OBJEXT) -rm -f dlapi/dl_hpux.lo -rm -f drivers/drv_AF.$(OBJEXT) -rm -f drivers/drv_AF.lo -rm -f drivers/drv_aix.$(OBJEXT) -rm -f drivers/drv_aix.lo -rm -f drivers/drv_alsa.$(OBJEXT) -rm -f drivers/drv_alsa.lo -rm -f drivers/drv_dart.$(OBJEXT) -rm -f drivers/drv_dart.lo -rm -f drivers/drv_ds.$(OBJEXT) -rm -f drivers/drv_ds.lo -rm -f drivers/drv_esd.$(OBJEXT) -rm -f drivers/drv_esd.lo -rm -f drivers/drv_hp.$(OBJEXT) -rm -f drivers/drv_hp.lo -rm -f drivers/drv_mac.$(OBJEXT) -rm -f drivers/drv_mac.lo -rm -f drivers/drv_nos.$(OBJEXT) -rm -f drivers/drv_nos.lo -rm -f drivers/drv_os2.$(OBJEXT) -rm -f drivers/drv_os2.lo -rm -f drivers/drv_oss.$(OBJEXT) -rm -f drivers/drv_oss.lo -rm -f drivers/drv_pipe.$(OBJEXT) -rm -f drivers/drv_pipe.lo -rm -f drivers/drv_raw.$(OBJEXT) -rm -f drivers/drv_raw.lo -rm -f drivers/drv_sam9407.$(OBJEXT) -rm -f drivers/drv_sam9407.lo -rm -f drivers/drv_sgi.$(OBJEXT) -rm -f drivers/drv_sgi.lo -rm -f drivers/drv_stdout.$(OBJEXT) -rm -f drivers/drv_stdout.lo -rm -f drivers/drv_sun.$(OBJEXT) -rm -f drivers/drv_sun.lo -rm -f drivers/drv_ultra.$(OBJEXT) -rm -f drivers/drv_ultra.lo -rm -f drivers/drv_wav.$(OBJEXT) -rm -f drivers/drv_wav.lo -rm -f drivers/drv_win.$(OBJEXT) -rm -f drivers/drv_win.lo -rm -f loaders/load_669.$(OBJEXT) -rm -f loaders/load_669.lo -rm -f loaders/load_amf.$(OBJEXT) -rm -f loaders/load_amf.lo -rm -f loaders/load_dsm.$(OBJEXT) -rm -f loaders/load_dsm.lo -rm -f loaders/load_far.$(OBJEXT) -rm -f loaders/load_far.lo -rm -f loaders/load_gdm.$(OBJEXT) -rm -f loaders/load_gdm.lo -rm -f loaders/load_imf.$(OBJEXT) -rm -f loaders/load_imf.lo -rm -f loaders/load_it.$(OBJEXT) -rm -f loaders/load_it.lo -rm -f loaders/load_m15.$(OBJEXT) -rm -f loaders/load_m15.lo -rm -f loaders/load_med.$(OBJEXT) -rm -f loaders/load_med.lo -rm -f loaders/load_mod.$(OBJEXT) -rm -f loaders/load_mod.lo -rm -f loaders/load_mtm.$(OBJEXT) -rm -f loaders/load_mtm.lo -rm -f loaders/load_okt.$(OBJEXT) -rm -f loaders/load_okt.lo -rm -f loaders/load_s3m.$(OBJEXT) -rm -f loaders/load_s3m.lo -rm -f loaders/load_stm.$(OBJEXT) -rm -f loaders/load_stm.lo -rm -f loaders/load_stx.$(OBJEXT) -rm -f loaders/load_stx.lo -rm -f loaders/load_ult.$(OBJEXT) -rm -f loaders/load_ult.lo -rm -f loaders/load_uni.$(OBJEXT) -rm -f loaders/load_uni.lo -rm -f loaders/load_xm.$(OBJEXT) -rm -f loaders/load_xm.lo -rm -f mmio/mmalloc.$(OBJEXT) -rm -f mmio/mmalloc.lo -rm -f mmio/mmerror.$(OBJEXT) -rm -f mmio/mmerror.lo -rm -f mmio/mmio.$(OBJEXT) -rm -f mmio/mmio.lo -rm -f playercode/mdreg.$(OBJEXT) -rm -f playercode/mdreg.lo -rm -f playercode/mdriver.$(OBJEXT) -rm -f playercode/mdriver.lo -rm -f playercode/mdulaw.$(OBJEXT) -rm -f playercode/mdulaw.lo -rm -f playercode/mloader.$(OBJEXT) -rm -f playercode/mloader.lo -rm -f playercode/mlreg.$(OBJEXT) -rm -f playercode/mlreg.lo -rm -f playercode/mlutil.$(OBJEXT) -rm -f playercode/mlutil.lo -rm -f playercode/mplayer.$(OBJEXT) -rm -f playercode/mplayer.lo -rm -f playercode/munitrk.$(OBJEXT) -rm -f playercode/munitrk.lo -rm -f playercode/mwav.$(OBJEXT) -rm -f playercode/mwav.lo -rm -f playercode/npertab.$(OBJEXT) -rm -f playercode/npertab.lo -rm -f playercode/sloader.$(OBJEXT) -rm -f playercode/sloader.lo -rm -f playercode/virtch.$(OBJEXT) -rm -f playercode/virtch.lo -rm -f playercode/virtch2.$(OBJEXT) -rm -f playercode/virtch2.lo -rm -f playercode/virtch_common.$(OBJEXT) -rm -f playercode/virtch_common.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@dlapi/$(DEPDIR)/dl_hpux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_AF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_aix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_alsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_dart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_ds.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_esd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_hp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_mac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_nos.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_os2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_oss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_pipe.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_raw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_sam9407.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_sgi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_stdout.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_sun.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_ultra.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_wav.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/drv_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_669.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_amf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_dsm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_far.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_gdm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_imf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_it.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_m15.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_med.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_mod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_mtm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_okt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_s3m.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_stm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_stx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_ult.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_uni.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@loaders/$(DEPDIR)/load_xm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@mmio/$(DEPDIR)/mmalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@mmio/$(DEPDIR)/mmerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@mmio/$(DEPDIR)/mmio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mdreg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mdriver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mdulaw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mloader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mlreg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mlutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mplayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/munitrk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/mwav.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/npertab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/sloader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/virtch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/virtch2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@playercode/$(DEPDIR)/virtch_common.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/memcmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/strcasecmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/strdup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/strstr.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 -o $@ $< .c.obj: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf dlapi/.libs dlapi/_libs -rm -rf drivers/.libs drivers/_libs -rm -rf loaders/.libs loaders/_libs -rm -rf mmio/.libs mmio/_libs -rm -rf playercode/.libs playercode/_libs distclean-libtool: -rm -f libtool config.lt install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(m4datadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(m4datadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(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: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -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 u+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-recursive all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive 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: -test -z "$(LIBOBJS)" || rm -f $(LIBOBJS) -test -z "$(LTLIBOBJS)" || rm -f $(LTLIBOBJS) 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) -rm -f dlapi/$(DEPDIR)/$(am__dirstamp) -rm -f dlapi/$(am__dirstamp) -rm -f drivers/$(DEPDIR)/$(am__dirstamp) -rm -f drivers/$(am__dirstamp) -rm -f loaders/$(DEPDIR)/$(am__dirstamp) -rm -f loaders/$(am__dirstamp) -rm -f mmio/$(DEPDIR)/$(am__dirstamp) -rm -f mmio/$(am__dirstamp) -rm -f playercode/$(DEPDIR)/$(am__dirstamp) -rm -f playercode/$(am__dirstamp) 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-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf dlapi/$(DEPDIR) drivers/$(DEPDIR) loaders/$(DEPDIR) mmio/$(DEPDIR) playercode/$(DEPDIR) posix/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-m4dataDATA install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf dlapi/$(DEPDIR) drivers/$(DEPDIR) loaders/$(DEPDIR) mmio/$(DEPDIR) playercode/$(DEPDIR) posix/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-libLTLIBRARIES \ uninstall-m4dataDATA uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS 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-libLTLIBRARIES install-m4dataDATA \ install-man install-pdf install-pdf-am install-pkgconfigDATA \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binSCRIPTS uninstall-libLTLIBRARIES \ uninstall-m4dataDATA uninstall-pkgconfigDATA # 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: libmikmod-3.1.16/playercode/0000755000000000000000000000000012262343244014400 5ustar rootrootlibmikmod-3.1.16/playercode/Makefile.in0000644000000000000000000002575712260336527016471 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = playercode DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = mdreg.c \ mdriver.c \ mdulaw.c \ mloader.c \ mlreg.c \ mlutil.c \ mplayer.c \ munitrk.c \ mwav.c \ npertab.c \ sloader.c \ virtch.c \ virtch2.c \ virtch_common.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign playercode/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign playercode/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/playercode/mlutil.c0000644000000000000000000002114112222472510016044 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mlutil.c,v 1.1.1.2 2007/12/15 15:24:17 denis111 Exp $ Utility functions for the module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Shared tracker identifiers */ const CHAR *STM_Signatures[STM_NTRACKERS] = { "!Scream!", "BMOD2STM", "WUZAMOD!" }; CHAR *STM_Version[STM_NTRACKERS] = { "Screamtracker 2", "Converted by MOD2STM (STM format)", "Wuzamod (STM format)" }; /*========== Shared loader variables */ SBYTE remap[UF_MAXCHAN]; /* for removing empty channels */ UBYTE* poslookup=NULL; /* lookup table for pattern jumps after blank pattern removal */ UWORD poslookupcnt; UWORD* origpositions=NULL; BOOL filters; /* resonant filters in use */ UBYTE activemacro; /* active midi macro number for Sxx,xx<80h */ UBYTE filtermacros[UF_MAXMACRO]; /* midi macro settings */ FILTER filtersettings[UF_MAXFILTER]; /* computed filter settings */ /*========== Linear periods stuff */ int* noteindex=NULL; /* remap value for linear period modules */ static unsigned noteindexcount=0; int *AllocLinear(void) { if(of.numsmp>noteindexcount) { noteindexcount=of.numsmp; noteindex=realloc(noteindex,noteindexcount*sizeof(int)); } return noteindex; } void FreeLinear(void) { if(noteindex) { free(noteindex); noteindex=NULL; } noteindexcount=0; } int speed_to_finetune(ULONG speed,int sample) { int ctmp=0,tmp,note=1,ft=0; speed>>=1; while((tmp=getfrequency(of.flags,getlinearperiod(note<<1,0)))speed) tmp=getfrequency(of.flags,getlinearperiod(note<<1,--ft)); else { note--; while(ctmp>4;*/ /* process S3M / IT specific command structure */ if(cmd!=255) { switch(cmd) { case 1: /* Axx set speed to xx */ UniEffect(UNI_S3MEFFECTA,inf); break; case 2: /* Bxx position jump */ if (inf>4)*10+(inf&0xf)); else UniPTEffect(0xd,inf); break; case 4: /* Dxy volumeslide */ UniEffect(UNI_S3MEFFECTD,inf); break; case 5: /* Exy toneslide down */ UniEffect(UNI_S3MEFFECTE,inf); break; case 6: /* Fxy toneslide up */ UniEffect(UNI_S3MEFFECTF,inf); break; case 7: /* Gxx Tone portamento, speed xx */ if (flags & S3MIT_OLDSTYLE) UniPTEffect(0x3,inf); else UniEffect(UNI_ITEFFECTG,inf); break; case 8: /* Hxy vibrato */ if (flags & S3MIT_OLDSTYLE) UniPTEffect(0x4,inf); else UniEffect(UNI_ITEFFECTH,inf); break; case 9: /* Ixy tremor, ontime x, offtime y */ if (flags & S3MIT_OLDSTYLE) UniEffect(UNI_S3MEFFECTI,inf); else UniEffect(UNI_ITEFFECTI,inf); break; case 0xa: /* Jxy arpeggio */ UniPTEffect(0x0,inf); break; case 0xb: /* Kxy Dual command H00 & Dxy */ if (flags & S3MIT_OLDSTYLE) UniPTEffect(0x4,0); else UniEffect(UNI_ITEFFECTH,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 0xc: /* Lxy Dual command G00 & Dxy */ if (flags & S3MIT_OLDSTYLE) UniPTEffect(0x3,0); else UniEffect(UNI_ITEFFECTG,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 0xd: /* Mxx Set Channel Volume */ UniEffect(UNI_ITEFFECTM,inf); break; case 0xe: /* Nxy Slide Channel Volume */ UniEffect(UNI_ITEFFECTN,inf); break; case 0xf: /* Oxx set sampleoffset xx00h */ UniPTEffect(0x9,inf); break; case 0x10: /* Pxy Slide Panning Commands */ UniEffect(UNI_ITEFFECTP,inf); break; case 0x11: /* Qxy Retrig (+volumeslide) */ UniWriteByte(UNI_S3MEFFECTQ); if(inf && !lo && !(flags & S3MIT_OLDSTYLE)) UniWriteByte(1); else UniWriteByte(inf); break; case 0x12: /* Rxy tremolo speed x, depth y */ UniEffect(UNI_S3MEFFECTR,inf); break; case 0x13: /* Sxx special commands */ if (inf>=0xf0) { /* change resonant filter settings if necessary */ if((filters)&&((inf&0xf)!=activemacro)) { activemacro=inf&0xf; for(inf=0;inf<0x80;inf++) filtersettings[inf].filter=filtermacros[activemacro]; } } else { /* Scream Tracker does not have samples larger than 64 Kb, thus doesn't need the SAx effect */ if ((flags & S3MIT_SCREAM) && ((inf & 0xf0) == 0xa0)) break; UniEffect(UNI_ITEFFECTS0,inf); } break; case 0x14: /* Txx tempo */ if(inf>=0x20) UniEffect(UNI_S3MEFFECTT,inf); else { if(!(flags & S3MIT_OLDSTYLE)) /* IT Tempo slide */ UniEffect(UNI_ITEFFECTT,inf); } break; case 0x15: /* Uxy Fine Vibrato speed x, depth y */ if(flags & S3MIT_OLDSTYLE) UniEffect(UNI_S3MEFFECTU,inf); else UniEffect(UNI_ITEFFECTU,inf); break; case 0x16: /* Vxx Set Global Volume */ UniEffect(UNI_XMEFFECTG,inf); break; case 0x17: /* Wxy Global Volume Slide */ UniEffect(UNI_ITEFFECTW,inf); break; case 0x18: /* Xxx amiga command 8xx */ if(flags & S3MIT_OLDSTYLE) { if(inf>128) UniEffect(UNI_ITEFFECTS0,0x91); /* surround */ else UniPTEffect(0x8,(inf==128)?255:(inf<<1)); } else UniPTEffect(0x8,inf); break; case 0x19: /* Yxy Panbrello speed x, depth y */ UniEffect(UNI_ITEFFECTY,inf); break; case 0x1a: /* Zxx midi/resonant filters */ if(filtersettings[inf].filter) { UniWriteByte(UNI_ITEFFECTZ); UniWriteByte(filtersettings[inf].filter); UniWriteByte(filtersettings[inf].inf); } break; } } } /*========== Unitrk stuff */ /* Generic effect writing routine */ void UniEffect(UWORD eff,UWORD dat) { if((!eff)||(eff>=UNI_LAST)) return; UniWriteByte(eff); if(unioperands[eff]==2) UniWriteWord(dat); else UniWriteByte(dat); } /* Appends UNI_PTEFFECTX opcode to the unitrk stream. */ void UniPTEffect(UBYTE eff, UBYTE dat) { #ifdef MIKMOD_DEBUG if (eff>=0x10) fprintf(stderr,"UniPTEffect called with incorrect eff value %d\n",eff); else #endif if((eff)||(dat)||(of.flags&UF_ARPMEM)) UniEffect(UNI_PTEFFECT0+eff,dat); } /* Appends UNI_VOLEFFECT + effect/dat to unistream. */ void UniVolEffect(UWORD eff,UBYTE dat) { if((eff)||(dat)) { /* don't write empty effect */ UniWriteByte(UNI_VOLEFFECTS); UniWriteByte(eff);UniWriteByte(dat); } } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/sloader.c0000644000000000000000000002662012222472510016176 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: sloader.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Routines for loading samples. The sample loader utilizes the routines provided by the "registered" sample loader. ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include "mikmod_internals.h" static int sl_rlength; static SWORD sl_old; static SWORD *sl_buffer=NULL; static SAMPLOAD *musiclist=NULL,*sndfxlist=NULL; /* size of the loader buffer in words */ #define SLBUFSIZE 2048 /* IT-Compressed status structure */ typedef struct ITPACK { UWORD bits; /* current number of bits */ UWORD bufbits; /* bits in buffer */ SWORD last; /* last output */ UBYTE buf; /* bit buffer */ } ITPACK; BOOL SL_Init(SAMPLOAD* s) { if(!sl_buffer) if(!(sl_buffer=_mm_malloc(SLBUFSIZE*sizeof(SWORD)))) return 0; sl_rlength = s->length; if(s->infmt & SF_16BITS) sl_rlength>>=1; sl_old = 0; return 1; } void SL_Exit(SAMPLOAD *s) { if(sl_rlength>0) _mm_fseek(s->reader,sl_rlength,SEEK_CUR); if(sl_buffer) { free(sl_buffer); sl_buffer=NULL; } } /* unpack a 8bit IT packed sample */ static int read_itcompr8(ITPACK* status,MREADER *reader,SWORD *out,UWORD count,UWORD* incnt) { SWORD *dest=out,*end=out+count; UWORD x,y,needbits,havebits,new_count=0; UWORD bits = status->bits; UWORD bufbits = status->bufbits; SBYTE last = status->last; UBYTE buf = status->buf; while (dest>=y; bufbits-=y; needbits-=y; havebits+=y; } if (new_count) { new_count = 0; if (++x >= bits) x++; bits = x; continue; } if (bits<7) { if (x==(1<<(bits-1))) { new_count = 1; continue; } } else if (bits<9) { y = (0xff >> (9-bits)) - 4; if ((x>y)&&(x<=y+8)) { if ((x-=y)>=bits) x++; bits = x; continue; } } else if (bits<10) { if (x>=0x100) { bits=x-0x100+1; continue; } } else { /* error in compressed data... */ _mm_errno=MMERR_ITPACK_INVALID_DATA; return 0; } if (bits<8) /* extend sign */ x = ((SBYTE)(x <<(8-bits))) >> (8-bits); *(dest++)= (last+=x) << 8; /* convert to 16 bit */ } status->bits = bits; status->bufbits = bufbits; status->last = last; status->buf = buf; return (dest-out); } /* unpack a 16bit IT packed sample */ static int read_itcompr16(ITPACK *status,MREADER *reader,SWORD *out,UWORD count,UWORD* incnt) { SWORD *dest=out,*end=out+count; SLONG x,y,needbits,havebits,new_count=0; UWORD bits = status->bits; UWORD bufbits = status->bufbits; SWORD last = status->last; UBYTE buf = status->buf; while (dest>=y; bufbits-=y; needbits-=y; havebits+=y; } if (new_count) { new_count = 0; if (++x >= bits) x++; bits = x; continue; } if (bits<7) { if (x==(1<<(bits-1))) { new_count=1; continue; } } else if (bits<17) { y=(0xffff>>(17-bits))-8; if ((x>y)&&(x<=y+16)) { if ((x-=y)>=bits) x++; bits = x; continue; } } else if (bits<18) { if (x>=0x10000) { bits=x-0x10000+1; continue; } } else { /* error in compressed data... */ _mm_errno=MMERR_ITPACK_INVALID_DATA; return 0; } if (bits<16) /* extend sign */ x = ((SWORD)(x<<(16-bits)))>>(16-bits); *(dest++)=(last+=x); } status->bits = bits; status->bufbits = bufbits; status->last = last; status->buf = buf; return (dest-out); } static int SL_LoadInternal(void* buffer,UWORD infmt,UWORD outfmt,int scalefactor,ULONG length,MREADER* reader,BOOL dither) { SBYTE *bptr = (SBYTE*)buffer; SWORD *wptr = (SWORD*)buffer; int stodo,t,u; int result,c_block=0; /* compression bytes until next block */ ITPACK status; UWORD incnt = 0; status.buf = 0; status.last = 0; status.bufbits = 0; status.bits = 0; while(length) { stodo=(lengthRead(reader,sl_buffer,sizeof(SBYTE)*stodo); src = (SBYTE*)sl_buffer; dest = sl_buffer; src += stodo;dest += stodo; for(t=0;t>1; length-=2; } stodo = idx; } } if(outfmt & SF_16BITS) { for(t=0;t>8; } } return 0; } int SL_Load(void* buffer,SAMPLOAD *smp,ULONG length) { return SL_LoadInternal(buffer,smp->infmt,smp->outfmt,smp->scalefactor, length,smp->reader,0); } /* Registers a sample for loading when SL_LoadSamples() is called. */ SAMPLOAD* SL_RegisterSample(SAMPLE* s,int type,MREADER* reader) { SAMPLOAD *news,**samplist,*cruise; if(type==MD_MUSIC) { samplist = &musiclist; cruise = musiclist; } else if (type==MD_SNDFX) { samplist = &sndfxlist; cruise = sndfxlist; } else return NULL; /* Allocate and add structure to the END of the list */ if(!(news=(SAMPLOAD*)_mm_malloc(sizeof(SAMPLOAD)))) return NULL; if(cruise) { while(cruise->next) cruise=cruise->next; cruise->next = news; } else *samplist = news; news->infmt = s->flags & SF_FORMATMASK; news->outfmt = news->infmt; news->reader = reader; news->sample = s; news->length = s->length; news->loopstart = s->loopstart; news->loopend = s->loopend; return news; } static void FreeSampleList(SAMPLOAD* s) { SAMPLOAD *old; while(s) { old = s; s = s->next; free(old); } } /* Returns the total amount of memory required by the samplelist queue. */ static ULONG SampleTotal(SAMPLOAD* samplist,int type) { int total = 0; while(samplist) { samplist->sample->flags= (samplist->sample->flags&~SF_FORMATMASK)|samplist->outfmt; total += MD_SampleLength(type,samplist->sample); samplist=samplist->next; } return total; } static ULONG RealSpeed(SAMPLOAD *s) { return(s->sample->speed/(s->scalefactor?s->scalefactor:1)); } static int DitherSamples(SAMPLOAD* samplist,int type) { SAMPLOAD *c2smp=NULL; ULONG maxsize, speed; SAMPLOAD *s; if(!samplist) return 0; if((maxsize=MD_SampleSpace(type)*1024)) while(SampleTotal(samplist,type)>maxsize) { /* First Pass - check for any 16 bit samples */ s = samplist; while(s) { if(s->outfmt & SF_16BITS) { SL_Sample16to8(s); break; } s=s->next; } /* Second pass (if no 16bits found above) is to take the sample with the highest speed and dither it by half. */ if(!s) { s = samplist; speed = 0; while(s) { if((s->sample->length) && (RealSpeed(s)>speed)) { speed=RealSpeed(s); c2smp=s; } s=s->next; } if (c2smp) SL_HalveSample(c2smp,2); } } /* Samples dithered, now load them ! */ s = samplist; while(s) { /* sample has to be loaded ? -> increase number of samples, allocate memory and load sample. */ if(s->sample->length) { if(s->sample->seekpos) _mm_fseek(s->reader, s->sample->seekpos, SEEK_SET); /* Call the sample load routine of the driver module. It has to return a 'handle' (>=0) that identifies the sample. */ s->sample->handle = MD_SampleLoad(s, type); s->sample->flags = (s->sample->flags & ~SF_FORMATMASK) | s->outfmt; if(s->sample->handle<0) { FreeSampleList(samplist); if(_mm_errorhandler) _mm_errorhandler(); return 1; } } s = s->next; } FreeSampleList(samplist); return 0; } int SL_LoadSamples(void) { int rc; _mm_critical = 0; if((!musiclist)&&(!sndfxlist)) return 0; rc=DitherSamples(musiclist,MD_MUSIC)||DitherSamples(sndfxlist,MD_SNDFX); musiclist=sndfxlist=NULL; return rc; } void SL_Sample16to8(SAMPLOAD* s) { s->outfmt &= ~SF_16BITS; s->sample->flags = (s->sample->flags&~SF_FORMATMASK) | s->outfmt; } void SL_Sample8to16(SAMPLOAD* s) { s->outfmt |= SF_16BITS; s->sample->flags = (s->sample->flags&~SF_FORMATMASK) | s->outfmt; } void SL_SampleSigned(SAMPLOAD* s) { s->outfmt |= SF_SIGNED; s->sample->flags = (s->sample->flags&~SF_FORMATMASK) | s->outfmt; } void SL_SampleUnsigned(SAMPLOAD* s) { s->outfmt &= ~SF_SIGNED; s->sample->flags = (s->sample->flags&~SF_FORMATMASK) | s->outfmt; } void SL_HalveSample(SAMPLOAD* s,int factor) { s->scalefactor=factor>0?factor:2; s->sample->divfactor = s->scalefactor; s->sample->length = s->length / s->scalefactor; s->sample->loopstart = s->loopstart / s->scalefactor; s->sample->loopend = s->loopend / s->scalefactor; } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/mdulaw.c0000644000000000000000000031042212222472510016032 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mdulaw.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Mu-law routines ==============================================================================*/ /* The contents of this file are derived from the files libst.h and raw.c from an old version of the sox (SOund eXchange) package written by Lance Norskog and Jef Poskanzer. The following copyright notice applies: ** Copyright (C) 1989 by Jef Poskanzer. ** ** Permission to use, copy, modify, and distribute this software and its ** documentation for any purpose and without fee is hereby granted, provided ** that the above copyright notice appear in all copies and that both that ** copyright notice and this permission notice appear in supporting ** documentation. This software is provided "as is" without express or ** implied warranty. */ #ifdef HAVE_CONFIG_H #include #endif #include "mikmod_internals.h" static unsigned char ulaw_comp_table[16384] = { 0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9, 0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1, 0xf1, 0xf0, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xee, 0xee, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e }; #define st_linear_to_ulaw(x) ulaw_comp_table[(x / 4) & 0x3fff] /* convert unsigned linear data from Mixer_WriteBytes() to ulaw */ void unsignedtoulaw(char *buf, int nsamp) { while (nsamp--) { register long datum = (long)*((unsigned char *)buf); datum ^= 128; /* convert to signed */ datum <<= 8; /* round up to 12 bits of data */ datum += 0x8; /* + 0b1000 */ datum = st_linear_to_ulaw(datum); *buf++ = (char)datum; } } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/mloader.c0000644000000000000000000003054712225756222016203 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mloader.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ These routines are used to access the available module loaders ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif MREADER *modreader; MODULE of; static MLOADER *firstloader=NULL; UWORD finetune[16]={ 8363,8413,8463,8529,8581,8651,8723,8757, 7895,7941,7985,8046,8107,8169,8232,8280 }; MIKMODAPI CHAR* MikMod_InfoLoader(void) { int len=0; MLOADER *l; CHAR *list=NULL; MUTEX_LOCK(lists); /* compute size of buffer */ for(l = firstloader; l; l = l->next) len += 1 + (l->next ? 1 : 0) + strlen(l->version); if(len) if((list=_mm_malloc(len*sizeof(CHAR)))) { CHAR *list_end = list; list[0] = 0; /* list all registered module loders */ for(l = firstloader; l; l = l->next) { list_end += sprintf(list_end, "%s%s", l->version, (l->next) ? "\n" : ""); } } MUTEX_UNLOCK(lists); return list; } void _mm_registerloader(MLOADER* ldr) { MLOADER *cruise=firstloader; if(cruise) { while(cruise->next) cruise = cruise->next; cruise->next=ldr; } else firstloader=ldr; } MIKMODAPI void MikMod_RegisterLoader(struct MLOADER* ldr) { /* if we try to register an invalid loader, or an already registered loader, ignore this attempt */ if ((!ldr)||(ldr->next)) return; MUTEX_LOCK(lists); _mm_registerloader(ldr); MUTEX_UNLOCK(lists); } BOOL ReadComment(UWORD len) { if(len) { int i; if(!(of.comment=(CHAR*)_mm_malloc(len+1))) return 0; _mm_read_UBYTES(of.comment,len,modreader); /* translate IT linefeeds */ for(i=0;i=0)&&(line[i]==' ');i--) line[i]=0; for(i=0;ilines) { if(!(of.comment=(CHAR*)_mm_malloc(total+1))) { free(storage); free(tempcomment); return 0; } /* convert message */ for(line=tempcomment,t=0;tlength) SL_RegisterSample(s,MD_MUSIC,modreader); return 1; } /* Creates a CSTR out of a character buffer of 'len' bytes, but strips any terminating non-printing characters like 0, spaces etc. */ CHAR *DupStr(CHAR* s,UWORD len,BOOL strict) { UWORD t; CHAR *d=NULL; /* Scan for last printing char in buffer [includes high ascii up to 254] */ while(len) { if(s[len-1]>0x20) break; len--; } /* Scan forward for possible NULL character */ if(strict) { for(t=0;thandle>=0) MD_SampleUnload(s->handle); /* moved samplename freeing to our caller ML_FreeEx(), * because we are called conditionally. */ } static void ML_XFreeInstrument(INSTRUMENT *i) { if(i->insname) free(i->insname); } static void ML_FreeEx(MODULE *mf) { UWORD t; if(mf->songname) free(mf->songname); if(mf->comment) free(mf->comment); if(mf->modtype) free(mf->modtype); if(mf->positions) free(mf->positions); if(mf->patterns) free(mf->patterns); if(mf->pattrows) free(mf->pattrows); if(mf->tracks) { for(t=0;tnumtrk;t++) if(mf->tracks[t]) free(mf->tracks[t]); free(mf->tracks); } if(mf->instruments) { for(t=0;tnumins;t++) ML_XFreeInstrument(&mf->instruments[t]); free(mf->instruments); } if(mf->samples) { for(t=0;tnumsmp;t++) { if(mf->samples[t].samplename) free(mf->samples[t].samplename); if(mf->samples[t].length) ML_XFreeSample(&mf->samples[t]); } free(mf->samples); } memset(mf,0,sizeof(MODULE)); if(mf!=&of) free(mf); } static MODULE *ML_AllocUniMod(void) { MODULE *mf; return (mf=_mm_malloc(sizeof(MODULE))); } void Player_Free_internal(MODULE *mf) { if(mf) { Player_Exit_internal(mf); ML_FreeEx(mf); } } MIKMODAPI void Player_Free(MODULE *mf) { MUTEX_LOCK(vars); Player_Free_internal(mf); MUTEX_UNLOCK(vars); } static CHAR* Player_LoadTitle_internal(MREADER *reader) { MLOADER *l; modreader=reader; _mm_errno = 0; _mm_critical = 0; _mm_iobase_setcur(modreader); /* Try to find a loader that recognizes the module */ for(l=firstloader;l;l=l->next) { _mm_rewind(modreader); if(l->Test()) break; } if(!l) { _mm_errno = MMERR_NOT_A_MODULE; if(_mm_errorhandler) _mm_errorhandler(); return NULL; } return l->LoadTitle(); } MIKMODAPI CHAR* Player_LoadTitleFP(FILE *fp) { CHAR* result=NULL; MREADER* reader; if(fp && (reader=_mm_new_file_reader(fp))) { MUTEX_LOCK(lists); result=Player_LoadTitle_internal(reader); MUTEX_UNLOCK(lists); _mm_delete_file_reader(reader); } return result; } MIKMODAPI CHAR* Player_LoadTitle(CHAR* filename) { CHAR* result=NULL; FILE* fp; MREADER* reader; if((fp=_mm_fopen(filename,"rb"))) { if((reader=_mm_new_file_reader(fp))) { MUTEX_LOCK(lists); result=Player_LoadTitle_internal(reader); MUTEX_UNLOCK(lists); _mm_delete_file_reader(reader); } _mm_fclose(fp); } return result; } /* Loads a module given an reader */ static MODULE* Player_LoadGeneric_internal(MREADER *reader,int maxchan,BOOL curious) { int t; MLOADER *l; BOOL ok; MODULE *mf; modreader = reader; _mm_errno = 0; _mm_critical = 0; _mm_iobase_setcur(modreader); /* Try to find a loader that recognizes the module */ for(l=firstloader;l;l=l->next) { _mm_rewind(modreader); if(l->Test()) break; } if(!l) { _mm_errno = MMERR_NOT_A_MODULE; if(_mm_errorhandler) _mm_errorhandler(); _mm_rewind(modreader); _mm_iobase_revert(); return NULL; } /* init unitrk routines */ if(!UniInit()) { if(_mm_errorhandler) _mm_errorhandler(); _mm_rewind(modreader); _mm_iobase_revert(); return NULL; } /* init the module structure with vanilla settings */ memset(&of,0,sizeof(MODULE)); of.bpmlimit = 33; of.initvolume = 128; for (t = 0; t < UF_MAXCHAN; t++) of.chanvol[t] = 64; for (t = 0; t < UF_MAXCHAN; t++) of.panning[t] = ((t + 1) & 2) ? PAN_RIGHT : PAN_LEFT; /* init module loader and load the header / patterns */ if (!l->Init || l->Init()) { _mm_rewind(modreader); ok = l->Load(curious); if (ok) { /* propagate inflags=flags for in-module samples */ for (t = 0; t < of.numsmp; t++) if (of.samples[t].inflags == 0) of.samples[t].inflags = of.samples[t].flags; } } else ok = 0; /* free loader and unitrk allocations */ if (l->Cleanup) l->Cleanup(); UniCleanup(); if(!ok) { ML_FreeEx(&of); if(_mm_errorhandler) _mm_errorhandler(); _mm_rewind(modreader); _mm_iobase_revert(); return NULL; } if(!ML_LoadSamples()) { ML_FreeEx(&of); if(_mm_errorhandler) _mm_errorhandler(); _mm_rewind(modreader); _mm_iobase_revert(); return NULL; } if(!(mf=ML_AllocUniMod())) { ML_FreeEx(&of); _mm_rewind(modreader);_mm_iobase_revert(); if(_mm_errorhandler) _mm_errorhandler(); return NULL; } /* If the module doesn't have any specific panning, create a MOD-like panning, with the channels half-separated. */ if (!(of.flags & UF_PANNING)) for (t = 0; t < of.numchn; t++) of.panning[t] = ((t + 1) & 2) ? PAN_HALFRIGHT : PAN_HALFLEFT; /* Copy the static MODULE contents into the dynamic MODULE struct. */ memcpy(mf,&of,sizeof(MODULE)); if(maxchan>0) { if(!(mf->flags&UF_NNA)&&(mf->numchnnumchn; else if((mf->numvoices)&&(mf->numvoicesnumvoices; if(maxchannumchn) mf->flags |= UF_NNA; if(MikMod_SetNumVoices_internal(maxchan,-1)) { _mm_iobase_revert(); Player_Free(mf); return NULL; } } if(SL_LoadSamples()) { _mm_iobase_revert(); Player_Free_internal(mf); return NULL; } if(Player_Init(mf)) { _mm_iobase_revert(); Player_Free_internal(mf); mf=NULL; } _mm_iobase_revert(); return mf; } MIKMODAPI MODULE* Player_LoadGeneric(MREADER *reader,int maxchan,BOOL curious) { MODULE* result; MUTEX_LOCK(vars); MUTEX_LOCK(lists); result=Player_LoadGeneric_internal(reader,maxchan,curious); MUTEX_UNLOCK(lists); MUTEX_UNLOCK(vars); return result; } /* Loads a module given a file pointer. File is loaded from the current file seek position. */ MIKMODAPI MODULE* Player_LoadFP(FILE* fp,int maxchan,BOOL curious) { MODULE* result=NULL; struct MREADER* reader=_mm_new_file_reader (fp); if (reader) { result=Player_LoadGeneric(reader,maxchan,curious); _mm_delete_file_reader(reader); } return result; } /* Open a module via its filename. The loader will initialize the specified song-player 'player'. */ MIKMODAPI MODULE* Player_Load(CHAR* filename,int maxchan,BOOL curious) { FILE *fp; MODULE *mf=NULL; if((fp=_mm_fopen(filename,"rb"))) { mf=Player_LoadFP(fp,maxchan,curious); _mm_fclose(fp); } return mf; } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/virtch.c0000644000000000000000000006043112222472510016042 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: virtch.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Sample mixing routines, using a 32 bits mixing buffer. ==============================================================================*/ /* Optional features include: (a) 4-step reverb (for 16 bit output only) (b) Interpolation of sample data during mixing (c) Dolby Surround Sound */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" /* Constant definitions ==================== BITSHIFT Controls the maximum volume of the sound output. All data is shifted right by BITSHIFT after being mixed. Higher values result in quieter sound and less chance of distortion. REVERBERATION Controls the duration of the reverb. Larger values represent a shorter reverb loop. Smaller values extend the reverb but can result in more of an echo-ish sound. */ #define BITSHIFT 9 #define REVERBERATION 110000L #define FRACBITS 11 #define FRACMASK ((1L< sample has to be restarted */ UBYTE active; /* =1 -> sample is playing */ UWORD flags; /* 16/8 bits looping/one-shot */ SWORD handle; /* identifies the sample */ ULONG start; /* start index */ ULONG size; /* samplesize */ ULONG reppos; /* loop start */ ULONG repend; /* loop end */ ULONG frq; /* current frequency */ int vol; /* current volume */ int pan; /* current panning position */ int rampvol; int lvolsel,rvolsel; /* Volume factor in range 0-255 */ int oldlvol,oldrvol; SLONGLONG current; /* current index in the sample */ SLONGLONG increment; /* increment value */ } VINFO; static SWORD **Samples; static VINFO *vinf=NULL,*vnf; static long tickleft,samplesthatfit,vc_memory=0; static int vc_softchn; static SLONGLONG idxsize,idxlpos,idxlend; static SLONG *vc_tickbuf=NULL; static UWORD vc_mode; /* Reverb control variables */ static int RVc1, RVc2, RVc3, RVc4, RVc5, RVc6, RVc7, RVc8; static ULONG RVRindex; /* For Mono or Left Channel */ static SLONG *RVbufL1=NULL,*RVbufL2=NULL,*RVbufL3=NULL,*RVbufL4=NULL, *RVbufL5=NULL,*RVbufL6=NULL,*RVbufL7=NULL,*RVbufL8=NULL; /* For Stereo only (Right Channel) */ static SLONG *RVbufR1=NULL,*RVbufR2=NULL,*RVbufR3=NULL,*RVbufR4=NULL, *RVbufR5=NULL,*RVbufR6=NULL,*RVbufR7=NULL,*RVbufR8=NULL; #ifdef NATIVE_64BIT_INT #define NATIVE SLONGLONG #else #define NATIVE SLONG #endif /*========== 32 bit sample mixers - only for 32 bit platforms */ #ifndef NATIVE_64BIT_INT static SLONG Mix32MonoNormal(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel * sample; } return idx; } static SLONG Mix32StereoNormal(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; while(todo--) { sample=srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel * sample; *dest++ += rvolsel * sample; } return idx; } static SLONG Mix32SurroundNormal(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; if (lvolsel>=rvolsel) { while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel*sample; *dest++ -= lvolsel*sample; } } else { while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ -= rvolsel*sample; *dest++ += rvolsel*sample; } } return idx; } static SLONG Mix32MonoInterp(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rampvol = vnf->rampvol; if (rampvol) { SLONG oldlvol = vnf->oldlvol - lvolsel; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += ((lvolsel << CLICK_SHIFT) + oldlvol * rampvol) * sample >> CLICK_SHIFT; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += lvolsel * sample; } return idx; } static SLONG Mix32StereoInterp(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; SLONG rampvol = vnf->rampvol; if (rampvol) { SLONG oldlvol = vnf->oldlvol - lvolsel; SLONG oldrvol = vnf->oldrvol - rvolsel; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += ((lvolsel << CLICK_SHIFT) + oldlvol * rampvol) * sample >> CLICK_SHIFT; *dest++ += ((rvolsel << CLICK_SHIFT) + oldrvol * rampvol) * sample >> CLICK_SHIFT; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += lvolsel * sample; *dest++ += rvolsel * sample; } return idx; } static SLONG Mix32SurroundInterp(const SWORD* srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; SLONG rampvol = vnf->rampvol; SLONG oldvol, vol; if (lvolsel >= rvolsel) { vol = lvolsel; oldvol = vnf->oldlvol; } else { vol = rvolsel; oldvol = vnf->oldrvol; } if (rampvol) { oldvol -= vol; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; sample=((vol << CLICK_SHIFT) + oldvol * rampvol) * sample >> CLICK_SHIFT; *dest++ += sample; *dest++ -= sample; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += vol*sample; *dest++ -= vol*sample; } return idx; } #endif /*========== 64 bit sample mixers - all platforms */ static SLONGLONG MixMonoNormal(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel * sample; } return idx; } static SLONGLONG MixStereoNormal(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; while(todo--) { sample=srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel * sample; *dest++ += rvolsel * sample; } return idx; } static SLONGLONG MixSurroundNormal(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SWORD sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; if(vnf->lvolsel>=vnf->rvolsel) { while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ += lvolsel*sample; *dest++ -= lvolsel*sample; } } else { while(todo--) { sample = srce[idx >> FRACBITS]; idx += increment; *dest++ -= rvolsel*sample; *dest++ += rvolsel*sample; } } return idx; } static SLONGLONG MixMonoInterp(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rampvol = vnf->rampvol; if (rampvol) { SLONG oldlvol = vnf->oldlvol - lvolsel; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += ((lvolsel << CLICK_SHIFT) + oldlvol * rampvol) * sample >> CLICK_SHIFT; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += lvolsel * sample; } return idx; } static SLONGLONG MixStereoInterp(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; SLONG rampvol = vnf->rampvol; if (rampvol) { SLONG oldlvol = vnf->oldlvol - lvolsel; SLONG oldrvol = vnf->oldrvol - rvolsel; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ +=((lvolsel << CLICK_SHIFT) + oldlvol * rampvol) * sample >> CLICK_SHIFT; *dest++ +=((rvolsel << CLICK_SHIFT) + oldrvol * rampvol) * sample >> CLICK_SHIFT; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += lvolsel * sample; *dest++ += rvolsel * sample; } return idx; } static SLONGLONG MixSurroundInterp(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SLONG sample; SLONG lvolsel = vnf->lvolsel; SLONG rvolsel = vnf->rvolsel; SLONG rampvol = vnf->rampvol; SLONG oldvol, vol; if (lvolsel >= rvolsel) { vol = lvolsel; oldvol = vnf->oldlvol; } else { vol = rvolsel; oldvol = vnf->oldrvol; } if (rampvol) { oldvol -= vol; while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; sample=((vol << CLICK_SHIFT) + oldvol * rampvol) * sample >> CLICK_SHIFT; *dest++ += sample; *dest++ -= sample; if (!--rampvol) break; } vnf->rampvol = rampvol; if (todo < 0) return idx; } while(todo--) { sample=(SLONG)srce[idx>>FRACBITS]+ ((SLONG)(srce[(idx>>FRACBITS)+1]-srce[idx>>FRACBITS]) *(idx&FRACMASK)>>FRACBITS); idx += increment; *dest++ += vol*sample; *dest++ -= vol*sample; } return idx; } static void (*MixReverb)(SLONG* srce,NATIVE count); /* Reverb macros */ #define COMPUTE_LOC(n) loc##n = RVRindex % RVc##n #define COMPUTE_LECHO(n) RVbufL##n [loc##n ]=speedup+((ReverbPct*RVbufL##n [loc##n ])>>7) #define COMPUTE_RECHO(n) RVbufR##n [loc##n ]=speedup+((ReverbPct*RVbufR##n [loc##n ])>>7) static void MixReverb_Normal(SLONG* srce,NATIVE count) { unsigned int speedup; int ReverbPct; unsigned int loc1,loc2,loc3,loc4; unsigned int loc5,loc6,loc7,loc8; ReverbPct=58+(md_reverb<<2); COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); while(count--) { /* Compute the left channel echo buffers */ speedup = *srce >> 3; COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); /* Prepare to compute actual finalized data */ RVRindex++; COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); /* left channel */ *srce++ +=RVbufL1[loc1]-RVbufL2[loc2]+RVbufL3[loc3]-RVbufL4[loc4]+ RVbufL5[loc5]-RVbufL6[loc6]+RVbufL7[loc7]-RVbufL8[loc8]; } } static void MixReverb_Stereo(SLONG* srce,NATIVE count) { unsigned int speedup; int ReverbPct; unsigned int loc1, loc2, loc3, loc4; unsigned int loc5, loc6, loc7, loc8; ReverbPct = 92+(md_reverb<<1); COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); while(count--) { /* Compute the left channel echo buffers */ speedup = *srce >> 3; COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); /* Compute the right channel echo buffers */ speedup = srce[1] >> 3; COMPUTE_RECHO(1); COMPUTE_RECHO(2); COMPUTE_RECHO(3); COMPUTE_RECHO(4); COMPUTE_RECHO(5); COMPUTE_RECHO(6); COMPUTE_RECHO(7); COMPUTE_RECHO(8); /* Prepare to compute actual finalized data */ RVRindex++; COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); /* left channel then right channel */ *srce++ +=RVbufL1[loc1]-RVbufL2[loc2]+RVbufL3[loc3]-RVbufL4[loc4]+ RVbufL5[loc5]-RVbufL6[loc6]+RVbufL7[loc7]-RVbufL8[loc8]; *srce++ +=RVbufR1[loc1]-RVbufR2[loc2]+RVbufR3[loc3]-RVbufR4[loc4]+ RVbufR5[loc5]-RVbufR6[loc6]+RVbufR7[loc7]-RVbufR8[loc8]; } } /* Mixing macros */ #define EXTRACT_SAMPLE(var,size) var=*srce++>>(BITSHIFT+16-size) #define CHECK_SAMPLE(var,bound) var=(var>=bound)?bound-1:(var<-bound)?-bound:var #define PUT_SAMPLE(var) *dste++=var static void Mix32To16(SWORD* dste,const SLONG *srce,NATIVE count) { SLONG x1,x2,x3,x4; int remain; remain=count&3; for(count>>=2;count;count--) { EXTRACT_SAMPLE(x1,16); EXTRACT_SAMPLE(x2,16); EXTRACT_SAMPLE(x3,16); EXTRACT_SAMPLE(x4,16); CHECK_SAMPLE(x1,32768); CHECK_SAMPLE(x2,32768); CHECK_SAMPLE(x3,32768); CHECK_SAMPLE(x4,32768); PUT_SAMPLE(x1); PUT_SAMPLE(x2); PUT_SAMPLE(x3); PUT_SAMPLE(x4); } while(remain--) { EXTRACT_SAMPLE(x1,16); CHECK_SAMPLE(x1,32768); PUT_SAMPLE(x1); } } static void Mix32To8(SBYTE* dste,const SLONG *srce,NATIVE count) { SWORD x1,x2,x3,x4; int remain; remain=count&3; for(count>>=2;count;count--) { EXTRACT_SAMPLE(x1,8); EXTRACT_SAMPLE(x2,8); EXTRACT_SAMPLE(x3,8); EXTRACT_SAMPLE(x4,8); CHECK_SAMPLE(x1,128); CHECK_SAMPLE(x2,128); CHECK_SAMPLE(x3,128); CHECK_SAMPLE(x4,128); PUT_SAMPLE(x1+128); PUT_SAMPLE(x2+128); PUT_SAMPLE(x3+128); PUT_SAMPLE(x4+128); } while(remain--) { EXTRACT_SAMPLE(x1,8); CHECK_SAMPLE(x1,128); PUT_SAMPLE(x1+128); } } static void AddChannel(SLONG* ptr,NATIVE todo) { SLONGLONG end,done; SWORD *s; if(!(s=Samples[vnf->handle])) { vnf->current = vnf->active = 0; return; } /* update the 'current' index so the sample loops, or stops playing if it reached the end of the sample */ while(todo>0) { SLONGLONG endpos; if(vnf->flags & SF_REVERSE) { /* The sample is playing in reverse */ if((vnf->flags&SF_LOOP)&&(vnf->currentflags & SF_BIDI) { /* sample is doing bidirectional loops, so 'bounce' the current index against the idxlpos */ vnf->current = idxlpos+(idxlpos-vnf->current); vnf->flags &= ~SF_REVERSE; vnf->increment = -vnf->increment; } else /* normal backwards looping, so set the current position to loopend index */ vnf->current=idxlend-(idxlpos-vnf->current); } else { /* the sample is not looping, so check if it reached index 0 */ if(vnf->current < 0) { /* playing index reached 0, so stop playing this sample */ vnf->current = vnf->active = 0; break; } } } else { /* The sample is playing forward */ if((vnf->flags & SF_LOOP) && (vnf->current >= idxlend)) { /* the sample is looping, check the loopend index */ if(vnf->flags & SF_BIDI) { /* sample is doing bidirectional loops, so 'bounce' the current index against the idxlend */ vnf->flags |= SF_REVERSE; vnf->increment = -vnf->increment; vnf->current = idxlend-(vnf->current-idxlend); } else /* normal backwards looping, so set the current position to loopend index */ vnf->current=idxlpos+(vnf->current-idxlend); } else { /* sample is not looping, so check if it reached the last position */ if(vnf->current >= idxsize) { /* yes, so stop playing this sample */ vnf->current = vnf->active = 0; break; } } } end=(vnf->flags&SF_REVERSE)?(vnf->flags&SF_LOOP)?idxlpos:0: (vnf->flags&SF_LOOP)?idxlend:idxsize; /* if the sample is not blocked... */ if((end==vnf->current)||(!vnf->increment)) done=0; else { done=MIN((end-vnf->current)/vnf->increment+1,todo); if(done<0) done=0; } if(!done) { vnf->active = 0; break; } endpos=vnf->current+done*vnf->increment; if(vnf->vol) { #ifndef NATIVE_64BIT_INT /* use the 32 bit mixers as often as we can (they're much faster) */ if((vnf->current<0x7fffffff)&&(endpos<0x7fffffff)) { if((md_mode & DMODE_INTERP)) { if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(md_mode&DMODE_SURROUND)) vnf->current=Mix32SurroundInterp (s,ptr,vnf->current,vnf->increment,done); else vnf->current=Mix32StereoInterp (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=Mix32MonoInterp (s,ptr,vnf->current,vnf->increment,done); } else if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(md_mode&DMODE_SURROUND)) vnf->current=Mix32SurroundNormal (s,ptr,vnf->current,vnf->increment,done); else vnf->current=Mix32StereoNormal (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=Mix32MonoNormal (s,ptr,vnf->current,vnf->increment,done); } else #endif { if((md_mode & DMODE_INTERP)) { if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(md_mode&DMODE_SURROUND)) vnf->current=MixSurroundInterp (s,ptr,vnf->current,vnf->increment,done); else vnf->current=MixStereoInterp (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=MixMonoInterp (s,ptr,vnf->current,vnf->increment,done); } else if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(md_mode&DMODE_SURROUND)) vnf->current=MixSurroundNormal (s,ptr,vnf->current,vnf->increment,done); else vnf->current=MixStereoNormal (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=MixMonoNormal (s,ptr,vnf->current,vnf->increment,done); } } else /* update sample position */ vnf->current=endpos; todo-=done; ptr +=(vc_mode & DMODE_STEREO)?(done<<1):done; } } #define _IN_VIRTCH_ #include "virtch_common.c" #undef _IN_VIRTCH_ void VC1_WriteSamples(SBYTE* buf,ULONG todo) { int left,portion=0,count; SBYTE *buffer; int t, pan, vol; while(todo) { if(!tickleft) { if(vc_mode & DMODE_SOFT_MUSIC) md_player(); tickleft=(md_mixfreq*125L)/(md_bpm*50L); } left = MIN(tickleft, todo); buffer = buf; tickleft -= left; todo -= left; buf += samples2bytes(left); while(left) { portion = MIN(left, samplesthatfit); count = (vc_mode & DMODE_STEREO)?(portion<<1):portion; memset(vc_tickbuf, 0, count<<2); for(t=0;tkick) { vnf->current=((SLONGLONG)vnf->start)<kick =0; vnf->active =1; } if(!vnf->frq) vnf->active = 0; if(vnf->active) { vnf->increment=((SLONGLONG)(vnf->frq<flags&SF_REVERSE) vnf->increment=-vnf->increment; vol = vnf->vol; pan = vnf->pan; vnf->oldlvol=vnf->lvolsel;vnf->oldrvol=vnf->rvolsel; if(vc_mode & DMODE_STEREO) { if(pan != PAN_SURROUND) { vnf->lvolsel=(vol*(PAN_RIGHT-pan))>>8; vnf->rvolsel=(vol*pan)>>8; } else vnf->lvolsel=vnf->rvolsel=vol/2; } else vnf->lvolsel=vol; idxsize = (vnf->size)? ((SLONGLONG)vnf->size << FRACBITS)-1 : 0; idxlend = (vnf->repend)? ((SLONGLONG)vnf->repend << FRACBITS)-1 : 0; idxlpos = (SLONGLONG)vnf->reppos << FRACBITS; AddChannel(vc_tickbuf, portion); } } if(md_reverb) { if(md_reverb>15) md_reverb=15; MixReverb(vc_tickbuf, portion); } if(vc_mode & DMODE_16BITS) Mix32To16((SWORD*) buffer, vc_tickbuf, count); else Mix32To8((SBYTE*) buffer, vc_tickbuf, count); buffer += samples2bytes(portion); left -= portion; } } } int VC1_Init(void) { VC_SetupPointers(); if (md_mode&DMODE_HQMIXER) return VC2_Init(); if(!(Samples=(SWORD**)_mm_calloc(MAXSAMPLEHANDLES,sizeof(SWORD*)))) { _mm_errno = MMERR_INITIALIZING_MIXER; return 1; } if(!vc_tickbuf) { if(!(vc_tickbuf=(SLONG*)_mm_malloc((TICKLSIZE+32)*sizeof(SLONG)))) { _mm_errno = MMERR_INITIALIZING_MIXER; return 1; } } MixReverb=(md_mode&DMODE_STEREO)?MixReverb_Stereo:MixReverb_Normal; vc_mode = md_mode; return 0; } int VC1_PlayStart(void) { samplesthatfit=TICKLSIZE; if(vc_mode & DMODE_STEREO) samplesthatfit >>= 1; tickleft = 0; RVc1 = (5000L * md_mixfreq) / REVERBERATION; RVc2 = (5078L * md_mixfreq) / REVERBERATION; RVc3 = (5313L * md_mixfreq) / REVERBERATION; RVc4 = (5703L * md_mixfreq) / REVERBERATION; RVc5 = (6250L * md_mixfreq) / REVERBERATION; RVc6 = (6953L * md_mixfreq) / REVERBERATION; RVc7 = (7813L * md_mixfreq) / REVERBERATION; RVc8 = (8828L * md_mixfreq) / REVERBERATION; if(!(RVbufL1=(SLONG*)_mm_calloc((RVc1+1),sizeof(SLONG)))) return 1; if(!(RVbufL2=(SLONG*)_mm_calloc((RVc2+1),sizeof(SLONG)))) return 1; if(!(RVbufL3=(SLONG*)_mm_calloc((RVc3+1),sizeof(SLONG)))) return 1; if(!(RVbufL4=(SLONG*)_mm_calloc((RVc4+1),sizeof(SLONG)))) return 1; if(!(RVbufL5=(SLONG*)_mm_calloc((RVc5+1),sizeof(SLONG)))) return 1; if(!(RVbufL6=(SLONG*)_mm_calloc((RVc6+1),sizeof(SLONG)))) return 1; if(!(RVbufL7=(SLONG*)_mm_calloc((RVc7+1),sizeof(SLONG)))) return 1; if(!(RVbufL8=(SLONG*)_mm_calloc((RVc8+1),sizeof(SLONG)))) return 1; if(!(RVbufR1=(SLONG*)_mm_calloc((RVc1+1),sizeof(SLONG)))) return 1; if(!(RVbufR2=(SLONG*)_mm_calloc((RVc2+1),sizeof(SLONG)))) return 1; if(!(RVbufR3=(SLONG*)_mm_calloc((RVc3+1),sizeof(SLONG)))) return 1; if(!(RVbufR4=(SLONG*)_mm_calloc((RVc4+1),sizeof(SLONG)))) return 1; if(!(RVbufR5=(SLONG*)_mm_calloc((RVc5+1),sizeof(SLONG)))) return 1; if(!(RVbufR6=(SLONG*)_mm_calloc((RVc6+1),sizeof(SLONG)))) return 1; if(!(RVbufR7=(SLONG*)_mm_calloc((RVc7+1),sizeof(SLONG)))) return 1; if(!(RVbufR8=(SLONG*)_mm_calloc((RVc8+1),sizeof(SLONG)))) return 1; RVRindex = 0; return 0; } void VC1_PlayStop(void) { if(RVbufL1) free(RVbufL1); if(RVbufL2) free(RVbufL2); if(RVbufL3) free(RVbufL3); if(RVbufL4) free(RVbufL4); if(RVbufL5) free(RVbufL5); if(RVbufL6) free(RVbufL6); if(RVbufL7) free(RVbufL7); if(RVbufL8) free(RVbufL8); RVbufL1=RVbufL2=RVbufL3=RVbufL4=RVbufL5=RVbufL6=RVbufL7=RVbufL8=NULL; if(RVbufR1) free(RVbufR1); if(RVbufR2) free(RVbufR2); if(RVbufR3) free(RVbufR3); if(RVbufR4) free(RVbufR4); if(RVbufR5) free(RVbufR5); if(RVbufR6) free(RVbufR6); if(RVbufR7) free(RVbufR7); if(RVbufR8) free(RVbufR8); RVbufR1=RVbufR2=RVbufR3=RVbufR4=RVbufR5=RVbufR6=RVbufR7=RVbufR8=NULL; } int VC1_SetNumVoices(void) { int t; if(!(vc_softchn=md_softchn)) return 0; if(vinf) free(vinf); if(!(vinf= _mm_calloc(vc_softchn,sizeof(VINFO)))) return 1; for(t=0;t #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif typedef struct WAV { CHAR rID[4]; ULONG rLen; CHAR wID[4]; CHAR fID[4]; ULONG fLen; UWORD wFormatTag; UWORD nChannels; ULONG nSamplesPerSec; ULONG nAvgBytesPerSec; UWORD nBlockAlign; UWORD nFormatSpecific; } WAV; static SAMPLE* Sample_LoadGeneric_internal(MREADER* reader) { SAMPLE *si=NULL; WAV wh; BOOL have_fmt=0; /* read wav header */ _mm_read_string(wh.rID,4,reader); wh.rLen = _mm_read_I_ULONG(reader); _mm_read_string(wh.wID,4,reader); /* check for correct header */ if(_mm_eof(reader)|| memcmp(wh.rID,"RIFF",4) || memcmp(wh.wID,"WAVE",4)) { _mm_errno = MMERR_UNKNOWN_WAVE_TYPE; return NULL; } /* scan all RIFF blocks until we find the sample data */ for(;;) { CHAR dID[4]; ULONG len,start; _mm_read_string(dID,4,reader); len = _mm_read_I_ULONG(reader); /* truncated file ? */ if (_mm_eof(reader)) { _mm_errno=MMERR_UNKNOWN_WAVE_TYPE; return NULL; } start = _mm_ftell(reader); /* sample format block should be present only once and before a data block */ if(!memcmp(dID,"fmt ",4)) { wh.wFormatTag = _mm_read_I_UWORD(reader); wh.nChannels = _mm_read_I_UWORD(reader); wh.nSamplesPerSec = _mm_read_I_ULONG(reader); wh.nAvgBytesPerSec = _mm_read_I_ULONG(reader); wh.nBlockAlign = _mm_read_I_UWORD(reader); wh.nFormatSpecific = _mm_read_I_UWORD(reader); #ifdef MIKMOD_DEBUG fprintf(stderr,"\rwavloader : wFormatTag=%04x blockalign=%04x nFormatSpc=%04x\n", wh.wFormatTag,wh.nBlockAlign,wh.nFormatSpecific); #endif if((have_fmt)||(wh.nChannels>1)) { _mm_errno=MMERR_UNKNOWN_WAVE_TYPE; return NULL; } have_fmt=1; } else /* sample data block should be present only once and after a format block */ if(!memcmp(dID,"data",4)) { if(!have_fmt) { _mm_errno=MMERR_UNKNOWN_WAVE_TYPE; return NULL; } if(!(si=(SAMPLE*)_mm_malloc(sizeof(SAMPLE)))) return NULL; si->speed = wh.nSamplesPerSec/wh.nChannels; si->volume = 64; si->length = len; if(wh.nBlockAlign == 2) { si->flags = SF_16BITS | SF_SIGNED; si->length >>= 1; } si->inflags = si->flags; SL_RegisterSample(si,MD_SNDFX,reader); SL_LoadSamples(); /* skip any other remaining blocks - so in case of repeated sample fragments, we'll return the first anyway instead of an error */ break; } /* onto next block */ _mm_fseek(reader,start+len,SEEK_SET); if (_mm_eof(reader)) break; } return si; } MIKMODAPI SAMPLE* Sample_LoadGeneric(MREADER* reader) { SAMPLE* result; MUTEX_LOCK(vars); result=Sample_LoadGeneric_internal(reader); MUTEX_UNLOCK(vars); return result; } MIKMODAPI SAMPLE* Sample_LoadFP(FILE *fp) { SAMPLE* result=NULL; MREADER* reader; if((reader=_mm_new_file_reader(fp))) { result=Sample_LoadGeneric(reader); _mm_delete_file_reader(reader); } return result; } MIKMODAPI SAMPLE* Sample_Load(CHAR* filename) { FILE *fp; SAMPLE *si=NULL; if(!(md_mode & DMODE_SOFT_SNDFX)) return NULL; if((fp=_mm_fopen(filename,"rb"))) { si = Sample_LoadFP(fp); _mm_fclose(fp); } return si; } MIKMODAPI void Sample_Free(SAMPLE* si) { if(si) { MD_SampleUnload(si->handle); free(si); } } void Sample_Free_internal(SAMPLE *si) { MUTEX_LOCK(vars); Sample_Free(si); MUTEX_UNLOCK(vars); } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/virtch_common.c0000644000000000000000000003110612222472510017407 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: virtch_common.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Common source parts between the two software mixers. This file is probably the ugliest part of libmikmod... ==============================================================================*/ #ifndef _IN_VIRTCH_ #if defined(HAVE_CONFIG_H) #include "config.h" #endif #include "mikmod_internals.h" extern int VC1_Init(void); extern int VC2_Init(void); static int (*VC_Init_ptr)(void)=VC1_Init; extern void VC1_Exit(void); extern void VC2_Exit(void); static void (*VC_Exit_ptr)(void)=VC1_Exit; extern int VC1_SetNumVoices(void); extern int VC2_SetNumVoices(void); static int (*VC_SetNumVoices_ptr)(void); extern ULONG VC1_SampleSpace(int); extern ULONG VC2_SampleSpace(int); static ULONG (*VC_SampleSpace_ptr)(int); extern ULONG VC1_SampleLength(int,SAMPLE*); extern ULONG VC2_SampleLength(int,SAMPLE*); static ULONG (*VC_SampleLength_ptr)(int,SAMPLE*); extern int VC1_PlayStart(void); extern int VC2_PlayStart(void); static int (*VC_PlayStart_ptr)(void); extern void VC1_PlayStop(void); extern void VC2_PlayStop(void); static void (*VC_PlayStop_ptr)(void); extern SWORD VC1_SampleLoad(struct SAMPLOAD*,int); extern SWORD VC2_SampleLoad(struct SAMPLOAD*,int); static SWORD (*VC_SampleLoad_ptr)(struct SAMPLOAD*,int); extern void VC1_SampleUnload(SWORD); extern void VC2_SampleUnload(SWORD); static void (*VC_SampleUnload_ptr)(SWORD); extern ULONG VC1_WriteBytes(SBYTE*,ULONG); extern ULONG VC2_WriteBytes(SBYTE*,ULONG); static ULONG (*VC_WriteBytes_ptr)(SBYTE*,ULONG); extern ULONG VC1_SilenceBytes(SBYTE*,ULONG); extern ULONG VC2_SilenceBytes(SBYTE*,ULONG); static ULONG (*VC_SilenceBytes_ptr)(SBYTE*,ULONG); extern void VC1_VoiceSetVolume(UBYTE,UWORD); extern void VC2_VoiceSetVolume(UBYTE,UWORD); static void (*VC_VoiceSetVolume_ptr)(UBYTE,UWORD); extern UWORD VC1_VoiceGetVolume(UBYTE); extern UWORD VC2_VoiceGetVolume(UBYTE); static UWORD (*VC_VoiceGetVolume_ptr)(UBYTE); extern void VC1_VoiceSetFrequency(UBYTE,ULONG); extern void VC2_VoiceSetFrequency(UBYTE,ULONG); static void (*VC_VoiceSetFrequency_ptr)(UBYTE,ULONG); extern ULONG VC1_VoiceGetFrequency(UBYTE); extern ULONG VC2_VoiceGetFrequency(UBYTE); static ULONG (*VC_VoiceGetFrequency_ptr)(UBYTE); extern void VC1_VoiceSetPanning(UBYTE,ULONG); extern void VC2_VoiceSetPanning(UBYTE,ULONG); static void (*VC_VoiceSetPanning_ptr)(UBYTE,ULONG); extern ULONG VC1_VoiceGetPanning(UBYTE); extern ULONG VC2_VoiceGetPanning(UBYTE); static ULONG (*VC_VoiceGetPanning_ptr)(UBYTE); extern void VC1_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); extern void VC2_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); static void (*VC_VoicePlay_ptr)(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); extern void VC1_VoiceStop(UBYTE); extern void VC2_VoiceStop(UBYTE); static void (*VC_VoiceStop_ptr)(UBYTE); extern BOOL VC1_VoiceStopped(UBYTE); extern BOOL VC2_VoiceStopped(UBYTE); static BOOL (*VC_VoiceStopped_ptr)(UBYTE); extern SLONG VC1_VoiceGetPosition(UBYTE); extern SLONG VC2_VoiceGetPosition(UBYTE); static SLONG (*VC_VoiceGetPosition_ptr)(UBYTE); extern ULONG VC1_VoiceRealVolume(UBYTE); extern ULONG VC2_VoiceRealVolume(UBYTE); static ULONG (*VC_VoiceRealVolume_ptr)(UBYTE); #if defined __STDC__ || defined _MSC_VER #define VC_PROC0(suffix) \ MIKMODAPI void VC_##suffix (void) { VC_##suffix##_ptr(); } #define VC_FUNC0(suffix,ret) \ MIKMODAPI ret VC_##suffix (void) { return VC_##suffix##_ptr(); } #define VC_PROC1(suffix,typ1) \ MIKMODAPI void VC_##suffix (typ1 a) { VC_##suffix##_ptr(a); } #define VC_FUNC1(suffix,ret,typ1) \ MIKMODAPI ret VC_##suffix (typ1 a) { return VC_##suffix##_ptr(a); } #define VC_PROC2(suffix,typ1,typ2) \ MIKMODAPI void VC_##suffix (typ1 a,typ2 b) { VC_##suffix##_ptr(a,b); } #define VC_FUNC2(suffix,ret,typ1,typ2) \ MIKMODAPI ret VC_##suffix (typ1 a,typ2 b) { return VC_##suffix##_ptr(a,b); } #else #define VC_PROC0(suffix) \ MIKMODAPI void VC_/**/suffix (void) { VC_/**/suffix/**/_ptr(); } #define VC_FUNC0(suffix,ret) \ MIKMODAPI ret VC_/**/suffix (void) { return VC_/**/suffix/**/_ptr(); } #define VC_PROC1(suffix,typ1) \ MIKMODAPI void VC_/**/suffix (typ1 a) { VC_/**/suffix/**/_ptr(a); } #define VC_FUNC1(suffix,ret,typ1) \ MIKMODAPI ret VC_/**/suffix (typ1 a) { return VC_/**/suffix/**/_ptr(a); } #define VC_PROC2(suffix,typ1,typ2) \ MIKMODAPI void VC_/**/suffix (typ1 a,typ2 b) { VC_/**/suffix/**/_ptr(a,b); } #define VC_FUNC2(suffix,ret,typ1,typ2) \ MIKMODAPI ret VC_/**/suffix (typ1 a,typ2 b) { return VC_/**/suffix/**/_ptr(a,b); } #endif VC_FUNC0(Init,int) VC_PROC0(Exit) VC_FUNC0(SetNumVoices,int) VC_FUNC1(SampleSpace,ULONG,int) VC_FUNC2(SampleLength,ULONG,int,SAMPLE*) VC_FUNC0(PlayStart,int) VC_PROC0(PlayStop) VC_FUNC2(SampleLoad,SWORD,struct SAMPLOAD*,int) VC_PROC1(SampleUnload,SWORD) VC_FUNC2(WriteBytes,ULONG,SBYTE*,ULONG) VC_FUNC2(SilenceBytes,ULONG,SBYTE*,ULONG) VC_PROC2(VoiceSetVolume,UBYTE,UWORD) VC_FUNC1(VoiceGetVolume,UWORD,UBYTE) VC_PROC2(VoiceSetFrequency,UBYTE,ULONG) VC_FUNC1(VoiceGetFrequency,ULONG,UBYTE) VC_PROC2(VoiceSetPanning,UBYTE,ULONG) VC_FUNC1(VoiceGetPanning,ULONG,UBYTE) void VC_VoicePlay(UBYTE a,SWORD b,ULONG c,ULONG d,ULONG e,ULONG f,UWORD g) { VC_VoicePlay_ptr(a,b,c,d,e,f,g); } VC_PROC1(VoiceStop,UBYTE) VC_FUNC1(VoiceStopped,BOOL,UBYTE) VC_FUNC1(VoiceGetPosition,SLONG,UBYTE) VC_FUNC1(VoiceRealVolume,ULONG,UBYTE) void VC_SetupPointers(void) { if (md_mode&DMODE_HQMIXER) { VC_Init_ptr=VC2_Init; VC_Exit_ptr=VC2_Exit; VC_SetNumVoices_ptr=VC2_SetNumVoices; VC_SampleSpace_ptr=VC2_SampleSpace; VC_SampleLength_ptr=VC2_SampleLength; VC_PlayStart_ptr=VC2_PlayStart; VC_PlayStop_ptr=VC2_PlayStop; VC_SampleLoad_ptr=VC2_SampleLoad; VC_SampleUnload_ptr=VC2_SampleUnload; VC_WriteBytes_ptr=VC2_WriteBytes; VC_SilenceBytes_ptr=VC2_SilenceBytes; VC_VoiceSetVolume_ptr=VC2_VoiceSetVolume; VC_VoiceGetVolume_ptr=VC2_VoiceGetVolume; VC_VoiceSetFrequency_ptr=VC2_VoiceSetFrequency; VC_VoiceGetFrequency_ptr=VC2_VoiceGetFrequency; VC_VoiceSetPanning_ptr=VC2_VoiceSetPanning; VC_VoiceGetPanning_ptr=VC2_VoiceGetPanning; VC_VoicePlay_ptr=VC2_VoicePlay; VC_VoiceStop_ptr=VC2_VoiceStop; VC_VoiceStopped_ptr=VC2_VoiceStopped; VC_VoiceGetPosition_ptr=VC2_VoiceGetPosition; VC_VoiceRealVolume_ptr=VC2_VoiceRealVolume; } else { VC_Init_ptr=VC1_Init; VC_Exit_ptr=VC1_Exit; VC_SetNumVoices_ptr=VC1_SetNumVoices; VC_SampleSpace_ptr=VC1_SampleSpace; VC_SampleLength_ptr=VC1_SampleLength; VC_PlayStart_ptr=VC1_PlayStart; VC_PlayStop_ptr=VC1_PlayStop; VC_SampleLoad_ptr=VC1_SampleLoad; VC_SampleUnload_ptr=VC1_SampleUnload; VC_WriteBytes_ptr=VC1_WriteBytes; VC_SilenceBytes_ptr=VC1_SilenceBytes; VC_VoiceSetVolume_ptr=VC1_VoiceSetVolume; VC_VoiceGetVolume_ptr=VC1_VoiceGetVolume; VC_VoiceSetFrequency_ptr=VC1_VoiceSetFrequency; VC_VoiceGetFrequency_ptr=VC1_VoiceGetFrequency; VC_VoiceSetPanning_ptr=VC1_VoiceSetPanning; VC_VoiceGetPanning_ptr=VC1_VoiceGetPanning; VC_VoicePlay_ptr=VC1_VoicePlay; VC_VoiceStop_ptr=VC1_VoiceStop; VC_VoiceStopped_ptr=VC1_VoiceStopped; VC_VoiceGetPosition_ptr=VC1_VoiceGetPosition; VC_VoiceRealVolume_ptr=VC1_VoiceRealVolume; } } #else #ifndef _VIRTCH_COMMON_ #define _VIRTCH_COMMON_ static ULONG samples2bytes(ULONG samples) { if(vc_mode & DMODE_16BITS) samples <<= 1; if(vc_mode & DMODE_STEREO) samples <<= 1; return samples; } static ULONG bytes2samples(ULONG bytes) { if(vc_mode & DMODE_16BITS) bytes >>= 1; if(vc_mode & DMODE_STEREO) bytes >>= 1; return bytes; } /* Fill the buffer with 'todo' bytes of silence (it depends on the mixing mode how the buffer is filled) */ ULONG VC1_SilenceBytes(SBYTE* buf,ULONG todo) { todo=samples2bytes(bytes2samples(todo)); /* clear the buffer to zero (16 bits signed) or 0x80 (8 bits unsigned) */ if(vc_mode & DMODE_16BITS) memset(buf,0,todo); else memset(buf,0x80,todo); return todo; } void VC1_WriteSamples(SBYTE*,ULONG); /* Writes 'todo' mixed SBYTES (!!) to 'buf'. It returns the number of SBYTES actually written to 'buf' (which is rounded to number of samples that fit into 'todo' bytes). */ ULONG VC1_WriteBytes(SBYTE* buf,ULONG todo) { if(!vc_softchn) return VC1_SilenceBytes(buf,todo); todo = bytes2samples(todo); VC1_WriteSamples(buf,todo); return samples2bytes(todo); } void VC1_Exit(void) { if(vc_tickbuf) free(vc_tickbuf); if(vinf) free(vinf); if(Samples) free(Samples); vc_tickbuf = NULL; vinf = NULL; Samples = NULL; VC_SetupPointers(); } UWORD VC1_VoiceGetVolume(UBYTE voice) { return vinf[voice].vol; } ULONG VC1_VoiceGetPanning(UBYTE voice) { return vinf[voice].pan; } void VC1_VoiceSetFrequency(UBYTE voice,ULONG frq) { vinf[voice].frq=frq; } ULONG VC1_VoiceGetFrequency(UBYTE voice) { return vinf[voice].frq; } void VC1_VoicePlay(UBYTE voice,SWORD handle,ULONG start,ULONG size,ULONG reppos,ULONG repend,UWORD flags) { vinf[voice].flags = flags; vinf[voice].handle = handle; vinf[voice].start = start; vinf[voice].size = size; vinf[voice].reppos = reppos; vinf[voice].repend = repend; vinf[voice].kick = 1; } void VC1_VoiceStop(UBYTE voice) { vinf[voice].active = 0; } BOOL VC1_VoiceStopped(UBYTE voice) { return(vinf[voice].active==0); } SLONG VC1_VoiceGetPosition(UBYTE voice) { return(vinf[voice].current>>FRACBITS); } void VC1_VoiceSetVolume(UBYTE voice,UWORD vol) { /* protect against clicks if volume variation is too high */ if(abs((int)vinf[voice].vol-(int)vol)>32) vinf[voice].rampvol=CLICK_BUFFER; vinf[voice].vol=vol; } void VC1_VoiceSetPanning(UBYTE voice,ULONG pan) { /* protect against clicks if panning variation is too high */ if(abs((int)vinf[voice].pan-(int)pan)>48) vinf[voice].rampvol=CLICK_BUFFER; vinf[voice].pan=pan; } /*========== External mixer interface */ void VC1_SampleUnload(SWORD handle) { if (Samples && (handle < MAXSAMPLEHANDLES)) { if (Samples[handle]) free(Samples[handle]); Samples[handle]=NULL; } } SWORD VC1_SampleLoad(struct SAMPLOAD* sload,int type) { SAMPLE *s = sload->sample; int handle; ULONG t, length,loopstart,loopend,looplen; if(type==MD_HARDWARE) return -1; /* Find empty slot to put sample address in */ for(handle=0;handleloopend > s->length) s->loopend = s->length; if (s->loopstart >= s->loopend) s->flags &= ~SF_LOOP; length = s->length; loopstart = s->loopstart; loopend = s->loopend; SL_SampleSigned(sload); SL_Sample8to16(sload); if(!(Samples[handle]=(SWORD*)_mm_malloc((length+20)<<1))) { _mm_errno = MMERR_SAMPLE_TOO_BIG; return -1; } /* read sample into buffer */ if (SL_Load(Samples[handle],sload,length)) return -1; /* Unclick sample */ if(s->flags & SF_LOOP) { looplen = loopend - loopstart;/* handle short samples */ if(s->flags & SF_BIDI) for(t=0;t<16 && tlength*((s->flags&SF_16BITS)?2:1))+16; } ULONG VC1_VoiceRealVolume(UBYTE voice) { ULONG i,s,size; int k,j; SWORD *smp; SLONG t; t = vinf[voice].current>>FRACBITS; if(!vinf[voice].active) return 0; s = vinf[voice].handle; size = vinf[voice].size; i=64; t-=64; k=0; j=0; if(i>size) i = size; if(t<0) t = 0; if(t+i > size) t = size-i; i &= ~1; /* make sure it's EVEN. */ smp = &Samples[s][t]; for(;i;i--,smp++) { if(k<*smp) k = *smp; if(j>*smp) j = *smp; } return abs(k-j); } #endif /* _VIRTCH_COMMON_ */ #endif /* _IN_VIRTCH_ */ /* ex:set ts=4: */ libmikmod-3.1.16/playercode/mdreg.c0000644000000000000000000000512512262033674015650 0ustar rootroot/* MikMod sound library (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mdreg.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Routine for registering all drivers in libmikmod for the current platform. ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" static void _mm_registeralldrivers(void) { /* Register network drivers */ #ifdef DRV_AF _mm_registerdriver(&drv_AF); #endif #ifdef DRV_ESD _mm_registerdriver(&drv_esd); #endif /* Register hardware drivers - hardware mixing */ #ifdef DRV_ULTRA _mm_registerdriver(&drv_ultra); #endif /* Register OS-specific hardware drivers - software mixing */ #ifdef DRV_AIX _mm_registerdriver(&drv_aix); #endif #ifdef DRV_ALSA _mm_registerdriver(&drv_alsa); #endif #ifdef DRV_HP _mm_registerdriver(&drv_hp); #endif #ifdef DRV_OSS _mm_registerdriver(&drv_oss); #endif #ifdef DRV_SGI _mm_registerdriver(&drv_sgi); #endif #ifdef DRV_SUN _mm_registerdriver(&drv_sun); #endif #ifdef DRV_DART _mm_registerdriver(&drv_dart); #endif #ifdef DRV_OS2 _mm_registerdriver(&drv_os2); #endif #ifdef DRV_DS _mm_registerdriver(&drv_ds); #endif #ifdef DRV_WIN _mm_registerdriver(&drv_win); #endif #ifdef DRV_MAC _mm_registerdriver(&drv_mac); #endif /* Register disk writers */ #ifdef DRV_WAV _mm_registerdriver(&drv_wav); #endif #ifdef DRV_RAW _mm_registerdriver(&drv_raw); #endif /* Register other drivers */ #ifdef DRV_PIPE _mm_registerdriver(&drv_pipe); #endif #if defined(DRV_STDOUT) && !defined(macintosh) _mm_registerdriver(&drv_stdout); #endif /* Register 'nosound' driver */ _mm_registerdriver(&drv_nos); } void MikMod_RegisterAllDrivers(void) { MUTEX_LOCK(lists); _mm_registeralldrivers(); MUTEX_UNLOCK(lists); } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/npertab.c0000644000000000000000000000352312222472510016175 0ustar rootroot/* MikMod sound library (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: npertab.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ MOD format period table. Used by both the MOD and M15 (15-inst mod) Loaders. ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" UWORD npertab[7 * OCTAVE] = { /* Octaves 6 -> 0 */ /* C C# D D# E F F# G G# A A# B */ 0x6b0,0x650,0x5f4,0x5a0,0x54c,0x500,0x4b8,0x474,0x434,0x3f8,0x3c0,0x38a, 0x358,0x328,0x2fa,0x2d0,0x2a6,0x280,0x25c,0x23a,0x21a,0x1fc,0x1e0,0x1c5, 0x1ac,0x194,0x17d,0x168,0x153,0x140,0x12e,0x11d,0x10d,0x0fe,0x0f0,0x0e2, 0x0d6,0x0ca,0x0be,0x0b4,0x0aa,0x0a0,0x097,0x08f,0x087,0x07f,0x078,0x071, 0x06b,0x065,0x05f,0x05a,0x055,0x050,0x04b,0x047,0x043,0x03f,0x03c,0x038, 0x035,0x032,0x02f,0x02d,0x02a,0x028,0x025,0x023,0x021,0x01f,0x01e,0x01c, 0x01b,0x019,0x018,0x016,0x015,0x014,0x013,0x012,0x011,0x010,0x00f,0x00e }; /* ex:set ts=4: */ libmikmod-3.1.16/playercode/Makefile.am0000644000000000000000000000054210003535131016422 0ustar rootrootEXTRA_DIST = mdreg.c \ mdriver.c \ mdulaw.c \ mloader.c \ mlreg.c \ mlutil.c \ mplayer.c \ munitrk.c \ mwav.c \ npertab.c \ sloader.c \ virtch.c \ virtch2.c \ virtch_common.c libmikmod-3.1.16/playercode/mplayer.c0000644000000000000000000023035512226017526016226 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mplayer.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ The Protracker Player Driver The protracker driver supports all base Protracker 3.x commands and features. ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifdef SRANDOM_IN_MATH_H #include #else #include #endif #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); extern long int random(void); #endif /* The currently playing module */ /* This variable should better be static, but it would break the ABI, so this will wait */ MODULE *pf = NULL; #define NUMVOICES(mod) (md_sngchn < (mod)->numvoices ? md_sngchn : (mod)->numvoices) #define HIGH_OCTAVE 2 /* number of above-range octaves */ static UWORD oldperiods[OCTAVE*2]={ 0x6b00, 0x6800, 0x6500, 0x6220, 0x5f50, 0x5c80, 0x5a00, 0x5740, 0x54d0, 0x5260, 0x5010, 0x4dc0, 0x4b90, 0x4960, 0x4750, 0x4540, 0x4350, 0x4160, 0x3f90, 0x3dc0, 0x3c10, 0x3a40, 0x38b0, 0x3700 }; static UBYTE VibratoTable[32]={ 0, 24, 49, 74, 97,120,141,161,180,197,212,224,235,244,250,253, 255,253,250,244,235,224,212,197,180,161,141,120, 97, 74, 49, 24 }; static UBYTE avibtab[128]={ 0, 1, 3, 4, 6, 7, 9,10,12,14,15,17,18,20,21,23, 24,25,27,28,30,31,32,34,35,36,38,39,40,41,42,44, 45,46,47,48,49,50,51,52,53,54,54,55,56,57,57,58, 59,59,60,60,61,61,62,62,62,63,63,63,63,63,63,63, 64,63,63,63,63,63,63,63,62,62,62,61,61,60,60,59, 59,58,57,57,56,55,54,54,53,52,51,50,49,48,47,46, 45,44,42,41,40,39,38,36,35,34,32,31,30,28,27,25, 24,23,21,20,18,17,15,14,12,10, 9, 7, 6, 4, 3, 1 }; /* Triton's linear periods to frequency translation table (for XM modules) */ static ULONG lintab[768]={ 535232,534749,534266,533784,533303,532822,532341,531861, 531381,530902,530423,529944,529466,528988,528511,528034, 527558,527082,526607,526131,525657,525183,524709,524236, 523763,523290,522818,522346,521875,521404,520934,520464, 519994,519525,519057,518588,518121,517653,517186,516720, 516253,515788,515322,514858,514393,513929,513465,513002, 512539,512077,511615,511154,510692,510232,509771,509312, 508852,508393,507934,507476,507018,506561,506104,505647, 505191,504735,504280,503825,503371,502917,502463,502010, 501557,501104,500652,500201,499749,499298,498848,498398, 497948,497499,497050,496602,496154,495706,495259,494812, 494366,493920,493474,493029,492585,492140,491696,491253, 490809,490367,489924,489482,489041,488600,488159,487718, 487278,486839,486400,485961,485522,485084,484647,484210, 483773,483336,482900,482465,482029,481595,481160,480726, 480292,479859,479426,478994,478562,478130,477699,477268, 476837,476407,475977,475548,475119,474690,474262,473834, 473407,472979,472553,472126,471701,471275,470850,470425, 470001,469577,469153,468730,468307,467884,467462,467041, 466619,466198,465778,465358,464938,464518,464099,463681, 463262,462844,462427,462010,461593,461177,460760,460345, 459930,459515,459100,458686,458272,457859,457446,457033, 456621,456209,455797,455386,454975,454565,454155,453745, 453336,452927,452518,452110,451702,451294,450887,450481, 450074,449668,449262,448857,448452,448048,447644,447240, 446836,446433,446030,445628,445226,444824,444423,444022, 443622,443221,442821,442422,442023,441624,441226,440828, 440430,440033,439636,439239,438843,438447,438051,437656, 437261,436867,436473,436079,435686,435293,434900,434508, 434116,433724,433333,432942,432551,432161,431771,431382, 430992,430604,430215,429827,429439,429052,428665,428278, 427892,427506,427120,426735,426350,425965,425581,425197, 424813,424430,424047,423665,423283,422901,422519,422138, 421757,421377,420997,420617,420237,419858,419479,419101, 418723,418345,417968,417591,417214,416838,416462,416086, 415711,415336,414961,414586,414212,413839,413465,413092, 412720,412347,411975,411604,411232,410862,410491,410121, 409751,409381,409012,408643,408274,407906,407538,407170, 406803,406436,406069,405703,405337,404971,404606,404241, 403876,403512,403148,402784,402421,402058,401695,401333, 400970,400609,400247,399886,399525,399165,398805,398445, 398086,397727,397368,397009,396651,396293,395936,395579, 395222,394865,394509,394153,393798,393442,393087,392733, 392378,392024,391671,391317,390964,390612,390259,389907, 389556,389204,388853,388502,388152,387802,387452,387102, 386753,386404,386056,385707,385359,385012,384664,384317, 383971,383624,383278,382932,382587,382242,381897,381552, 381208,380864,380521,380177,379834,379492,379149,378807, 378466,378124,377783,377442,377102,376762,376422,376082, 375743,375404,375065,374727,374389,374051,373714,373377, 373040,372703,372367,372031,371695,371360,371025,370690, 370356,370022,369688,369355,369021,368688,368356,368023, 367691,367360,367028,366697,366366,366036,365706,365376, 365046,364717,364388,364059,363731,363403,363075,362747, 362420,362093,361766,361440,361114,360788,360463,360137, 359813,359488,359164,358840,358516,358193,357869,357547, 357224,356902,356580,356258,355937,355616,355295,354974, 354654,354334,354014,353695,353376,353057,352739,352420, 352103,351785,351468,351150,350834,350517,350201,349885, 349569,349254,348939,348624,348310,347995,347682,347368, 347055,346741,346429,346116,345804,345492,345180,344869, 344558,344247,343936,343626,343316,343006,342697,342388, 342079,341770,341462,341154,340846,340539,340231,339924, 339618,339311,339005,338700,338394,338089,337784,337479, 337175,336870,336566,336263,335959,335656,335354,335051, 334749,334447,334145,333844,333542,333242,332941,332641, 332341,332041,331741,331442,331143,330844,330546,330247, 329950,329652,329355,329057,328761,328464,328168,327872, 327576,327280,326985,326690,326395,326101,325807,325513, 325219,324926,324633,324340,324047,323755,323463,323171, 322879,322588,322297,322006,321716,321426,321136,320846, 320557,320267,319978,319690,319401,319113,318825,318538, 318250,317963,317676,317390,317103,316817,316532,316246, 315961,315676,315391,315106,314822,314538,314254,313971, 313688,313405,313122,312839,312557,312275,311994,311712, 311431,311150,310869,310589,310309,310029,309749,309470, 309190,308911,308633,308354,308076,307798,307521,307243, 306966,306689,306412,306136,305860,305584,305308,305033, 304758,304483,304208,303934,303659,303385,303112,302838, 302565,302292,302019,301747,301475,301203,300931,300660, 300388,300117,299847,299576,299306,299036,298766,298497, 298227,297958,297689,297421,297153,296884,296617,296349, 296082,295815,295548,295281,295015,294749,294483,294217, 293952,293686,293421,293157,292892,292628,292364,292100, 291837,291574,291311,291048,290785,290523,290261,289999, 289737,289476,289215,288954,288693,288433,288173,287913, 287653,287393,287134,286875,286616,286358,286099,285841, 285583,285326,285068,284811,284554,284298,284041,283785, 283529,283273,283017,282762,282507,282252,281998,281743, 281489,281235,280981,280728,280475,280222,279969,279716, 279464,279212,278960,278708,278457,278206,277955,277704, 277453,277203,276953,276703,276453,276204,275955,275706, 275457,275209,274960,274712,274465,274217,273970,273722, 273476,273229,272982,272736,272490,272244,271999,271753, 271508,271263,271018,270774,270530,270286,270042,269798, 269555,269312,269069,268826,268583,268341,268099,267857 }; #define LOGFAC 2*16 static UWORD logtab[104]={ LOGFAC*907,LOGFAC*900,LOGFAC*894,LOGFAC*887, LOGFAC*881,LOGFAC*875,LOGFAC*868,LOGFAC*862, LOGFAC*856,LOGFAC*850,LOGFAC*844,LOGFAC*838, LOGFAC*832,LOGFAC*826,LOGFAC*820,LOGFAC*814, LOGFAC*808,LOGFAC*802,LOGFAC*796,LOGFAC*791, LOGFAC*785,LOGFAC*779,LOGFAC*774,LOGFAC*768, LOGFAC*762,LOGFAC*757,LOGFAC*752,LOGFAC*746, LOGFAC*741,LOGFAC*736,LOGFAC*730,LOGFAC*725, LOGFAC*720,LOGFAC*715,LOGFAC*709,LOGFAC*704, LOGFAC*699,LOGFAC*694,LOGFAC*689,LOGFAC*684, LOGFAC*678,LOGFAC*675,LOGFAC*670,LOGFAC*665, LOGFAC*660,LOGFAC*655,LOGFAC*651,LOGFAC*646, LOGFAC*640,LOGFAC*636,LOGFAC*632,LOGFAC*628, LOGFAC*623,LOGFAC*619,LOGFAC*614,LOGFAC*610, LOGFAC*604,LOGFAC*601,LOGFAC*597,LOGFAC*592, LOGFAC*588,LOGFAC*584,LOGFAC*580,LOGFAC*575, LOGFAC*570,LOGFAC*567,LOGFAC*563,LOGFAC*559, LOGFAC*555,LOGFAC*551,LOGFAC*547,LOGFAC*543, LOGFAC*538,LOGFAC*535,LOGFAC*532,LOGFAC*528, LOGFAC*524,LOGFAC*520,LOGFAC*516,LOGFAC*513, LOGFAC*508,LOGFAC*505,LOGFAC*502,LOGFAC*498, LOGFAC*494,LOGFAC*491,LOGFAC*487,LOGFAC*484, LOGFAC*480,LOGFAC*477,LOGFAC*474,LOGFAC*470, LOGFAC*467,LOGFAC*463,LOGFAC*460,LOGFAC*457, LOGFAC*453,LOGFAC*450,LOGFAC*447,LOGFAC*443, LOGFAC*440,LOGFAC*437,LOGFAC*434,LOGFAC*431 }; static SBYTE PanbrelloTable[256]={ 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60, 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26, 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2, 0,- 2,- 3,- 5,- 6,- 8,- 9,-11,-12,-14,-16,-17,-19,-20,-22,-23, -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44, -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59, -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64, -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60, -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46, -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26, -24,-23,-22,-20,-19,-17,-16,-14,-12,-11,- 9,- 8,- 6,- 5,- 3,- 2 }; /* returns a random value between 0 and ceil-1, ceil must be a power of two */ static int getrandom(int ceilval) { #ifdef HAVE_SRANDOM return random()&(ceilval-1); #else return (rand()*ceilval)/(RAND_MAX+1.0); #endif } /* New Note Action Scoring System : -------------------------------- 1) total-volume (fadevol, chanvol, volume) is the main scorer. 2) a looping sample is a bonus x2 3) a foreground channel is a bonus x4 4) an active envelope with keyoff is a handicap -x2 */ static int MP_FindEmptyChannel(MODULE *mod) { MP_VOICE *a; ULONG t,k,tvol,pp; for (t=0;tvoice[t].main.kick==KICK_ABSENT)|| (mod->voice[t].main.kick==KICK_ENV))&& Voice_Stopped_internal(t)) return t; tvol=0xffffffUL;t=-1;a=mod->voice; for (k=0;kmain.s) return k; if ((a->main.kick==KICK_ABSENT)||(a->main.kick==KICK_ENV)) { pp=a->totalvol<<((a->main.s->flags&SF_LOOP)?1:0); if ((a->master)&&(a==a->master->slave)) pp<<=2; if (pp8000*7) return -1; return t; } static SWORD Interpolate(SWORD p,SWORD p1,SWORD p2,SWORD v1,SWORD v2) { if ((p1==p2)||(p==p1)) return v1; return v1+((SLONG)((p-p1)*(v2-v1))/(p2-p1)); } UWORD getlinearperiod(UWORD note,ULONG fine) { UWORD t; t=((20L+2*HIGH_OCTAVE)*OCTAVE+2-note)*32L-(fine>>1); return t; } static UWORD getlogperiod(UWORD note,ULONG fine) { UWORD n,o; UWORD p1,p2; ULONG i; n=note%(2*OCTAVE); o=note/(2*OCTAVE); i=(n<<2)+(fine>>4); /* n*8 + fine/16 */ p1=logtab[i]; p2=logtab[i+1]; return (Interpolate(fine>>4,0,15,p1,p2)>>o); } static UWORD getoldperiod(UWORD note,ULONG speed) { UWORD n,o; /* This happens sometimes on badly converted AMF, and old MOD */ if (!speed) { #ifdef MIKMOD_DEBUG fprintf(stderr,"\rmplayer: getoldperiod() called with note=%d, speed=0 !\n",note); #endif return 4242; /* <- prevent divide overflow.. (42 hehe) */ } n=note%(2*OCTAVE); o=note/(2*OCTAVE); return ((8363L*(ULONG)oldperiods[n])>>o)/speed; } static UWORD GetPeriod(UWORD flags, UWORD note, ULONG speed) { if (flags & UF_XMPERIODS) { if (flags & UF_LINEAR) return getlinearperiod(note, speed); else return getlogperiod(note, speed); } else return getoldperiod(note, speed); } static SWORD InterpolateEnv(SWORD p,ENVPT *a,ENVPT *b) { return (Interpolate(p,a->pos,b->pos,a->val,b->val)); } static SWORD DoPan(SWORD envpan,SWORD pan) { int newpan; newpan=pan+(((envpan-PAN_CENTER)*(128-abs(pan-PAN_CENTER)))/128); return (newpanPAN_RIGHT?PAN_RIGHT:newpan); } static SWORD StartEnvelope(ENVPR *t,UBYTE flg,UBYTE pts,UBYTE susbeg,UBYTE susend,UBYTE beg,UBYTE end,ENVPT *p,UBYTE keyoff) { t->flg=flg; t->pts=pts; t->susbeg=susbeg; t->susend=susend; t->beg=beg; t->end=end; t->env=p; t->p=0; t->a=0; t->b=((t->flg&EF_SUSTAIN)&&(!(keyoff&KEY_OFF)))?0:1; /* Imago Orpheus sometimes stores an extra initial point in the envelope */ if ((t->pts>=2)&&(t->env[0].pos==t->env[1].pos)) { t->a++; t->b++; } /* Fit in the envelope, still */ if (t->a >= t->pts) t->a = t->pts - 1; if (t->b >= t->pts) t->b = t->pts-1; return t->env[t->a].val; } /* This procedure processes all envelope types, include volume, pitch, and panning. Envelopes are defined by a set of points, each with a magnitude [relating either to volume, panning position, or pitch modifier] and a tick position. Envelopes work in the following manner: (a) Each tick the envelope is moved a point further in its progression. For an accurate progression, magnitudes between two envelope points are interpolated. (b) When progression reaches a defined point on the envelope, values are shifted to interpolate between this point and the next, and checks for loops or envelope end are done. Misc: Sustain loops are loops that are only active as long as the keyoff flag is clear. When a volume envelope terminates, so does the current fadeout. */ static SWORD ProcessEnvelope(MP_VOICE *aout, ENVPR *t, SWORD v) { if (t->flg & EF_ON) { UBYTE a, b; /* actual points in the envelope */ UWORD p; /* the 'tick counter' - real point being played */ a = t->a; b = t->b; p = t->p; /* * Sustain loop on one point (XM type). * Not processed if KEYOFF. * Don't move and don't interpolate when the point is reached */ if ((t->flg & EF_SUSTAIN) && t->susbeg == t->susend && (!(aout->main.keyoff & KEY_OFF) && p == t->env[t->susbeg].pos)) { v = t->env[t->susbeg].val; } else { /* * All following situations will require interpolation between * two envelope points. */ /* * Sustain loop between two points (IT type). * Not processed if KEYOFF. */ /* if we were on a loop point, loop now */ if ((t->flg & EF_SUSTAIN) && !(aout->main.keyoff & KEY_OFF) && a >= t->susend) { a = t->susbeg; b = (t->susbeg==t->susend)?a:a+1; p = t->env[a].pos; v = t->env[a].val; } else /* * Regular loop. * Be sure to correctly handle single point loops. */ if ((t->flg & EF_LOOP) && a >= t->end) { a = t->beg; b = t->beg == t->end ? a : a + 1; p = t->env[a].pos; v = t->env[a].val; } else /* * Non looping situations. */ if (a != b) v = InterpolateEnv(p, &t->env[a], &t->env[b]); else v = t->env[a].val; /* * Start to fade if the volume envelope is finished. */ if (p >= t->env[t->pts - 1].pos) { if (t->flg & EF_VOLENV) { aout->main.keyoff |= KEY_FADE; if (!v) aout->main.fadevol = 0; } } else { p++; /* did pointer reach point b? */ if (p >= t->env[b].pos) a = b++; /* shift points a and b */ } t->a = a; t->b = b; t->p = p; } } return v; } /* XM linear period to frequency conversion */ ULONG getfrequency(UWORD flags,ULONG period) { if (flags & UF_LINEAR) { SLONG shift = ((SLONG)period / 768) - HIGH_OCTAVE; if (shift >= 0) return lintab[period % 768] >> shift; else return lintab[period % 768] << (-shift); } else return (8363L*1712L)/(period?period:1); } /*========== Protracker effects */ static void DoArpeggio(UWORD tick, UWORD flags, MP_CONTROL *a, UBYTE style) { UBYTE note=a->main.note; if (a->arpmem) { switch (style) { case 0: /* mod style: N, N+x, N+y */ switch (tick % 3) { /* case 0: unchanged */ case 1: note += (a->arpmem >> 4); break; case 2: note += (a->arpmem & 0xf); break; } break; case 3: /* okt arpeggio 3: N-x, N, N+y */ switch (tick % 3) { case 0: note -= (a->arpmem >> 4); break; /* case 1: unchanged */ case 2: note += (a->arpmem & 0xf); break; } break; case 4: /* okt arpeggio 4: N, N+y, N, N-x */ switch (tick % 4) { /* case 0, case 2: unchanged */ case 1: note += (a->arpmem & 0xf); break; case 3: note -= (a->arpmem >> 4); break; } break; case 5: /* okt arpeggio 5: N-x, N+y, N, and nothing at tick 0 */ if (!tick) break; switch (tick % 3) { /* case 0: unchanged */ case 1: note -= (a->arpmem >> 4); break; case 2: note += (a->arpmem & 0xf); break; } break; } a->main.period = GetPeriod(flags, (UWORD)note << 1, a->speed); a->ownper = 1; } } static int DoPTEffect0(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (!tick) { if (!dat && (flags & UF_ARPMEM)) dat=a->arpmem; else a->arpmem=dat; } if (a->main.period) DoArpeggio(tick, flags, a, 0); return 0; } static int DoPTEffect1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (!tick && dat) a->slidespeed = (UWORD)dat << 2; if (a->main.period) if (tick) a->tmpperiod -= a->slidespeed; return 0; } static int DoPTEffect2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (!tick && dat) a->slidespeed = (UWORD)dat << 2; if (a->main.period) if (tick) a->tmpperiod += a->slidespeed; return 0; } static void DoToneSlide(UWORD tick, MP_CONTROL *a) { if (!a->main.fadevol) a->main.kick = (a->main.kick == KICK_NOTE)? KICK_NOTE : KICK_KEYOFF; else a->main.kick = (a->main.kick == KICK_NOTE)? KICK_ENV : KICK_ABSENT; if (tick != 0) { int dist; /* We have to slide a->main.period towards a->wantedperiod, so compute the difference between those two values */ dist=a->main.period-a->wantedperiod; /* if they are equal or if portamentospeed is too big ...*/ if (dist == 0 || a->portspeed > abs(dist)) /* ...make tmpperiod equal tperiod */ a->tmpperiod=a->main.period=a->wantedperiod; else if (dist>0) { a->tmpperiod-=a->portspeed; a->main.period-=a->portspeed; /* dist>0, slide up */ } else { a->tmpperiod+=a->portspeed; a->main.period+=a->portspeed; /* dist<0, slide down */ } } else a->tmpperiod=a->main.period; a->ownper = 1; } static int DoPTEffect3(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if ((!tick)&&(dat)) a->portspeed=(UWORD)dat<<2; if (a->main.period) DoToneSlide(tick, a); return 0; } static void DoVibrato(UWORD tick, MP_CONTROL *a) { UBYTE q; UWORD temp = 0; /* silence warning */ if (!tick) return; q=(a->vibpos>>2)&0x1f; switch (a->wavecontrol&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* ramp down */ q<<=3; if (a->vibpos<0) q=255-q; temp=q; break; case 2: /* square wave */ temp=255; break; case 3: /* random wave */ temp=getrandom(256); break; } temp*=a->vibdepth; temp>>=7;temp<<=2; if (a->vibpos>=0) a->main.period=a->tmpperiod+temp; else a->main.period=a->tmpperiod-temp; a->ownper = 1; if (tick != 0) a->vibpos+=a->vibspd; } static int DoPTEffect4(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) { if (dat&0x0f) a->vibdepth=dat&0xf; if (dat&0xf0) a->vibspd=(dat&0xf0)>>2; } if (a->main.period) DoVibrato(tick, a); return 0; } static void DoVolSlide(MP_CONTROL *a, UBYTE dat) { if (dat&0xf) { a->tmpvolume-=(dat&0x0f); if (a->tmpvolume<0) a->tmpvolume=0; } else { a->tmpvolume+=(dat>>4); if (a->tmpvolume>64) a->tmpvolume=64; } } static int DoPTEffect5(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (a->main.period) DoToneSlide(tick, a); if (tick) DoVolSlide(a, dat); return 0; } /* DoPTEffect6 after DoPTEffectA */ static int DoPTEffect7(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; UBYTE q; UWORD temp = 0; /* silence warning */ dat=UniGetByte(); if (!tick) { if (dat&0x0f) a->trmdepth=dat&0xf; if (dat&0xf0) a->trmspd=(dat&0xf0)>>2; } if (a->main.period) { q=(a->trmpos>>2)&0x1f; switch ((a->wavecontrol>>4)&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* ramp down */ q<<=3; if (a->trmpos<0) q=255-q; temp=q; break; case 2: /* square wave */ temp=255; break; case 3: /* random wave */ temp=getrandom(256); break; } temp*=a->trmdepth; temp>>=6; if (a->trmpos>=0) { a->volume=a->tmpvolume+temp; if (a->volume>64) a->volume=64; } else { a->volume=a->tmpvolume-temp; if (a->volume<0) a->volume=0; } a->ownvol = 1; if (tick) a->trmpos+=a->trmspd; } return 0; } static int DoPTEffect8(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (mod->panflag) a->main.panning = mod->panning[channel] = dat; return 0; } static int DoPTEffect9(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) { if (dat) a->soffset=(UWORD)dat<<8; a->main.start=a->hioffset|a->soffset; if ((a->main.s)&&(a->main.start>a->main.s->length)) a->main.start=a->main.s->flags&(SF_LOOP|SF_BIDI)? a->main.s->loopstart:a->main.s->length; } return 0; } static int DoPTEffectA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (tick) DoVolSlide(a, dat); return 0; } static int DoPTEffect6(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { if (a->main.period) DoVibrato(tick, a); DoPTEffectA(tick, flags, a, mod, channel); return 0; } static int DoPTEffectB(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (tick || mod->patdly2) return 0; /* Vincent Voois uses a nasty trick in "Universal Bolero" */ if (dat == mod->sngpos && mod->patbrk == mod->patpos) return 0; if (!mod->loop && !mod->patbrk && (dat < mod->sngpos || (mod->sngpos == (mod->numpos - 1) && !mod->patbrk) || (dat == mod->sngpos && (flags & UF_NOWRAP)) ) ) { /* if we don't loop, better not to skip the end of the pattern, after all... so: mod->patbrk=0; */ mod->posjmp=3; } else { /* if we were fading, adjust... */ if (mod->sngpos == (mod->numpos-1)) mod->volume=mod->initvolume>128?128:mod->initvolume; mod->sngpos=dat; mod->posjmp=2; mod->patpos=0; } return 0; } static int DoPTEffectC(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (tick) return 0; if (dat==(UBYTE)-1) a->anote=dat=0; /* note cut */ else if (dat>64) dat=64; a->tmpvolume=dat; return 0; } static int DoPTEffectD(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if ((tick)||(mod->patdly2)) return 0; if ((mod->positions[mod->sngpos]!=LAST_PATTERN)&& (dat>mod->pattrows[mod->positions[mod->sngpos]])) { dat=mod->pattrows[mod->positions[mod->sngpos]]; } mod->patbrk=dat; if (!mod->posjmp) { /* don't ask me to explain this code - it makes backwards.s3m and children.xm (heretic's version) play correctly, among others. Take that for granted, or write the page of comments yourself... you might need some aspirin - Miod */ if ((mod->sngpos==mod->numpos-1)&&(dat)&& ((mod->loop) || (mod->positions[mod->sngpos]==(mod->numpat-1) && !(flags&UF_NOWRAP)))) { mod->sngpos=0; mod->posjmp=2; } else mod->posjmp=3; } return 0; } static void DoEEffects(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel, UBYTE dat) { UBYTE nib = dat & 0xf; switch (dat>>4) { case 0x0: /* hardware filter toggle, not supported */ break; case 0x1: /* fineslide up */ if (a->main.period) if (!tick) a->tmpperiod-=(nib<<2); break; case 0x2: /* fineslide dn */ if (a->main.period) if (!tick) a->tmpperiod+=(nib<<2); break; case 0x3: /* glissando ctrl */ a->glissando=nib; break; case 0x4: /* set vibrato waveform */ a->wavecontrol&=0xf0; a->wavecontrol|=nib; break; case 0x5: /* set finetune */ if (a->main.period) { if (flags&UF_XMPERIODS) a->speed=nib+128; else a->speed=finetune[nib]; a->tmpperiod=GetPeriod(flags, (UWORD)a->main.note<<1,a->speed); } break; case 0x6: /* set patternloop */ if (tick) break; if (nib) { /* set reppos or repcnt ? */ /* set repcnt, so check if repcnt already is set, which means we are already looping */ if (a->pat_repcnt) a->pat_repcnt--; /* already looping, decrease counter */ else { #if 0 /* this would make walker.xm, shipped with Xsoundtracker, play correctly, but it's better to remain compatible with FT2 */ if ((!(flags&UF_NOWRAP))||(a->pat_reppos!=POS_NONE)) #endif a->pat_repcnt=nib; /* not yet looping, so set repcnt */ } if (a->pat_repcnt) { /* jump to reppos if repcnt>0 */ if (a->pat_reppos==POS_NONE) a->pat_reppos=mod->patpos-1; if (a->pat_reppos==-1) { mod->pat_repcrazy=1; mod->patpos=0; } else mod->patpos=a->pat_reppos; } else a->pat_reppos=POS_NONE; } else a->pat_reppos=mod->patpos-1; /* set reppos - can be (-1) */ break; case 0x7: /* set tremolo waveform */ a->wavecontrol&=0x0f; a->wavecontrol|=nib<<4; break; case 0x8: /* set panning */ if (mod->panflag) { if (nib<=8) nib<<=4; else nib*=17; a->main.panning=mod->panning[channel]=nib; } break; case 0x9: /* retrig note */ /* do not retrigger on tick 0, until we are emulating FT2 and effect data is zero */ if (!tick && !((flags & UF_FT2QUIRKS) && (!nib))) break; /* only retrigger if data nibble > 0, or if tick 0 (FT2 compat) */ if (nib || !tick) { if (!a->retrig) { /* when retrig counter reaches 0, reset counter and restart the sample */ if (a->main.period) a->main.kick=KICK_NOTE; a->retrig=nib; } a->retrig--; /* countdown */ } break; case 0xa: /* fine volume slide up */ if (tick) break; a->tmpvolume+=nib; if (a->tmpvolume>64) a->tmpvolume=64; break; case 0xb: /* fine volume slide dn */ if (tick) break; a->tmpvolume-=nib; if (a->tmpvolume<0)a->tmpvolume=0; break; case 0xc: /* cut note */ /* When tick reaches the cut-note value, turn the volume to zero (just like on the amiga) */ if (tick>=nib) a->tmpvolume=0; /* just turn the volume down */ break; case 0xd: /* note delay */ /* delay the start of the sample until tick==nib */ if (!tick) a->main.notedelay=nib; else if (a->main.notedelay) a->main.notedelay--; break; case 0xe: /* pattern delay */ if (!tick) if (!mod->patdly2) mod->patdly=nib+1; /* only once, when tick=0 */ break; case 0xf: /* invert loop, not supported */ break; } } static int DoPTEffectE(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoEEffects(tick, flags, a, mod, channel, UniGetByte()); return 0; } static int DoPTEffectF(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (tick||mod->patdly2) return 0; if (mod->extspd&&(dat>=mod->bpmlimit)) mod->bpm=dat; else if (dat) { mod->sngspd=(dat>=mod->bpmlimit)?mod->bpmlimit-1:dat; mod->vbtick=0; } return 0; } /*========== Scream Tracker effects */ static int DoS3MEffectA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE speed; speed = UniGetByte(); if (tick || mod->patdly2) return 0; if (speed > 128) speed -= 128; if (speed) { mod->sngspd = speed; mod->vbtick = 0; } return 0; } static void DoS3MVolSlide(UWORD tick, UWORD flags, MP_CONTROL *a, UBYTE inf) { UBYTE lo, hi; if (inf) a->s3mvolslide=inf; else inf=a->s3mvolslide; lo=inf&0xf; hi=inf>>4; if (!lo) { if ((tick)||(flags&UF_S3MSLIDES)) a->tmpvolume+=hi; } else if (!hi) { if ((tick)||(flags&UF_S3MSLIDES)) a->tmpvolume-=lo; } else if (lo==0xf) { if (!tick) a->tmpvolume+=(hi?hi:0xf); } else if (hi==0xf) { if (!tick) a->tmpvolume-=(lo?lo:0xf); } else return; if (a->tmpvolume<0) a->tmpvolume=0; else if (a->tmpvolume>64) a->tmpvolume=64; } static int DoS3MEffectD(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoS3MVolSlide(tick, flags, a, UniGetByte()); return 1; } static void DoS3MSlideDn(UWORD tick, MP_CONTROL *a, UBYTE inf) { UBYTE hi,lo; if (inf) a->slidespeed=inf; else inf=a->slidespeed; hi=inf>>4; lo=inf&0xf; if (hi==0xf) { if (!tick) a->tmpperiod+=(UWORD)lo<<2; } else if (hi==0xe) { if (!tick) a->tmpperiod+=lo; } else { if (tick) a->tmpperiod+=(UWORD)inf<<2; } } static int DoS3MEffectE(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (a->main.period) DoS3MSlideDn(tick, a,dat); return 0; } static void DoS3MSlideUp(UWORD tick, MP_CONTROL *a, UBYTE inf) { UBYTE hi,lo; if (inf) a->slidespeed=inf; else inf=a->slidespeed; hi=inf>>4; lo=inf&0xf; if (hi==0xf) { if (!tick) a->tmpperiod-=(UWORD)lo<<2; } else if (hi==0xe) { if (!tick) a->tmpperiod-=lo; } else { if (tick) a->tmpperiod-=(UWORD)inf<<2; } } static int DoS3MEffectF(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (a->main.period) DoS3MSlideUp(tick, a,dat); return 0; } static int DoS3MEffectI(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, on, off; inf = UniGetByte(); if (inf) a->s3mtronof = inf; else { inf = a->s3mtronof; if (!inf) return 0; } if (!tick) return 0; on=(inf>>4)+1; off=(inf&0xf)+1; a->s3mtremor%=(on+off); a->volume=(a->s3mtremortmpvolume:0; a->ownvol=1; a->s3mtremor++; return 0; } static int DoS3MEffectQ(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf; inf = UniGetByte(); if (a->main.period) { if (inf) { a->s3mrtgslide=inf>>4; a->s3mrtgspeed=inf&0xf; } /* only retrigger if low nibble > 0 */ if (a->s3mrtgspeed>0) { if (!a->retrig) { /* when retrig counter reaches 0, reset counter and restart the sample */ if (a->main.kick!=KICK_NOTE) a->main.kick=KICK_KEYOFF; a->retrig=a->s3mrtgspeed; if ((tick)||(flags&UF_S3MSLIDES)) { switch (a->s3mrtgslide) { case 1: case 2: case 3: case 4: case 5: a->tmpvolume-=(1<<(a->s3mrtgslide-1)); break; case 6: a->tmpvolume=(2*a->tmpvolume)/3; break; case 7: a->tmpvolume>>=1; break; case 9: case 0xa: case 0xb: case 0xc: case 0xd: a->tmpvolume+=(1<<(a->s3mrtgslide-9)); break; case 0xe: a->tmpvolume=(3*a->tmpvolume)>>1; break; case 0xf: a->tmpvolume=a->tmpvolume<<1; break; } if (a->tmpvolume<0) a->tmpvolume=0; else if (a->tmpvolume>64) a->tmpvolume=64; } } a->retrig--; /* countdown */ } } return 0; } static int DoS3MEffectR(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, q; UWORD temp=0; /* silence warning */ dat = UniGetByte(); if (!tick) { if (dat&0x0f) a->trmdepth=dat&0xf; if (dat&0xf0) a->trmspd=(dat&0xf0)>>2; } q=(a->trmpos>>2)&0x1f; switch ((a->wavecontrol>>4)&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* ramp down */ q<<=3; if (a->trmpos<0) q=255-q; temp=q; break; case 2: /* square wave */ temp=255; break; case 3: /* random */ temp=getrandom(256); break; } temp*=a->trmdepth; temp>>=7; if (a->trmpos>=0) { a->volume=a->tmpvolume+temp; if (a->volume>64) a->volume=64; } else { a->volume=a->tmpvolume-temp; if (a->volume<0) a->volume=0; } a->ownvol = 1; if (tick) a->trmpos+=a->trmspd; return 0; } static int DoS3MEffectT(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE tempo; tempo = UniGetByte(); if (tick || mod->patdly2) return 0; mod->bpm = (tempo < 32) ? 32 : tempo; return 0; } static int DoS3MEffectU(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, q; UWORD temp = 0; /* silence warning */ dat = UniGetByte(); if (!tick) { if (dat&0x0f) a->vibdepth=dat&0xf; if (dat&0xf0) a->vibspd=(dat&0xf0)>>2; } else if (a->main.period) { q=(a->vibpos>>2)&0x1f; switch (a->wavecontrol&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* ramp down */ q<<=3; if (a->vibpos<0) q=255-q; temp=q; break; case 2: /* square wave */ temp=255; break; case 3: /* random */ temp=getrandom(256); break; } temp*=a->vibdepth; temp>>=8; if (a->vibpos>=0) a->main.period=a->tmpperiod+temp; else a->main.period=a->tmpperiod-temp; a->ownper = 1; a->vibpos+=a->vibspd; } return 0; } /*========== Envelope helpers */ static int DoKeyOff(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { a->main.keyoff|=KEY_OFF; if ((!(a->main.volflg&EF_ON))||(a->main.volflg&EF_LOOP)) a->main.keyoff=KEY_KILL; return 0; } static int DoKeyFade(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if ((tick>=dat)||(tick==mod->sngspd-1)) { a->main.keyoff=KEY_KILL; if (!(a->main.volflg&EF_ON)) a->main.fadevol=0; } return 0; } /*========== Fast Tracker effects */ /* DoXMEffect6 after DoXMEffectA */ static int DoXMEffectA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, lo, hi; inf = UniGetByte(); if (inf) a->s3mvolslide = inf; else inf = a->s3mvolslide; if (tick) { lo=inf&0xf; hi=inf>>4; if (!hi) { a->tmpvolume-=lo; if (a->tmpvolume<0) a->tmpvolume=0; } else { a->tmpvolume+=hi; if (a->tmpvolume>64) a->tmpvolume=64; } } return 0; } static int DoXMEffect6(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { if (a->main.period) DoVibrato(tick, a); return DoXMEffectA(tick, flags, a, mod, channel); } static int DoXMEffectE1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) { if (dat) a->fportupspd=dat; if (a->main.period) a->tmpperiod-=(a->fportupspd<<2); } return 0; } static int DoXMEffectE2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) { if (dat) a->fportdnspd=dat; if (a->main.period) a->tmpperiod+=(a->fportdnspd<<2); } return 0; } static int DoXMEffectEA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) if (dat) a->fslideupspd=dat; a->tmpvolume+=a->fslideupspd; if (a->tmpvolume>64) a->tmpvolume=64; return 0; } static int DoXMEffectEB(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if (!tick) if (dat) a->fslidednspd=dat; a->tmpvolume-=a->fslidednspd; if (a->tmpvolume<0) a->tmpvolume=0; return 0; } static int DoXMEffectG(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { mod->volume=UniGetByte()<<1; if (mod->volume>128) mod->volume=128; return 0; } static int DoXMEffectH(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf; inf = UniGetByte(); if (tick) { if (inf) mod->globalslide=inf; else inf=mod->globalslide; if (inf & 0xf0) inf&=0xf0; mod->volume=mod->volume+((inf>>4)-(inf&0xf))*2; if (mod->volume<0) mod->volume=0; else if (mod->volume>128) mod->volume=128; } return 0; } static int DoXMEffectL(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat=UniGetByte(); if ((!tick)&&(a->main.i)) { UWORD points; INSTRUMENT *i=a->main.i; MP_VOICE *aout; if ((aout=a->slave)) { if (aout->venv.env) { points=i->volenv[i->volpts-1].pos; aout->venv.p=aout->venv.env[(dat>points)?points:dat].pos; } if (aout->penv.env) { points=i->panenv[i->panpts-1].pos; aout->penv.p=aout->penv.env[(dat>points)?points:dat].pos; } } } return 0; } static int DoXMEffectP(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, lo, hi; SWORD pan; inf = UniGetByte(); if (!mod->panflag) return 0; if (inf) a->pansspd = inf; else inf =a->pansspd; if (tick) { lo=inf&0xf; hi=inf>>4; /* slide right has absolute priority */ if (hi) lo = 0; pan=((a->main.panning==PAN_SURROUND)?PAN_CENTER:a->main.panning)+hi-lo; a->main.panning=(panPAN_RIGHT?PAN_RIGHT:pan); } return 0; } static int DoXMEffectX1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (dat) a->ffportupspd = dat; else dat = a->ffportupspd; if (a->main.period) if (!tick) { a->main.period-=dat; a->tmpperiod-=dat; a->ownper = 1; } return 0; } static int DoXMEffectX2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat; dat = UniGetByte(); if (dat) a->ffportdnspd=dat; else dat = a->ffportdnspd; if (a->main.period) if (!tick) { a->main.period+=dat; a->tmpperiod+=dat; a->ownper = 1; } return 0; } /*========== Impulse Tracker effects */ static void DoITToneSlide(UWORD tick, MP_CONTROL *a, UBYTE dat) { if (dat) a->portspeed = dat; /* if we don't come from another note, ignore the slide and play the note as is */ if (!a->oldnote || !a->main.period) return; if ((!tick)&&(a->newsamp)){ a->main.kick=KICK_NOTE; a->main.start=-1; } else a->main.kick=(a->main.kick==KICK_NOTE)?KICK_ENV:KICK_ABSENT; if (tick) { int dist; /* We have to slide a->main.period towards a->wantedperiod, compute the difference between those two values */ dist=a->main.period-a->wantedperiod; /* if they are equal or if portamentospeed is too big... */ if ((!dist)||((a->portspeed<<2)>abs(dist))) /* ... make tmpperiod equal tperiod */ a->tmpperiod=a->main.period=a->wantedperiod; else if (dist>0) { a->tmpperiod-=a->portspeed<<2; a->main.period-=a->portspeed<<2; /* dist>0 slide up */ } else { a->tmpperiod+=a->portspeed<<2; a->main.period+=a->portspeed<<2; /* dist<0 slide down */ } } else a->tmpperiod=a->main.period; a->ownper=1; } static int DoITEffectG(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoITToneSlide(tick, a, UniGetByte()); return 0; } static void DoITVibrato(UWORD tick, MP_CONTROL *a, UBYTE dat) { UBYTE q; UWORD temp=0; if (!tick) { if (dat&0x0f) a->vibdepth=dat&0xf; if (dat&0xf0) a->vibspd=(dat&0xf0)>>2; } if (!a->main.period) return; q=(a->vibpos>>2)&0x1f; switch (a->wavecontrol&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* square wave */ temp=255; break; case 2: /* ramp down */ q<<=3; if (a->vibpos<0) q=255-q; temp=q; break; case 3: /* random */ temp=getrandom(256); break; } temp*=a->vibdepth; temp>>=8; temp<<=2; if (a->vibpos>=0) a->main.period=a->tmpperiod+temp; else a->main.period=a->tmpperiod-temp; a->ownper=1; a->vibpos+=a->vibspd; } static int DoITEffectH(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoITVibrato(tick, a, UniGetByte()); return 0; } static int DoITEffectI(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, on, off; inf = UniGetByte(); if (inf) a->s3mtronof = inf; else { inf = a->s3mtronof; if (!inf) return 0; } on=(inf>>4); off=(inf&0xf); a->s3mtremor%=(on+off); a->volume=(a->s3mtremortmpvolume:0; a->ownvol = 1; a->s3mtremor++; return 0; } static int DoITEffectM(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { a->main.chanvol=UniGetByte(); if (a->main.chanvol>64) a->main.chanvol=64; else if (a->main.chanvol<0) a->main.chanvol=0; return 0; } static int DoITEffectN(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, lo, hi; inf = UniGetByte(); if (inf) a->chanvolslide = inf; else inf = a->chanvolslide; lo=inf&0xf; hi=inf>>4; if (!hi) a->main.chanvol-=lo; else if (!lo) { a->main.chanvol+=hi; } else if (hi==0xf) { if (!tick) a->main.chanvol-=lo; } else if (lo==0xf) { if (!tick) a->main.chanvol+=hi; } if (a->main.chanvol<0) a->main.chanvol=0; else if (a->main.chanvol>64) a->main.chanvol=64; return 0; } static int DoITEffectP(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, lo, hi; SWORD pan; inf = UniGetByte(); if (inf) a->pansspd = inf; else inf = a->pansspd; if (!mod->panflag) return 0; lo=inf&0xf; hi=inf>>4; pan=(a->main.panning==PAN_SURROUND)?PAN_CENTER:a->main.panning; if (!hi) pan+=lo<<2; else if (!lo) { pan-=hi<<2; } else if (hi==0xf) { if (!tick) pan+=lo<<2; } else if (lo==0xf) { if (!tick) pan-=hi<<2; } a->main.panning= (panPAN_RIGHT?PAN_RIGHT:pan); return 0; } static int DoITEffectT(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE tempo; SWORD temp; tempo = UniGetByte(); if (mod->patdly2) return 0; temp = mod->bpm; if (tempo & 0x10) temp += (tempo & 0x0f); else temp -= tempo; mod->bpm=(temp>255)?255:(temp<1?1:temp); return 0; } static int DoITEffectU(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, q; UWORD temp = 0; /* silence warning */ dat = UniGetByte(); if (!tick) { if (dat&0x0f) a->vibdepth=dat&0xf; if (dat&0xf0) a->vibspd=(dat&0xf0)>>2; } if (a->main.period) { q=(a->vibpos>>2)&0x1f; switch (a->wavecontrol&3) { case 0: /* sine */ temp=VibratoTable[q]; break; case 1: /* square wave */ temp=255; break; case 2: /* ramp down */ q<<=3; if (a->vibpos<0) q=255-q; temp=q; break; case 3: /* random */ temp=getrandom(256); break; } temp*=a->vibdepth; temp>>=8; if (a->vibpos>=0) a->main.period=a->tmpperiod+temp; else a->main.period=a->tmpperiod-temp; a->ownper = 1; a->vibpos+=a->vibspd; } return 0; } static int DoITEffectW(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE inf, lo, hi; inf = UniGetByte(); if (inf) mod->globalslide = inf; else inf = mod->globalslide; lo=inf&0xf; hi=inf>>4; if (!lo) { if (tick) mod->volume+=hi; } else if (!hi) { if (tick) mod->volume-=lo; } else if (lo==0xf) { if (!tick) mod->volume+=hi; } else if (hi==0xf) { if (!tick) mod->volume-=lo; } if (mod->volume<0) mod->volume=0; else if (mod->volume>128) mod->volume=128; return 0; } static int DoITEffectY(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, q; SLONG temp = 0; /* silence warning */ dat=UniGetByte(); if (!tick) { if (dat&0x0f) a->panbdepth=(dat&0xf); if (dat&0xf0) a->panbspd=(dat&0xf0)>>4; } if (mod->panflag) { q=a->panbpos; switch (a->panbwave) { case 0: /* sine */ temp=PanbrelloTable[q]; break; case 1: /* square wave */ temp=(q<0x80)?64:0; break; case 2: /* ramp down */ q<<=3; temp=q; break; case 3: /* random */ temp=getrandom(256); break; } temp*=a->panbdepth; temp=(temp/8)+mod->panning[channel]; a->main.panning= (tempPAN_RIGHT?PAN_RIGHT:temp); a->panbpos+=a->panbspd; } return 0; } static void DoNNAEffects(MODULE *, MP_CONTROL *, UBYTE); /* Impulse/Scream Tracker Sxx effects. All Sxx effects share the same memory space. */ static int DoITEffectS0(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, inf, c; dat = UniGetByte(); inf=dat&0xf; c=dat>>4; if (!dat) { c=a->sseffect; inf=a->ssdata; } else { a->sseffect=c; a->ssdata=inf; } switch (c) { case SS_GLISSANDO: /* S1x set glissando voice */ DoEEffects(tick, flags, a, mod, channel, 0x30|inf); break; case SS_FINETUNE: /* S2x set finetune */ DoEEffects(tick, flags, a, mod, channel, 0x50|inf); break; case SS_VIBWAVE: /* S3x set vibrato waveform */ DoEEffects(tick, flags, a, mod, channel, 0x40|inf); break; case SS_TREMWAVE: /* S4x set tremolo waveform */ DoEEffects(tick, flags, a, mod, channel, 0x70|inf); break; case SS_PANWAVE: /* S5x panbrello */ a->panbwave=inf; break; case SS_FRAMEDELAY: /* S6x delay x number of frames (patdly) */ DoEEffects(tick, flags, a, mod, channel, 0xe0|inf); break; case SS_S7EFFECTS: /* S7x instrument / NNA commands */ DoNNAEffects(mod, a, inf); break; case SS_PANNING: /* S8x set panning position */ DoEEffects(tick, flags, a, mod, channel, 0x80 | inf); break; case SS_SURROUND: /* S9x set surround sound */ if (mod->panflag) a->main.panning = mod->panning[channel] = PAN_SURROUND; break; case SS_HIOFFSET: /* SAy set high order sample offset yxx00h */ if (!tick) { a->hioffset=inf<<16; a->main.start=a->hioffset|a->soffset; if ((a->main.s)&&(a->main.start>a->main.s->length)) a->main.start=a->main.s->flags&(SF_LOOP|SF_BIDI)? a->main.s->loopstart:a->main.s->length; } break; case SS_PATLOOP: /* SBx pattern loop */ DoEEffects(tick, flags, a, mod, channel, 0x60|inf); break; case SS_NOTECUT: /* SCx notecut */ if (!inf) inf = 1; DoEEffects(tick, flags, a, mod, channel, 0xC0|inf); break; case SS_NOTEDELAY: /* SDx notedelay */ DoEEffects(tick, flags, a, mod, channel, 0xD0|inf); break; case SS_PATDELAY: /* SEx patterndelay */ DoEEffects(tick, flags, a, mod, channel, 0xE0|inf); break; } return 0; } /*========== Impulse Tracker Volume/Pan Column effects */ /* * All volume/pan column effects share the same memory space. */ static int DoVolEffects(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE c, inf; c = UniGetByte(); inf = UniGetByte(); if ((!c)&&(!inf)) { c=a->voleffect; inf=a->voldata; } else { a->voleffect=c; a->voldata=inf; } if (c) switch (c) { case VOL_VOLUME: if (tick) break; if (inf>64) inf=64; a->tmpvolume=inf; break; case VOL_PANNING: if (mod->panflag) a->main.panning=inf; break; case VOL_VOLSLIDE: DoS3MVolSlide(tick, flags, a, inf); return 1; case VOL_PITCHSLIDEDN: if (a->main.period) DoS3MSlideDn(tick, a, inf); break; case VOL_PITCHSLIDEUP: if (a->main.period) DoS3MSlideUp(tick, a, inf); break; case VOL_PORTAMENTO: DoITToneSlide(tick, a, inf); break; case VOL_VIBRATO: DoITVibrato(tick, a, inf); break; } return 0; } /*========== UltraTracker effects */ static int DoULTEffect9(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UWORD offset=UniGetWord(); if (offset) a->ultoffset=offset; a->main.start=a->ultoffset<<2; if ((a->main.s)&&(a->main.start>a->main.s->length)) a->main.start=a->main.s->flags&(SF_LOOP|SF_BIDI)? a->main.s->loopstart:a->main.s->length; return 0; } /*========== OctaMED effects */ static int DoMEDSpeed(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UWORD speed=UniGetWord(); mod->bpm=speed; return 0; } static int DoMEDEffectF1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoEEffects(tick, flags, a, mod, channel, 0x90|(mod->sngspd/2)); return 0; } static int DoMEDEffectF2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoEEffects(tick, flags, a, mod, channel, 0xd0|(mod->sngspd/2)); return 0; } static int DoMEDEffectF3(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { DoEEffects(tick, flags, a, mod, channel, 0x90|(mod->sngspd/3)); return 0; } /*========== Oktalyzer effects */ static int DoOktArp(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UBYTE dat, dat2; dat2 = UniGetByte(); /* arpeggio style */ dat = UniGetByte(); if (!tick) { if (!dat && (flags & UF_ARPMEM)) dat=a->arpmem; else a->arpmem=dat; } if (a->main.period) DoArpeggio(tick, flags, a, dat2); return 0; } /*========== General player functions */ static int DoNothing(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel) { UniSkipOpcode(); return 0; } typedef int (*effect_func) (UWORD, UWORD, MP_CONTROL *, MODULE *, SWORD); static effect_func effects[UNI_LAST] = { DoNothing, /* 0 */ DoNothing, /* UNI_NOTE */ DoNothing, /* UNI_INSTRUMENT */ DoPTEffect0, /* UNI_PTEFFECT0 */ DoPTEffect1, /* UNI_PTEFFECT1 */ DoPTEffect2, /* UNI_PTEFFECT2 */ DoPTEffect3, /* UNI_PTEFFECT3 */ DoPTEffect4, /* UNI_PTEFFECT4 */ DoPTEffect5, /* UNI_PTEFFECT5 */ DoPTEffect6, /* UNI_PTEFFECT6 */ DoPTEffect7, /* UNI_PTEFFECT7 */ DoPTEffect8, /* UNI_PTEFFECT8 */ DoPTEffect9, /* UNI_PTEFFECT9 */ DoPTEffectA, /* UNI_PTEFFECTA */ DoPTEffectB, /* UNI_PTEFFECTB */ DoPTEffectC, /* UNI_PTEFFECTC */ DoPTEffectD, /* UNI_PTEFFECTD */ DoPTEffectE, /* UNI_PTEFFECTE */ DoPTEffectF, /* UNI_PTEFFECTF */ DoS3MEffectA, /* UNI_S3MEFFECTA */ DoS3MEffectD, /* UNI_S3MEFFECTD */ DoS3MEffectE, /* UNI_S3MEFFECTE */ DoS3MEffectF, /* UNI_S3MEFFECTF */ DoS3MEffectI, /* UNI_S3MEFFECTI */ DoS3MEffectQ, /* UNI_S3MEFFECTQ */ DoS3MEffectR, /* UNI_S3MEFFECTR */ DoS3MEffectT, /* UNI_S3MEFFECTT */ DoS3MEffectU, /* UNI_S3MEFFECTU */ DoKeyOff, /* UNI_KEYOFF */ DoKeyFade, /* UNI_KEYFADE */ DoVolEffects, /* UNI_VOLEFFECTS */ DoPTEffect4, /* UNI_XMEFFECT4 */ DoXMEffect6, /* UNI_XMEFFECT6 */ DoXMEffectA, /* UNI_XMEFFECTA */ DoXMEffectE1, /* UNI_XMEFFECTE1 */ DoXMEffectE2, /* UNI_XMEFFECTE2 */ DoXMEffectEA, /* UNI_XMEFFECTEA */ DoXMEffectEB, /* UNI_XMEFFECTEB */ DoXMEffectG, /* UNI_XMEFFECTG */ DoXMEffectH, /* UNI_XMEFFECTH */ DoXMEffectL, /* UNI_XMEFFECTL */ DoXMEffectP, /* UNI_XMEFFECTP */ DoXMEffectX1, /* UNI_XMEFFECTX1 */ DoXMEffectX2, /* UNI_XMEFFECTX2 */ DoITEffectG, /* UNI_ITEFFECTG */ DoITEffectH, /* UNI_ITEFFECTH */ DoITEffectI, /* UNI_ITEFFECTI */ DoITEffectM, /* UNI_ITEFFECTM */ DoITEffectN, /* UNI_ITEFFECTN */ DoITEffectP, /* UNI_ITEFFECTP */ DoITEffectT, /* UNI_ITEFFECTT */ DoITEffectU, /* UNI_ITEFFECTU */ DoITEffectW, /* UNI_ITEFFECTW */ DoITEffectY, /* UNI_ITEFFECTY */ DoNothing, /* UNI_ITEFFECTZ */ DoITEffectS0, /* UNI_ITEFFECTS0 */ DoULTEffect9, /* UNI_ULTEFFECT9 */ DoMEDSpeed, /* UNI_MEDSPEED */ DoMEDEffectF1, /* UNI_MEDEFFECTF1 */ DoMEDEffectF2, /* UNI_MEDEFFECTF2 */ DoMEDEffectF3, /* UNI_MEDEFFECTF3 */ DoOktArp, /* UNI_OKTARP */ }; static int pt_playeffects(MODULE *mod, SWORD channel, MP_CONTROL *a) { UWORD tick = mod->vbtick; UWORD flags = mod->flags; UBYTE c; int explicitslides = 0; effect_func f; while((c=UniGetByte())) { f = effects[c]; if (f != DoNothing) a->sliding = 0; explicitslides |= f(tick, flags, a, mod, channel); } return explicitslides; } static void DoNNAEffects(MODULE *mod, MP_CONTROL *a, UBYTE dat) { int t; MP_VOICE *aout; dat&=0xf; aout=(a->slave)?a->slave:NULL; switch (dat) { case 0x0: /* past note cut */ for (t=0;tvoice[t].master==a) mod->voice[t].main.fadevol=0; break; case 0x1: /* past note off */ for (t=0;tvoice[t].master==a) { mod->voice[t].main.keyoff|=KEY_OFF; if ((!(mod->voice[t].venv.flg & EF_ON))|| (mod->voice[t].venv.flg & EF_LOOP)) mod->voice[t].main.keyoff=KEY_KILL; } break; case 0x2: /* past note fade */ for (t=0;tvoice[t].master==a) mod->voice[t].main.keyoff|=KEY_FADE; break; case 0x3: /* set NNA note cut */ a->main.nna=(a->main.nna&~NNA_MASK)|NNA_CUT; break; case 0x4: /* set NNA note continue */ a->main.nna=(a->main.nna&~NNA_MASK)|NNA_CONTINUE; break; case 0x5: /* set NNA note off */ a->main.nna=(a->main.nna&~NNA_MASK)|NNA_OFF; break; case 0x6: /* set NNA note fade */ a->main.nna=(a->main.nna&~NNA_MASK)|NNA_FADE; break; case 0x7: /* disable volume envelope */ if (aout) aout->main.volflg&=~EF_ON; break; case 0x8: /* enable volume envelope */ if (aout) aout->main.volflg|=EF_ON; break; case 0x9: /* disable panning envelope */ if (aout) aout->main.panflg&=~EF_ON; break; case 0xa: /* enable panning envelope */ if (aout) aout->main.panflg|=EF_ON; break; case 0xb: /* disable pitch envelope */ if (aout) aout->main.pitflg&=~EF_ON; break; case 0xc: /* enable pitch envelope */ if (aout) aout->main.pitflg|=EF_ON; break; } } static void pt_UpdateVoices(MODULE *mod, int max_volume) { SWORD envpan,envvol,envpit,channel; UWORD playperiod; SLONG vibval,vibdpt; ULONG tmpvol; MP_VOICE *aout; INSTRUMENT *i; SAMPLE *s; mod->totalchn=mod->realchn=0; for (channel=0;channelvoice[channel]; i=aout->main.i; s=aout->main.s; if (!s || !s->length) continue; if (aout->main.period<40) aout->main.period=40; else if (aout->main.period>50000) aout->main.period=50000; if ((aout->main.kick==KICK_NOTE)||(aout->main.kick==KICK_KEYOFF)) { Voice_Play_internal(channel,s,(aout->main.start==-1)? ((s->flags&SF_UST_LOOP)?s->loopstart:0):aout->main.start); aout->main.fadevol=32768; aout->aswppos=0; } envvol = 256; envpan = PAN_CENTER; envpit = 32; if (i && ((aout->main.kick==KICK_NOTE)||(aout->main.kick==KICK_ENV))) { if (aout->main.volflg & EF_ON) envvol = StartEnvelope(&aout->venv,aout->main.volflg, i->volpts,i->volsusbeg,i->volsusend, i->volbeg,i->volend,i->volenv,aout->main.keyoff); if (aout->main.panflg & EF_ON) envpan = StartEnvelope(&aout->penv,aout->main.panflg, i->panpts,i->pansusbeg,i->pansusend, i->panbeg,i->panend,i->panenv,aout->main.keyoff); if (aout->main.pitflg & EF_ON) envpit = StartEnvelope(&aout->cenv,aout->main.pitflg, i->pitpts,i->pitsusbeg,i->pitsusend, i->pitbeg,i->pitend,i->pitenv,aout->main.keyoff); if (aout->cenv.flg & EF_ON) aout->masterperiod=GetPeriod(mod->flags, (UWORD)aout->main.note<<1, aout->master->speed); } else { if (aout->main.volflg & EF_ON) envvol = ProcessEnvelope(aout,&aout->venv,256); if (aout->main.panflg & EF_ON) envpan = ProcessEnvelope(aout,&aout->penv,PAN_CENTER); if (aout->main.pitflg & EF_ON) envpit = ProcessEnvelope(aout,&aout->cenv,32); } aout->main.kick=KICK_ABSENT; tmpvol = aout->main.fadevol; /* max 32768 */ tmpvol *= aout->main.chanvol; /* * max 64 */ tmpvol *= aout->main.outvolume; /* * max 256 */ tmpvol /= (256 * 64); /* tmpvol is max 32768 again */ aout->totalvol = tmpvol >> 2; /* used to determine samplevolume */ tmpvol *= envvol; /* * max 256 */ tmpvol *= mod->volume; /* * max 128 */ tmpvol /= (128 * 256 * 128); /* fade out */ if (mod->sngpos>=mod->numpos) tmpvol=0; else tmpvol=(tmpvol*max_volume)/128; if ((aout->masterchn!=-1)&& mod->control[aout->masterchn].muted) Voice_SetVolume_internal(channel,0); else { Voice_SetVolume_internal(channel,tmpvol); if ((tmpvol)&&(aout->master)&&(aout->master->slave==aout)) mod->realchn++; mod->totalchn++; } if (aout->main.panning==PAN_SURROUND) Voice_SetPanning_internal(channel,PAN_SURROUND); else if ((mod->panflag)&&(aout->penv.flg & EF_ON)) Voice_SetPanning_internal(channel, DoPan(envpan,aout->main.panning)); else Voice_SetPanning_internal(channel,aout->main.panning); if (aout->main.period && s->vibdepth) switch (s->vibtype) { case 0: vibval=avibtab[s->avibpos&127]; if (aout->avibpos & 0x80) vibval=-vibval; break; case 1: vibval=64; if (aout->avibpos & 0x80) vibval=-vibval; break; case 2: vibval=63-(((aout->avibpos+128)&255)>>1); break; default: vibval=(((aout->avibpos+128)&255)>>1)-64; break; } else vibval=0; if (s->vibflags & AV_IT) { if ((aout->aswppos>>8)vibdepth) { aout->aswppos += s->vibsweep; vibdpt=aout->aswppos; } else vibdpt=s->vibdepth<<8; vibval=(vibval*vibdpt)>>16; if (aout->mflag) { if (!(mod->flags&UF_LINEAR)) vibval>>=1; aout->main.period-=vibval; } } else { /* do XM style auto-vibrato */ if (!(aout->main.keyoff & KEY_OFF)) { if (aout->aswpposvibsweep) { vibdpt=(aout->aswppos*s->vibdepth)/s->vibsweep; aout->aswppos++; } else vibdpt=s->vibdepth; } else { /* keyoff -> depth becomes 0 if final depth wasn't reached or stays at final level if depth WAS reached */ if (aout->aswppos>=s->vibsweep) vibdpt=s->vibdepth; else vibdpt=0; } vibval=(vibval*vibdpt)>>8; aout->main.period-=vibval; } /* update vibrato position */ aout->avibpos=(aout->avibpos+s->vibrate)&0xff; /* process pitch envelope */ playperiod=aout->main.period; if ((aout->main.pitflg&EF_ON)&&(envpit!=32)) { long p1; envpit-=32; if ((aout->main.note<<1)+envpit<=0) envpit=-(aout->main.note<<1); p1=GetPeriod(mod->flags, ((UWORD)aout->main.note<<1)+envpit, aout->master->speed)-aout->masterperiod; if (p1>0) { if ((UWORD)(playperiod+p1)<=playperiod) { p1=0; aout->main.keyoff|=KEY_OFF; } } else if (p1<0) { if ((UWORD)(playperiod+p1)>=playperiod) { p1=0; aout->main.keyoff|=KEY_OFF; } } playperiod+=p1; } if (!aout->main.fadevol) { /* check for a dead note (fadevol=0) */ Voice_Stop_internal(channel); mod->totalchn--; if ((tmpvol)&&(aout->master)&&(aout->master->slave==aout)) mod->realchn--; } else { Voice_SetFrequency_internal(channel, getfrequency(mod->flags,playperiod)); /* if keyfade, start substracting fadeoutspeed from fadevol: */ if ((i)&&(aout->main.keyoff&KEY_FADE)) { if (aout->main.fadevol>=i->volfade) aout->main.fadevol-=i->volfade; else aout->main.fadevol=0; } } md_bpm=mod->bpm+mod->relspd; if (md_bpm<32) md_bpm=32; else if ((!(mod->flags&UF_HIGHBPM)) && md_bpm>255) md_bpm=255; } } /* Handles new notes or instruments */ static void pt_Notes(MODULE *mod) { SWORD channel; MP_CONTROL *a; UBYTE c,inst; int tr,funky; /* funky is set to indicate note or instrument change */ for (channel=0;channelnumchn;channel++) { a=&mod->control[channel]; if (mod->sngpos>=mod->numpos) { tr=mod->numtrk; mod->numrow=0; } else { tr=mod->patterns[(mod->positions[mod->sngpos]*mod->numchn)+channel]; mod->numrow=mod->pattrows[mod->positions[mod->sngpos]]; } a->row=(trnumtrk)?UniFindRow(mod->tracks[tr],mod->patpos):NULL; a->newsamp=0; if (!mod->vbtick) a->main.notedelay=0; if (!a->row) continue; UniSetRow(a->row); funky=0; while((c=UniGetByte())) switch (c) { case UNI_NOTE: funky|=1; a->oldnote=a->anote,a->anote=UniGetByte(); a->main.kick =KICK_NOTE; a->main.start=-1; a->sliding=0; /* retrig tremolo and vibrato waves ? */ if (!(a->wavecontrol & 0x80)) a->trmpos=0; if (!(a->wavecontrol & 0x08)) a->vibpos=0; if (!a->panbwave) a->panbpos=0; break; case UNI_INSTRUMENT: inst=UniGetByte(); if (inst>=mod->numins) break; /* safety valve */ funky|=2; a->main.i=(mod->flags & UF_INST)?&mod->instruments[inst]:NULL; a->retrig=0; a->s3mtremor=0; a->ultoffset=0; a->main.sample=inst; break; default: UniSkipOpcode(); break; } if (funky) { INSTRUMENT *i; SAMPLE *s; if ((i=a->main.i)) { if (i->samplenumber[a->anote] >= mod->numsmp) continue; s=&mod->samples[i->samplenumber[a->anote]]; a->main.note=i->samplenote[a->anote]; } else { a->main.note=a->anote; s=&mod->samples[a->main.sample]; } if (a->main.s!=s) { a->main.s=s; a->newsamp=a->main.period; } /* channel or instrument determined panning ? */ a->main.panning=mod->panning[channel]; if (s->flags & SF_OWNPAN) a->main.panning=s->panning; else if ((i)&&(i->flags & IF_OWNPAN)) a->main.panning=i->panning; a->main.handle=s->handle; a->speed=s->speed; if (i) { if ((mod->panflag)&&(i->flags & IF_PITCHPAN) &&(a->main.panning!=PAN_SURROUND)){ a->main.panning+= ((a->anote-i->pitpancenter)*i->pitpansep)/8; if (a->main.panningmain.panning=PAN_LEFT; else if (a->main.panning>PAN_RIGHT) a->main.panning=PAN_RIGHT; } a->main.pitflg=i->pitflg; a->main.volflg=i->volflg; a->main.panflg=i->panflg; a->main.nna=i->nnatype; a->dca=i->dca; a->dct=i->dct; } else { a->main.pitflg=a->main.volflg=a->main.panflg=0; a->main.nna=a->dca=0; a->dct=DCT_OFF; } if (funky&2) /* instrument change */ { /* IT random volume variations: 0:8 bit fixed, and one bit for sign. */ a->volume=a->tmpvolume=s->volume; if ((s)&&(i)) { if (i->rvolvar) { a->volume=a->tmpvolume=s->volume+ ((s->volume*((SLONG)i->rvolvar*(SLONG)getrandom(512) ))/25600); if (a->volume<0) a->volume=a->tmpvolume=0; else if (a->volume>64) a->volume=a->tmpvolume=64; } if ((mod->panflag)&&(a->main.panning!=PAN_SURROUND)) { a->main.panning+=((a->main.panning*((SLONG)i->rpanvar* (SLONG)getrandom(512)))/25600); if (a->main.panningmain.panning=PAN_LEFT; else if (a->main.panning>PAN_RIGHT) a->main.panning=PAN_RIGHT; } } } a->wantedperiod=a->tmpperiod= GetPeriod(mod->flags, (UWORD)a->main.note<<1,a->speed); a->main.keyoff=KEY_KICK; } } } /* Handles effects */ static void pt_EffectsPass1(MODULE *mod) { SWORD channel; MP_CONTROL *a; MP_VOICE *aout; int explicitslides; for (channel=0;channelnumchn;channel++) { a=&mod->control[channel]; if ((aout=a->slave)) { a->main.fadevol=aout->main.fadevol; a->main.period=aout->main.period; if (a->main.kick==KICK_KEYOFF) a->main.keyoff=aout->main.keyoff; } if (!a->row) continue; UniSetRow(a->row); a->ownper=a->ownvol=0; explicitslides = pt_playeffects(mod, channel, a); /* continue volume slide if necessary for XM and IT */ if (mod->flags&UF_BGSLIDES) { if (!explicitslides && a->sliding) DoS3MVolSlide(mod->vbtick, mod->flags, a, 0); else if (a->tmpvolume) a->sliding = explicitslides; } if (!a->ownper) a->main.period=a->tmpperiod; if (!a->ownvol) a->volume=a->tmpvolume; if (a->main.s) { if (a->main.i) a->main.outvolume= (a->volume*a->main.s->globvol*a->main.i->globvol)>>10; else a->main.outvolume=(a->volume*a->main.s->globvol)>>4; if (a->main.outvolume>256) a->main.outvolume=256; else if (a->main.outvolume<0) a->main.outvolume=0; } } } /* NNA management */ static void pt_NNA(MODULE *mod) { SWORD channel; MP_CONTROL *a; for (channel=0;channelnumchn;channel++) { a=&mod->control[channel]; if (a->main.kick==KICK_NOTE) { BOOL kill=0; if (a->slave) { MP_VOICE *aout; aout=a->slave; if (aout->main.nna & NNA_MASK) { /* Make sure the old MP_VOICE channel knows it has no master now ! */ a->slave=NULL; /* assume the channel is taken by NNA */ aout->mflag=0; switch (aout->main.nna) { case NNA_CONTINUE: /* continue note, do nothing */ break; case NNA_OFF: /* note off */ aout->main.keyoff|=KEY_OFF; if ((!(aout->main.volflg & EF_ON))|| (aout->main.volflg & EF_LOOP)) aout->main.keyoff=KEY_KILL; break; case NNA_FADE: aout->main.keyoff |= KEY_FADE; break; } } } if (a->dct!=DCT_OFF) { int t; for (t=0;tvoice[t].masterchn==channel)&& (a->main.sample==mod->voice[t].main.sample)) { kill=0; switch (a->dct) { case DCT_NOTE: if (a->main.note==mod->voice[t].main.note) kill=1; break; case DCT_SAMPLE: if (a->main.handle==mod->voice[t].main.handle) kill=1; break; case DCT_INST: kill=1; break; } if (kill) switch (a->dca) { case DCA_CUT: mod->voice[t].main.fadevol=0; break; case DCA_OFF: mod->voice[t].main.keyoff|=KEY_OFF; if ((!(mod->voice[t].main.volflg&EF_ON))|| (mod->voice[t].main.volflg&EF_LOOP)) mod->voice[t].main.keyoff=KEY_KILL; break; case DCA_FADE: mod->voice[t].main.keyoff|=KEY_FADE; break; } } } } /* if (a->main.kick==KICK_NOTE) */ } } /* Setup module and NNA voices */ static void pt_SetupVoices(MODULE *mod) { SWORD channel; MP_CONTROL *a; MP_VOICE *aout; for (channel=0;channelnumchn;channel++) { a=&mod->control[channel]; if (a->main.notedelay) continue; if (a->main.kick==KICK_NOTE) { /* if no channel was cut above, find an empty or quiet channel here */ if (mod->flags&UF_NNA) { if (!a->slave) { int newchn; if ((newchn=MP_FindEmptyChannel(mod))!=-1) a->slave=&mod->voice[a->slavechn=newchn]; } } else a->slave=&mod->voice[a->slavechn=channel]; /* assign parts of MP_VOICE only done for a KICK_NOTE */ if ((aout=a->slave)) { if (aout->mflag && aout->master) aout->master->slave=NULL; aout->master=a; a->slave=aout; aout->masterchn=channel; aout->mflag=1; } } else aout=a->slave; if (aout) aout->main=a->main; a->main.kick=KICK_ABSENT; } } /* second effect pass */ static void pt_EffectsPass2(MODULE *mod) { SWORD channel; MP_CONTROL *a; UBYTE c; for (channel=0;channelnumchn;channel++) { a=&mod->control[channel]; if (!a->row) continue; UniSetRow(a->row); while((c=UniGetByte())) if (c==UNI_ITEFFECTS0) { c=UniGetByte(); if ((c>>4)==SS_S7EFFECTS) DoNNAEffects(mod, a, c&0xf); } else UniSkipOpcode(); } } void Player_HandleTick(void) { SWORD channel; int max_volume; #if 0 /* don't handle the very first ticks, this allows the other hardware to settle down so we don't loose any starting notes */ if (isfirst) { isfirst--; return; } #endif if ((!pf)||(pf->forbid)||(pf->sngpos>=pf->numpos)) return; /* update time counter (sngtime is in milliseconds (in fact 2^-10)) */ pf->sngremainder+=(1<<9)*5; /* thus 2.5*(1<<10), since fps=0.4xtempo */ pf->sngtime+=pf->sngremainder/pf->bpm; pf->sngremainder%=pf->bpm; if (++pf->vbtick>=pf->sngspd) { if (pf->pat_repcrazy) pf->pat_repcrazy=0; /* play 2 times row 0 */ else pf->patpos++; pf->vbtick=0; /* process pattern-delay. pf->patdly2 is the counter and pf->patdly is the command memory. */ if (pf->patdly) pf->patdly2=pf->patdly,pf->patdly=0; if (pf->patdly2) { /* patterndelay active */ if (--pf->patdly2) /* so turn back pf->patpos by 1 */ if (pf->patpos) pf->patpos--; } /* do we have to get a new patternpointer ? (when pf->patpos reaches the pattern size, or when a patternbreak is active) */ if (((pf->patpos>=pf->numrow)&&(pf->numrow>0))&&(!pf->posjmp)) pf->posjmp=3; if (pf->posjmp) { pf->patpos=pf->numrow?(pf->patbrk%pf->numrow):0; pf->pat_repcrazy=0; pf->sngpos+=(pf->posjmp-2); for (channel=0;channelnumchn;channel++) pf->control[channel].pat_reppos=-1; pf->patbrk=pf->posjmp=0; if (pf->sngpos<0) pf->sngpos=(SWORD)(pf->numpos-1); /* handle the "---" (end of song) pattern since it can occur *inside* the module in some formats */ if ((pf->sngpos>=pf->numpos)|| (pf->positions[pf->sngpos]==LAST_PATTERN)) { if (!pf->wrap) return; if (!(pf->sngpos=pf->reppos)) { pf->volume=pf->initvolume>128?128:pf->initvolume; if(pf->initspeed!=0) pf->sngspd=pf->initspeed<32?pf->initspeed:32; else pf->sngspd=6; pf->bpm=pf->inittempo<32?32:pf->inittempo; } } } if (!pf->patdly2) pt_Notes(pf); } /* Fade global volume if enabled and we're playing the last pattern */ if (((pf->sngpos==pf->numpos-1)|| (pf->positions[pf->sngpos+1]==LAST_PATTERN))&& (pf->fadeout)) max_volume=pf->numrow?((pf->numrow-pf->patpos)*128)/pf->numrow:0; else max_volume=128; pt_EffectsPass1(pf); if (pf->flags&UF_NNA) pt_NNA(pf); pt_SetupVoices(pf); pt_EffectsPass2(pf); /* now set up the actual hardware channel playback information */ pt_UpdateVoices(pf, max_volume); } static void Player_Init_internal(MODULE* mod) { int t; for (t=0;tnumchn;t++) { mod->control[t].main.chanvol=mod->chanvol[t]; mod->control[t].main.panning=mod->panning[t]; } mod->sngtime=0; mod->sngremainder=0; mod->pat_repcrazy=0; mod->sngpos=0; if(mod->initspeed!=0) mod->sngspd=mod->initspeed<32?mod->initspeed:32; else mod->sngspd=6; mod->volume=mod->initvolume>128?128:mod->initvolume; mod->vbtick=mod->sngspd; mod->patdly=0; mod->patdly2=0; mod->bpm=mod->inittempo<32?32:mod->inittempo; mod->realchn=0; mod->patpos=0; mod->posjmp=2; /* make sure the player fetches the first note */ mod->numrow=-1; mod->patbrk=0; } int Player_Init(MODULE* mod) { mod->extspd=1; mod->panflag=1; mod->wrap=0; mod->loop=1; mod->fadeout=0; mod->relspd=0; /* make sure the player doesn't start with garbage */ if (!(mod->control=(MP_CONTROL*)_mm_calloc(mod->numchn,sizeof(MP_CONTROL)))) return 1; if (!(mod->voice=(MP_VOICE*)_mm_calloc(md_sngchn,sizeof(MP_VOICE)))) return 1; /* mod->numvoices was used during loading to clamp md_sngchn. After loading it's used to remember how big mod->voice is. */ mod->numvoices = md_sngchn; Player_Init_internal(mod); return 0; } void Player_Exit_internal(MODULE* mod) { if (!mod) return; /* Stop playback if necessary */ if (mod==pf) { Player_Stop_internal(); pf=NULL; } if (mod->control) free(mod->control); if (mod->voice) free(mod->voice); mod->control=NULL; mod->voice=NULL; } void Player_Exit(MODULE* mod) { MUTEX_LOCK(vars); Player_Exit_internal(mod); MUTEX_UNLOCK(vars); } MIKMODAPI void Player_SetVolume(SWORD volume) { MUTEX_LOCK(vars); if (pf) { pf->volume=(volume<0)?0:(volume>128)?128:volume; pf->initvolume=pf->volume; } MUTEX_UNLOCK(vars); } MIKMODAPI MODULE* Player_GetModule(void) { MODULE* result; MUTEX_LOCK(vars); result=pf; MUTEX_UNLOCK(vars); return result; } MIKMODAPI void Player_Start(MODULE *mod) { int t; if (!mod) return; if (!MikMod_Active()) MikMod_EnableOutput(); mod->forbid=0; MUTEX_LOCK(vars); if (pf!=mod) { /* new song is being started, so completely stop out the old one. */ if (pf) pf->forbid=1; for (t=0;tforbid=1; pf=NULL; } MIKMODAPI void Player_Stop(void) { MUTEX_LOCK(vars); Player_Stop_internal(); MUTEX_UNLOCK(vars); } MIKMODAPI BOOL Player_Active(void) { BOOL result=0; MUTEX_LOCK(vars); if (pf) result=(!(pf->sngpos>=pf->numpos)); MUTEX_UNLOCK(vars); return result; } MIKMODAPI void Player_NextPosition(void) { MUTEX_LOCK(vars); if (pf) { int t; pf->forbid=1; pf->posjmp=3; pf->patbrk=0; pf->vbtick=pf->sngspd; for (t=0;tvoice[t].main.i=NULL; pf->voice[t].main.s=NULL; } for (t=0;tnumchn;t++) { pf->control[t].main.i=NULL; pf->control[t].main.s=NULL; } pf->forbid=0; } MUTEX_UNLOCK(vars); } MIKMODAPI void Player_PrevPosition(void) { MUTEX_LOCK(vars); if (pf) { int t; pf->forbid=1; pf->posjmp=1; pf->patbrk=0; pf->vbtick=pf->sngspd; for (t=0;tvoice[t].main.i=NULL; pf->voice[t].main.s=NULL; } for (t=0;tnumchn;t++) { pf->control[t].main.i=NULL; pf->control[t].main.s=NULL; } pf->forbid=0; } MUTEX_UNLOCK(vars); } MIKMODAPI void Player_SetPosition(UWORD pos) { MUTEX_LOCK(vars); if (pf) { int t; pf->forbid=1; if (pos>=pf->numpos) pos=pf->numpos; pf->posjmp=2; pf->patbrk=0; pf->sngpos=pos; pf->vbtick=pf->sngspd; for (t=0;tvoice[t].main.i=NULL; pf->voice[t].main.s=NULL; } for (t=0;tnumchn;t++) { pf->control[t].main.i=NULL; pf->control[t].main.s=NULL; } pf->forbid=0; if (!pos) Player_Init_internal(pf); } MUTEX_UNLOCK(vars); } static void Player_Unmute_internal(SLONG arg1,va_list ap) { SLONG t,arg2,arg3=0; if (pf) { switch (arg1) { case MUTE_INCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (;arg2numchn && arg2<=arg3;arg2++) pf->control[arg2].muted=0; break; case MUTE_EXCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (t=0;tnumchn;t++) { if ((t>=arg2) && (t<=arg3)) continue; pf->control[t].muted=0; } break; default: if (arg1numchn) pf->control[arg1].muted=0; break; } } } MIKMODAPI void Player_Unmute(SLONG arg1, ...) { va_list args; va_start(args,arg1); MUTEX_LOCK(vars); Player_Unmute_internal(arg1,args); MUTEX_UNLOCK(vars); va_end(args); } static void Player_Mute_internal(SLONG arg1,va_list ap) { SLONG t,arg2,arg3=0; if (pf) { switch (arg1) { case MUTE_INCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (;arg2numchn && arg2<=arg3;arg2++) pf->control[arg2].muted=1; break; case MUTE_EXCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (t=0;tnumchn;t++) { if ((t>=arg2) && (t<=arg3)) continue; pf->control[t].muted=1; } break; default: if (arg1numchn) pf->control[arg1].muted=1; break; } } } MIKMODAPI void Player_Mute(SLONG arg1,...) { va_list args; va_start(args,arg1); MUTEX_LOCK(vars); Player_Mute_internal(arg1,args); MUTEX_UNLOCK(vars); va_end(args); } static void Player_ToggleMute_internal(SLONG arg1,va_list ap) { SLONG arg2,arg3=0; ULONG t; if (pf) { switch (arg1) { case MUTE_INCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (;arg2numchn && arg2<=arg3;arg2++) pf->control[arg2].muted=1-pf->control[arg2].muted; break; case MUTE_EXCLUSIVE: if (((!(arg2=va_arg(ap,SLONG)))&&(!(arg3=va_arg(ap,SLONG))))|| (arg2>arg3)||(arg3>=pf->numchn)) return; for (t=0;tnumchn;t++) { if ((t>=arg2) && (t<=arg3)) continue; pf->control[t].muted=1-pf->control[t].muted; } break; default: if (arg1numchn) pf->control[arg1].muted=1-pf->control[arg1].muted; break; } } } MIKMODAPI void Player_ToggleMute(SLONG arg1,...) { va_list args; va_start(args,arg1); MUTEX_LOCK(vars); Player_ToggleMute_internal(arg1,args); MUTEX_UNLOCK(vars); va_end(args); } MIKMODAPI BOOL Player_Muted(UBYTE chan) { BOOL result=1; MUTEX_LOCK(vars); if (pf) result=(channumchn)?pf->control[chan].muted:1; MUTEX_UNLOCK(vars); return result; } MIKMODAPI int Player_GetChannelVoice(UBYTE chan) { int result=0; MUTEX_LOCK(vars); if (pf) result=(channumchn)?pf->control[chan].slavechn:-1; MUTEX_UNLOCK(vars); return result; } MIKMODAPI UWORD Player_GetChannelPeriod(UBYTE chan) { UWORD result=0; MUTEX_LOCK(vars); if (pf) result=(channumchn)?pf->control[chan].main.period:0; MUTEX_UNLOCK(vars); return result; } BOOL Player_Paused_internal(void) { return pf?pf->forbid:1; } MIKMODAPI BOOL Player_Paused(void) { BOOL result; MUTEX_LOCK(vars); result=Player_Paused_internal(); MUTEX_UNLOCK(vars); return result; } MIKMODAPI void Player_TogglePause(void) { MUTEX_LOCK(vars); if (pf) pf->forbid=1-pf->forbid; MUTEX_UNLOCK(vars); } MIKMODAPI void Player_SetSpeed(UWORD speed) { MUTEX_LOCK(vars); if (pf) pf->sngspd=speed?(speed<32?speed:32):1; MUTEX_UNLOCK(vars); } MIKMODAPI void Player_SetTempo(UWORD tempo) { if (tempo<32) tempo=32; MUTEX_LOCK(vars); if (pf) { if ((!(pf->flags&UF_HIGHBPM))&&(tempo>255)) tempo=255; pf->bpm=tempo; } MUTEX_UNLOCK(vars); } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/virtch2.c0000644000000000000000000006116512222472510016131 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: virtch2.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ High-quality sample mixing routines, using a 32 bits mixing buffer, interpolation, and sample smoothing to improve sound quality and remove clicks. ==============================================================================*/ /* Future Additions: Low-Pass filter to remove annoying staticy buzz. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" /* Constant Definitions ==================== MAXVOL_FACTOR (was BITSHIFT in virtch.c) Controls the maximum volume of the output data. All mixed data is divided by this number after mixing, so larger numbers result in quieter mixing. Smaller numbers will increase the likeliness of distortion on loud modules. REVERBERATION Larger numbers result in shorter reverb duration. Longer reverb durations can cause unwanted static and make the reverb sound more like a crappy echo. SAMPLING_SHIFT Specified the shift multiplier which controls by how much the mixing rate is multiplied while mixing. Higher values can improve quality by smoothing the sound and reducing pops and clicks. Note, this is a shift value, so a value of 2 becomes a mixing-rate multiplier of 4, and a value of 3 = 8, etc. FRACBITS The number of bits per integer devoted to the fractional part of the number. Generally, this number should not be changed for any reason. !!! IMPORTANT !!! All values below MUST ALWAYS be greater than 0 */ #define MAXVOL_FACTOR (1<<9) #define REVERBERATION 11000L #define SAMPLING_SHIFT 2 #define SAMPLING_FACTOR (1UL< sample has to be restarted */ UBYTE active; /* =1 -> sample is playing */ UWORD flags; /* 16/8 bits looping/one-shot */ SWORD handle; /* identifies the sample */ ULONG start; /* start index */ ULONG size; /* samplesize */ ULONG reppos; /* loop start */ ULONG repend; /* loop end */ ULONG frq; /* current frequency */ int vol; /* current volume */ int pan; /* current panning position */ int click; int rampvol; SLONG lastvalL,lastvalR; int lvolsel,rvolsel; /* Volume factor in range 0-255 */ int oldlvol,oldrvol; SLONGLONG current; /* current index in the sample */ SLONGLONG increment; /* increment value */ } VINFO; static SWORD **Samples; static VINFO *vinf=NULL,*vnf; static long tickleft,samplesthatfit,vc_memory=0; static int vc_softchn; static SLONGLONG idxsize,idxlpos,idxlend; static SLONG *vc_tickbuf=NULL; static UWORD vc_mode; /* Reverb control variables */ static int RVc1, RVc2, RVc3, RVc4, RVc5, RVc6, RVc7, RVc8; static ULONG RVRindex; /* For Mono or Left Channel */ static SLONG *RVbufL1=NULL,*RVbufL2=NULL,*RVbufL3=NULL,*RVbufL4=NULL, *RVbufL5=NULL,*RVbufL6=NULL,*RVbufL7=NULL,*RVbufL8=NULL; /* For Stereo only (Right Channel) */ static SLONG *RVbufR1=NULL,*RVbufR2=NULL,*RVbufR3=NULL,*RVbufR4=NULL, *RVbufR5=NULL,*RVbufR6=NULL,*RVbufR7=NULL,*RVbufR8=NULL; #ifdef NATIVE_64BIT_INT #define NATIVE SLONGLONG #else #define NATIVE SLONG #endif /*========== 32 bit sample mixers - only for 32 bit platforms */ #ifndef NATIVE_64BIT_INT static SLONG Mix32MonoNormal(const SWORD* const srce,SLONG* dest,SLONG idx,SLONG increment,SLONG todo) { SWORD sample=0; SLONG i,f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=(((SLONG)(srce[i]*(FRACMASK+1L-f)) + ((SLONG)srce[i+1]*f)) >> FRACBITS); idx+=increment; if(vnf->rampvol) { *dest++ += (long)( ( ( (SLONG)(vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONG)sample ) >> CLICK_SHIFT ); vnf->rampvol--; } else if(vnf->click) { *dest++ += (long)( ( ( ((SLONG)vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONG)sample ) + (vnf->lastvalL*vnf->click) ) >> CLICK_SHIFT ); vnf->click--; } else *dest++ +=vnf->lvolsel*sample; } vnf->lastvalL=vnf->lvolsel * sample; return idx; } static SLONG Mix32StereoNormal(const SWORD* const srce,SLONG* dest,SLONG idx,SLONG increment,ULONG todo) { SWORD sample=0; SLONG i,f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=((((SLONG)srce[i]*(FRACMASK+1L-f)) + ((SLONG)srce[i+1] * f)) >> FRACBITS); idx += increment; if(vnf->rampvol) { *dest++ += (long)( ( ( ((SLONG)vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONG)sample ) >> CLICK_SHIFT ); *dest++ += (long)( ( ( ((SLONG)vnf->oldrvol*vnf->rampvol) + (vnf->rvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONG)sample ) >> CLICK_SHIFT ); vnf->rampvol--; } else if(vnf->click) { *dest++ += (long)( ( ( (SLONG)(vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONG)sample ) + (vnf->lastvalL * vnf->click) ) >> CLICK_SHIFT ); *dest++ += (long)( ( ( ((SLONG)vnf->rvolsel*(CLICK_BUFFER-vnf->click)) * (SLONG)sample ) + (vnf->lastvalR * vnf->click) ) >> CLICK_SHIFT ); vnf->click--; } else { *dest++ +=vnf->lvolsel*sample; *dest++ +=vnf->rvolsel*sample; } } vnf->lastvalL=vnf->lvolsel*sample; vnf->lastvalR=vnf->rvolsel*sample; return idx; } static SLONG Mix32StereoSurround(const SWORD* const srce,SLONG* dest,SLONG idx,SLONG increment,ULONG todo) { SWORD sample=0; long whoop; SLONG i, f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=((((SLONG)srce[i]*(FRACMASK+1L-f)) + ((SLONG)srce[i+1]*f)) >> FRACBITS); idx+=increment; if(vnf->rampvol) { whoop=(long)( ( ( (SLONG)(vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONG)sample) >> CLICK_SHIFT ); *dest++ +=whoop; *dest++ -=whoop; vnf->rampvol--; } else if(vnf->click) { whoop = (long)( ( ( ((SLONG)vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONG)sample) + (vnf->lastvalL * vnf->click) ) >> CLICK_SHIFT ); *dest++ +=whoop; *dest++ -=whoop; vnf->click--; } else { *dest++ +=vnf->lvolsel*sample; *dest++ -=vnf->lvolsel*sample; } } vnf->lastvalL=vnf->lvolsel*sample; vnf->lastvalR=vnf->lvolsel*sample; return idx; } #endif /*========== 64 bit mixers */ static SLONGLONG MixMonoNormal(const SWORD* const srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,SLONG todo) { SWORD sample=0; SLONGLONG i,f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=(((SLONGLONG)(srce[i]*(FRACMASK+1L-f)) + ((SLONGLONG)srce[i+1]*f)) >> FRACBITS); idx+=increment; if(vnf->rampvol) { *dest++ += (long)( ( ( (SLONGLONG)(vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONGLONG)sample ) >> CLICK_SHIFT ); vnf->rampvol--; } else if(vnf->click) { *dest++ += (long)( ( ( ((SLONGLONG)vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONGLONG)sample ) + (vnf->lastvalL*vnf->click) ) >> CLICK_SHIFT ); vnf->click--; } else *dest++ +=vnf->lvolsel*sample; } vnf->lastvalL=vnf->lvolsel * sample; return idx; } static SLONGLONG MixStereoNormal(const SWORD* const srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,ULONG todo) { SWORD sample=0; SLONGLONG i,f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=((((SLONGLONG)srce[i]*(FRACMASK+1L-f)) + ((SLONGLONG)srce[i+1] * f)) >> FRACBITS); idx += increment; if(vnf->rampvol) { *dest++ += (long)( ( ( ((SLONGLONG)vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONGLONG)sample ) >> CLICK_SHIFT ); *dest++ += (long)( ( ( ((SLONGLONG)vnf->oldrvol*vnf->rampvol) + (vnf->rvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONGLONG)sample ) >> CLICK_SHIFT ); vnf->rampvol--; } else if(vnf->click) { *dest++ += (long)( ( ( (SLONGLONG)(vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONGLONG)sample ) + (vnf->lastvalL * vnf->click) ) >> CLICK_SHIFT ); *dest++ += (long)( ( ( ((SLONGLONG)vnf->rvolsel*(CLICK_BUFFER-vnf->click)) * (SLONGLONG)sample ) + (vnf->lastvalR * vnf->click) ) >> CLICK_SHIFT ); vnf->click--; } else { *dest++ +=vnf->lvolsel*sample; *dest++ +=vnf->rvolsel*sample; } } vnf->lastvalL=vnf->lvolsel*sample; vnf->lastvalR=vnf->rvolsel*sample; return idx; } static SLONGLONG MixStereoSurround(const SWORD* srce,SLONG* dest,SLONGLONG idx,SLONGLONG increment,ULONG todo) { SWORD sample=0; long whoop; SLONGLONG i, f; while(todo--) { i=idx>>FRACBITS,f=idx&FRACMASK; sample=((((SLONGLONG)srce[i]*(FRACMASK+1L-f)) + ((SLONGLONG)srce[i+1]*f)) >> FRACBITS); idx+=increment; if(vnf->rampvol) { whoop=(long)( ( ( (SLONGLONG)(vnf->oldlvol*vnf->rampvol) + (vnf->lvolsel*(CLICK_BUFFER-vnf->rampvol)) ) * (SLONGLONG)sample) >> CLICK_SHIFT ); *dest++ +=whoop; *dest++ -=whoop; vnf->rampvol--; } else if(vnf->click) { whoop = (long)( ( ( ((SLONGLONG)vnf->lvolsel*(CLICK_BUFFER-vnf->click)) * (SLONGLONG)sample) + (vnf->lastvalL * vnf->click) ) >> CLICK_SHIFT ); *dest++ +=whoop; *dest++ -=whoop; vnf->click--; } else { *dest++ +=vnf->lvolsel*sample; *dest++ -=vnf->lvolsel*sample; } } vnf->lastvalL=vnf->lvolsel*sample; vnf->lastvalR=vnf->lvolsel*sample; return idx; } static void(*Mix32to16)(SWORD* dste,const SLONG *srce,NATIVE count); static void(*Mix32to8)(SBYTE* dste,const SLONG *srce,NATIVE count); static void(*MixReverb)(SLONG *srce,NATIVE count); /* Reverb macros */ #define COMPUTE_LOC(n) loc##n = RVRindex % RVc##n #define COMPUTE_LECHO(n) RVbufL##n [loc##n ]=speedup+((ReverbPct*RVbufL##n [loc##n ])>>7) #define COMPUTE_RECHO(n) RVbufR##n [loc##n ]=speedup+((ReverbPct*RVbufR##n [loc##n ])>>7) static void MixReverb_Normal(SLONG *srce,NATIVE count) { NATIVE speedup; int ReverbPct; unsigned int loc1,loc2,loc3,loc4,loc5,loc6,loc7,loc8; ReverbPct=58+(md_reverb*4); COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); while(count--) { /* Compute the left channel echo buffers */ speedup = *srce >> 3; COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); /* Prepare to compute actual finalized data */ RVRindex++; COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); /* left channel */ *srce++ +=RVbufL1[loc1]-RVbufL2[loc2]+RVbufL3[loc3]-RVbufL4[loc4]+ RVbufL5[loc5]-RVbufL6[loc6]+RVbufL7[loc7]-RVbufL8[loc8]; } } static void MixReverb_Stereo(SLONG *srce,NATIVE count) { NATIVE speedup; int ReverbPct; unsigned int loc1,loc2,loc3,loc4,loc5,loc6,loc7,loc8; ReverbPct=58+(md_reverb*4); COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); while(count--) { /* Compute the left channel echo buffers */ speedup = *srce >> 3; COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); /* Compute the right channel echo buffers */ speedup = srce[1] >> 3; COMPUTE_RECHO(1); COMPUTE_RECHO(2); COMPUTE_RECHO(3); COMPUTE_RECHO(4); COMPUTE_RECHO(5); COMPUTE_RECHO(6); COMPUTE_RECHO(7); COMPUTE_RECHO(8); /* Prepare to compute actual finalized data */ RVRindex++; COMPUTE_LOC(1); COMPUTE_LOC(2); COMPUTE_LOC(3); COMPUTE_LOC(4); COMPUTE_LOC(5); COMPUTE_LOC(6); COMPUTE_LOC(7); COMPUTE_LOC(8); /* left channel */ *srce++ +=RVbufL1[loc1]-RVbufL2[loc2]+RVbufL3[loc3]-RVbufL4[loc4]+ RVbufL5[loc5]-RVbufL6[loc6]+RVbufL7[loc7]-RVbufL8[loc8]; /* right channel */ *srce++ +=RVbufR1[loc1]-RVbufR2[loc2]+RVbufR3[loc3]-RVbufR4[loc4]+ RVbufR5[loc5]-RVbufR6[loc6]+RVbufR7[loc7]-RVbufR8[loc8]; } } /* Mixing macros */ #define EXTRACT_SAMPLE(var,attenuation) var=*srce++/(MAXVOL_FACTOR*attenuation) #define CHECK_SAMPLE(var,bound) var=(var>=bound)?bound-1:(var<-bound)?-bound:var static void Mix32To16_Normal(SWORD* dste,const SLONG *srce,NATIVE count) { NATIVE x1,x2,tmpx; int i; for(count/=SAMPLING_FACTOR;count;count--) { tmpx=0; for(i=SAMPLING_FACTOR/2;i;i--) { EXTRACT_SAMPLE(x1,1); EXTRACT_SAMPLE(x2,1); CHECK_SAMPLE(x1,32768); CHECK_SAMPLE(x2,32768); tmpx+=x1+x2; } *dste++ =tmpx/SAMPLING_FACTOR; } } static void Mix32To16_Stereo(SWORD* dste,const SLONG *srce,NATIVE count) { NATIVE x1,x2,x3,x4,tmpx,tmpy; int i; for(count/=SAMPLING_FACTOR;count;count--) { tmpx=tmpy=0; for(i=SAMPLING_FACTOR/2;i;i--) { EXTRACT_SAMPLE(x1,1); EXTRACT_SAMPLE(x2,1); EXTRACT_SAMPLE(x3,1); EXTRACT_SAMPLE(x4,1); CHECK_SAMPLE(x1,32768); CHECK_SAMPLE(x2,32768); CHECK_SAMPLE(x3,32768); CHECK_SAMPLE(x4,32768); tmpx+=x1+x3; tmpy+=x2+x4; } *dste++ =tmpx/SAMPLING_FACTOR; *dste++ =tmpy/SAMPLING_FACTOR; } } static void Mix32To8_Normal(SBYTE* dste,const SLONG *srce,NATIVE count) { NATIVE x1,x2,tmpx; int i; for(count/=SAMPLING_FACTOR;count;count--) { tmpx = 0; for(i=SAMPLING_FACTOR/2;i;i--) { EXTRACT_SAMPLE(x1,256); EXTRACT_SAMPLE(x2,256); CHECK_SAMPLE(x1,128); CHECK_SAMPLE(x2,128); tmpx+=x1+x2; } *dste++ =(tmpx/SAMPLING_FACTOR)+128; } } static void Mix32To8_Stereo(SBYTE* dste,const SLONG *srce,NATIVE count) { NATIVE x1,x2,x3,x4,tmpx,tmpy; int i; for(count/=SAMPLING_FACTOR;count;count--) { tmpx=tmpy=0; for(i=SAMPLING_FACTOR/2;i;i--) { EXTRACT_SAMPLE(x1,256); EXTRACT_SAMPLE(x2,256); EXTRACT_SAMPLE(x3,256); EXTRACT_SAMPLE(x4,256); CHECK_SAMPLE(x1,128); CHECK_SAMPLE(x2,128); CHECK_SAMPLE(x3,128); CHECK_SAMPLE(x4,128); tmpx+=x1+x3; tmpy+=x2+x4; } *dste++ =(tmpx/SAMPLING_FACTOR)+128; *dste++ =(tmpy/SAMPLING_FACTOR)+128; } } static void AddChannel(SLONG* ptr,NATIVE todo) { SLONGLONG end,done; SWORD *s; if(!(s=Samples[vnf->handle])) { vnf->current = vnf->active = 0; vnf->lastvalL = vnf->lastvalR = 0; return; } /* update the 'current' index so the sample loops, or stops playing if it reached the end of the sample */ while(todo>0) { SLONGLONG endpos; if(vnf->flags & SF_REVERSE) { /* The sample is playing in reverse */ if((vnf->flags&SF_LOOP)&&(vnf->currentflags & SF_BIDI) { /* sample is doing bidirectional loops, so 'bounce' the current index against the idxlpos */ vnf->current = idxlpos+(idxlpos-vnf->current); vnf->flags &= ~SF_REVERSE; vnf->increment = -vnf->increment; } else /* normal backwards looping, so set the current position to loopend index */ vnf->current=idxlend-(idxlpos-vnf->current); } else { /* the sample is not looping, so check if it reached index 0 */ if(vnf->current < 0) { /* playing index reached 0, so stop playing this sample */ vnf->current = vnf->active = 0; break; } } } else { /* The sample is playing forward */ if((vnf->flags & SF_LOOP) && (vnf->current >= idxlend)) { /* the sample is looping, check the loopend index */ if(vnf->flags & SF_BIDI) { /* sample is doing bidirectional loops, so 'bounce' the current index against the idxlend */ vnf->flags |= SF_REVERSE; vnf->increment = -vnf->increment; vnf->current = idxlend-(vnf->current-idxlend); } else /* normal backwards looping, so set the current position to loopend index */ vnf->current=idxlpos+(vnf->current-idxlend); } else { /* sample is not looping, so check if it reached the last position */ if(vnf->current >= idxsize) { /* yes, so stop playing this sample */ vnf->current = vnf->active = 0; break; } } } end=(vnf->flags&SF_REVERSE)?(vnf->flags&SF_LOOP)?idxlpos:0: (vnf->flags&SF_LOOP)?idxlend:idxsize; /* if the sample is not blocked... */ if((end==vnf->current)||(!vnf->increment)) done=0; else { done=MIN((end-vnf->current)/vnf->increment+1,todo); if(done<0) done=0; } if(!done) { vnf->active = 0; break; } endpos=vnf->current+done*vnf->increment; if(vnf->vol || vnf->rampvol) { #ifndef NATIVE_64BIT_INT /* use the 32 bit mixers as often as we can (they're much faster) */ if((vnf->current<0x7fffffff)&&(endpos<0x7fffffff)) { if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(vc_mode&DMODE_SURROUND)) vnf->current=Mix32StereoSurround (s,ptr,vnf->current,vnf->increment,done); else vnf->current=Mix32StereoNormal (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=Mix32MonoNormal (s,ptr,vnf->current,vnf->increment,done); } else #endif { if(vc_mode & DMODE_STEREO) { if((vnf->pan==PAN_SURROUND)&&(vc_mode&DMODE_SURROUND)) vnf->current=MixStereoSurround (s,ptr,vnf->current,vnf->increment,done); else vnf->current=MixStereoNormal (s,ptr,vnf->current,vnf->increment,done); } else vnf->current=MixMonoNormal (s,ptr,vnf->current,vnf->increment,done); } } else { vnf->lastvalL = vnf->lastvalR = 0; /* update sample position */ vnf->current=endpos; } todo -= done; ptr += (vc_mode & DMODE_STEREO)?(done<<1):done; } } #define _IN_VIRTCH_ #define VC1_SilenceBytes VC2_SilenceBytes #define VC1_WriteSamples VC2_WriteSamples #define VC1_WriteBytes VC2_WriteBytes #define VC1_Exit VC2_Exit #define VC1_VoiceSetVolume VC2_VoiceSetVolume #define VC1_VoiceGetVolume VC2_VoiceGetVolume #define VC1_VoiceSetPanning VC2_VoiceSetPanning #define VC1_VoiceGetPanning VC2_VoiceGetPanning #define VC1_VoiceSetFrequency VC2_VoiceSetFrequency #define VC1_VoiceGetFrequency VC2_VoiceGetFrequency #define VC1_VoicePlay VC2_VoicePlay #define VC1_VoiceStop VC2_VoiceStop #define VC1_VoiceStopped VC2_VoiceStopped #define VC1_VoiceGetPosition VC2_VoiceGetPosition #define VC1_SampleUnload VC2_SampleUnload #define VC1_SampleLoad VC2_SampleLoad #define VC1_SampleSpace VC2_SampleSpace #define VC1_SampleLength VC2_SampleLength #define VC1_VoiceRealVolume VC2_VoiceRealVolume #include "virtch_common.c" #undef _IN_VIRTCH_ void VC2_WriteSamples(SBYTE* buf,ULONG todo) { int left,portion=0; SBYTE *buffer; int t,pan,vol; todo*=SAMPLING_FACTOR; while(todo) { if(!tickleft) { if(vc_mode & DMODE_SOFT_MUSIC) md_player(); tickleft=(md_mixfreq*125L*SAMPLING_FACTOR)/(md_bpm*50L); tickleft&=~(SAMPLING_FACTOR-1); } left = MIN(tickleft, todo); buffer = buf; tickleft -= left; todo -= left; buf += samples2bytes(left)/SAMPLING_FACTOR; while(left) { portion = MIN(left, samplesthatfit); memset(vc_tickbuf,0,portion<<((vc_mode&DMODE_STEREO)?3:2)); for(t=0;tkick) { vnf->current=((SLONGLONG)(vnf->start))<kick = 0; vnf->active = 1; vnf->click = CLICK_BUFFER; vnf->rampvol = 0; } if(!vnf->frq) vnf->active = 0; if(vnf->active) { vnf->increment=((SLONGLONG)(vnf->frq)<<(FRACBITS-SAMPLING_SHIFT)) /md_mixfreq; if(vnf->flags&SF_REVERSE) vnf->increment=-vnf->increment; vol = vnf->vol; pan = vnf->pan; vnf->oldlvol=vnf->lvolsel;vnf->oldrvol=vnf->rvolsel; if(vc_mode & DMODE_STEREO) { if(pan!=PAN_SURROUND) { vnf->lvolsel=(vol*(PAN_RIGHT-pan))>>8; vnf->rvolsel=(vol*pan)>>8; } else { vnf->lvolsel=vnf->rvolsel=(vol * 256L) / 480; } } else vnf->lvolsel=vol; idxsize=(vnf->size)?((SLONGLONG)(vnf->size)<repend)?((SLONGLONG)(vnf->repend)<reppos)<15) md_reverb=15; MixReverb(vc_tickbuf,portion); } if(vc_mode & DMODE_16BITS) Mix32to16((SWORD*)buffer,vc_tickbuf,portion); else Mix32to8((SBYTE*)buffer,vc_tickbuf,portion); buffer += samples2bytes(portion) / SAMPLING_FACTOR; left -= portion; } } } int VC2_Init(void) { VC_SetupPointers(); if (!(md_mode&DMODE_HQMIXER)) return VC1_Init(); if(!(Samples=(SWORD**)_mm_calloc(MAXSAMPLEHANDLES,sizeof(SWORD*)))) { _mm_errno = MMERR_INITIALIZING_MIXER; return 1; } if(!vc_tickbuf) { if(!(vc_tickbuf=(SLONG*)_mm_malloc((TICKLSIZE+32)*sizeof(SLONG)))) { _mm_errno = MMERR_INITIALIZING_MIXER; return 1; } } if(md_mode & DMODE_STEREO) { Mix32to16 = Mix32To16_Stereo; Mix32to8 = Mix32To8_Stereo; MixReverb = MixReverb_Stereo; } else { Mix32to16 = Mix32To16_Normal; Mix32to8 = Mix32To8_Normal; MixReverb = MixReverb_Normal; } md_mode |= DMODE_INTERP; vc_mode = md_mode; return 0; } int VC2_PlayStart(void) { md_mode|=DMODE_INTERP; samplesthatfit = TICKLSIZE; if(vc_mode & DMODE_STEREO) samplesthatfit >>= 1; tickleft = 0; RVc1 = (5000L * md_mixfreq) / (REVERBERATION * 10); RVc2 = (5078L * md_mixfreq) / (REVERBERATION * 10); RVc3 = (5313L * md_mixfreq) / (REVERBERATION * 10); RVc4 = (5703L * md_mixfreq) / (REVERBERATION * 10); RVc5 = (6250L * md_mixfreq) / (REVERBERATION * 10); RVc6 = (6953L * md_mixfreq) / (REVERBERATION * 10); RVc7 = (7813L * md_mixfreq) / (REVERBERATION * 10); RVc8 = (8828L * md_mixfreq) / (REVERBERATION * 10); if(!(RVbufL1=(SLONG*)_mm_calloc((RVc1+1),sizeof(SLONG)))) return 1; if(!(RVbufL2=(SLONG*)_mm_calloc((RVc2+1),sizeof(SLONG)))) return 1; if(!(RVbufL3=(SLONG*)_mm_calloc((RVc3+1),sizeof(SLONG)))) return 1; if(!(RVbufL4=(SLONG*)_mm_calloc((RVc4+1),sizeof(SLONG)))) return 1; if(!(RVbufL5=(SLONG*)_mm_calloc((RVc5+1),sizeof(SLONG)))) return 1; if(!(RVbufL6=(SLONG*)_mm_calloc((RVc6+1),sizeof(SLONG)))) return 1; if(!(RVbufL7=(SLONG*)_mm_calloc((RVc7+1),sizeof(SLONG)))) return 1; if(!(RVbufL8=(SLONG*)_mm_calloc((RVc8+1),sizeof(SLONG)))) return 1; if(!(RVbufR1=(SLONG*)_mm_calloc((RVc1+1),sizeof(SLONG)))) return 1; if(!(RVbufR2=(SLONG*)_mm_calloc((RVc2+1),sizeof(SLONG)))) return 1; if(!(RVbufR3=(SLONG*)_mm_calloc((RVc3+1),sizeof(SLONG)))) return 1; if(!(RVbufR4=(SLONG*)_mm_calloc((RVc4+1),sizeof(SLONG)))) return 1; if(!(RVbufR5=(SLONG*)_mm_calloc((RVc5+1),sizeof(SLONG)))) return 1; if(!(RVbufR6=(SLONG*)_mm_calloc((RVc6+1),sizeof(SLONG)))) return 1; if(!(RVbufR7=(SLONG*)_mm_calloc((RVc7+1),sizeof(SLONG)))) return 1; if(!(RVbufR8=(SLONG*)_mm_calloc((RVc8+1),sizeof(SLONG)))) return 1; RVRindex = 0; return 0; } void VC2_PlayStop(void) { if(RVbufL1) free(RVbufL1); if(RVbufL2) free(RVbufL2); if(RVbufL3) free(RVbufL3); if(RVbufL4) free(RVbufL4); if(RVbufL5) free(RVbufL5); if(RVbufL6) free(RVbufL6); if(RVbufL7) free(RVbufL7); if(RVbufL8) free(RVbufL8); if(RVbufR1) free(RVbufR1); if(RVbufR2) free(RVbufR2); if(RVbufR3) free(RVbufR3); if(RVbufR4) free(RVbufR4); if(RVbufR5) free(RVbufR5); if(RVbufR6) free(RVbufR6); if(RVbufR7) free(RVbufR7); if(RVbufR8) free(RVbufR8); RVbufL1=RVbufL2=RVbufL3=RVbufL4=RVbufL5=RVbufL6=RVbufL7=RVbufL8=NULL; RVbufR1=RVbufR2=RVbufR3=RVbufR4=RVbufR5=RVbufR6=RVbufR7=RVbufR8=NULL; } int VC2_SetNumVoices(void) { int t; md_mode|=DMODE_INTERP; if(!(vc_softchn=md_softchn)) return 0; if(vinf) free(vinf); if(!(vinf=_mm_calloc(vc_softchn,sizeof(VINFO)))) return 1; for(t=0;t #endif #include #ifdef HAVE_STRINGS_H #include #endif #include "mikmod_internals.h" #if (MIKMOD_UNIX) #include #include #endif #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif extern MODULE *pf; /* modfile being played */ /* EXPORTED GLOBALS */ MIKMODAPI MDRIVER *md_driver = NULL; /* Initial global settings */ MIKMODAPI UWORD md_device = 0; /* autodetect */ MIKMODAPI UWORD md_mixfreq = 44100; MIKMODAPI UWORD md_mode = DMODE_STEREO | DMODE_16BITS | DMODE_SURROUND | DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX; MIKMODAPI UBYTE md_pansep = 128; /* 128 == 100% (full left/right) */ MIKMODAPI UBYTE md_reverb = 0; /* no reverb */ MIKMODAPI UBYTE md_volume = 128; /* global sound volume (0-128) */ MIKMODAPI UBYTE md_musicvolume = 128; /* volume of song */ MIKMODAPI UBYTE md_sndfxvolume = 128; /* volume of sound effects */ /* INTERNAL GLOBALS */ UWORD md_bpm = 125; /* tempo */ /* Do not modify the numchn variables yourself! use MD_SetVoices() */ UBYTE md_numchn = 0, md_sngchn = 0, md_sfxchn = 0; UBYTE md_hardchn = 0, md_softchn= 0; void (*md_player)(void) = Player_HandleTick; /* PRIVATE VARS */ static MDRIVER *firstdriver = NULL; static volatile BOOL isplaying = 0, initialized = 0; static UBYTE *sfxinfo; static int sfxpool; static SAMPLE **md_sample = NULL; /* Previous driver in use */ static SWORD olddevice = -1; /* Limits the number of hardware voices to the specified amount. This function should only be used by the low-level drivers. */ static void LimitHardVoices(int limit) { int t=0; if (!(md_mode & DMODE_SOFT_SNDFX) && (md_sfxchn>limit)) md_sfxchn=limit; if (!(md_mode & DMODE_SOFT_MUSIC) && (md_sngchn>limit)) md_sngchn=limit; if (!(md_mode & DMODE_SOFT_SNDFX)) md_hardchn=md_sfxchn; else md_hardchn=0; if (!(md_mode & DMODE_SOFT_MUSIC)) md_hardchn += md_sngchn; while (md_hardchn>limit) { if (++t & 1) { if (!(md_mode & DMODE_SOFT_SNDFX) && (md_sfxchn>4)) md_sfxchn--; } else { if (!(md_mode & DMODE_SOFT_MUSIC) && (md_sngchn>8)) md_sngchn--; } if (!(md_mode & DMODE_SOFT_SNDFX)) md_hardchn=md_sfxchn; else md_hardchn=0; if (!(md_mode & DMODE_SOFT_MUSIC)) md_hardchn+=md_sngchn; } md_numchn=md_hardchn+md_softchn; } /* Limits the number of hardware voices to the specified amount. This function should only be used by the low-level drivers. */ static void LimitSoftVoices(int limit) { int t=0; if ((md_mode & DMODE_SOFT_SNDFX) && (md_sfxchn>limit)) md_sfxchn=limit; if ((md_mode & DMODE_SOFT_MUSIC) && (md_sngchn>limit)) md_sngchn=limit; if (md_mode & DMODE_SOFT_SNDFX) md_softchn=md_sfxchn; else md_softchn=0; if (md_mode & DMODE_SOFT_MUSIC) md_softchn+=md_sngchn; while (md_softchn>limit) { if (++t & 1) { if ((md_mode & DMODE_SOFT_SNDFX) && (md_sfxchn>4)) md_sfxchn--; } else { if ((md_mode & DMODE_SOFT_MUSIC) && (md_sngchn>8)) md_sngchn--; } if (!(md_mode & DMODE_SOFT_SNDFX)) md_softchn=md_sfxchn; else md_softchn=0; if (!(md_mode & DMODE_SOFT_MUSIC)) md_softchn+=md_sngchn; } md_numchn=md_hardchn+md_softchn; } /* Note: 'type' indicates whether the returned value should be for music or for sound effects. */ ULONG MD_SampleSpace(int type) { if(type==MD_MUSIC) type=(md_mode & DMODE_SOFT_MUSIC)?MD_SOFTWARE:MD_HARDWARE; else if(type==MD_SNDFX) type=(md_mode & DMODE_SOFT_SNDFX)?MD_SOFTWARE:MD_HARDWARE; return md_driver->FreeSampleSpace(type); } ULONG MD_SampleLength(int type,SAMPLE* s) { if(type==MD_MUSIC) type=(md_mode & DMODE_SOFT_MUSIC)?MD_SOFTWARE:MD_HARDWARE; else if(type==MD_SNDFX) type=(md_mode & DMODE_SOFT_SNDFX)?MD_SOFTWARE:MD_HARDWARE; return md_driver->RealSampleLength(type,s); } MIKMODAPI CHAR* MikMod_InfoDriver(void) { int t; size_t len=0; MDRIVER *l; CHAR *list=NULL; MUTEX_LOCK(lists); /* compute size of buffer */ for(l = firstdriver; l; l = l->next) len += 4 + (l->next ? 1 : 0) + strlen(l->Version); if(len) if((list=_mm_malloc(len*sizeof(CHAR)))) { CHAR *list_end = list; list[0] = 0; /* list all registered device drivers : */ for(t = 1, l = firstdriver; l; l = l->next, t++) { list_end += sprintf(list_end, "%2d %s%s", t, l->Version, (l->next)? "\n" : ""); } } MUTEX_UNLOCK(lists); return list; } void _mm_registerdriver(struct MDRIVER* drv) { MDRIVER *cruise = firstdriver; /* don't register a MISSING() driver */ if ((drv->Name) && (drv->Version)) { if (cruise) { if ( cruise == drv ) return; while(cruise->next) { cruise = cruise->next; if ( cruise == drv ) return; } cruise->next = drv; } else firstdriver = drv; } } MIKMODAPI void MikMod_RegisterDriver(struct MDRIVER* drv) { /* if we try to register an invalid driver, or an already registered driver, ignore this attempt */ if ((!drv)||(drv->next)||(!drv->Name)) return; MUTEX_LOCK(lists); _mm_registerdriver(drv); MUTEX_UNLOCK(lists); } MIKMODAPI int MikMod_DriverFromAlias(CHAR *alias) { int rank=1; MDRIVER *cruise; MUTEX_LOCK(lists); cruise=firstdriver; while(cruise) { if (cruise->Alias) { if (!(strcasecmp(alias,cruise->Alias))) break; rank++; } cruise=cruise->next; } if(!cruise) rank=0; MUTEX_UNLOCK(lists); return rank; } SWORD MD_SampleLoad(SAMPLOAD* s, int type) { SWORD result; if(type==MD_MUSIC) type=(md_mode & DMODE_SOFT_MUSIC)?MD_SOFTWARE:MD_HARDWARE; else if(type==MD_SNDFX) type=(md_mode & DMODE_SOFT_SNDFX)?MD_SOFTWARE:MD_HARDWARE; SL_Init(s); result=md_driver->SampleLoad(s,type); SL_Exit(s); return result; } void MD_SampleUnload(SWORD handle) { md_driver->SampleUnload(handle); } MIKMODAPI MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t player) { MikMod_player_t result; MUTEX_LOCK(vars); result=md_player; md_player=player; MUTEX_UNLOCK(vars); return result; } MIKMODAPI void MikMod_Update(void) { MUTEX_LOCK(vars); if(isplaying) { if((!pf)||(!pf->forbid)) md_driver->Update(); else { if (md_driver->Pause) md_driver->Pause(); } } MUTEX_UNLOCK(vars); } void Voice_SetVolume_internal(SBYTE voice,UWORD vol) { ULONG tmp; if((voice<0)||(voice>=md_numchn)) return; /* range checks */ if(md_musicvolume>128) md_musicvolume=128; if(md_sndfxvolume>128) md_sndfxvolume=128; if(md_volume>128) md_volume=128; tmp=(ULONG)vol*(ULONG)md_volume* ((voiceVoiceSetVolume(voice,tmp/16384UL); } MIKMODAPI void Voice_SetVolume(SBYTE voice,UWORD vol) { MUTEX_LOCK(vars); Voice_SetVolume_internal(voice,vol); MUTEX_UNLOCK(vars); } MIKMODAPI UWORD Voice_GetVolume(SBYTE voice) { UWORD result=0; MUTEX_LOCK(vars); if((voice>=0)&&(voiceVoiceGetVolume(voice); MUTEX_UNLOCK(vars); return result; } void Voice_SetFrequency_internal(SBYTE voice,ULONG frq) { if((voice<0)||(voice>=md_numchn)) return; if((md_sample[voice])&&(md_sample[voice]->divfactor)) frq/=md_sample[voice]->divfactor; md_driver->VoiceSetFrequency(voice,frq); } MIKMODAPI void Voice_SetFrequency(SBYTE voice,ULONG frq) { MUTEX_LOCK(vars); Voice_SetFrequency_internal(voice,frq); MUTEX_UNLOCK(vars); } MIKMODAPI ULONG Voice_GetFrequency(SBYTE voice) { ULONG result=0; MUTEX_LOCK(vars); if((voice>=0)&&(voiceVoiceGetFrequency(voice); MUTEX_UNLOCK(vars); return result; } void Voice_SetPanning_internal(SBYTE voice,ULONG pan) { if((voice<0)||(voice>=md_numchn)) return; if(pan!=PAN_SURROUND) { if(md_pansep>128) md_pansep=128; if(md_mode & DMODE_REVERSE) pan=255-pan; pan = (((SWORD)(pan-128)*md_pansep)/128)+128; } md_driver->VoiceSetPanning(voice, pan); } MIKMODAPI void Voice_SetPanning(SBYTE voice,ULONG pan) { #ifdef MIKMOD_DEBUG if((pan!=PAN_SURROUND)&&((pan<0)||(pan>255))) fprintf(stderr,"\rVoice_SetPanning called with pan=%ld\n",(long)pan); #endif MUTEX_LOCK(vars); Voice_SetPanning_internal(voice,pan); MUTEX_UNLOCK(vars); } MIKMODAPI ULONG Voice_GetPanning(SBYTE voice) { ULONG result=PAN_CENTER; MUTEX_LOCK(vars); if((voice>=0)&&(voiceVoiceGetPanning(voice); MUTEX_UNLOCK(vars); return result; } void Voice_Play_internal(SBYTE voice,SAMPLE* s,ULONG start) { ULONG repend; if((voice<0)||(voice>=md_numchn)) return; md_sample[voice]=s; repend=s->loopend; if(s->flags&SF_LOOP) /* repend can't be bigger than size */ if(repend>s->length) repend=s->length; md_driver->VoicePlay(voice,s->handle,start,s->length,s->loopstart,repend,s->flags); } MIKMODAPI void Voice_Play(SBYTE voice,SAMPLE* s,ULONG start) { if(start>s->length) return; MUTEX_LOCK(vars); Voice_Play_internal(voice,s,start); MUTEX_UNLOCK(vars); } void Voice_Stop_internal(SBYTE voice) { if((voice<0)||(voice>=md_numchn)) return; if(voice>=md_sngchn) /* It is a sound effects channel, so flag the voice as non-critical! */ sfxinfo[voice-md_sngchn]=0; md_driver->VoiceStop(voice); } MIKMODAPI void Voice_Stop(SBYTE voice) { MUTEX_LOCK(vars); Voice_Stop_internal(voice); MUTEX_UNLOCK(vars); } BOOL Voice_Stopped_internal(SBYTE voice) { if((voice<0)||(voice>=md_numchn)) return 0; return(md_driver->VoiceStopped(voice)); } MIKMODAPI BOOL Voice_Stopped(SBYTE voice) { BOOL result; MUTEX_LOCK(vars); result=Voice_Stopped_internal(voice); MUTEX_UNLOCK(vars); return result; } MIKMODAPI SLONG Voice_GetPosition(SBYTE voice) { SLONG result=0; MUTEX_LOCK(vars); if((voice>=0)&&(voiceVoiceGetPosition) result=(md_driver->VoiceGetPosition(voice)); else result=-1; } MUTEX_UNLOCK(vars); return result; } MIKMODAPI ULONG Voice_RealVolume(SBYTE voice) { ULONG result=0; MUTEX_LOCK(vars); if((voice>=0)&&(voiceVoiceRealVolume) result=(md_driver->VoiceRealVolume(voice)); MUTEX_UNLOCK(vars); return result; } static int _mm_init(CHAR *cmdline) { UWORD t; _mm_critical = 1; /* if md_device==0, try to find a device number */ if(!md_device) { cmdline=NULL; for(t=1,md_driver=firstdriver;md_driver;md_driver=md_driver->next,t++) if(md_driver->IsPresent()) break; if(!md_driver) { _mm_errno = MMERR_DETECTING_DEVICE; if(_mm_errorhandler) _mm_errorhandler(); md_driver = &drv_nos; return 1; } md_device = t; } else { /* if n>0, use that driver */ for(t=1,md_driver=firstdriver;(md_driver)&&(t!=md_device);md_driver=md_driver->next) t++; if(!md_driver) { _mm_errno = MMERR_INVALID_DEVICE; if(_mm_errorhandler) _mm_errorhandler(); md_driver = &drv_nos; return 1; } /* arguments here might be necessary for the presence check to succeed */ if(cmdline&&(md_driver->CommandLine)) md_driver->CommandLine(cmdline); if(!md_driver->IsPresent()) { _mm_errno = MMERR_DETECTING_DEVICE; if(_mm_errorhandler) _mm_errorhandler(); md_driver = &drv_nos; return 1; } } olddevice = md_device; if(md_driver->Init()) { MikMod_Exit_internal(); if(_mm_errorhandler) _mm_errorhandler(); return 1; } initialized=1; _mm_critical=0; return 0; } MIKMODAPI int MikMod_Init(CHAR *cmdline) { int result; MUTEX_LOCK(vars); MUTEX_LOCK(lists); result=_mm_init(cmdline); MUTEX_UNLOCK(lists); MUTEX_UNLOCK(vars); return result; } void MikMod_Exit_internal(void) { MikMod_DisableOutput_internal(); md_driver->Exit(); md_numchn = md_sfxchn = md_sngchn = 0; md_driver = &drv_nos; if(sfxinfo) free(sfxinfo); if(md_sample) free(md_sample); md_sample = NULL; sfxinfo = NULL; initialized = 0; } MIKMODAPI void MikMod_Exit(void) { MUTEX_LOCK(vars); MUTEX_LOCK(lists); MikMod_Exit_internal(); MUTEX_UNLOCK(lists); MUTEX_UNLOCK(vars); } /* Reset the driver using the new global variable settings. If the driver has not been initialized, it will be now. */ static int _mm_reset(CHAR *cmdline) { BOOL wasplaying = 0; if(!initialized) return _mm_init(cmdline); if (isplaying) { wasplaying = 1; md_driver->PlayStop(); } if((!md_driver->Reset)||(md_device != olddevice)) { /* md_driver->Reset was NULL, or md_device was changed, so do a full reset of the driver. */ md_driver->Exit(); if(_mm_init(cmdline)) { MikMod_Exit_internal(); if(_mm_errno) if(_mm_errorhandler) _mm_errorhandler(); return 1; } } else { if(md_driver->Reset()) { MikMod_Exit_internal(); if(_mm_errno) if(_mm_errorhandler) _mm_errorhandler(); return 1; } } if (wasplaying) md_driver->PlayStart(); return 0; } MIKMODAPI int MikMod_Reset(CHAR *cmdline) { int result; MUTEX_LOCK(vars); MUTEX_LOCK(lists); result=_mm_reset(cmdline); MUTEX_UNLOCK(lists); MUTEX_UNLOCK(vars); return result; } /* If either parameter is -1, the current set value will be retained. */ int MikMod_SetNumVoices_internal(int music, int sfx) { BOOL resume = 0; int t, oldchn = 0; if((!music)&&(!sfx)) return 1; _mm_critical = 1; if(isplaying) { MikMod_DisableOutput_internal(); oldchn = md_numchn; resume = 1; } if(sfxinfo) free(sfxinfo); if(md_sample) free(md_sample); md_sample = NULL; sfxinfo = NULL; if(music!=-1) md_sngchn = music; if(sfx!=-1) md_sfxchn = sfx; md_numchn = md_sngchn + md_sfxchn; LimitHardVoices(md_driver->HardVoiceLimit); LimitSoftVoices(md_driver->SoftVoiceLimit); if(md_driver->SetNumVoices()) { MikMod_Exit_internal(); if(_mm_errno) if(_mm_errorhandler!=NULL) _mm_errorhandler(); md_numchn = md_softchn = md_hardchn = md_sfxchn = md_sngchn = 0; return 1; } if(md_sngchn+md_sfxchn) md_sample=(SAMPLE**)_mm_calloc(md_sngchn+md_sfxchn,sizeof(SAMPLE*)); if(md_sfxchn) sfxinfo = (UBYTE *)_mm_calloc(md_sfxchn,sizeof(UBYTE)); /* make sure the player doesn't start with garbage */ for(t=oldchn;tPlayStart()) return 1; isplaying = 1; } _mm_critical = 0; return 0; } MIKMODAPI int MikMod_EnableOutput(void) { int result; MUTEX_LOCK(vars); result=MikMod_EnableOutput_internal(); MUTEX_UNLOCK(vars); return result; } void MikMod_DisableOutput_internal(void) { if(isplaying && md_driver) { isplaying = 0; md_driver->PlayStop(); } } MIKMODAPI void MikMod_DisableOutput(void) { MUTEX_LOCK(vars); MikMod_DisableOutput_internal(); MUTEX_UNLOCK(vars); } BOOL MikMod_Active_internal(void) { return isplaying; } MIKMODAPI BOOL MikMod_Active(void) { BOOL result; MUTEX_LOCK(vars); result=MikMod_Active_internal(); MUTEX_UNLOCK(vars); return result; } /* Plays a sound effects sample. Picks a voice from the number of voices allocated for use as sound effects (loops through voices, skipping all active criticals). Returns the voice that the sound is being played on. */ static SBYTE Sample_Play_internal(SAMPLE *s,ULONG start,UBYTE flags) { int orig=sfxpool;/* for cases where all channels are critical */ int c; if(!md_sfxchn) return -1; if(s->volume>64) s->volume = 64; /* check the first location after sfxpool */ do { if(sfxinfo[sfxpool]&SFX_CRITICAL) { if(md_driver->VoiceStopped(c=sfxpool+md_sngchn)) { sfxinfo[sfxpool]=flags; Voice_Play_internal(c,s,start); md_driver->VoiceSetVolume(c,s->volume<<2); Voice_SetPanning_internal(c,s->panning); md_driver->VoiceSetFrequency(c,s->speed); sfxpool++; if(sfxpool>=md_sfxchn) sfxpool=0; return c; } } else { sfxinfo[sfxpool]=flags; Voice_Play_internal(c=sfxpool+md_sngchn,s,start); md_driver->VoiceSetVolume(c,s->volume<<2); Voice_SetPanning_internal(c,s->panning); md_driver->VoiceSetFrequency(c,s->speed); sfxpool++; if(sfxpool>=md_sfxchn) sfxpool=0; return c; } sfxpool++; if(sfxpool>=md_sfxchn) sfxpool = 0; } while(sfxpool!=orig); return -1; } MIKMODAPI SBYTE Sample_Play(SAMPLE *s,ULONG start,UBYTE flags) { SBYTE result; MUTEX_LOCK(vars); result=Sample_Play_internal(s,start,flags); MUTEX_UNLOCK(vars); return result; } MIKMODAPI long MikMod_GetVersion(void) { return LIBMIKMOD_VERSION; } /*========== MT-safe stuff */ #ifdef HAVE_PTHREAD #define INIT_MUTEX(name) \ pthread_mutex_t _mm_mutex_##name=PTHREAD_MUTEX_INITIALIZER #elif defined(__OS2__)||defined(__EMX__) #define INIT_MUTEX(name) \ HMTX _mm_mutex_##name #elif defined(_WIN32) #define INIT_MUTEX(name) \ HANDLE _mm_mutex_##name #else #define INIT_MUTEX(name) \ void *_mm_mutex_##name = NULL #endif INIT_MUTEX(vars); INIT_MUTEX(lists); MIKMODAPI BOOL MikMod_InitThreads(void) { static int firstcall=1; static BOOL result = 0; if (firstcall) { firstcall=0; #ifdef HAVE_PTHREAD result=1; #elif defined(__OS2__)||defined(__EMX__) if(DosCreateMutexSem((PSZ)NULL,&_mm_mutex_lists,0,0) || DosCreateMutexSem((PSZ)NULL,&_mm_mutex_vars,0,0)) { _mm_mutex_lists=_mm_mutex_vars=(HMTX)NULL; result=0; } else result=1; #elif defined(_WIN32) if((!(_mm_mutex_lists=CreateMutex(NULL,FALSE,"libmikmod(lists)")))|| (!(_mm_mutex_vars=CreateMutex(NULL,FALSE,"libmikmod(vars)")))) result=0; else result=1; #endif } return result; } MIKMODAPI void MikMod_Unlock(void) { MUTEX_UNLOCK(lists); MUTEX_UNLOCK(vars); } MIKMODAPI void MikMod_Lock(void) { MUTEX_LOCK(vars); MUTEX_LOCK(lists); } /*========== Parameter extraction helper */ CHAR *MD_GetAtom(CHAR *atomname,CHAR *cmdline,BOOL implicit) { CHAR *ret=NULL; if(cmdline) { CHAR *buf=strstr(cmdline,atomname); if((buf)&&((buf==cmdline)||(*(buf-1)==','))) { CHAR *ptr=buf+strlen(atomname); if(*ptr=='=') { for(buf=++ptr;(*ptr)&&((*ptr)!=',');ptr++); ret=_mm_malloc((1+ptr-buf)*sizeof(CHAR)); if(ret) strncpy(ret,buf,ptr-buf); } else if((*ptr==',')||(!*ptr)) { if(implicit) { ret=_mm_malloc((1+ptr-buf)*sizeof(CHAR)); if(ret) strncpy(ret,buf,ptr-buf); } } } } return ret; } #if (MIKMOD_UNIX) /*========== Posix helper functions */ /* Check if the file is a regular or nonexistant file (or a link to a such a file), and that, should the calling program be setuid, the access rights are reasonable. Returns 1 if it is safe to rewrite the file, 0 otherwise. The goal is to prevent a setuid root libmikmod application from overriding files like /etc/passwd with digital sound... */ BOOL MD_Access(CHAR *filename) { struct stat buf; if(!stat(filename,&buf)) { /* not a regular file ? */ if(!S_ISREG(buf.st_mode)) return 0; /* more than one hard link to the file ? */ if(buf.st_nlink>1) return 0; /* check access rights with the real user and group id */ if(getuid()==buf.st_uid) { if(!(buf.st_mode&S_IWUSR)) return 0; } else if(getgid()==buf.st_gid) { if(!(buf.st_mode&S_IWGRP)) return 0; } else if(!(buf.st_mode&S_IWOTH)) return 0; } return 1; } /* Drop all root privileges we might have */ int MD_DropPrivileges(void) { if(!geteuid()) { if(getuid()) { /* we are setuid root -> drop setuid to become the real user */ if(setuid(getuid())) return 1; } else { /* we are run as root -> drop all and become user 'nobody' */ struct passwd *nobody; int uid; if(!(nobody=getpwnam("nobody"))) return 1; /* no such user ? */ uid=nobody->pw_uid; if (!uid) /* user 'nobody' has root privileges ? weird... */ return 1; if (setuid(uid)) return 1; } } return 0; } #endif /* ex:set ts=4: */ libmikmod-3.1.16/playercode/mlreg.c0000644000000000000000000000367012222472510015653 0ustar rootroot/* MikMod sound library (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mlreg.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ Routine for registering all loaders in libmikmod for the current platform. ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" static void MikMod_RegisterAllLoaders_internal(void) { _mm_registerloader(&load_669); _mm_registerloader(&load_amf); _mm_registerloader(&load_dsm); _mm_registerloader(&load_far); _mm_registerloader(&load_gdm); _mm_registerloader(&load_it); _mm_registerloader(&load_imf); _mm_registerloader(&load_mod); _mm_registerloader(&load_med); _mm_registerloader(&load_mtm); _mm_registerloader(&load_okt); _mm_registerloader(&load_s3m); _mm_registerloader(&load_stm); _mm_registerloader(&load_stx); _mm_registerloader(&load_ult); _mm_registerloader(&load_uni); _mm_registerloader(&load_xm); _mm_registerloader(&load_m15); } void MikMod_RegisterAllLoaders(void) { MUTEX_LOCK(lists); MikMod_RegisterAllLoaders_internal(); MUTEX_UNLOCK(lists); } /* ex:set ts=4: */ libmikmod-3.1.16/playercode/munitrk.c0000644000000000000000000001722512222472510016237 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: munitrk.c,v 1.1.1.1 2004/06/01 12:16:18 raph Exp $ All routines dealing with the manipulation of UNITRK streams ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #include /* Unibuffer chunk size */ #define BUFPAGE 128 UWORD unioperands[UNI_LAST]={ 0, /* not used */ 1, /* UNI_NOTE */ 1, /* UNI_INSTRUMENT */ 1, /* UNI_PTEFFECT0 */ 1, /* UNI_PTEFFECT1 */ 1, /* UNI_PTEFFECT2 */ 1, /* UNI_PTEFFECT3 */ 1, /* UNI_PTEFFECT4 */ 1, /* UNI_PTEFFECT5 */ 1, /* UNI_PTEFFECT6 */ 1, /* UNI_PTEFFECT7 */ 1, /* UNI_PTEFFECT8 */ 1, /* UNI_PTEFFECT9 */ 1, /* UNI_PTEFFECTA */ 1, /* UNI_PTEFFECTB */ 1, /* UNI_PTEFFECTC */ 1, /* UNI_PTEFFECTD */ 1, /* UNI_PTEFFECTE */ 1, /* UNI_PTEFFECTF */ 1, /* UNI_S3MEFFECTA */ 1, /* UNI_S3MEFFECTD */ 1, /* UNI_S3MEFFECTE */ 1, /* UNI_S3MEFFECTF */ 1, /* UNI_S3MEFFECTI */ 1, /* UNI_S3MEFFECTQ */ 1, /* UNI_S3MEFFECTR */ 1, /* UNI_S3MEFFECTT */ 1, /* UNI_S3MEFFECTU */ 0, /* UNI_KEYOFF */ 1, /* UNI_KEYFADE */ 2, /* UNI_VOLEFFECTS */ 1, /* UNI_XMEFFECT4 */ 1, /* UNI_XMEFFECT6 */ 1, /* UNI_XMEFFECTA */ 1, /* UNI_XMEFFECTE1 */ 1, /* UNI_XMEFFECTE2 */ 1, /* UNI_XMEFFECTEA */ 1, /* UNI_XMEFFECTEB */ 1, /* UNI_XMEFFECTG */ 1, /* UNI_XMEFFECTH */ 1, /* UNI_XMEFFECTL */ 1, /* UNI_XMEFFECTP */ 1, /* UNI_XMEFFECTX1 */ 1, /* UNI_XMEFFECTX2 */ 1, /* UNI_ITEFFECTG */ 1, /* UNI_ITEFFECTH */ 1, /* UNI_ITEFFECTI */ 1, /* UNI_ITEFFECTM */ 1, /* UNI_ITEFFECTN */ 1, /* UNI_ITEFFECTP */ 1, /* UNI_ITEFFECTT */ 1, /* UNI_ITEFFECTU */ 1, /* UNI_ITEFFECTW */ 1, /* UNI_ITEFFECTY */ 2, /* UNI_ITEFFECTZ */ 1, /* UNI_ITEFFECTS0 */ 2, /* UNI_ULTEFFECT9 */ 2, /* UNI_MEDSPEED */ 0, /* UNI_MEDEFFECTF1 */ 0, /* UNI_MEDEFFECTF2 */ 0, /* UNI_MEDEFFECTF3 */ 2, /* UNI_OKTARP */ }; /* Sparse description of the internal module format ------------------------------------------------ A UNITRK stream is an array of bytes representing a single track of a pattern. It's made up of 'repeat/length' bytes, opcodes and operands (sort of a assembly language): rrrlllll [REP/LEN][OPCODE][OPERAND][OPCODE][OPERAND] [REP/LEN][OPCODE][OPERAND].. ^ ^ ^ |-------ROWS 0 - 0+REP of a track---------| |-------ROWS xx - xx+REP of a track... The rep/len byte contains the number of bytes in the current row, _including_ the length byte itself (So the LENGTH byte of row 0 in the previous example would have a value of 5). This makes it easy to search through a stream for a particular row. A track is concluded by a 0-value length byte. The upper 3 bits of the rep/len byte contain the number of times -1 this row is repeated for this track. (so a value of 7 means this row is repeated 8 times) Opcodes can range from 1 to 255 but currently only opcodes 1 to 62 are being used. Each opcode can have a different number of operands. You can find the number of operands to a particular opcode by using the opcode as an index into the 'unioperands' table. */ /*========== Reading routines */ static UBYTE *rowstart; /* startadress of a row */ static UBYTE *rowend; /* endaddress of a row (exclusive) */ static UBYTE *rowpc; /* current unimod(tm) programcounter */ static UBYTE lastbyte; /* for UniSkipOpcode() */ void UniSetRow(UBYTE* t) { rowstart = t; rowpc = rowstart; rowend = t?rowstart+(*(rowpc++)&0x1f):t; } UBYTE UniGetByte(void) { return lastbyte = (rowpc end of track.. */ l = (c>>5)+1; /* extract repeat value */ if(l>row) break; /* reached wanted row? -> return pointer */ row -= l; /* haven't reached row yet.. update row */ t += c&0x1f; /* point t to the next row */ } return t; } /*========== Writing routines */ static UBYTE *unibuf; /* pointer to the temporary unitrk buffer */ static UWORD unimax; /* buffer size */ static UWORD unipc; /* buffer cursor */ static UWORD unitt; /* current row index */ static UWORD lastp; /* previous row index */ /* Resets index-pointers to create a new track. */ void UniReset(void) { unitt = 0; /* reset index to rep/len byte */ unipc = 1; /* first opcode will be written to index 1 */ lastp = 0; /* no previous row yet */ unibuf[0] = 0; /* clear rep/len byte */ } /* Expands the buffer */ static BOOL UniExpand(int wanted) { if ((unipc+wanted)>=unimax) { UBYTE *newbuf; /* Expand the buffer by BUFPAGE bytes */ newbuf=(UBYTE*)realloc(unibuf,(unimax+BUFPAGE)*sizeof(UBYTE)); /* Check if realloc succeeded */ if(newbuf) { unibuf = newbuf; unimax+=BUFPAGE; return 1; } else return 0; } return 1; } /* Appends one byte of data to the current row of a track. */ void UniWriteByte(UBYTE data) { if (UniExpand(1)) /* write byte to current position and update */ unibuf[unipc++]=data; } void UniWriteWord(UWORD data) { if (UniExpand(2)) { unibuf[unipc++]=data>>8; unibuf[unipc++]=data&0xff; } } static BOOL MyCmp(const UBYTE* a,const UBYTE* b,UWORD l) { UWORD t; for(t=0;t>5)+1; /* repeat of previous row */ l = (unibuf[lastp]&0x1f); /* length of previous row */ len = unipc-unitt; /* length of current row */ /* Now, check if the previous and the current row are identical.. when they are, just increase the repeat field of the previous row */ if(n<8 && len==l && MyCmp(&unibuf[lastp+1],&unibuf[unitt+1],len-1)) { unibuf[lastp]+=0x20; unipc = unitt+1; } else { if (UniExpand(unitt-unipc)) { /* current and previous row aren't equal... update the pointers */ unibuf[unitt] = len; lastp = unitt; unitt = unipc++; } } } /* Terminates the current unitrk stream and returns a pointer to a copy of the stream. */ UBYTE* UniDup(void) { void *d; if (!UniExpand(unipc-unitt)) return NULL; unibuf[unitt] = 0; if(!(d=_mm_malloc(unipc))) return NULL; memcpy(d,unibuf,unipc); return (UBYTE *)d; } BOOL UniInit(void) { unimax = BUFPAGE; if(!(unibuf=(UBYTE*)_mm_malloc(unimax*sizeof(UBYTE)))) return 0; return 1; } void UniCleanup(void) { if(unibuf) free(unibuf); unibuf = NULL; } /* ex:set ts=4: */ libmikmod-3.1.16/COPYING.LESSER0000644000000000000000000006364212255302430014305 0ustar rootroot GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libmikmod-3.1.16/m4/0000755000000000000000000000000012262343244012571 5ustar rootrootlibmikmod-3.1.16/m4/ltversion.m40000644000000000000000000000127712260336514015067 0ustar rootroot# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # 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. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libmikmod-3.1.16/m4/libtool.m40000644000000000000000000077322712260336514014521 0ustar rootroot# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # 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. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 56 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl _LT_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_INIT ]) # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2008 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. if test "$no_create" != yes; then lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) fi ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(whole_archive_flag_spec, $1)='' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line __oline__ "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then _LT_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) libmikmod-3.1.16/m4/ltoptions.m40000644000000000000000000002724212260336514015075 0ustar rootroot# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libmikmod-3.1.16/m4/esd.m40000644000000000000000000001533312236770575013627 0ustar rootroot# Configure paths for ESD # Manish Singh 98-9-30 # stolen back from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor dnl AM_PATH_ESD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for ESD, and define ESD_CFLAGS and ESD_LIBS dnl AC_DEFUN([AM_PATH_ESD], [dnl dnl Get the cflags and libraries from the esd-config script dnl AC_ARG_WITH(esd-prefix,[ --with-esd-prefix=PFX Prefix where ESD is installed (optional)], esd_prefix="$withval", esd_prefix="") AC_ARG_WITH(esd-exec-prefix,[ --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)], esd_exec_prefix="$withval", esd_exec_prefix="") AC_ARG_ENABLE(esdtest, [ --disable-esdtest Do not try to compile and run a test ESD program], , enable_esdtest=yes) if test x$esd_exec_prefix != x ; then esd_args="$esd_args --exec-prefix=$esd_exec_prefix" if test x${ESD_CONFIG+set} != xset ; then ESD_CONFIG=$esd_exec_prefix/bin/esd-config fi fi if test x$esd_prefix != x ; then esd_args="$esd_args --prefix=$esd_prefix" if test x${ESD_CONFIG+set} != xset ; then ESD_CONFIG=$esd_prefix/bin/esd-config fi fi AC_PATH_PROG(ESD_CONFIG, esd-config, no) min_esd_version=ifelse([$1], ,0.2.7,$1) AC_MSG_CHECKING(for ESD - version >= $min_esd_version) no_esd="" if test "$ESD_CONFIG" = "no" ; then no_esd=yes else AC_LANG_SAVE AC_LANG_C ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` esd_major_version=`$ESD_CONFIG $esd_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` esd_minor_version=`$ESD_CONFIG $esd_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_esdtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $ESD_CFLAGS" LIBS="$LIBS $ESD_LIBS" dnl dnl Now check if the installed ESD is sufficiently new. (Also sanity dnl checks the results of esd-config to some extent dnl rm -f conf.esdtest AC_TRY_RUN([ #include #include #include #include char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *) malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main () { int major, minor, micro; char *tmp_version; system ("touch conf.esdtest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_esd_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_esd_version"); exit(1); } if (($esd_major_version > major) || (($esd_major_version == major) && ($esd_minor_version > minor)) || (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) { return 0; } else { printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); printf("*** to point to the correct copy of esd-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" AC_LANG_RESTORE fi fi if test "x$no_esd" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$ESD_CONFIG" = "no" ; then echo "*** The esd-config script installed by ESD could not be found" echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the ESD_CONFIG environment variable to the" echo "*** full path to esd-config." else if test -f conf.esdtest ; then : else echo "*** Could not run ESD test program, checking why..." CFLAGS="$CFLAGS $ESD_CFLAGS" LIBS="$LIBS $ESD_LIBS" AC_LANG_SAVE AC_LANG_C AC_TRY_LINK([ #include #include ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding ESD or finding the wrong" echo "*** version of ESD. If it is not finding ESD, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means ESD was incorrectly installed" echo "*** or that you have moved ESD since it was installed. In the latter case, you" echo "*** may want to edit the esd-config script: $ESD_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" AC_LANG_RESTORE fi fi ESD_CFLAGS="" ESD_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(ESD_CFLAGS) AC_SUBST(ESD_LIBS) rm -f conf.esdtest ]) dnl AM_ESD_SUPPORTS_MULTIPLE_RECORD([ACTION-IF-SUPPORTS [, ACTION-IF-NOT-SUPPORTS]]) dnl Test, whether esd supports multiple recording clients (version >=0.2.21) dnl AC_DEFUN([AM_ESD_SUPPORTS_MULTIPLE_RECORD], [dnl AC_MSG_NOTICE([whether installed esd version supports multiple recording clients]) ac_save_ESD_CFLAGS="$ESD_CFLAGS" ac_save_ESD_LIBS="$ESD_LIBS" AM_PATH_ESD(0.2.21, ifelse([$1], , [ AM_CONDITIONAL(ESD_SUPPORTS_MULTIPLE_RECORD, true) AC_DEFINE(ESD_SUPPORTS_MULTIPLE_RECORD, 1, [Define if you have esound with support of multiple recording clients.])], [$1]), ifelse([$2], , [AM_CONDITIONAL(ESD_SUPPORTS_MULTIPLE_RECORD, false)], [$2]) if test "x$ac_save_ESD_CFLAGS" != x ; then ESD_CFLAGS="$ac_save_ESD_CFLAGS" fi if test "x$ac_save_ESD_LIBS" != x ; then ESD_LIBS="$ac_save_ESD_LIBS" fi ) ]) libmikmod-3.1.16/m4/ltsugar.m40000644000000000000000000001042412260336514014515 0ustar rootroot# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libmikmod-3.1.16/m4/lt~obsolete.m40000644000000000000000000001311312260336514015404 0ustar rootroot# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # 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 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) libmikmod-3.1.16/AUTHORS0000644000000000000000000001075712223231304013321 0ustar rootrootlibmikmod main authors ---------------------- * Jean-Paul Mikkers (MikMak) wrote MikMod and maintained it until version 3. * Jake Stine (Air Richter) [email doesn't work anymore...] made decisive contributions to the code (esp. IT support) and maintained MikMod version 3 until it was discontinued. He still works on the WinAmp module plugin, roughly based on MikMod. * Miod Vallat [email doesn't work anymore...] maintainer MikMod'Unix (since version 3.0.4), made an audit of the code resulting in many bugs fixed. * Raphael Assenat Revived the project after many years of inactivity, in 2004. Former maintainer. * Shlomi Fish ( http://www.shlomifish.org/ ). Took over maintenance after many years of inactivity, in 2012. * Ozkan Sezer Took over maintenance in 2013. (current maintainer.) Previous Unix maintainers ------------------------- * Steve McIntyre maintained MikMod'Unix version 2. Used to maintain the Debian package for MikMod. * Peter Amstutz maintained MikMod'Unix version 3 up to version 3.0.3. General contributors -------------------- * Arne de Bruijn wrote the compressed IT sample support. * Shlomi Fish wrote the Java port, bug fixes. * Ozkan Sezer overall bug fixes, configury updates. * Juan Linietsky overall bug fixes. * Claudio Matsuoka wrote the STX loader and submitted bug fixes. * Sebastiaan A. Megens fixed various bugs (memory leaks, endianness issues, etc). * ``UFO'' wrote the OKT loader. * Kev Vance wrote the GDM loader. * Paul Fisher made decisive contributions and improvements. * Alexander Kerkhove fixed an ULT panning effect bug. * ``Kodiak'' helped on the interfaces of libmikmod. * Sylvain Marchand make MikMod more portable and GCC compilable. Contributors on the Unix side ----------------------------- * Douglas Carmichael ported MikMod to FreeBSD. * Chris Conn wrote the OSS driver. * Roine Gustaffson wrote the Digital AudioFile driver. * Stephan Kanthak wrote the SGI driver. * Lutz Vieweg wrote the AIX and HP-UX drivers. * Valtteri Vuorikoski wrote the Sun driver. * Andy Lo A Foe wrote the Ultra driver (for the Gravis Ultrasound sound card). * C Ray C updated the Ultra driver to work with libmikmod 3. * ``MenTaLguY'' autoconfized the Unix libmikmod distribution. * Tobias Gloth created the new I/O interface, made the code MT-safe and submitted bug fixes. * Simon Hosie wrote the piped output driver, and submitted speed optimizations and bugfixes for the software mixer. * Gerd Rausch wrote the sam9407 driver. * Joseph Carter maintains the Debian package for MikMod and libmikmod, submitted bugfixes. Contributors on the Windows side -------------------------------- * Brian McKinney created the DirectSound driver. * Bjornar Henden created the Multimedia API windows driver. Contributors on the Dos side ---------------------------- Their code isn't there anymore, but they contributed to the success of libmikmod... * Jean-Philippe Ajirent wrote the EMS memory routines. * Peter Breitling ported MikMod to DJGPP. * Arnout Cosman wrote the PAS driver. * Mario Koeppen wrote the WSS driver. * Mike Leibow wrote the GUS driver. * Jeremy McDonald wrote a fast assembly-language mixer. * Steffen Rusitschka and Vince Vu wrote the AWE driver. Contributors on the Macintosh side ---------------------------------- * Anders Bjoerklund ported libmikmod to the Macintosh. Contributors on the OS/2 side ----------------------------- * Stefan Tibus ported libmikmod to OS/2. * Andrew Zabolotny improved the existing OS/2 drivers. Contributors on the BeOS side ----------------------------- * Thomas Neumann integrated libmikmod into his BeOS APlayer, and contributed many bug fixes. -- If your name is missing, don't hesitate to remind the current maintainer. libmikmod-3.1.16/README0000644000000000000000000003767512255576504013164 0ustar rootroot Hello folks! This is libmikmod, version 3.1.16, a portable sound library for Unix and other systems. Check out the file 'NEWS' for more history information. >> BUILDING LIBMIKMOD --------------------- - If you're building libmikmod under MacOS, please refer to the 'README' file located in the 'macintosh' subdirectory. - If you're building libmikmod under OS/2, please refer to the 'README' file located in the 'os2' subdirectory. - If you're building libmikmod under Windows, please refer to the 'README' file located in the 'win32' subdirectory. - If you're building libmikmod under any other system which is not a Unix flavour, then be warned that this your platform is not supported and that libmikmod will probably not build out of the box; don't hesitate to drop me a note, and I'll see what I can do for this situation. So you're on a good old Unix workstation, aren't you ? You'll need an ANSI C compiler to build libmikmod. If your system does not come with an ANSI C compiler, you might want to try the GUN C compiler, gcc. If you're building on a 32 bit architecture, your compiler must provide a 64 bit integer type (usually 'long long'). To prevent clobbering the sources, I recommend building libmikmod in an alternate directory, for example 'build': mkdir build cd build In this directory, run libmikmod's configure script: ../configure The configure script will attempt to guess correct values for various system-dependent variables used during the build process, and will create appropriate Makefiles for proper compilation. If you're not familiar with configure scripts and their standard options, you can find more general information about them in the file INSTALL. The default behaviour of the configure script is to create both a static and a shared library, with as many drivers as possible, which are dynamically loaded whenever possible. However, it can be given several options to tweak your configuration of libmikmod: The --enable-af, --enable-alsa, --enable-esd, --enable-oss, --enable-sam9407 and --enable-ultra options will compile respectively the Digital AudioFile, Advanced Linux Sound Architecture (ALSA), Enlightened Sound Daemon, Open Sound System (OSS), sam9407 and Linux Ultrasound drivers. Since the configure script will search for the appropriate include files and libraries, to compile as much drivers as possible, these options are mostly useful in their negative form: ../configure --disable-esd will configure libmikmod without the Enlightened Sound Daemon driver, even if all the necessary files for compiling are present on the system. The --enable-dl option enables the dynamic load of the alsa, esd and ultra drivers at runtime, if your systems support it. This option is enabled by default if the build system supports it, so it is more useful in its negative form: ../configure --disable-dl will configure libmikmod without the dynamic loading facility. The --enable-threads option enables the creation of a thread-safe libmikmod library, if your system provides POSIX threads. This option is enabled by default, so it is more useful in its negative form: ../configure --disable-threads will configure for a non thread-safe version of libmikmod. The --enable-shared and --enable-static options control whether a static library, a shared library or both should be built. The --enable-debug option creates a debug version of libmikmod. After you've successfully run configure, simply run make to get all things build. Then, run make install to have the library installed. Depending on where you choose to install it (using the --prefix= option to configure), you may need root privileges for this operation. >> DRIVER PARAMETERS -------------------- Until a good place to put this information is found, here is the list of parameters recognized by the drivers, as well as the driver alias list. When specifying multiple parameters, use a comma (,) to separate the different parameters, for example: somevalue=1,someothervalue=2 - AudioFile (alias "audiofile") machine= same syntax as the AUDIOFILE environment variable. - AIX ("AIX") [AIX only] buffer= logarithmic size of the buffer, in the range 12-19. Default is 15. - DART ("dart") [OS/2 only] buffer= logarithmic fragment size, in the range 12-16. Default is computed to a bit more than 1/4" of playback. count= fragment count, in the range 2-8. Default is 2. device= waveaudio device number, in the range 0-8. Default is 0 (use default waveaudio device). - DirectX ("ds") [Win32 only] buffer= logarithmic size of the buffer, in the range 12-19. Default is 16. globalfocus always play music, even if the application has not the focus. Required for full-screen applications. - EsounD ("esd") [Unix only] machine= same syntax as the ESPEAKER environment variable. - HP ("hp") [HP-UX only] buffer= logarithmic size of the buffer, in the range 12-19. Default is 15. headphone redirects the output to the headphone port. - MacOS ("mac") [MacOS only] buffer= logarithmic size of the buffer, in the range 10-16. Default is 12. - OS/2 MMPM ("os2") [OS/2 only] buffer= logarithmic size of the buffer, in the range 12-16. Default is computed to a bit more than 1/4" of playback. device= waveaudio device number, in the range 0-8. Default is 0 (use default waveaudio device). - OSS ("oss") [Unix only] card= card number. Default is the card whose driver was loaded first. buffer= logarithmic fragment size, in the range 7-17. Default is 14. Replaces the MM_FRAGSIZE environment variable, which is now deprecated. count= fragment count, in the range 2-255. Default is 16. Replaces the MM_NUMFRAGS environment variable, which is now deprecated. - Piped output ("pipe") [Unix only] pipe= Pipe command (mandatory). - SGI audio library ("sgi") [IRIX only] fragsize= buffer size for libmikmod internal use. Replaces the MM_SGI_FRAGSIZE environment variable, which is now deprecated. bufsize= buffer size for the audio library. Replaces the MM_SGI_BUFSIZE environment variable, which is now deprecated. - Disk writers in raw and wav formats ("raw" and "wav") file= Output file name. Default is music.raw for the raw driver and music.wav for the wav driver. - Sun/Solaris/NetBSD/OpenBSD audio ("audio") [SunOS, Solaris, NetBSD, OpenBSD only] buffer= logarithmic fragment size, in the range 7-17. Default is 12. Replaces the MM_FRAGSIZE environment variable, which is now deprecated. headphone on SunOS/Solaris only, redirects the output to the headphone port. speaker on SunOS/Solaris only, redirects the output to the speaker. - Linux sam9407-based soundcards ("sam9407") [Linux only] card= card number. Default is first card. - NoSound ("nosound"), Standard output ("stdout"), Ultrasound ("ultra"), Windows Multimedia ("winmm"), Linux ALSA ("alsa") These driver have no options. >> ALSA DRIVER SPECIFIC INFORMATION (Linux specific) ----------------------------------- The Advanced Linux Sound Architecture (ALSA) project aims to provide better sound facilities than the current OSS drivers. You can find more information on ALSA, including a HOWTO, on the web: http://www.alsa-project.org This version of libmikmod ALSA driver works with ALSA versions 1.0.x. ALSA versions 0.9.x and earlier are not supported any more. The old alsa-0.3.x/0.4.x driver, i.e. drv_alsa04.c for Linux kernels 2.0.x and 2.2.x, is still kept under the drivers directory, but only for reference. >> ENLIGHTENED SOUND DAEMON SPECIFIC INFORMATION (Unix specific) ------------------------------------------------ The Enlightened Sound Daemon (EsounD) is still experimental and may change a lot until it reaches the 1.0 release. Thus, this libmikmod version might not work with future versions of EsounD. You can find more information on EsounD on the web: http://www.tux.org/~ricdude/EsounD.html However, this page is getting very out of date. Recent EsounD work can be found on the GNOME project: http://www.gnome.org/applist/view.php3?name=esound which not kept up-to-date either... The version of the libmikmod EsounD driver coincides with the latest EsounD release available when this version of libmikmod was released; for the 3.1.10 release, this is EsounD v0.2.23, but libmikmod should work with any version starting from 0.2.6, although the latest version is recommended. Please note that between 0.2.8 and 0.2.12 the server port and the protocol have changed, thus clients compiled with libesd from 0.2.8 can not communicate with 0.2.12 (and later) esd, and vice versa. If the esd daemon dies, libmikmod will try to reconnect every 5 seconds and every new module, if a module ends. So, you can safely restart esd and wait 5 seconds, and voila! Sound is back... If you run esd and a libmikmod application on the same machine, everything should work fine. However, if there is a real network connection, synchronization problems can occur. If sound clicks or gets chopped, then you've likely got a synchronization problem. Pausing the player for a second should cause the problem to disappear. If there's still problems, perhaps your network is not fast enough. Lowering the playback rate will hopefully solve the problem. Also, the performance of the esd is really abominable if the esd playback frequency can't be divided by the libmikmod playback rate. For example, runinng a libmikmod application at 42000 Hz with esd at 44100 Hz will sound horrible, and take a lot of CPU time due to resampling. >> SGI DRIVER SPECIFIC INFORMATION (IRIX specific) ---------------------------------- The SGI audio driver was written by Stephan Kanthak in 1996 and its author grants to distribute it with the libmikmod package under the same restrictions as the library. If you encounter any problems concerning crackles or short stops while playing, feel free to experiment with the values of the fragsize and bufsize options of the driver. The default values are 20000 for fragsize and 40000 for bufsize. Increasing bufsize might result in nonstop sound on slow machines, but increases latency of interactive applications. The value of fragsize should be set to about half of bufsize in most cases and needs to be increased only if you own a very slow SGI. Common problems - libmikmod does not compile on my SGI? First check out whether you have the SGI audio library (libaudio) or not. If the audio library is missing you should upgrade to IRIX 5.3 or newer and you will obtain the media development package automatically with it. If you have the audio library installed, check out if it is in the linker path. Also, the audio API has been extended in recent IRIX releases (6.4 and later). The older API used by libmikmod is supposed to be still supported, please drop me a note if it is not on your IRIX release. - Sound is _very_ noisy? Change sample size to 16 bits. - Sound crackles or stops temporarily? Try to increase the value of the fragsize driver option (default value is 20000). Switch to mono mode if necessary. - libmikmod applications only react very slowly? This is a typical effect on SGI machines because the audio library sets up an internal buffer that seems to be quite large on many installations. Try to decrease the bufsize driver option (default value is 40000). How to contact the driver author: Stephan Kanthak Please cc: me (miod), just in case. >> SUNOS, SOLARIS, NETBSD AND OPENBSD DRIVER SPECIFIC INFORMATION ----------------------------------------------------------------- The above mentioned systems use the same interface to the audio device. The libmikmod driver for this interface is the Sun driver. It was coded by Valtteri Vuorikoski and updated to libmikmod 3 by Tor Norbye , and has been modified to work under NetBSD and OpenBSD by the current maintainer. This driver works with old sound hardware using 8 KHz mono ulaw, and with modern hardware using pcm mono or stereo at any frequency. If your settings aren't supported by the audio device, sound initialization will fail. Refer to the audio(7) man page under SunOS/Solaris and the audio(4) man page under NetBSD/OpenBSD for more details on your audio hardware and its capabilities. On Sun workstations, you might be interested in passing the "headphone" option to the driver to force output on the headphones, since plugging the headphones is not enough. If you run NetBSD or OpenBSD, the driver does not support the headphone and speaker parameters, but you can achieve the same effect with audioctl(1), for example: audioctl -w play.port=1 will select the speaker, while a value of 2 would have selected the headphone. If sound is jerky, you can pass the "buffer=xx" option to the driver to increase its internal buffer size. The default value (when this option is not used) is 12; the slower your machine, the greater this value has to be, in the range 7-17. If you can't get libmikmod to work with your hardware, you can use its raw disk writer driver, in 8 bit mono 8 kHz, and send the music.raw file to /dev/audio with sox, using the following command line: sox -t raw -c 1 -r 8000 -u -b music.raw -t raw -U -r 8000 \ -c 1 -b /dev/audio (or use the piped output driver with this command line) Or if you played in 16 bit stereo, you can convert the file to a .au file: audioconvert -o music.au -f sun \ -i rate=44.1k,channels=stereo,encoding=linear16 music.raw and play the file: audioplay -p headphone -v 10 music.au >> SAM9407 DRIVER SPECIFIC INFORMATION (Linux specific) -------------------------------------- The SAM9407 driver provides an OSS-compatible driver for the soundcards based on the sam9407 audio chip (MaxiSound 64 and Terratec EWS, among others), and provides advanced features such as hardware module playback. You can find more information on this driver on the web: http://www.anime.net/~sam9407 The version of the libmikmod sam9407 driver coincides with the latest sam9407 driver release available when this version of libmikmod was released; for the 3.1.10 release, this is sam9407 driver v1.0.0. >> THANKS --------- I would like to thank everyone who contributed to libmikmod. Their names are in the AUTHORS file for the significative contributions, but some other names can be found in the NEWS file. Thanks a lot! Keeping libmikmod alive wouldn't be much fun without you. >> LICENSE ---------- The libmikmod sound library is covered by the GNU Library General Public License as published by the Free Software Fundation (you'll find it in the file COPYING.LIB); either version 2 of the licence, or (at your option) any later version. The GNU Lesser General Public License, version 2.1, in file COPYING.LESSER, can be considered as a later version of the LGPL, and is strongly recommended for people who will embed libmikmod in their application as a shared library. Parts of the library (in playercode/mdulaw.c) are derived from the files libst.h and raw.c from an old version of the sox (SOund eXchange) package written by Lance Norskog and Jef Poskanzer. The following copyright notice applies to these parts: Copyright (C) 1989 by Jef Poskanzer. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. >> CONTACT AND DOWNLOAD INFO ---------------------------- libmikmod home page is located at SourceForge: http://mikmod.sourceforge.net/ http://sourceforge.net/projects/mikmod/ There's a mailing list (mikmod-public) for discussing the development of MikMod (new features, bugs, ideas...) Look for more information on the web site. libmikmod-3.1.16/loaders/0000755000000000000000000000000012262343244013702 5ustar rootrootlibmikmod-3.1.16/loaders/Makefile.in0000644000000000000000000002612512260336527015761 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = loaders DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = load_669.c \ load_amf.c \ load_dsm.c \ load_far.c \ load_gdm.c \ load_imf.c \ load_it.c \ load_m15.c \ load_med.c \ load_mod.c \ load_mtm.c \ load_okt.c \ load_s3m.c \ load_stm.c \ load_stx.c \ load_ult.c \ load_uni.c \ load_xm.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign loaders/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign loaders/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/loaders/load_med.c0000644000000000000000000004264412260336146015625 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_med.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Amiga MED module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module information */ typedef struct MEDHEADER { ULONG id; ULONG modlen; ULONG MEDSONGP; /* struct MEDSONG *song; */ UWORD psecnum; /* for the player routine, MMD2 only */ UWORD pseq; /* " " " " */ ULONG MEDBlockPP; /* struct MEDBlock **blockarr; */ ULONG reserved1; ULONG MEDINSTHEADERPP; /* struct MEDINSTHEADER **smplarr; */ ULONG reserved2; ULONG MEDEXPP; /* struct MEDEXP *expdata; */ ULONG reserved3; UWORD pstate; /* some data for the player routine */ UWORD pblock; UWORD pline; UWORD pseqnum; SWORD actplayline; UBYTE counter; UBYTE extra_songs; /* number of songs - 1 */ } MEDHEADER; typedef struct MEDSAMPLE { UWORD rep, replen; /* offs: 0(s), 2(s) */ UBYTE midich; /* offs: 4(s) */ UBYTE midipreset; /* offs: 5(s) */ UBYTE svol; /* offs: 6(s) */ SBYTE strans; /* offs: 7(s) */ } MEDSAMPLE; typedef struct MEDSONG { MEDSAMPLE sample[63]; /* 63 * 8 bytes = 504 bytes */ UWORD numblocks; /* offs: 504 */ UWORD songlen; /* offs: 506 */ UBYTE playseq[256]; /* offs: 508 */ UWORD deftempo; /* offs: 764 */ SBYTE playtransp; /* offs: 766 */ UBYTE flags; /* offs: 767 */ UBYTE flags2; /* offs: 768 */ UBYTE tempo2; /* offs: 769 */ UBYTE trkvol[16]; /* offs: 770 */ UBYTE mastervol; /* offs: 786 */ UBYTE numsamples; /* offs: 787 */ } MEDSONG; typedef struct MEDEXP { ULONG nextmod; /* pointer to next module */ ULONG exp_smp; /* pointer to MEDINSTEXT array */ UWORD s_ext_entries; UWORD s_ext_entrsz; ULONG annotxt; /* pointer to annotation text */ ULONG annolen; ULONG iinfo; /* pointer to MEDINSTINFO array */ UWORD i_ext_entries; UWORD i_ext_entrsz; ULONG jumpmask; ULONG rgbtable; ULONG channelsplit; ULONG n_info; ULONG songname; /* pointer to songname */ ULONG songnamelen; ULONG dumps; ULONG reserved2[7]; } MEDEXP; typedef struct MMD0NOTE { UBYTE a, b, c; } MMD0NOTE; typedef struct MMD1NOTE { UBYTE a, b, c, d; } MMD1NOTE; typedef struct MEDINSTHEADER { ULONG length; SWORD type; /* Followed by actual data */ } MEDINSTHEADER; typedef struct MEDINSTEXT { UBYTE hold; UBYTE decay; UBYTE suppress_midi_off; SBYTE finetune; } MEDINSTEXT; typedef struct MEDINSTINFO { UBYTE name[40]; } MEDINSTINFO; /*========== Loader variables */ #define MMD0_string 0x4D4D4430 #define MMD1_string 0x4D4D4431 static MEDHEADER *mh = NULL; static MEDSONG *ms = NULL; static MEDEXP *me = NULL; static ULONG *ba = NULL; static MMD0NOTE *mmd0pat = NULL; static MMD1NOTE *mmd1pat = NULL; static BOOL decimalvolumes; static BOOL bpmtempos; #define d0note(row,col) mmd0pat[((row)*(UWORD)of.numchn)+(col)] #define d1note(row,col) mmd1pat[((row)*(UWORD)of.numchn)+(col)] static CHAR MED_Version[] = "OctaMED (MMDx)"; /*========== Loader code */ static BOOL MED_Test(void) { UBYTE id[4]; if (!_mm_read_UBYTES(id, 4, modreader)) return 0; if ((!memcmp(id, "MMD0", 4)) || (!memcmp(id, "MMD1", 4))) return 1; return 0; } static BOOL MED_Init(void) { if (!(me = (MEDEXP *)_mm_malloc(sizeof(MEDEXP)))) return 0; if (!(mh = (MEDHEADER *)_mm_malloc(sizeof(MEDHEADER)))) return 0; if (!(ms = (MEDSONG *)_mm_malloc(sizeof(MEDSONG)))) return 0; return 1; } static void MED_Cleanup(void) { _mm_free(me); _mm_free(mh); _mm_free(ms); _mm_free(ba); _mm_free(mmd0pat); _mm_free(mmd1pat); } static void EffectCvt(UBYTE eff, UBYTE dat) { switch (eff) { /* 0x0 0x1 0x2 0x3 0x4 PT effects */ case 0x5: /* PT vibrato with speed/depth nibbles swapped */ UniPTEffect(0x4, (dat >> 4) | ((dat & 0xf) << 4)); break; /* 0x6 0x7 not used */ case 0x6: case 0x7: break; case 0x8: /* midi hold/decay */ break; case 0x9: if (bpmtempos) { if (!dat) dat = of.initspeed; UniEffect(UNI_S3MEFFECTA, dat); } else { if (dat <= 0x20) { if (!dat) dat = of.initspeed; else dat /= 4; UniPTEffect(0xf, dat); } else UniEffect(UNI_MEDSPEED, ((UWORD)dat * 125) / (33 * 4)); } break; /* 0xa 0xb PT effects */ case 0xc: if (decimalvolumes) dat = (dat >> 4) * 10 + (dat & 0xf); UniPTEffect(0xc, dat); break; case 0xd: /* same as PT volslide */ UniPTEffect(0xa, dat); break; case 0xe: /* synth jmp - midi */ break; case 0xf: switch (dat) { case 0: /* patternbreak */ UniPTEffect(0xd, 0); break; case 0xf1: /* play note twice */ UniWriteByte(UNI_MEDEFFECTF1); break; case 0xf2: /* delay note */ UniWriteByte(UNI_MEDEFFECTF2); break; case 0xf3: /* play note three times */ UniWriteByte(UNI_MEDEFFECTF3); break; case 0xfe: /* stop playing */ UniPTEffect(0xb, of.numpat); break; case 0xff: /* note cut */ UniPTEffect(0xc, 0); break; default: if (dat <= 10) UniPTEffect(0xf, dat); else if (dat <= 240) { if (bpmtempos) UniPTEffect(0xf, (dat < 32) ? 32 : dat); else UniEffect(UNI_MEDSPEED, ((UWORD)dat * 125) / 33); } } break; default: /* all normal PT effects are handled here */ UniPTEffect(eff, dat); break; } } static UBYTE *MED_Convert1(int count, int col) { int t; UBYTE inst, note, eff, dat; MMD1NOTE *n; UniReset(); for (t = 0; t < count; t++) { n = &d1note(t, col); note = n->a & 0x7f; inst = n->b & 0x3f; eff = n->c & 0xf; dat = n->d; if (inst) UniInstrument(inst - 1); if (note) UniNote(note + 3 * OCTAVE - 1); EffectCvt(eff, dat); UniNewline(); } return UniDup(); } static UBYTE *MED_Convert0(int count, int col) { int t; UBYTE a, b, inst, note, eff, dat; MMD0NOTE *n; UniReset(); for (t = 0; t < count; t++) { n = &d0note(t, col); a = n->a; b = n->b; note = a & 0x3f; a >>= 6; a = ((a & 1) << 1) | (a >> 1); inst = (b >> 4) | (a << 4); eff = b & 0xf; dat = n->c; if (inst) UniInstrument(inst - 1); if (note) UniNote(note + 3 * OCTAVE - 1); EffectCvt(eff, dat); UniNewline(); } return UniDup(); } static BOOL LoadMEDPatterns(void) { int t, row, col; UWORD numtracks, numlines, maxlines = 0, track = 0; MMD0NOTE *mmdp; /* first, scan patterns to see how many channels are used */ for (t = 0; t < of.numpat; t++) { _mm_fseek(modreader, ba[t], SEEK_SET); numtracks = _mm_read_UBYTE(modreader); numlines = _mm_read_UBYTE(modreader); if (numtracks > of.numchn) of.numchn = numtracks; if (numlines > maxlines) maxlines = numlines; } of.numtrk = of.numpat * of.numchn; if (!AllocTracks()) return 0; if (!AllocPatterns()) return 0; if (!(mmd0pat = (MMD0NOTE *)_mm_calloc(of.numchn * (maxlines + 1), sizeof(MMD0NOTE)))) return 0; /* second read: read and convert patterns */ for (t = 0; t < of.numpat; t++) { _mm_fseek(modreader, ba[t], SEEK_SET); numtracks = _mm_read_UBYTE(modreader); numlines = _mm_read_UBYTE(modreader); of.pattrows[t] = ++numlines; memset(mmdp = mmd0pat, 0, of.numchn * maxlines * sizeof(MMD0NOTE)); for (row = numlines; row; row--) { for (col = numtracks; col; col--, mmdp++) { mmdp->a = _mm_read_UBYTE(modreader); mmdp->b = _mm_read_UBYTE(modreader); mmdp->c = _mm_read_UBYTE(modreader); } } for (col = 0; col < of.numchn; col++) of.tracks[track++] = MED_Convert0(numlines, col); } return 1; } static BOOL LoadMMD1Patterns(void) { int t, row, col; UWORD numtracks, numlines, maxlines = 0, track = 0; MMD1NOTE *mmdp; /* first, scan patterns to see how many channels are used */ for (t = 0; t < of.numpat; t++) { _mm_fseek(modreader, ba[t], SEEK_SET); numtracks = _mm_read_M_UWORD(modreader); numlines = _mm_read_M_UWORD(modreader); if (numtracks > of.numchn) of.numchn = numtracks; if (numlines > maxlines) maxlines = numlines; } of.numtrk = of.numpat * of.numchn; if (!AllocTracks()) return 0; if (!AllocPatterns()) return 0; if (!(mmd1pat = (MMD1NOTE *)_mm_calloc(of.numchn * (maxlines + 1), sizeof(MMD1NOTE)))) return 0; /* second read: really read and convert patterns */ for (t = 0; t < of.numpat; t++) { _mm_fseek(modreader, ba[t], SEEK_SET); numtracks = _mm_read_M_UWORD(modreader); numlines = _mm_read_M_UWORD(modreader); _mm_fseek(modreader, sizeof(ULONG), SEEK_CUR); of.pattrows[t] = ++numlines; memset(mmdp = mmd1pat, 0, of.numchn * maxlines * sizeof(MMD1NOTE)); for (row = numlines; row; row--) { for (col = numtracks; col; col--, mmdp++) { mmdp->a = _mm_read_UBYTE(modreader); mmdp->b = _mm_read_UBYTE(modreader); mmdp->c = _mm_read_UBYTE(modreader); mmdp->d = _mm_read_UBYTE(modreader); } } for (col = 0; col < of.numchn; col++) of.tracks[track++] = MED_Convert1(numlines, col); } return 1; } static BOOL MED_Load(BOOL curious) { int t; ULONG sa[64]; MEDINSTHEADER s; SAMPLE *q; MEDSAMPLE *mss; /* try to read module header */ mh->id = _mm_read_M_ULONG(modreader); mh->modlen = _mm_read_M_ULONG(modreader); mh->MEDSONGP = _mm_read_M_ULONG(modreader); mh->psecnum = _mm_read_M_UWORD(modreader); mh->pseq = _mm_read_M_UWORD(modreader); mh->MEDBlockPP = _mm_read_M_ULONG(modreader); mh->reserved1 = _mm_read_M_ULONG(modreader); mh->MEDINSTHEADERPP = _mm_read_M_ULONG(modreader); mh->reserved2 = _mm_read_M_ULONG(modreader); mh->MEDEXPP = _mm_read_M_ULONG(modreader); mh->reserved3 = _mm_read_M_ULONG(modreader); mh->pstate = _mm_read_M_UWORD(modreader); mh->pblock = _mm_read_M_UWORD(modreader); mh->pline = _mm_read_M_UWORD(modreader); mh->pseqnum = _mm_read_M_UWORD(modreader); mh->actplayline = _mm_read_M_SWORD(modreader); mh->counter = _mm_read_UBYTE(modreader); mh->extra_songs = _mm_read_UBYTE(modreader); /* Seek to MEDSONG struct */ _mm_fseek(modreader, mh->MEDSONGP, SEEK_SET); /* Load the MED Song Header */ mss = ms->sample; /* load the sample data first */ for (t = 63; t; t--, mss++) { mss->rep = _mm_read_M_UWORD(modreader); mss->replen = _mm_read_M_UWORD(modreader); mss->midich = _mm_read_UBYTE(modreader); mss->midipreset = _mm_read_UBYTE(modreader); mss->svol = _mm_read_UBYTE(modreader); mss->strans = _mm_read_SBYTE(modreader); } ms->numblocks = _mm_read_M_UWORD(modreader); ms->songlen = _mm_read_M_UWORD(modreader); _mm_read_UBYTES(ms->playseq, 256, modreader); ms->deftempo = _mm_read_M_UWORD(modreader); ms->playtransp = _mm_read_SBYTE(modreader); ms->flags = _mm_read_UBYTE(modreader); ms->flags2 = _mm_read_UBYTE(modreader); ms->tempo2 = _mm_read_UBYTE(modreader); _mm_read_UBYTES(ms->trkvol, 16, modreader); ms->mastervol = _mm_read_UBYTE(modreader); ms->numsamples = _mm_read_UBYTE(modreader); /* check for a bad header */ if (_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* load extension structure */ if (mh->MEDEXPP) { _mm_fseek(modreader, mh->MEDEXPP, SEEK_SET); me->nextmod = _mm_read_M_ULONG(modreader); me->exp_smp = _mm_read_M_ULONG(modreader); me->s_ext_entries = _mm_read_M_UWORD(modreader); me->s_ext_entrsz = _mm_read_M_UWORD(modreader); me->annotxt = _mm_read_M_ULONG(modreader); me->annolen = _mm_read_M_ULONG(modreader); me->iinfo = _mm_read_M_ULONG(modreader); me->i_ext_entries = _mm_read_M_UWORD(modreader); me->i_ext_entrsz = _mm_read_M_UWORD(modreader); me->jumpmask = _mm_read_M_ULONG(modreader); me->rgbtable = _mm_read_M_ULONG(modreader); me->channelsplit = _mm_read_M_ULONG(modreader); me->n_info = _mm_read_M_ULONG(modreader); me->songname = _mm_read_M_ULONG(modreader); me->songnamelen = _mm_read_M_ULONG(modreader); me->dumps = _mm_read_M_ULONG(modreader); } /* seek to and read the samplepointer array */ _mm_fseek(modreader, mh->MEDINSTHEADERPP, SEEK_SET); if (!_mm_read_M_ULONGS(sa, ms->numsamples, modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* alloc and read the blockpointer array */ if (!(ba = (ULONG *)_mm_calloc(ms->numblocks, sizeof(ULONG)))) return 0; _mm_fseek(modreader, mh->MEDBlockPP, SEEK_SET); if (!_mm_read_M_ULONGS(ba, ms->numblocks, modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* copy song positions */ if (!AllocPositions(ms->songlen)) return 0; for (t = 0; t < ms->songlen; t++) of.positions[t] = ms->playseq[t]; decimalvolumes = (ms->flags & 0x10) ? 0 : 1; bpmtempos = (ms->flags2 & 0x20) ? 1 : 0; if (bpmtempos) { int bpmlen = (ms->flags2 & 0x1f) + 1; of.initspeed = ms->tempo2; of.inittempo = ms->deftempo * bpmlen / 4; if (bpmlen != 4) { /* Let's do some math : compute GCD of BPM beat length and speed */ int a, b; a = bpmlen; b = ms->tempo2; if (a > b) { t = b; b = a; a = t; } while ((a != b) && (a)) { t = a; a = b - a; b = t; if (a > b) { t = b; b = a; a = t; } } of.initspeed /= b; of.inittempo = ms->deftempo * bpmlen / (4 * b); } } else { of.initspeed = ms->tempo2; of.inittempo = ms->deftempo ? ((UWORD)ms->deftempo * 125) / 33 : 128; if ((ms->deftempo <= 10) && (ms->deftempo)) of.inittempo = (of.inittempo * 33) / 6; of.flags |= UF_HIGHBPM; } MED_Version[12] = mh->id; of.modtype = strdup(MED_Version); of.numchn = 0; /* will be counted later */ of.numpat = ms->numblocks; of.numpos = ms->songlen; of.numins = ms->numsamples; of.numsmp = of.numins; of.reppos = 0; if ((mh->MEDEXPP) && (me->songname) && (me->songnamelen)) { char *name; _mm_fseek(modreader, me->songname, SEEK_SET); name = _mm_malloc(me->songnamelen); _mm_read_UBYTES(name, me->songnamelen, modreader); of.songname = DupStr(name, me->songnamelen, 1); free(name); } else of.songname = DupStr(NULL, 0, 0); if ((mh->MEDEXPP) && (me->annotxt) && (me->annolen)) { _mm_fseek(modreader, me->annotxt, SEEK_SET); ReadComment(me->annolen); } if (!AllocSamples()) return 0; q = of.samples; for (t = 0; t < of.numins; t++) { q->flags = SF_SIGNED; q->volume = 64; if (sa[t]) { _mm_fseek(modreader, sa[t], SEEK_SET); s.length = _mm_read_M_ULONG(modreader); s.type = _mm_read_M_SWORD(modreader); if (s.type) { #ifdef MIKMOD_DEBUG fprintf(stderr, "\rNon-sample instruments not supported in MED loader yet\n"); #endif if (!curious) { _mm_errno = MMERR_MED_SYNTHSAMPLES; return 0; } s.length = 0; } if (_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } q->length = s.length; q->seekpos = _mm_ftell(modreader); q->loopstart = ms->sample[t].rep << 1; q->loopend = q->loopstart + (ms->sample[t].replen << 1); if (ms->sample[t].replen > 1) q->flags |= SF_LOOP; /* don't load sample if length>='MMD0'... such kluges make libmikmod's code unique !!! */ if (q->length >= MMD0_string) q->length = 0; } else q->length = 0; if ((mh->MEDEXPP) && (me->exp_smp) && (t < me->s_ext_entries) && (me->s_ext_entrsz >= 4)) { MEDINSTEXT ie; _mm_fseek(modreader, me->exp_smp + t * me->s_ext_entrsz, SEEK_SET); ie.hold = _mm_read_UBYTE(modreader); ie.decay = _mm_read_UBYTE(modreader); ie.suppress_midi_off = _mm_read_UBYTE(modreader); ie.finetune = _mm_read_SBYTE(modreader); q->speed = finetune[ie.finetune & 0xf]; } else q->speed = 8363; if ((mh->MEDEXPP) && (me->iinfo) && (t < me->i_ext_entries) && (me->i_ext_entrsz >= 40)) { MEDINSTINFO ii; _mm_fseek(modreader, me->iinfo + t * me->i_ext_entrsz, SEEK_SET); _mm_read_UBYTES(ii.name, 40, modreader); q->samplename = DupStr((char*)ii.name, 40, 1); } else q->samplename = NULL; q++; } if (mh->id == MMD0_string) { if (!LoadMEDPatterns()) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } } else if (mh->id == MMD1_string) { if (!LoadMMD1Patterns()) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } } else { _mm_errno = MMERR_NOT_A_MODULE; return 0; } return 1; } static CHAR *MED_LoadTitle(void) { ULONG posit, namelen; CHAR *name, *retvalue = NULL; _mm_fseek(modreader, 0x20, SEEK_SET); posit = _mm_read_M_ULONG(modreader); if (posit) { _mm_fseek(modreader, posit + 0x2C, SEEK_SET); posit = _mm_read_M_ULONG(modreader); namelen = _mm_read_M_ULONG(modreader); _mm_fseek(modreader, posit, SEEK_SET); name = _mm_malloc(namelen); _mm_read_UBYTES(name, namelen, modreader); retvalue = DupStr(name, namelen, 1); free(name); } return retvalue; } /*========== Loader information */ MIKMODAPI MLOADER load_med = { NULL, "MED", "MED (OctaMED)", MED_Init, MED_Test, MED_Load, MED_Cleanup, MED_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_mtm.c0000644000000000000000000001545512223661210015645 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_mtm.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ MTM module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct MTMHEADER { UBYTE id[3]; /* MTM file marker */ UBYTE version; /* upper major, lower nibble minor version number */ CHAR songname[20]; /* ASCIIZ songname */ UWORD numtracks; /* number of tracks saved */ UBYTE lastpattern; /* last pattern number saved */ UBYTE lastorder; /* last order number to play (songlength-1) */ UWORD commentsize; /* length of comment field */ UBYTE numsamples; /* number of samples saved */ UBYTE attribute; /* attribute byte (unused) */ UBYTE beatspertrack; UBYTE numchannels; /* number of channels used */ UBYTE panpos[32]; /* voice pan positions */ } MTMHEADER; typedef struct MTMSAMPLE { CHAR samplename[22]; ULONG length; ULONG reppos; ULONG repend; UBYTE finetune; UBYTE volume; UBYTE attribute; } MTMSAMPLE; typedef struct MTMNOTE { UBYTE a,b,c; } MTMNOTE; /*========== Loader variables */ static MTMHEADER *mh = NULL; static MTMNOTE *mtmtrk = NULL; static UWORD pat[32]; static CHAR MTM_Version[] = "MTM"; /*========== Loader code */ static BOOL MTM_Test(void) { UBYTE id[3]; if(!_mm_read_UBYTES(id,3,modreader)) return 0; if(!memcmp(id,"MTM",3)) return 1; return 0; } static BOOL MTM_Init(void) { if(!(mtmtrk=(MTMNOTE*)_mm_calloc(64,sizeof(MTMNOTE)))) return 0; if(!(mh=(MTMHEADER*)_mm_malloc(sizeof(MTMHEADER)))) return 0; return 1; } static void MTM_Cleanup(void) { _mm_free(mtmtrk); _mm_free(mh); } static UBYTE* MTM_Convert(void) { int t; UBYTE a,b,inst,note,eff,dat; UniReset(); for(t=0;t<64;t++) { a=mtmtrk[t].a; b=mtmtrk[t].b; inst=((a&0x3)<<4)|(b>>4); note=a>>2; eff=b&0xf; dat=mtmtrk[t].c; if(inst) UniInstrument(inst-1); if(note) UniNote(note+2*OCTAVE); /* MTM bug workaround : when the effect is volslide, slide-up *always* overrides slide-down. */ if(eff==0xa && (dat&0xf0)) dat&=0xf0; /* Convert pattern jump from Dec to Hex */ if(eff==0xd) dat=(((dat&0xf0)>>4)*10)+(dat&0xf); UniPTEffect(eff,dat); UniNewline(); } return UniDup(); } static BOOL MTM_Load(BOOL curious) { int t,u; MTMSAMPLE s; SAMPLE *q; /* try to read module header */ _mm_read_UBYTES(mh->id,3,modreader); mh->version =_mm_read_UBYTE(modreader); _mm_read_string(mh->songname,20,modreader); mh->numtracks =_mm_read_I_UWORD(modreader); mh->lastpattern =_mm_read_UBYTE(modreader); mh->lastorder =_mm_read_UBYTE(modreader); mh->commentsize =_mm_read_I_UWORD(modreader); mh->numsamples =_mm_read_UBYTE(modreader); mh->attribute =_mm_read_UBYTE(modreader); mh->beatspertrack=_mm_read_UBYTE(modreader); mh->numchannels =_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->panpos,32,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.initspeed = 6; of.inittempo = 125; of.modtype = strdup(MTM_Version); of.numchn = mh->numchannels; of.numtrk = mh->numtracks+1; /* get number of channels */ of.songname = DupStr(mh->songname,20,1); /* make a cstr of songname */ of.numpos = mh->lastorder+1; /* copy the songlength */ of.numpat = mh->lastpattern+1; of.reppos = 0; of.flags |= UF_PANNING; for(t=0;t<32;t++) of.panning[t]=mh->panpos[t]<< 4; of.numins=of.numsmp=mh->numsamples; if(!AllocSamples()) return 0; q=of.samples; for(t=0;tsamplename = DupStr(s.samplename,22,1); q->seekpos = 0; q->speed = finetune[s.finetune]; q->length = s.length; q->loopstart = s.reppos; q->loopend = s.repend; q->volume = s.volume; if((s.repend-s.reppos)>2) q->flags |= SF_LOOP; if(s.attribute&1) { /* If the sample is 16-bits, convert the length and replen byte-values into sample-values */ q->flags|=SF_16BITS; q->length>>=1; q->loopstart>>=1; q->loopend>>=1; } q++; } if(!AllocPositions(of.numpos)) return 0; for(t=0;tcommentsize) if(!ReadLinedComment(mh->commentsize, 40)) return 0; return 1; } static CHAR *MTM_LoadTitle(void) { CHAR s[20]; _mm_fseek(modreader,4,SEEK_SET); if(!_mm_read_UBYTES(s,20,modreader)) return NULL; return(DupStr(s,20,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_mtm={ NULL, "MTM", "MTM (MultiTracker Module editor)", MTM_Init, MTM_Test, MTM_Load, MTM_Cleanup, MTM_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_xm.c0000644000000000000000000005723012222472510015473 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_xm.c,v 1.1.1.2 2007/12/15 15:24:17 denis111 Exp $ Fasttracker (XM) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct XMHEADER { CHAR id[17]; /* ID text: 'Extended module: ' */ CHAR songname[21]; /* Module name */ CHAR trackername[20]; /* Tracker name */ UWORD version; /* Version number */ ULONG headersize; /* Header size */ UWORD songlength; /* Song length (in patten order table) */ UWORD restart; /* Restart position */ UWORD numchn; /* Number of channels (2,4,6,8,10,...,32) */ UWORD numpat; /* Number of patterns (max 256) */ UWORD numins; /* Number of instruments (max 128) */ UWORD flags; UWORD tempo; /* Default tempo */ UWORD bpm; /* Default BPM */ UBYTE orders[256]; /* Pattern order table */ } XMHEADER; typedef struct XMINSTHEADER { ULONG size; /* Instrument size */ CHAR name[22]; /* Instrument name */ UBYTE type; /* Instrument type (always 0) */ UWORD numsmp; /* Number of samples in instrument */ ULONG ssize; } XMINSTHEADER; #define XMENVCNT (12*2) #define XMNOTECNT (8*OCTAVE) typedef struct XMPATCHHEADER { UBYTE what[XMNOTECNT]; /* Sample number for all notes */ UWORD volenv[XMENVCNT]; /* Points for volume envelope */ UWORD panenv[XMENVCNT]; /* Points for panning envelope */ UBYTE volpts; /* Number of volume points */ UBYTE panpts; /* Number of panning points */ UBYTE volsus; /* Volume sustain point */ UBYTE volbeg; /* Volume loop start point */ UBYTE volend; /* Volume loop end point */ UBYTE pansus; /* Panning sustain point */ UBYTE panbeg; /* Panning loop start point */ UBYTE panend; /* Panning loop end point */ UBYTE volflg; /* Volume type: bit 0: On; 1: Sustain; 2: Loop */ UBYTE panflg; /* Panning type: bit 0: On; 1: Sustain; 2: Loop */ UBYTE vibflg; /* Vibrato type */ UBYTE vibsweep; /* Vibrato sweep */ UBYTE vibdepth; /* Vibrato depth */ UBYTE vibrate; /* Vibrato rate */ UWORD volfade; /* Volume fadeout */ } XMPATCHHEADER; typedef struct XMWAVHEADER { ULONG length; /* Sample length */ ULONG loopstart; /* Sample loop start */ ULONG looplength; /* Sample loop length */ UBYTE volume; /* Volume */ SBYTE finetune; /* Finetune (signed byte -128..+127) */ UBYTE type; /* Loop type */ UBYTE panning; /* Panning (0-255) */ SBYTE relnote; /* Relative note number (signed byte) */ UBYTE reserved; CHAR samplename[22]; /* Sample name */ UBYTE vibtype; /* Vibrato type */ UBYTE vibsweep; /* Vibrato sweep */ UBYTE vibdepth; /* Vibrato depth */ UBYTE vibrate; /* Vibrato rate */ } XMWAVHEADER; typedef struct XMPATHEADER { ULONG size; /* Pattern header length */ UBYTE packing; /* Packing type (always 0) */ UWORD numrows; /* Number of rows in pattern (1..256) */ SWORD packsize; /* Packed patterndata size */ } XMPATHEADER; typedef struct XMNOTE { UBYTE note,ins,vol,eff,dat; } XMNOTE; /*========== Loader variables */ static XMNOTE *xmpat=NULL; static XMHEADER *mh=NULL; /* increment unit for sample array reallocation */ #define XM_SMPINCR 64 static ULONG *nextwav=NULL; static XMWAVHEADER *wh=NULL,*s=NULL; /*========== Loader code */ static BOOL XM_Test(void) { UBYTE id[38]; if(!_mm_read_UBYTES(id,38,modreader)) return 0; if(memcmp(id,"Extended Module: ",17)) return 0; if(id[37]==0x1a) return 1; return 0; } static BOOL XM_Init(void) { if(!(mh=(XMHEADER *)_mm_malloc(sizeof(XMHEADER)))) return 0; return 1; } static void XM_Cleanup(void) { _mm_free(mh); } static int XM_ReadNote(XMNOTE* n) { UBYTE cmp,result=1; memset(n,0,sizeof(XMNOTE)); cmp=_mm_read_UBYTE(modreader); if(cmp&0x80) { if(cmp&1) { result++;n->note = _mm_read_UBYTE(modreader); } if(cmp&2) { result++;n->ins = _mm_read_UBYTE(modreader); } if(cmp&4) { result++;n->vol = _mm_read_UBYTE(modreader); } if(cmp&8) { result++;n->eff = _mm_read_UBYTE(modreader); } if(cmp&16) { result++;n->dat = _mm_read_UBYTE(modreader); } } else { n->note = cmp; n->ins = _mm_read_UBYTE(modreader); n->vol = _mm_read_UBYTE(modreader); n->eff = _mm_read_UBYTE(modreader); n->dat = _mm_read_UBYTE(modreader); result += 4; } return result; } static UBYTE* XM_Convert(XMNOTE* xmtrack,UWORD rows) { int t; UBYTE note,ins,vol,eff,dat; UniReset(); for(t=0;tnote; ins = xmtrack->ins; vol = xmtrack->vol; eff = xmtrack->eff; dat = xmtrack->dat; if(note) { if(note>XMNOTECNT) UniEffect(UNI_KEYFADE,0); else UniNote(note-1); } if(ins) UniInstrument(ins-1); switch(vol>>4) { case 0x6: /* volslide down */ if(vol&0xf) UniEffect(UNI_XMEFFECTA,vol&0xf); break; case 0x7: /* volslide up */ if(vol&0xf) UniEffect(UNI_XMEFFECTA,vol<<4); break; /* volume-row fine volume slide is compatible with protracker EBx and EAx effects i.e. a zero nibble means DO NOT SLIDE, as opposed to 'take the last sliding value'. */ case 0x8: /* finevol down */ UniPTEffect(0xe,0xb0|(vol&0xf)); break; case 0x9: /* finevol up */ UniPTEffect(0xe,0xa0|(vol&0xf)); break; case 0xa: /* set vibrato speed */ UniEffect(UNI_XMEFFECT4,vol<<4); break; case 0xb: /* vibrato */ UniEffect(UNI_XMEFFECT4,vol&0xf); break; case 0xc: /* set panning */ UniPTEffect(0x8,vol<<4); break; case 0xd: /* panning slide left (only slide when data not zero) */ if(vol&0xf) UniEffect(UNI_XMEFFECTP,vol&0xf); break; case 0xe: /* panning slide right (only slide when data not zero) */ if(vol&0xf) UniEffect(UNI_XMEFFECTP,vol<<4); break; case 0xf: /* tone porta */ UniPTEffect(0x3,vol<<4); break; default: if((vol>=0x10)&&(vol<=0x50)) UniPTEffect(0xc,vol-0x10); } switch(eff) { case 0x4: UniEffect(UNI_XMEFFECT4,dat); break; case 0x6: UniEffect(UNI_XMEFFECT6,dat); break; case 0xa: UniEffect(UNI_XMEFFECTA,dat); break; case 0xe: /* Extended effects */ switch(dat>>4) { case 0x1: /* XM fine porta up */ UniEffect(UNI_XMEFFECTE1,dat&0xf); break; case 0x2: /* XM fine porta down */ UniEffect(UNI_XMEFFECTE2,dat&0xf); break; case 0xa: /* XM fine volume up */ UniEffect(UNI_XMEFFECTEA,dat&0xf); break; case 0xb: /* XM fine volume down */ UniEffect(UNI_XMEFFECTEB,dat&0xf); break; default: UniPTEffect(eff,dat); } break; case 'G'-55: /* G - set global volume */ UniEffect(UNI_XMEFFECTG,dat>64?128:dat<<1); break; case 'H'-55: /* H - global volume slide */ UniEffect(UNI_XMEFFECTH,dat); break; case 'K'-55: /* K - keyOff and KeyFade */ UniEffect(UNI_KEYFADE,dat); break; case 'L'-55: /* L - set envelope position */ UniEffect(UNI_XMEFFECTL,dat); break; case 'P'-55: /* P - panning slide */ UniEffect(UNI_XMEFFECTP,dat); break; case 'R'-55: /* R - multi retrig note */ UniEffect(UNI_S3MEFFECTQ,dat); break; case 'T'-55: /* T - Tremor */ UniEffect(UNI_S3MEFFECTI,dat); break; case 'X'-55: switch(dat>>4) { case 1: /* X1 - Extra Fine Porta up */ UniEffect(UNI_XMEFFECTX1,dat&0xf); break; case 2: /* X2 - Extra Fine Porta down */ UniEffect(UNI_XMEFFECTX2,dat&0xf); break; } break; default: if(eff<=0xf) { /* the pattern jump destination is written in decimal, but it seems some poor tracker software writes them in hexadecimal... (sigh) */ if (eff==0xd) /* don't change anything if we're sure it's in hexa */ if ((((dat&0xf0)>>4)<=9)&&((dat&0xf)<=9)) /* otherwise, convert from dec to hex */ dat=(((dat&0xf0)>>4)*10)+(dat&0xf); UniPTEffect(eff,dat); } break; } UniNewline(); xmtrack++; } return UniDup(); } static BOOL LoadPatterns(BOOL dummypat) { int t,u,v,numtrk; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; numtrk=0; for(t=0;tnumpat;t++) { XMPATHEADER ph; ph.size =_mm_read_I_ULONG(modreader); if (ph.size<(mh->version==0x0102?8:9)) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } ph.packing =_mm_read_UBYTE(modreader); if(ph.packing) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } if(mh->version==0x0102) ph.numrows =_mm_read_UBYTE(modreader)+1; else ph.numrows =_mm_read_I_UWORD(modreader); ph.packsize =_mm_read_I_UWORD(modreader); ph.size-=(mh->version==0x0102?8:9); if(ph.size) _mm_fseek(modreader,ph.size,SEEK_CUR); of.pattrows[t]=ph.numrows; if(ph.numrows) { if(!(xmpat=(XMNOTE*)_mm_calloc(ph.numrows*of.numchn,sizeof(XMNOTE)))) return 0; /* when packsize is 0, don't try to load a pattern.. it's empty. */ if(ph.packsize) for(u=0;upos; for (u = 1; u < pts; u++, prev++, cur++) { if (cur->pos < prev->pos) { if (cur->pos < 0x100) { if (cur->pos > old) /* same hex century */ tmp = cur->pos + (prev->pos - old); else tmp = cur->pos | ((prev->pos + 0x100) & 0xff00); old = cur->pos; cur->pos = tmp; #ifdef MIKMOD_DEBUG fprintf(stderr, "\rbroken envelope position(%d/%d), %d %d -> %d\n", u, pts, prev->pos, old, cur->pos); #endif } else { #ifdef MIKMOD_DEBUG /* different brokenness style... fix unknown */ fprintf(stderr, "\rbroken envelope position(%d/%d), %d %d\n", u, pts, old, cur->pos); #endif old = cur->pos; } } else old = cur->pos; } } static BOOL LoadInstruments(void) { int t,u, ck; INSTRUMENT *d; ULONG next=0; UWORD wavcnt=0; if(!AllocInstruments()) return 0; d=of.instruments; for(t=0;tsamplenumber,0xff,INSTNOTES*sizeof(UWORD)); /* read instrument header */ headend = _mm_ftell(modreader); ih.size = _mm_read_I_ULONG(modreader); headend += ih.size; ck = _mm_ftell(modreader); _mm_fseek(modreader,0,SEEK_END); if ((headend<0) || (_mm_ftell(modreader)insname = DupStr(ih.name,22,1); if((SWORD)ih.size>29) { ih.ssize = _mm_read_I_ULONG(modreader); if(((SWORD)ih.numsmp>0)&&(ih.numsmp<=XMNOTECNT)) { XMPATCHHEADER pth; int p; _mm_read_UBYTES (pth.what,XMNOTECNT,modreader); _mm_read_I_UWORDS (pth.volenv, XMENVCNT, modreader); _mm_read_I_UWORDS (pth.panenv, XMENVCNT, modreader); pth.volpts = _mm_read_UBYTE(modreader); pth.panpts = _mm_read_UBYTE(modreader); pth.volsus = _mm_read_UBYTE(modreader); pth.volbeg = _mm_read_UBYTE(modreader); pth.volend = _mm_read_UBYTE(modreader); pth.pansus = _mm_read_UBYTE(modreader); pth.panbeg = _mm_read_UBYTE(modreader); pth.panend = _mm_read_UBYTE(modreader); pth.volflg = _mm_read_UBYTE(modreader); pth.panflg = _mm_read_UBYTE(modreader); pth.vibflg = _mm_read_UBYTE(modreader); pth.vibsweep = _mm_read_UBYTE(modreader); pth.vibdepth = _mm_read_UBYTE(modreader); pth.vibrate = _mm_read_UBYTE(modreader); pth.volfade = _mm_read_I_UWORD(modreader); /* read the remainder of the header (2 bytes for 1.03, 22 for 1.04) */ if (headend>=_mm_ftell(modreader)) { for(u=headend-_mm_ftell(modreader);u;u--) { _mm_skip_BYTE(modreader); } } /* we can't trust the envelope point count here, as some modules have incorrect values (K_OSPACE.XM reports 32 volume points, for example). */ if(pth.volpts>XMENVCNT/2) pth.volpts=XMENVCNT/2; if(pth.panpts>XMENVCNT/2) pth.panpts=XMENVCNT/2; if((_mm_eof(modreader))||(pth.volpts>XMENVCNT/2)||(pth.panpts>XMENVCNT/2)) { if(nextwav) { free(nextwav);nextwav=NULL; } if(wh) { free(wh);wh=NULL; } _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } for(u=0;usamplenumber[u]=pth.what[u]+of.numsmp; d->volfade = pth.volfade; #if defined __STDC__ || defined _MSC_VER #define XM_ProcessEnvelope(name) \ for (u = 0; u < (XMENVCNT >> 1); u++) { \ d-> name##env[u].pos = pth. name##env[u << 1]; \ d-> name##env[u].val = pth. name##env[(u << 1)+ 1]; \ } \ if (pth. name##flg&1) d-> name##flg|=EF_ON; \ if (pth. name##flg&2) d-> name##flg|=EF_SUSTAIN; \ if (pth. name##flg&4) d-> name##flg|=EF_LOOP; \ d-> name##susbeg=d-> name##susend=pth. name##sus; \ d-> name##beg=pth. name##beg; \ d-> name##end=pth. name##end; \ d-> name##pts=pth. name##pts; \ \ /* scale envelope */ \ for (p=0;p name##env[p].val<<=2; \ \ if ((d-> name##flg&EF_ON)&&(d-> name##pts<2)) \ d-> name##flg&=~EF_ON #else #define XM_ProcessEnvelope(name) \ for (u = 0; u < (XMENVCNT >> 1); u++) { \ d-> name/**/env[u].pos = pth. name/**/env[u << 1]; \ d-> name/**/env[u].val = pth. name/**/env[(u << 1)+ 1]; \ } \ if (pth. name/**/flg&1) d-> name/**/flg|=EF_ON; \ if (pth. name/**/flg&2) d-> name/**/flg|=EF_SUSTAIN; \ if (pth. name/**/flg&4) d-> name/**/flg|=EF_LOOP; \ d-> name/**/susbeg=d-> name/**/susend= \ pth. name/**/sus; \ d-> name/**/beg=pth. name/**/beg; \ d-> name/**/end=pth. name/**/end; \ d-> name/**/pts=pth. name/**/pts; \ \ /* scale envelope */ \ for (p=0;p name/**/env[p].val<<=2; \ \ if ((d-> name/**/flg&EF_ON)&&(d-> name/**/pts<2)) \ d-> name/**/flg&=~EF_ON #endif XM_ProcessEnvelope(vol); XM_ProcessEnvelope(pan); #undef XM_ProcessEnvelope if (d->volflg & EF_ON) FixEnvelope(d->volenv, d->volpts); if (d->panflg & EF_ON) FixEnvelope(d->panenv, d->panpts); /* Samples are stored outside the instrument struct now, so we have to load them all into a temp area, count the of.numsmp along the way and then do an AllocSamples() and move everything over */ if(mh->version>0x0103) next = 0; for(u=0;ulength =_mm_read_I_ULONG (modreader); s->loopstart =_mm_read_I_ULONG (modreader); s->looplength =_mm_read_I_ULONG (modreader); s->volume =_mm_read_UBYTE (modreader); s->finetune =_mm_read_SBYTE (modreader); s->type =_mm_read_UBYTE (modreader); s->panning =_mm_read_UBYTE (modreader); s->relnote =_mm_read_SBYTE (modreader); s->vibtype = pth.vibflg; s->vibsweep = pth.vibsweep; s->vibdepth = pth.vibdepth*4; s->vibrate = pth.vibrate; s->reserved =_mm_read_UBYTE (modreader); _mm_read_string(s->samplename, 22, modreader); nextwav[of.numsmp+u]=next; next+=s->length; /* last instrument is at the end of file in version 0x0104 */ if(_mm_eof(modreader) && (mh->version<0x0104 || tversion>0x0103) { for(u=0;uversion<0x0104 || tid,17,modreader); _mm_read_string(mh->songname,21,modreader); _mm_read_string(mh->trackername,20,modreader); mh->version =_mm_read_I_UWORD(modreader); if((mh->version<0x102)||(mh->version>0x104)) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } mh->headersize =_mm_read_I_ULONG(modreader); mh->songlength =_mm_read_I_UWORD(modreader); mh->restart =_mm_read_I_UWORD(modreader); mh->numchn =_mm_read_I_UWORD(modreader); mh->numpat =_mm_read_I_UWORD(modreader); mh->numins =_mm_read_I_UWORD(modreader); mh->flags =_mm_read_I_UWORD(modreader); mh->tempo =_mm_read_I_UWORD(modreader); mh->bpm =_mm_read_I_UWORD(modreader); if(!mh->bpm || mh->songlength > 256) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } /* _mm_read_UBYTES(mh->orders,256,modreader);*/ /* _mm_read_UBYTES(mh->orders,mh->headersize-20,modreader);*/ _mm_read_UBYTES(mh->orders,mh->songlength,modreader); if(_mm_fseek(modreader, mh->headersize+60, SEEK_SET) || _mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.initspeed = mh->tempo; of.inittempo = mh->bpm; strncpy(tracker,mh->trackername,20);tracker[20]=0; for(t=20;(tracker[t]<=' ')&&(t>=0);t--) tracker[t]=0; /* some modules have the tracker name empty */ if (!tracker[0]) strcpy(tracker,"Unknown tracker"); #ifdef HAVE_SNPRINTF snprintf(modtype,60,"%s (XM format %d.%02d)", tracker,mh->version>>8,mh->version&0xff); #else sprintf(modtype,"%s (XM format %d.%02d)", tracker,mh->version>>8,mh->version&0xff); #endif of.modtype = strdup(modtype); of.numchn = mh->numchn; of.numpat = mh->numpat; of.numtrk = (UWORD)of.numpat*of.numchn; /* get number of channels */ of.songname = DupStr(mh->songname,20,1); of.numpos = mh->songlength; /* copy the songlength */ of.reppos = mh->restartsonglength?mh->restart:0; of.numins = mh->numins; of.flags |= UF_XMPERIODS | UF_INST | UF_NOWRAP | UF_FT2QUIRKS | UF_PANNING; if(mh->flags&1) of.flags |= UF_LINEAR; of.bpmlimit = 32; memset(of.chanvol,64,of.numchn); /* store channel volumes */ if(!AllocPositions(of.numpos+1)) return 0; for(t=0;torders[t]; /* We have to check for any pattern numbers in the order list greater than the number of patterns total. If one or more is found, we set it equal to the pattern total and make a dummy pattern to workaround the problem */ for(t=0;t=of.numpat) { of.positions[t]=of.numpat; dummypat=1; } } if(dummypat) { of.numpat++;of.numtrk+=of.numchn; } if(mh->version<0x0104) { if(!LoadInstruments()) return 0; if(!LoadPatterns(dummypat)) return 0; for(t=0;tsamplename = DupStr(s->samplename,22,1); q->length = s->length; q->loopstart = s->loopstart; q->loopend = s->loopstart+s->looplength; q->volume = s->volume; q->speed = s->finetune+128; q->panning = s->panning; q->seekpos = nextwav[u]; q->vibtype = s->vibtype; q->vibsweep = s->vibsweep; q->vibdepth = s->vibdepth; q->vibrate = s->vibrate; if(s->type & 0x10) { q->length >>= 1; q->loopstart >>= 1; q->loopend >>= 1; } q->flags|=SF_OWNPAN|SF_DELTA|SF_SIGNED; if(s->type&0x3) q->flags|=SF_LOOP; if(s->type&0x2) q->flags|=SF_BIDI; if(s->type&0x10) q->flags|=SF_16BITS; } d=of.instruments; s=wh; for(u=0;usamplenumber[t]>=of.numsmp) d->samplenote[t]=255; else { int note=t+s[d->samplenumber[t]].relnote; d->samplenote[t]=(note<0)?0:note; } } free(wh);free(nextwav); wh=NULL;nextwav=NULL; return 1; } static CHAR *XM_LoadTitle(void) { CHAR str[21]; _mm_fseek(modreader,17,SEEK_SET); if(!_mm_read_UBYTES(str,21,modreader)) return NULL; return(DupStr(str,21,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_xm={ NULL, "XM", "XM (FastTracker 2)", XM_Init, XM_Test, XM_Load, XM_Cleanup, XM_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_amf.c0000644000000000000000000003355412222472510015615 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_amf.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ DMP Advanced Module Format loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct AMFHEADER { UBYTE id[3]; /* AMF file marker */ UBYTE version; /* upper major, lower nibble minor version number */ CHAR songname[32]; /* ASCIIZ songname */ UBYTE numsamples; /* number of samples saved */ UBYTE numorders; UWORD numtracks; /* number of tracks saved */ UBYTE numchannels; /* number of channels used */ SBYTE panpos[32]; /* voice pan positions */ UBYTE songbpm; UBYTE songspd; } AMFHEADER; typedef struct AMFSAMPLE { UBYTE type; CHAR samplename[32]; CHAR filename[13]; ULONG offset; ULONG length; UWORD c2spd; UBYTE volume; ULONG reppos; ULONG repend; } AMFSAMPLE; typedef struct AMFNOTE { UBYTE note,instr,volume,fxcnt; UBYTE effect[3]; SBYTE parameter[3]; } AMFNOTE; /*========== Loader variables */ static AMFHEADER *mh = NULL; #define AMFTEXTLEN 22 static CHAR AMF_Version[AMFTEXTLEN+1] = "DSMI Module Format 0.0"; static AMFNOTE *track = NULL; /*========== Loader code */ static BOOL AMF_Test(void) { UBYTE id[3],ver; if(!_mm_read_UBYTES(id,3,modreader)) return 0; if(memcmp(id,"AMF",3)) return 0; ver=_mm_read_UBYTE(modreader); if((ver>=10)&&(ver<=14)) return 1; return 0; } static BOOL AMF_Init(void) { if(!(mh=(AMFHEADER*)_mm_malloc(sizeof(AMFHEADER)))) return 0; if(!(track=(AMFNOTE*)_mm_calloc(64,sizeof(AMFNOTE)))) return 0; return 1; } static void AMF_Cleanup(void) { _mm_free(mh); _mm_free(track); } static BOOL AMF_UnpackTrack(MREADER* r) { ULONG tracksize; UBYTE row,cmd; SBYTE arg; /* empty track */ memset(track,0,64*sizeof(AMFNOTE)); /* read packed track */ if (r) { tracksize=_mm_read_I_UWORD(r); tracksize+=((ULONG)_mm_read_UBYTE(r))<<16; if (tracksize) while(tracksize--) { row=_mm_read_UBYTE(r); cmd=_mm_read_UBYTE(r); arg=_mm_read_SBYTE(r); /* unexpected end of track */ if(!tracksize) { if((row==0xff)&&(cmd==0xff)&&(arg==-1)) break; /* the last triplet should be FF FF FF, but this is not always the case... maybe a bug in m2amf ? else return 0; */ } /* invalid row (probably unexpected end of row) */ if (row>=64) return 0; if (cmd<0x7f) { /* note, vol */ track[row].note=cmd; track[row].volume=(UBYTE)arg+1; } else if (cmd==0x7f) { /* duplicate row */ if ((arg<0)&&(row+arg>=0)) { memcpy(track+row,track+(row+arg),sizeof(AMFNOTE)); } } else if (cmd==0x80) { /* instr */ track[row].instr=arg+1; } else if (cmd==0x83) { /* volume without note */ track[row].volume=(UBYTE)arg+1; } else if (cmd==0xff) { /* apparently, some M2AMF version fail to estimate the size of the compressed patterns correctly, and end up with blanks, i.e. dead triplets. Those are marked with cmd == 0xff. Let's ignore them. */ } else if(track[row].fxcnt<3) { /* effect, param */ if(cmd>0x97) return 0; track[row].effect[track[row].fxcnt]=cmd&0x7f; track[row].parameter[track[row].fxcnt]=arg; track[row].fxcnt++; } else return 0; } } return 1; } static UBYTE* AMF_ConvertTrack(void) { int row,fx4memory=0; /* convert track */ UniReset(); for (row=0;row<64;row++) { if (track[row].instr) UniInstrument(track[row].instr-1); if (track[row].note>OCTAVE) UniNote(track[row].note-OCTAVE); /* AMF effects */ while(track[row].fxcnt--) { SBYTE inf=track[row].parameter[track[row].fxcnt]; switch(track[row].effect[track[row].fxcnt]) { case 1: /* Set speed */ UniEffect(UNI_S3MEFFECTA,inf); break; case 2: /* Volume slide */ if(inf) { UniWriteByte(UNI_S3MEFFECTD); if (inf>=0) UniWriteByte((inf&0xf)<<4); else UniWriteByte((-inf)&0xf); } break; /* effect 3, set channel volume, done in UnpackTrack */ case 4: /* Porta up/down */ if(inf) { if(inf>0) { UniEffect(UNI_S3MEFFECTE,inf); fx4memory=UNI_S3MEFFECTE; } else { UniEffect(UNI_S3MEFFECTF,-inf); fx4memory=UNI_S3MEFFECTF; } } else if(fx4memory) UniEffect(fx4memory,0); break; /* effect 5, "Porta abs", not supported */ case 6: /* Porta to note */ UniEffect(UNI_ITEFFECTG,inf); break; case 7: /* Tremor */ UniEffect(UNI_S3MEFFECTI,inf); break; case 8: /* Arpeggio */ UniPTEffect(0x0,inf); break; case 9: /* Vibrato */ UniPTEffect(0x4,inf); break; case 0xa: /* Porta + Volume slide */ UniPTEffect(0x3,0); if(inf) { UniWriteByte(UNI_S3MEFFECTD); if (inf>=0) UniWriteByte((inf&0xf)<<4); else UniWriteByte((-inf)&0xf); } break; case 0xb: /* Vibrato + Volume slide */ UniPTEffect(0x4,0); if(inf) { UniWriteByte(UNI_S3MEFFECTD); if (inf>=0) UniWriteByte((inf&0xf)<<4); else UniWriteByte((-inf)&0xf); } break; case 0xc: /* Pattern break (in hex) */ UniPTEffect(0xd,inf); break; case 0xd: /* Pattern jump */ UniPTEffect(0xb,inf); break; /* effect 0xe, "Sync", not supported */ case 0xf: /* Retrig */ UniEffect(UNI_S3MEFFECTQ,inf&0xf); break; case 0x10: /* Sample offset */ UniPTEffect(0x9,inf); break; case 0x11: /* Fine volume slide */ if(inf) { UniWriteByte(UNI_S3MEFFECTD); if (inf>=0) UniWriteByte((inf&0xf)<<4|0xf); else UniWriteByte(0xf0|((-inf)&0xf)); } break; case 0x12: /* Fine portamento */ if(inf) { if(inf>0) { UniEffect(UNI_S3MEFFECTE,0xf0|(inf&0xf)); fx4memory=UNI_S3MEFFECTE; } else { UniEffect(UNI_S3MEFFECTF,0xf0|((-inf)&0xf)); fx4memory=UNI_S3MEFFECTF; } } else if(fx4memory) UniEffect(fx4memory,0); break; case 0x13: /* Delay note */ UniPTEffect(0xe,0xd0|(inf&0xf)); break; case 0x14: /* Note cut */ UniPTEffect(0xc,0); track[row].volume=0; break; case 0x15: /* Set tempo */ UniEffect(UNI_S3MEFFECTT,inf); break; case 0x16: /* Extra fine portamento */ if(inf) { if(inf>0) { UniEffect(UNI_S3MEFFECTE,0xe0|((inf>>2)&0xf)); fx4memory=UNI_S3MEFFECTE; } else { UniEffect(UNI_S3MEFFECTF,0xe0|(((-inf)>>2)&0xf)); fx4memory=UNI_S3MEFFECTF; } } else if(fx4memory) UniEffect(fx4memory,0); break; case 0x17: /* Panning */ if (inf>64) UniEffect(UNI_ITEFFECTS0,0x91); /* surround */ else UniPTEffect(0x8,(inf==64)?255:(inf+64)<<1); of.flags |= UF_PANNING; break; } } if (track[row].volume) UniVolEffect(VOL_VOLUME,track[row].volume-1); UniNewline(); } return UniDup(); } static BOOL AMF_Load(BOOL curious) { int t,u,realtrackcnt,realsmpcnt,defaultpanning; AMFSAMPLE s; SAMPLE *q; UWORD *track_remap; ULONG samplepos; int channel_remap[16]; /* try to read module header */ _mm_read_UBYTES(mh->id,3,modreader); mh->version =_mm_read_UBYTE(modreader); _mm_read_string(mh->songname,32,modreader); mh->numsamples =_mm_read_UBYTE(modreader); mh->numorders =_mm_read_UBYTE(modreader); mh->numtracks =_mm_read_I_UWORD(modreader); mh->numchannels =_mm_read_UBYTE(modreader); if((!mh->numchannels)||(mh->numchannels>(mh->version>=12?32:16))) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } if(mh->version>=11) { memset(mh->panpos,0,32); _mm_read_SBYTES(mh->panpos,(mh->version>=13)?32:16,modreader); } else _mm_read_UBYTES(channel_remap,16,modreader); if (mh->version>=13) { mh->songbpm=_mm_read_UBYTE(modreader); if(mh->songbpm<32) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } mh->songspd=_mm_read_UBYTE(modreader); if(mh->songspd>32) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } } else { mh->songbpm=125; mh->songspd=6; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.initspeed = mh->songspd; of.inittempo = mh->songbpm; AMF_Version[AMFTEXTLEN-3]='0'+(mh->version/10); AMF_Version[AMFTEXTLEN-1]='0'+(mh->version%10); of.modtype = strdup(AMF_Version); of.numchn = mh->numchannels; of.numtrk = mh->numorders*mh->numchannels; if (mh->numtracks>of.numtrk) of.numtrk=mh->numtracks; of.numtrk++; /* add room for extra, empty track */ of.songname = DupStr(mh->songname,32,1); of.numpos = mh->numorders; of.numpat = mh->numorders; of.reppos = 0; of.flags |= UF_S3MSLIDES; /* XXX whenever possible, we should try to determine the original format. Here we assume it was S3M-style wrt bpmlimit... */ of.bpmlimit = 32; /* * Play with the panning table. Although the AMF format embeds a * panning table, if the module was a MOD or an S3M with default * panning and didn't use any panning commands, don't flag * UF_PANNING, to use our preferred panning table for this case. */ defaultpanning = 1; for (t = 0; t < 32; t++) { if (mh->panpos[t] > 64) { of.panning[t] = PAN_SURROUND; defaultpanning = 0; } else if (mh->panpos[t] == 64) of.panning[t] = PAN_RIGHT; else of.panning[t] = (mh->panpos[t] + 64) << 1; } if (defaultpanning) { for (t = 0; t < of.numchn; t++) if (of.panning[t] == (((t + 1) & 2) ? PAN_RIGHT : PAN_LEFT)) { defaultpanning = 0; /* not MOD canonical panning */ break; } } if (defaultpanning) of.flags |= UF_PANNING; of.numins=of.numsmp=mh->numsamples; if(!AllocPositions(of.numpos)) return 0; for(t=0;tversion>=14) /* track size */ of.pattrows[t]=_mm_read_I_UWORD(modreader); if (mh->version>=10) _mm_read_I_UWORDS(of.patterns+(t*of.numchn),of.numchn,modreader); else for(u=0;uversion>=11) { s.reppos =_mm_read_I_ULONG(modreader); s.repend =_mm_read_I_ULONG(modreader); } else { s.reppos =_mm_read_I_UWORD(modreader); s.repend =s.length; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } q->samplename = DupStr(s.samplename,32,1); q->speed = s.c2spd; q->volume = s.volume; if (s.type) { q->seekpos = s.offset; q->length = s.length; q->loopstart = s.reppos; q->loopend = s.repend; if((s.repend-s.reppos)>2) q->flags |= SF_LOOP; } q++; } /* read track table */ if(!(track_remap=_mm_calloc(mh->numtracks+1,sizeof(UWORD)))) return 0; _mm_read_I_UWORDS(track_remap+1,mh->numtracks,modreader); if(_mm_eof(modreader)) { free(track_remap); _mm_errno=MMERR_LOADING_TRACK; return 0; } for(realtrackcnt=t=0;t<=mh->numtracks;t++) if (realtrackcntnumtracks)? track_remap[of.patterns[t]]-1:realtrackcnt; free(track_remap); /* unpack tracks */ for(t=0;tseekpos!=t) q++; q->seekpos=samplepos; samplepos+=q->length; } return 1; } static CHAR *AMF_LoadTitle(void) { CHAR s[32]; _mm_fseek(modreader,4,SEEK_SET); if(!_mm_read_UBYTES(s,32,modreader)) return NULL; return(DupStr(s,32,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_amf={ NULL, "AMF", "AMF (DSMI Advanced Module Format)", AMF_Init, AMF_Test, AMF_Load, AMF_Cleanup, AMF_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_imf.c0000644000000000000000000004413312222472510015620 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_imf.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Imago Orpheus (IMF) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* module header */ typedef struct IMFHEADER { CHAR songname[32]; UWORD ordnum; UWORD patnum; UWORD insnum; UWORD flags; UBYTE initspeed; UBYTE inittempo; UBYTE mastervol; UBYTE mastermult; UBYTE orders[256]; } IMFHEADER; /* channel settings */ typedef struct IMFCHANNEL { CHAR name[12]; UBYTE chorus; UBYTE reverb; UBYTE pan; UBYTE status; } IMFCHANNEL; /* instrument header */ #define IMFNOTECNT (10*OCTAVE) #define IMFENVCNT (16*2) typedef struct IMFINSTHEADER { CHAR name[32]; UBYTE what[IMFNOTECNT]; UWORD volenv[IMFENVCNT]; UWORD panenv[IMFENVCNT]; UWORD pitenv[IMFENVCNT]; UBYTE volpts; UBYTE volsus; UBYTE volbeg; UBYTE volend; UBYTE volflg; UBYTE panpts; UBYTE pansus; UBYTE panbeg; UBYTE panend; UBYTE panflg; UBYTE pitpts; UBYTE pitsus; UBYTE pitbeg; UBYTE pitend; UBYTE pitflg; UWORD volfade; UWORD numsmp; ULONG signature; } IMFINSTHEADER; /* sample header */ typedef struct IMFWAVHEADER { CHAR samplename[13]; ULONG length; ULONG loopstart; ULONG loopend; ULONG samplerate; UBYTE volume; UBYTE pan; UBYTE flags; } IMFWAVHEADER; typedef struct IMFNOTE { UBYTE note,ins,eff1,dat1,eff2,dat2; } IMFNOTE; /*========== Loader variables */ static CHAR IMF_Version[]="Imago Orpheus"; static IMFNOTE *imfpat=NULL; static IMFHEADER *mh=NULL; /*========== Loader code */ static BOOL IMF_Test(void) { UBYTE id[4]; _mm_fseek(modreader,0x3c,SEEK_SET); if(!_mm_read_UBYTES(id,4,modreader)) return 0; if(!memcmp(id,"IM10",4)) return 1; return 0; } static BOOL IMF_Init(void) { if(!(imfpat=(IMFNOTE*)_mm_malloc(32*256*sizeof(IMFNOTE)))) return 0; if(!(mh=(IMFHEADER*)_mm_malloc(sizeof(IMFHEADER)))) return 0; return 1; } static void IMF_Cleanup(void) { FreeLinear(); _mm_free(imfpat); _mm_free(mh); } static BOOL IMF_ReadPattern(SLONG size,UWORD rows) { int row=0,flag,ch; IMFNOTE *n,dummy; /* clear pattern data */ memset(imfpat,255,32*256*sizeof(IMFNOTE)); while((size>0)&&(rownote=_mm_read_UBYTE(modreader); if(n->note>=0xa0) n->note=0xa0; /* note off */ n->ins =_mm_read_UBYTE(modreader); size-=2; } if(flag&64) { size-=2; n->eff2=_mm_read_UBYTE(modreader); n->dat2=_mm_read_UBYTE(modreader); } if(flag&128) { n->eff1=_mm_read_UBYTE(modreader); n->dat1=_mm_read_UBYTE(modreader); size-=2; } } else row++; } if((size)||(row!=rows)) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } return 1; } static void IMF_ProcessCmd(UBYTE eff,UBYTE inf) { if((eff)&&(eff!=255)) switch (eff) { case 0x01: /* set tempo */ UniEffect(UNI_S3MEFFECTA,inf); break; case 0x02: /* set BPM */ if(inf>=0x20) UniEffect(UNI_S3MEFFECTT,inf); break; case 0x03: /* tone portamento */ UniEffect(UNI_ITEFFECTG,inf); break; case 0x04: /* porta + volslide */ UniEffect(UNI_ITEFFECTG,inf); UniEffect(UNI_S3MEFFECTD,0); break; case 0x05: /* vibrato */ UniEffect(UNI_XMEFFECT4,inf); break; case 0x06: /* vibrato + volslide */ UniEffect(UNI_XMEFFECT6,inf); break; case 0x07: /* fine vibrato */ UniEffect(UNI_ITEFFECTU,inf); break; case 0x08: /* tremolo */ UniEffect(UNI_S3MEFFECTR,inf); break; case 0x09: /* arpeggio */ UniPTEffect(0x0,inf); break; case 0x0a: /* panning */ UniPTEffect(0x8,(inf>=128)?255:(inf<<1)); break; case 0x0b: /* pan slide */ UniEffect(UNI_XMEFFECTP,inf); break; case 0x0c: /* set channel volume */ if(inf<=64) UniPTEffect(0xc,inf); break; case 0x0d: /* volume slide */ UniEffect(UNI_S3MEFFECTD,inf); break; case 0x0e: /* fine volume slide */ if(inf) { if(inf>>4) UniEffect(UNI_S3MEFFECTD,0x0f|inf); else UniEffect(UNI_S3MEFFECTD,0xf0|inf); } else UniEffect(UNI_S3MEFFECTD,0); break; case 0x0f: /* set finetune */ UniPTEffect(0xe,0x50|(inf>>4)); break; #ifdef MIKMOD_DEBUG case 0x10: /* note slide up */ case 0x11: /* not slide down */ fprintf(stderr,"\rIMF effect 0x10/0x11 (note slide)" " not implemented (eff=%2X inf=%2X)\n",eff,inf); break; #endif case 0x12: /* slide up */ UniEffect(UNI_S3MEFFECTF,inf); break; case 0x13: /* slide down */ UniEffect(UNI_S3MEFFECTE,inf); break; case 0x14: /* fine slide up */ if (inf) { if (inf<0x40) UniEffect(UNI_S3MEFFECTF,0xe0|(inf>>2)); else UniEffect(UNI_S3MEFFECTF,0xf0|(inf>>4)); } else UniEffect(UNI_S3MEFFECTF,0); break; case 0x15: /* fine slide down */ if (inf) { if (inf<0x40) UniEffect(UNI_S3MEFFECTE,0xe0|(inf>>2)); else UniEffect(UNI_S3MEFFECTE,0xf0|(inf>>4)); } else UniEffect(UNI_S3MEFFECTE,0); break; /* 0x16 set filter cutoff (awe32) */ /* 0x17 filter side + resonance (awe32) */ case 0x18: /* sample offset */ UniPTEffect(0x9,inf); break; #ifdef MIKMOD_DEBUG case 0x19: /* set fine sample offset */ fprintf(stderr,"\rIMF effect 0x19 (fine sample offset)" " not implemented (inf=%2X)\n",inf); break; #endif case 0x1a: /* keyoff */ UniWriteByte(UNI_KEYOFF); break; case 0x1b: /* retrig */ UniEffect(UNI_S3MEFFECTQ,inf); break; case 0x1c: /* tremor */ UniEffect(UNI_S3MEFFECTI,inf); break; case 0x1d: /* position jump */ UniPTEffect(0xb,inf); break; case 0x1e: /* pattern break */ UniPTEffect(0xd,(inf>>4)*10+(inf&0xf)); break; case 0x1f: /* set master volume */ if(inf<=64) UniEffect(UNI_XMEFFECTG,inf<<1); break; case 0x20: /* master volume slide */ UniEffect(UNI_XMEFFECTH,inf); break; case 0x21: /* extended effects */ switch(inf>>4) { case 0x1: /* set filter */ case 0x5: /* vibrato waveform */ case 0x8: /* tremolo waveform */ UniPTEffect(0xe,inf-0x10); break; case 0xa: /* pattern loop */ UniPTEffect(0xe,0x60|(inf&0xf)); break; case 0xb: /* pattern delay */ UniPTEffect(0xe,0xe0|(inf&0xf)); break; case 0x3: /* glissando */ case 0xc: /* note cut */ case 0xd: /* note delay */ case 0xf: /* invert loop */ UniPTEffect(0xe,inf); break; case 0xe: /* ignore envelope */ UniEffect(UNI_ITEFFECTS0, 0x77); /* vol */ UniEffect(UNI_ITEFFECTS0, 0x79); /* pan */ UniEffect(UNI_ITEFFECTS0, 0x7b); /* pit */ break; } break; /* 0x22 chorus (awe32) */ /* 0x23 reverb (awe32) */ } } static UBYTE* IMF_ConvertTrack(IMFNOTE* tr,UWORD rows) { int t; UBYTE note,ins; UniReset(); for(t=0;t>4)*OCTAVE)+(note&0xf)); } IMF_ProcessCmd(tr[t].eff1,tr[t].dat1); IMF_ProcessCmd(tr[t].eff2,tr[t].dat2); UniNewline(); } return UniDup(); } static BOOL IMF_Load(BOOL curious) { #define IMF_SMPINCR 64 int t,u,track=0,oldnumsmp; IMFCHANNEL channels[32]; INSTRUMENT *d; SAMPLE *q; IMFWAVHEADER *wh=NULL,*s=NULL; ULONG *nextwav=NULL; UWORD wavcnt=0; UBYTE id[4]; /* try to read the module header */ _mm_read_string(mh->songname,32,modreader); mh->ordnum=_mm_read_I_UWORD(modreader); mh->patnum=_mm_read_I_UWORD(modreader); mh->insnum=_mm_read_I_UWORD(modreader); mh->flags =_mm_read_I_UWORD(modreader); _mm_fseek(modreader,8,SEEK_CUR); mh->initspeed =_mm_read_UBYTE(modreader); mh->inittempo =_mm_read_UBYTE(modreader); mh->mastervol =_mm_read_UBYTE(modreader); mh->mastermult=_mm_read_UBYTE(modreader); _mm_fseek(modreader,64,SEEK_SET); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.songname=DupStr(mh->songname,31,1); of.modtype=strdup(IMF_Version); of.numpat=mh->patnum; of.numins=mh->insnum; of.reppos=0; of.initspeed=mh->initspeed; of.inittempo=mh->inittempo; of.initvolume=mh->mastervol<<1; of.flags |= UF_INST | UF_ARPMEM | UF_PANNING; if(mh->flags&1) of.flags |= UF_LINEAR; of.bpmlimit=32; /* read channel information */ of.numchn=0; memset(remap,-1,32*sizeof(UBYTE)); for(t=0;t<32;t++) { _mm_read_string(channels[t].name,12,modreader); channels[t].chorus=_mm_read_UBYTE(modreader); channels[t].reverb=_mm_read_UBYTE(modreader); channels[t].pan =_mm_read_UBYTE(modreader); channels[t].status=_mm_read_UBYTE(modreader); } /* bug in Imago Orpheus ? If only channel 1 is enabled, in fact we have to enable 16 channels */ if(!channels[0].status) { for(t=1;t<16;t++) if(channels[t].status!=1) break; if(t==16) for(t=1;t<16;t++) channels[t].status=0; } for(t=0;t<32;t++) { if(channels[t].status!=2) remap[t]=of.numchn++; else remap[t]=-1; } for(t=0;t<32;t++) if(remap[t]!=-1) { of.panning[remap[t]]=channels[t].pan; of.chanvol[remap[t]]=channels[t].status?0:64; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* read order list */ _mm_read_UBYTES(mh->orders,256,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } of.numpos=0; for(t=0;tordnum;t++) if(mh->orders[t]!=0xff) of.numpos++; if(!AllocPositions(of.numpos)) return 0; for(t=u=0;tordnum;t++) if(mh->orders[t]!=0xff) of.positions[u++]=mh->orders[t]; /* load pattern info */ of.numtrk=of.numpat*of.numchn; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; for(t=0;t256)||(size<4)) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } of.pattrows[t]=rows; if(!IMF_ReadPattern(size-4,rows)) return 0; for(u=0;usamplenumber,0xff,INSTNOTES*sizeof(UWORD)); /* read instrument header */ _mm_read_string(ih.name,32,modreader); d->insname=DupStr(ih.name,31,1); _mm_read_UBYTES(ih.what,IMFNOTECNT,modreader); _mm_fseek(modreader,8,SEEK_CUR); _mm_read_I_UWORDS(ih.volenv,IMFENVCNT,modreader); _mm_read_I_UWORDS(ih.panenv,IMFENVCNT,modreader); _mm_read_I_UWORDS(ih.pitenv,IMFENVCNT,modreader); #if defined __STDC__ || defined _MSC_VER #define IMF_FinishLoadingEnvelope(name) \ ih. name##pts=_mm_read_UBYTE(modreader); \ ih. name##sus=_mm_read_UBYTE(modreader); \ ih. name##beg=_mm_read_UBYTE(modreader); \ ih. name##end=_mm_read_UBYTE(modreader); \ ih. name##flg=_mm_read_UBYTE(modreader); \ _mm_skip_BYTE(modreader); \ _mm_skip_BYTE(modreader); \ _mm_skip_BYTE(modreader) #else #define IMF_FinishLoadingEnvelope(name) \ ih. name/**/pts=_mm_read_UBYTE(modreader); \ ih. name/**/sus=_mm_read_UBYTE(modreader); \ ih. name/**/beg=_mm_read_UBYTE(modreader); \ ih. name/**/end=_mm_read_UBYTE(modreader); \ ih. name/**/flg=_mm_read_UBYTE(modreader); \ _mm_skip_BYTE(modreader); \ _mm_skip_BYTE(modreader); \ _mm_skip_BYTE(modreader) #endif IMF_FinishLoadingEnvelope(vol); IMF_FinishLoadingEnvelope(pan); IMF_FinishLoadingEnvelope(pit); ih.volfade=_mm_read_I_UWORD(modreader); ih.numsmp =_mm_read_I_UWORD(modreader); _mm_read_UBYTES(id,4,modreader); /* Looks like Imago Orpheus forgets the signature for empty instruments following a multi-sample instrument... */ if(memcmp(id,"II10",4) && (oldnumsmp && memcmp(id,"\x0\x0\x0\x0",4))) { if(nextwav) free(nextwav); if(wh) free(wh); _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } oldnumsmp=ih.numsmp; if((ih.numsmp>16)||(ih.volpts>IMFENVCNT/2)||(ih.panpts>IMFENVCNT/2)|| (ih.pitpts>IMFENVCNT/2)||(_mm_eof(modreader))) { if(nextwav) free(nextwav); if(wh) free(wh); _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } for(u=0;usamplenumber[u]=ih.what[u]>ih.numsmp?0xffff:ih.what[u]+of.numsmp; d->volfade=ih.volfade; #if defined __STDC__ || defined _MSC_VER #define IMF_ProcessEnvelope(name) \ for (u = 0; u < (IMFENVCNT >> 1); u++) { \ d-> name##env[u].pos = ih. name##env[u << 1]; \ d-> name##env[u].val = ih. name##env[(u << 1)+ 1]; \ } \ if (ih. name##flg&1) d-> name##flg|=EF_ON; \ if (ih. name##flg&2) d-> name##flg|=EF_SUSTAIN; \ if (ih. name##flg&4) d-> name##flg|=EF_LOOP; \ d-> name##susbeg=d-> name##susend=ih. name##sus; \ d-> name##beg=ih. name##beg; \ d-> name##end=ih. name##end; \ d-> name##pts=ih. name##pts; \ \ if ((d-> name##flg&EF_ON)&&(d-> name##pts<2)) \ d-> name##flg&=~EF_ON #else #define IMF_ProcessEnvelope(name) \ for (u = 0; u < (IMFENVCNT >> 1); u++) { \ d-> name/**/env[u].pos = ih. name/**/env[u << 1]; \ d-> name/**/env[u].val = ih. name/**/env[(u << 1)+ 1]; \ } \ if (ih. name/**/flg&1) d-> name/**/flg|=EF_ON; \ if (ih. name/**/flg&2) d-> name/**/flg|=EF_SUSTAIN; \ if (ih. name/**/flg&4) d-> name/**/flg|=EF_LOOP; \ d-> name/**/susbeg=d-> name/**/susend=ih. name/**/sus; \ d-> name/**/beg=ih. name/**/beg; \ d-> name/**/end=ih. name/**/end; \ d-> name/**/pts=ih. name/**/pts; \ \ if ((d-> name/**/flg&EF_ON)&&(d-> name/**/pts<2)) \ d-> name/**/flg&=~EF_ON #endif IMF_ProcessEnvelope(vol); IMF_ProcessEnvelope(pan); IMF_ProcessEnvelope(pit); #undef IMF_ProcessEnvelope if(ih.pitflg&1) { d->pitflg&=~EF_ON; #ifdef MIKMOD_DEBUG fprintf(stderr, "\rFilter envelopes not supported yet\n"); #endif } /* gather sample information */ for(u=0;usamplename,13,modreader); _mm_skip_BYTE(modreader);_mm_skip_BYTE(modreader);_mm_skip_BYTE(modreader); s->length =_mm_read_I_ULONG(modreader); s->loopstart =_mm_read_I_ULONG(modreader); s->loopend =_mm_read_I_ULONG(modreader); s->samplerate=_mm_read_I_ULONG(modreader); s->volume =_mm_read_UBYTE(modreader)&0x7f; s->pan =_mm_read_UBYTE(modreader); _mm_fseek(modreader,14,SEEK_CUR); s->flags =_mm_read_UBYTE(modreader); _mm_fseek(modreader,11,SEEK_CUR); _mm_read_UBYTES(id,4,modreader); if(((memcmp(id,"IS10",4))&&(memcmp(id,"IW10",4)))|| (_mm_eof(modreader))) { free(nextwav);free(wh); _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } nextwav[of.numsmp+u]=_mm_ftell(modreader); _mm_fseek(modreader,s->length,SEEK_CUR); } of.numsmp+=ih.numsmp; d++; } /* sanity check */ if(!of.numsmp) { if(nextwav) free(nextwav); if(wh) free(wh); _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } /* load samples */ if(!AllocSamples()) { free(nextwav);free(wh); return 0; } if(!AllocLinear()) { free(nextwav);free(wh); return 0; } q=of.samples; s=wh; for(u=0;usamplename=DupStr(s->samplename,12,1); q->length =s->length; q->loopstart=s->loopstart; q->loopend =s->loopend; q->volume =s->volume; q->speed =s->samplerate; if(of.flags&UF_LINEAR) q->speed=speed_to_finetune(s->samplerate<<1,u); q->panning =s->pan; q->seekpos =nextwav[u]; q->flags|=SF_SIGNED; if(s->flags&0x1) q->flags|=SF_LOOP; if(s->flags&0x2) q->flags|=SF_BIDI; if(s->flags&0x8) q->flags|=SF_OWNPAN; if(s->flags&0x4) { q->flags|=SF_16BITS; q->length >>=1; q->loopstart>>=1; q->loopend >>=1; } } d=of.instruments; s=wh; for(u=0;usamplenumber[t]>=of.numsmp) d->samplenote[t]=255; else if (of.flags&UF_LINEAR) { int note=(int)d->samplenote[u]+noteindex[d->samplenumber[u]]; d->samplenote[u]=(note<0)?0:(note>255?255:note); } else d->samplenote[t]=t; } } free(wh);free(nextwav); return 1; } static CHAR *IMF_LoadTitle(void) { CHAR s[31]; _mm_fseek(modreader,0,SEEK_SET); if(!_mm_read_UBYTES(s,31,modreader)) return NULL; return(DupStr(s,31,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_imf={ NULL, "IMF", "IMF (Imago Orpheus)", IMF_Init, IMF_Test, IMF_Load, IMF_Cleanup, IMF_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_ult.c0000644000000000000000000001707712236734402015666 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_ult.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Ultratracker (ULT) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* header */ typedef struct ULTHEADER { CHAR id[16]; CHAR songtitle[32]; UBYTE reserved; } ULTHEADER; /* sample information */ typedef struct ULTSAMPLE { CHAR samplename[32]; CHAR dosname[12]; SLONG loopstart; SLONG loopend; SLONG sizestart; SLONG sizeend; UBYTE volume; UBYTE flags; UWORD speed; SWORD finetune; } ULTSAMPLE; typedef struct ULTEVENT { UBYTE note,sample,eff,dat1,dat2; } ULTEVENT; /*========== Loader variables */ #define ULTS_16BITS 4 #define ULTS_LOOP 8 #define ULTS_REVERSE 16 #define ULT_VERSION_LEN 18 static CHAR ULT_Version[ULT_VERSION_LEN+1]="Ultra Tracker v1.x"; static ULTEVENT ev; /*========== Loader code */ static BOOL ULT_Test(void) { CHAR id[16]; if(!_mm_read_string(id,15,modreader)) return 0; if(strncmp(id,"MAS_UTrack_V00",14)) return 0; if((id[14]<'1')||(id[14]>'4')) return 0; return 1; } static BOOL ULT_Init(void) { return 1; } static void ULT_Cleanup(void) { } static UBYTE ReadUltEvent(ULTEVENT* event) { UBYTE flag,rep=1; flag = _mm_read_UBYTE(modreader); if(flag==0xfc) { rep = _mm_read_UBYTE(modreader); event->note =_mm_read_UBYTE(modreader); } else event->note = flag; event->sample =_mm_read_UBYTE(modreader); event->eff =_mm_read_UBYTE(modreader); event->dat1 =_mm_read_UBYTE(modreader); event->dat2 =_mm_read_UBYTE(modreader); return rep; } static BOOL ULT_Load(BOOL curious) { int t,u,tracks=0; SAMPLE *q; ULTSAMPLE s; ULTHEADER mh; UBYTE nos,noc,nop; /* try to read module header */ _mm_read_string(mh.id,15,modreader); _mm_read_string(mh.songtitle,32,modreader); mh.reserved=_mm_read_UBYTE(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } ULT_Version[ULT_VERSION_LEN-1]='3'+(mh.id[14]-'1'); of.modtype = DupStr(ULT_Version,ULT_VERSION_LEN,1); of.initspeed = 6; of.inittempo = 125; of.reppos = 0; /* read songtext */ if ((mh.id[14]>'1')&&(mh.reserved)) if(!ReadLinedComment(mh.reserved * 32, 32)) return 0; nos=_mm_read_UBYTE(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } of.songname=DupStr(mh.songtitle,32,1); of.numins=of.numsmp=nos; if(!AllocSamples()) return 0; q = of.samples; for(t=0;t='4')?_mm_read_I_UWORD(modreader):8363; s.finetune =_mm_read_I_SWORD(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } q->samplename=DupStr(s.samplename,32,1); /* The correct formula for the coefficient would be pow(2,(double)s.finetume/OCTAVE/32768), but to avoid floating point here, we'll use a first order approximation here. 1/567290 == Ln(2)/OCTAVE/32768 */ q->speed=s.speed+s.speed*(((SLONG)s.speed*(SLONG)s.finetune)/567290); q->length = s.sizeend-s.sizestart; q->volume = s.volume>>2; q->loopstart = s.loopstart; q->loopend = s.loopend; q->flags = SF_SIGNED; if(s.flags&ULTS_LOOP) q->flags|=SF_LOOP; if(s.flags&ULTS_16BITS) { s.sizeend+=(s.sizeend-s.sizestart); s.sizestart<<=1; q->flags|=SF_16BITS; q->loopstart>>=1; q->loopend>>=1; } q++; } if(!AllocPositions(256)) return 0; for(t=0;t<256;t++) of.positions[t]=_mm_read_UBYTE(modreader); for(t=0;t<256;t++) if(of.positions[t]==255) { of.positions[t]=LAST_PATTERN; break; } of.numpos=t; noc=_mm_read_UBYTE(modreader); nop=_mm_read_UBYTE(modreader); of.numchn=++noc; of.numpat=++nop; of.numtrk=of.numchn*of.numpat; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; for(u=0;u=UF_MAXCHAN) of.numchn=UF_MAXCHAN - 1; /* read pan position table for v1.5 and higher */ if(mh.id[14]>='3') { for(t=0;t>4; switch(eff) { case 0x3: /* tone portamento */ UniEffect(UNI_ITEFFECTG,ev.dat2); break; case 0x5: break; case 0x9: /* sample offset */ offset=(ev.dat2<<8)|((ev.eff&0xf)==9?ev.dat1:0); UniEffect(UNI_ULTEFFECT9,offset); break; case 0xb: /* panning */ UniPTEffect(8,ev.dat2*0xf); of.flags |= UF_PANNING; break; case 0xc: /* volume */ UniPTEffect(eff,ev.dat2>>2); break; default: UniPTEffect(eff,ev.dat2); break; } /* second effect */ eff=ev.eff&0xf; switch(eff) { case 0x3: /* tone portamento */ UniEffect(UNI_ITEFFECTG,ev.dat1); break; case 0x5: break; case 0x9: /* sample offset */ if((ev.eff>>4)!=9) UniEffect(UNI_ULTEFFECT9,((UWORD)ev.dat1)<<8); break; case 0xb: /* panning */ UniPTEffect(8,ev.dat1*0xf); of.flags |= UF_PANNING; break; case 0xc: /* volume */ UniPTEffect(eff,ev.dat1>>2); break; default: UniPTEffect(eff,ev.dat1); break; } UniNewline(); row++; } } if(!(of.tracks[t]=UniDup())) return 0; } return 1; } static CHAR *ULT_LoadTitle(void) { CHAR s[32]; _mm_fseek(modreader,15,SEEK_SET); if(!_mm_read_UBYTES(s,32,modreader)) return NULL; return(DupStr(s,32,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_ult={ NULL, "ULT", "ULT (UltraTracker)", ULT_Init, ULT_Test, ULT_Load, ULT_Cleanup, ULT_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_stx.c0000644000000000000000000002501012222472510015654 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_stx.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ STMIK 0.2 (STX) module loader ==============================================================================*/ /* Written by Claudio Matsuoka */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* header */ typedef struct STXHEADER { CHAR songname[20]; CHAR trackername[8]; UWORD patsize; UWORD unknown1; UWORD patptr; UWORD insptr; UWORD chnptr; /* not sure */ UWORD unknown2; UWORD unknown3; UBYTE mastermult; UBYTE initspeed; UWORD unknown4; UWORD unknown5; UWORD patnum; UWORD insnum; UWORD ordnum; UWORD unknown6; UWORD unknown7; UWORD unknown8; CHAR scrm[4]; } STXHEADER; /* sample information */ typedef struct STXSAMPLE { UBYTE type; CHAR filename[12]; UBYTE memsegh; UWORD memsegl; ULONG length; ULONG loopbeg; ULONG loopend; UBYTE volume; UBYTE dsk; UBYTE pack; UBYTE flags; ULONG c2spd; UBYTE unused[12]; CHAR sampname[28]; CHAR scrs[4]; } STXSAMPLE; typedef struct STXNOTE { UBYTE note,ins,vol,cmd,inf; } STXNOTE; /*========== Loader variables */ static STXNOTE *stxbuf = NULL; /* pointer to a complete STX pattern */ static STXHEADER *mh = NULL; static UWORD *paraptr = NULL; /* parapointer array (see STX docs) */ /*========== Loader code */ static BOOL STX_Test(void) { UBYTE id[8]; int t; _mm_fseek(modreader,0x3C,SEEK_SET); if(!_mm_read_UBYTES(id,4,modreader)) return 0; if(memcmp(id,"SCRM",4)) return 0; _mm_fseek(modreader,0x14,SEEK_SET); if(!_mm_read_UBYTES(id,8,modreader)) return 0; for(t=0;t=0)&&(ch<4)) n=&stxbuf[(64U*ch)+row]; else n=&dummy; if(flag&32) { n->note=_mm_read_UBYTE(modreader); n->ins=_mm_read_UBYTE(modreader); } if(flag&64) { n->vol=_mm_read_UBYTE(modreader); if(n->vol>64) n->vol=64; } if(flag&128) { n->cmd=_mm_read_UBYTE(modreader); n->inf=_mm_read_UBYTE(modreader); } } else row++; } return 1; } static UBYTE* STX_ConvertTrack(STXNOTE* tr) { int t; UniReset(); for(t=0;t<64;t++) { UBYTE note,ins,vol,cmd,inf; note=tr[t].note; ins=tr[t].ins; vol=tr[t].vol; cmd=tr[t].cmd; inf=tr[t].inf; if((ins)&&(ins!=255)) UniInstrument(ins-1); if((note)&&(note!=255)) { if(note==254) { UniPTEffect(0xc,0); /* note cut command */ vol=255; } else UniNote(24+((note>>4)*OCTAVE)+(note&0xf)); /* normal note */ } if(vol<255) UniPTEffect(0xc,vol); if(cmd<255) switch(cmd) { case 1: /* Axx set speed to xx */ UniPTEffect(0xf,inf>>4); break; case 2: /* Bxx position jump */ UniPTEffect(0xb,inf); break; case 3: /* Cxx patternbreak to row xx */ UniPTEffect(0xd,(((inf&0xf0)>>4)*10)+(inf&0xf)); break; case 4: /* Dxy volumeslide */ UniEffect(UNI_S3MEFFECTD,inf); break; case 5: /* Exy toneslide down */ UniEffect(UNI_S3MEFFECTE,inf); break; case 6: /* Fxy toneslide up */ UniEffect(UNI_S3MEFFECTF,inf); break; case 7: /* Gxx Tone portamento,speed xx */ UniPTEffect(0x3,inf); break; case 8: /* Hxy vibrato */ UniPTEffect(0x4,inf); break; case 9: /* Ixy tremor, ontime x, offtime y */ UniEffect(UNI_S3MEFFECTI,inf); break; case 0: /* protracker arpeggio */ if(!inf) break; /* fall through */ case 0xa: /* Jxy arpeggio */ UniPTEffect(0x0,inf); break; case 0xb: /* Kxy Dual command H00 & Dxy */ UniPTEffect(0x4,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 0xc: /* Lxy Dual command G00 & Dxy */ UniPTEffect(0x3,0); UniEffect(UNI_S3MEFFECTD,inf); break; /* Support all these above, since ST2 can LOAD these values but can actually only play up to J - and J is only half-way implemented in ST2 */ case 0x18: /* Xxx amiga panning command 8xx */ UniPTEffect(0x8,inf); of.flags |= UF_PANNING; break; } UniNewline(); } return UniDup(); } static BOOL STX_Load(BOOL curious) { int t,u,track = 0; int version = 0; SAMPLE *q; /* try to read module header */ _mm_read_string(mh->songname,20,modreader); _mm_read_string(mh->trackername,8,modreader); mh->patsize =_mm_read_I_UWORD(modreader); mh->unknown1 =_mm_read_I_UWORD(modreader); mh->patptr =_mm_read_I_UWORD(modreader); mh->insptr =_mm_read_I_UWORD(modreader); mh->chnptr =_mm_read_I_UWORD(modreader); mh->unknown2 =_mm_read_I_UWORD(modreader); mh->unknown3 =_mm_read_I_UWORD(modreader); mh->mastermult =_mm_read_UBYTE(modreader); mh->initspeed =_mm_read_UBYTE(modreader)>>4; mh->unknown4 =_mm_read_I_UWORD(modreader); mh->unknown5 =_mm_read_I_UWORD(modreader); mh->patnum =_mm_read_I_UWORD(modreader); mh->insnum =_mm_read_I_UWORD(modreader); mh->ordnum =_mm_read_I_UWORD(modreader); mh->unknown6 =_mm_read_I_UWORD(modreader); mh->unknown7 =_mm_read_I_UWORD(modreader); mh->unknown8 =_mm_read_I_UWORD(modreader); _mm_read_string(mh->scrm,4,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.songname = DupStr(mh->songname,20,1); of.numpat = mh->patnum; of.reppos = 0; of.numins = of.numsmp = mh->insnum; of.initspeed = mh->initspeed; of.inittempo = 125; of.numchn = 4; of.flags |= UF_S3MSLIDES; of.bpmlimit = 32; if(!(paraptr=(UWORD*)_mm_malloc((of.numins+of.numpat)*sizeof(UWORD)))) return 0; /* read the instrument+pattern parapointers */ _mm_fseek(modreader,mh->insptr<<4,SEEK_SET); _mm_read_I_UWORDS(paraptr,of.numins,modreader); _mm_fseek(modreader,mh->patptr<<4,SEEK_SET); _mm_read_I_UWORDS(paraptr+of.numins,of.numpat,modreader); /* check module version */ _mm_fseek(modreader,paraptr[of.numins]<<4,SEEK_SET); version=_mm_read_I_UWORD(modreader); if(version==mh->patsize) { version = 0x10; of.modtype = strdup("STMIK 0.2 (STM2STX 1.0)"); } else { version = 0x11; of.modtype = strdup("STMIK 0.2 (STM2STX 1.1)"); } /* read the order data */ _mm_fseek(modreader,(mh->chnptr<<4)+32,SEEK_SET); if(!AllocPositions(mh->ordnum)) return 0; for(t=0;tordnum;t++) { of.positions[t]=_mm_read_UBYTE(modreader); _mm_fseek(modreader,4,SEEK_CUR); } of.numpos=0;poslookupcnt=mh->ordnum; for(t=0;tordnum;t++) { int order=of.positions[t]; if(order==255) order=LAST_PATTERN; of.positions[of.numpos]=order; poslookup[t]=of.numpos; /* bug fix for freaky S3Ms */ if(of.positions[t]<254) of.numpos++; else /* special end of song pattern */ if((order==LAST_PATTERN)&&(!curious)) break; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* load samples */ if(!AllocSamples()) return 0; for(q=of.samples,t=0;tsamplename = DupStr(s.sampname,28,1); q->speed = (s.c2spd * 8363) / 8448; q->length = s.length; q->loopstart = s.loopbeg; q->loopend = s.loopend; q->volume = s.volume; q->seekpos = (((long)s.memsegh)<<16|s.memsegl)<<4; q->flags |= SF_SIGNED; if(s.flags&1) q->flags |= SF_LOOP; if(s.flags&4) q->flags |= SF_16BITS; } /* load pattern info */ of.numtrk=of.numpat*of.numchn; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; for(t=0;t #endif #include #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); extern int toupper(int); #endif /*========== Module structure */ /* header */ typedef struct ITHEADER { CHAR songname[26]; UBYTE blank01[2]; UWORD ordnum; UWORD insnum; UWORD smpnum; UWORD patnum; UWORD cwt; /* Created with tracker (y.xx = 0x0yxx) */ UWORD cmwt; /* Compatible with tracker ver > than val. */ UWORD flags; UWORD special; /* bit 0 set = song message attached */ UBYTE globvol; UBYTE mixvol; /* mixing volume [ignored] */ UBYTE initspeed; UBYTE inittempo; UBYTE pansep; /* panning separation between channels */ UBYTE zerobyte; UWORD msglength; ULONG msgoffset; UBYTE blank02[4]; UBYTE pantable[64]; UBYTE voltable[64]; } ITHEADER; /* sample information */ typedef struct ITSAMPLE { CHAR filename[12]; UBYTE zerobyte; UBYTE globvol; UBYTE flag; UBYTE volume; UBYTE panning; CHAR sampname[28]; UWORD convert; /* sample conversion flag */ ULONG length; ULONG loopbeg; ULONG loopend; ULONG c5spd; ULONG susbegin; ULONG susend; ULONG sampoffset; UBYTE vibspeed; UBYTE vibdepth; UBYTE vibrate; UBYTE vibwave; /* 0=sine, 1=rampdown, 2=square, 3=random (speed ignored) */ } ITSAMPLE; /* instrument information */ #define ITENVCNT 25 #define ITNOTECNT 120 typedef struct ITINSTHEADER { ULONG size; /* (dword) Instrument size */ CHAR filename[12]; /* (char) Instrument filename */ UBYTE zerobyte; /* (byte) Instrument type (always 0) */ UBYTE volflg; UBYTE volpts; UBYTE volbeg; /* (byte) Volume loop start (node) */ UBYTE volend; /* (byte) Volume loop end (node) */ UBYTE volsusbeg; /* (byte) Volume sustain begin (node) */ UBYTE volsusend; /* (byte) Volume Sustain end (node) */ UBYTE panflg; UBYTE panpts; UBYTE panbeg; /* (byte) channel loop start (node) */ UBYTE panend; /* (byte) channel loop end (node) */ UBYTE pansusbeg; /* (byte) channel sustain begin (node) */ UBYTE pansusend; /* (byte) channel Sustain end (node) */ UBYTE pitflg; UBYTE pitpts; UBYTE pitbeg; /* (byte) pitch loop start (node) */ UBYTE pitend; /* (byte) pitch loop end (node) */ UBYTE pitsusbeg; /* (byte) pitch sustain begin (node) */ UBYTE pitsusend; /* (byte) pitch Sustain end (node) */ UWORD blank; UBYTE globvol; UBYTE chanpan; UWORD fadeout; /* Envelope end / NNA volume fadeout */ UBYTE dnc; /* Duplicate note check */ UBYTE dca; /* Duplicate check action */ UBYTE dct; /* Duplicate check type */ UBYTE nna; /* New Note Action [0,1,2,3] */ UWORD trkvers; /* tracker version used to save [files only] */ UBYTE ppsep; /* Pitch-pan Separation */ UBYTE ppcenter; /* Pitch-pan Center */ UBYTE rvolvar; /* random volume varations */ UBYTE rpanvar; /* random panning varations */ UWORD numsmp; /* Number of samples in instrument [files only] */ CHAR name[26]; /* Instrument name */ UBYTE blank01[6]; UWORD samptable[ITNOTECNT];/* sample for each note [note / samp pairs] */ UBYTE volenv[200]; /* volume envelope (IT 1.x stuff) */ UBYTE oldvoltick[ITENVCNT];/* volume tick position (IT 1.x stuff) */ UBYTE volnode[ITENVCNT]; /* amplitude of volume nodes */ UWORD voltick[ITENVCNT]; /* tick value of volume nodes */ SBYTE pannode[ITENVCNT]; /* panenv - node points */ UWORD pantick[ITENVCNT]; /* tick value of panning nodes */ SBYTE pitnode[ITENVCNT]; /* pitchenv - node points */ UWORD pittick[ITENVCNT]; /* tick value of pitch nodes */ } ITINSTHEADER; /* unpacked note */ typedef struct ITNOTE { UBYTE note,ins,volpan,cmd,inf; } ITNOTE; /*========== Loader data */ static ULONG *paraptr=NULL; /* parapointer array (see IT docs) */ static ITHEADER *mh=NULL; static ITNOTE *itpat=NULL; /* allocate to space for one full pattern */ static UBYTE *mask=NULL; /* arrays allocated to 64 elements and used for */ static ITNOTE *last=NULL; /* uncompressing IT's pattern information */ static int numtrk=0; static unsigned int old_effect; /* if set, use S3M old-effects stuffs */ static CHAR* IT_Version[]={ "ImpulseTracker . ", "Compressed ImpulseTracker . ", "ImpulseTracker 2.14p3", "Compressed ImpulseTracker 2.14p3", "ImpulseTracker 2.14p4", "Compressed ImpulseTracker 2.14p4", }; /* table for porta-to-note command within volume/panning column */ static UBYTE portatable[10]= {0,1,4,8,16,32,64,96,128,255}; /*========== Loader code */ static BOOL IT_Test(void) { UBYTE id[4]; if(!_mm_read_UBYTES(id,4,modreader)) return 0; if(!memcmp(id,"IMPM",4)) return 1; return 0; } static BOOL IT_Init(void) { if(!(mh=(ITHEADER*)_mm_malloc(sizeof(ITHEADER)))) return 0; if(!(poslookup=(UBYTE*)_mm_malloc(256*sizeof(UBYTE)))) return 0; if(!(itpat=(ITNOTE*)_mm_malloc(200*64*sizeof(ITNOTE)))) return 0; if(!(mask=(UBYTE*)_mm_malloc(64*sizeof(UBYTE)))) return 0; if(!(last=(ITNOTE*)_mm_malloc(64*sizeof(ITNOTE)))) return 0; return 1; } static void IT_Cleanup(void) { FreeLinear(); _mm_free(mh); _mm_free(poslookup); _mm_free(itpat); _mm_free(mask); _mm_free(last); _mm_free(paraptr); _mm_free(origpositions); } /* Because so many IT files have 64 channels as the set number used, but really only use far less (usually from 8 to 24 still), I had to make this function, which determines the number of channels that are actually USED by a pattern. NOTE: You must first seek to the file location of the pattern before calling this procedure. Returns 0 on error */ static BOOL IT_GetNumChannels(UWORD patrows) { int row=0,flag,ch; do { if((flag=_mm_read_UBYTE(modreader))==EOF) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } if(!flag) row++; else { ch=(flag-1)&63; remap[ch]=0; if(flag & 128) mask[ch]=_mm_read_UBYTE(modreader); if(mask[ch]&1) _mm_skip_BYTE(modreader); if(mask[ch]&2) _mm_skip_BYTE(modreader); if(mask[ch]&4) _mm_skip_BYTE(modreader); if(mask[ch]&8) { _mm_skip_BYTE(modreader);_mm_skip_BYTE(modreader); } } } while(rownote=n->note=_mm_read_UBYTE(modreader))==255) l->note=n->note=253; if(mask[ch]&2) l->ins=n->ins=_mm_read_UBYTE(modreader); if(mask[ch]&4) l->volpan=n->volpan=_mm_read_UBYTE(modreader); if(mask[ch]&8) { l->cmd=n->cmd=_mm_read_UBYTE(modreader); l->inf=n->inf=_mm_read_UBYTE(modreader); } if(mask[ch]&16) n->note=l->note; if(mask[ch]&32) n->ins=l->ins; if(mask[ch]&64) n->volpan=l->volpan; if(mask[ch]&128) { n->cmd=l->cmd; n->inf=l->inf; } } } while(rowsongname,26,modreader); _mm_read_UBYTES(mh->blank01,2,modreader); mh->ordnum =_mm_read_I_UWORD(modreader); mh->insnum =_mm_read_I_UWORD(modreader); mh->smpnum =_mm_read_I_UWORD(modreader); mh->patnum =_mm_read_I_UWORD(modreader); mh->cwt =_mm_read_I_UWORD(modreader); mh->cmwt =_mm_read_I_UWORD(modreader); mh->flags =_mm_read_I_UWORD(modreader); mh->special =_mm_read_I_UWORD(modreader); mh->globvol =_mm_read_UBYTE(modreader); mh->mixvol =_mm_read_UBYTE(modreader); mh->initspeed =_mm_read_UBYTE(modreader); mh->inittempo =_mm_read_UBYTE(modreader); mh->pansep =_mm_read_UBYTE(modreader); mh->zerobyte =_mm_read_UBYTE(modreader); mh->msglength =_mm_read_I_UWORD(modreader); mh->msgoffset =_mm_read_I_ULONG(modreader); _mm_read_UBYTES(mh->blank02,4,modreader); _mm_read_UBYTES(mh->pantable,64,modreader); _mm_read_UBYTES(mh->voltable,64,modreader); if(_mm_eof(modreader)) { _mm_errno=MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.songname = DupStr(mh->songname,26,0); /* make a cstr of songname */ of.reppos = 0; of.numpat = mh->patnum; of.numins = mh->insnum; of.numsmp = mh->smpnum; of.initspeed = mh->initspeed; of.inittempo = mh->inittempo; of.initvolume = mh->globvol; of.flags |= UF_BGSLIDES | UF_ARPMEM; if (!(mh->flags & 1)) of.flags |= UF_PANNING; of.bpmlimit=32; if(mh->songname[25]) { of.numvoices=1+mh->songname[25]; #ifdef MIKMOD_DEBUG fprintf(stderr,"Embedded IT limitation to %d voices\n",of.numvoices); #endif } /* set the module type */ /* 2.17 : IT 2.14p4 */ /* 2.16 : IT 2.14p3 with resonant filters */ /* 2.15 : IT 2.14p3 (improved compression) */ if((mh->cwt<=0x219)&&(mh->cwt>=0x217)) of.modtype=strdup(IT_Version[mh->cmwt<0x214?4:5]); else if (mh->cwt>=0x215) of.modtype=strdup(IT_Version[mh->cmwt<0x214?2:3]); else { of.modtype = strdup(IT_Version[mh->cmwt<0x214?0:1]); of.modtype[mh->cmwt<0x214?15:26] = (mh->cwt>>8)+'0'; of.modtype[mh->cmwt<0x214?17:28] = ((mh->cwt>>4)&0xf)+'0'; of.modtype[mh->cmwt<0x214?18:29] = ((mh->cwt)&0xf)+'0'; } if(mh->flags&8) of.flags |= UF_XMPERIODS | UF_LINEAR; if((mh->cwt>=0x106)&&(mh->flags&16)) old_effect=S3MIT_OLDSTYLE; else old_effect=0; /* set panning positions */ if (mh->flags & 1) for(t=0;t<64;t++) { mh->pantable[t]&=0x7f; if(mh->pantable[t]<64) of.panning[t]=mh->pantable[t]<<2; else if(mh->pantable[t]==64) of.panning[t]=255; else if(mh->pantable[t]==100) of.panning[t]=PAN_SURROUND; else if(mh->pantable[t]==127) of.panning[t]=PAN_CENTER; else { _mm_errno=MMERR_LOADING_HEADER; return 0; } } else for(t=0;t<64;t++) of.panning[t]=PAN_CENTER; /* set channel volumes */ memcpy(of.chanvol,mh->voltable,64); /* read the order data */ if(!AllocPositions(mh->ordnum)) return 0; if(!(origpositions=_mm_calloc(mh->ordnum,sizeof(UWORD)))) return 0; for(t=0;tordnum;t++) { origpositions[t]=_mm_read_UBYTE(modreader); if((origpositions[t]>mh->patnum)&&(origpositions[t]<254)) origpositions[t]=255; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } poslookupcnt=mh->ordnum; S3MIT_CreateOrders(curious); if(!(paraptr=(ULONG*)_mm_malloc((mh->insnum+mh->smpnum+of.numpat)* sizeof(ULONG)))) return 0; /* read the instrument, sample, and pattern parapointers */ _mm_read_I_ULONGS(paraptr,mh->insnum+mh->smpnum+of.numpat,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* Check for and load midi information for resonant filters */ if(mh->cmwt>=0x216) { if(mh->special&8) { IT_LoadMidiConfiguration(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else IT_LoadMidiConfiguration(NULL); filters=1; } /* Check for and load song comment */ if((mh->special&1)&&(mh->cwt>=0x104)&&(mh->msglength)) { _mm_fseek(modreader,(long)(mh->msgoffset),SEEK_SET); if(!ReadComment(mh->msglength)) return 0; } if(!(mh->flags&4)) of.numins=of.numsmp; if(!AllocSamples()) return 0; if(!AllocLinear()) return 0; /* Load all samples */ q = of.samples; for(t=0;tsmpnum;t++) { ITSAMPLE s; /* seek to sample position */ _mm_fseek(modreader,(long)(paraptr[mh->insnum+t]+4),SEEK_SET); /* load sample info */ _mm_read_string(s.filename,12,modreader); s.zerobyte = _mm_read_UBYTE(modreader); s.globvol = _mm_read_UBYTE(modreader); s.flag = _mm_read_UBYTE(modreader); s.volume = _mm_read_UBYTE(modreader); _mm_read_string(s.sampname,26,modreader); s.convert = _mm_read_UBYTE(modreader); s.panning = _mm_read_UBYTE(modreader); s.length = _mm_read_I_ULONG(modreader); s.loopbeg = _mm_read_I_ULONG(modreader); s.loopend = _mm_read_I_ULONG(modreader); s.c5spd = _mm_read_I_ULONG(modreader); s.susbegin = _mm_read_I_ULONG(modreader); s.susend = _mm_read_I_ULONG(modreader); s.sampoffset = _mm_read_I_ULONG(modreader); s.vibspeed = _mm_read_UBYTE(modreader); s.vibdepth = _mm_read_UBYTE(modreader); s.vibrate = _mm_read_UBYTE(modreader); s.vibwave = _mm_read_UBYTE(modreader); /* Generate an error if c5spd is > 512k, or samplelength > 256 megs (nothing would EVER be that high) */ if(_mm_eof(modreader)||(s.c5spd>0x7ffffL)||(s.length>0xfffffffUL)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } /* Reality check for sample loop information */ if((s.flag&16)&& ((s.loopbeg>0xfffffffUL)||(s.loopend>0xfffffffUL))) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } q->samplename = DupStr(s.sampname,26,0); q->speed = s.c5spd / 2; q->panning = ((s.panning&127)==64)?255:(s.panning&127)<<2; q->length = s.length; q->loopstart = s.loopbeg; q->loopend = s.loopend; q->volume = s.volume; q->globvol = s.globvol; q->seekpos = s.sampoffset; /* Convert speed to XM linear finetune */ if(of.flags&UF_LINEAR) q->speed=speed_to_finetune(s.c5spd,t); if(s.panning&128) q->flags|=SF_OWNPAN; if(s.vibrate) { q->vibflags |= AV_IT; q->vibtype = s.vibwave; q->vibsweep = s.vibrate * 2; q->vibdepth = s.vibdepth; q->vibrate = s.vibspeed; } if(s.flag&2) q->flags|=SF_16BITS; if((s.flag&8)&&(mh->cwt>=0x214)) { q->flags|=SF_ITPACKED; /*compressed=1;*/ } if(s.flag&16) q->flags|=SF_LOOP; if(s.flag&64) q->flags|=SF_BIDI; if(mh->cwt>=0x200) { if(s.convert&1) q->flags|=SF_SIGNED; if(s.convert&4) q->flags|=SF_DELTA; } q++; } /* Load instruments if instrument mode flag enabled */ if(mh->flags&4) { if(!AllocInstruments()) return 0; d=of.instruments; of.flags|=UF_NNA|UF_INST; for(t=0;tinsnum;t++) { ITINSTHEADER ih; /* seek to instrument position */ _mm_fseek(modreader,paraptr[t]+4,SEEK_SET); /* load instrument info */ _mm_read_string(ih.filename,12,modreader); ih.zerobyte = _mm_read_UBYTE(modreader); if(mh->cwt<0x200) { /* load IT 1.xx inst header */ ih.volflg = _mm_read_UBYTE(modreader); ih.volbeg = _mm_read_UBYTE(modreader); ih.volend = _mm_read_UBYTE(modreader); ih.volsusbeg = _mm_read_UBYTE(modreader); ih.volsusend = _mm_read_UBYTE(modreader); _mm_read_I_UWORD(modreader); ih.fadeout = _mm_read_I_UWORD(modreader); ih.nna = _mm_read_UBYTE(modreader); ih.dnc = _mm_read_UBYTE(modreader); } else { /* Read IT200+ header */ ih.nna = _mm_read_UBYTE(modreader); ih.dct = _mm_read_UBYTE(modreader); ih.dca = _mm_read_UBYTE(modreader); ih.fadeout = _mm_read_I_UWORD(modreader); ih.ppsep = _mm_read_UBYTE(modreader); ih.ppcenter = _mm_read_UBYTE(modreader); ih.globvol = _mm_read_UBYTE(modreader); ih.chanpan = _mm_read_UBYTE(modreader); ih.rvolvar = _mm_read_UBYTE(modreader); ih.rpanvar = _mm_read_UBYTE(modreader); } ih.trkvers = _mm_read_I_UWORD(modreader); ih.numsmp = _mm_read_UBYTE(modreader); _mm_skip_BYTE(modreader); _mm_read_string(ih.name,26,modreader); _mm_read_UBYTES(ih.blank01,6,modreader); _mm_read_I_UWORDS(ih.samptable,ITNOTECNT,modreader); if(mh->cwt<0x200) { /* load IT 1xx volume envelope */ _mm_read_UBYTES(ih.volenv,200,modreader); for(lp=0;lp ITENVCNT) \ ih. name##pts = ITENVCNT; \ ih. name##beg =_mm_read_UBYTE(modreader); \ ih. name##end =_mm_read_UBYTE(modreader); \ ih. name##susbeg=_mm_read_UBYTE(modreader); \ ih. name##susend=_mm_read_UBYTE(modreader); \ for(lp=0;lp ITENVCNT) \ ih. name/**/pts = ITENVCNT; \ ih. name/**/beg =_mm_read_UBYTE(modreader); \ ih. name/**/end =_mm_read_UBYTE(modreader); \ ih. name/**/susbeg=_mm_read_UBYTE(modreader); \ ih. name/**/susend=_mm_read_UBYTE(modreader); \ for(lp=0;lpvolflg|=EF_VOLENV; d->insname = DupStr(ih.name,26,0); d->nnatype = ih.nna & NNA_MASK; if(mh->cwt<0x200) { d->volfade=ih.fadeout<< 6; if(ih.dnc) { d->dct=DCT_NOTE; d->dca=DCA_CUT; } if(ih.volflg&1) d->volflg|=EF_ON; if(ih.volflg&2) d->volflg|=EF_LOOP; if(ih.volflg&4) d->volflg|=EF_SUSTAIN; /* XM conversion of IT envelope Array */ d->volbeg = ih.volbeg; d->volend = ih.volend; d->volsusbeg = ih.volsusbeg; d->volsusend = ih.volsusend; if(ih.volflg&1) { for(u=0;uvolpts]!=0xff) { d->volenv[d->volpts].val=(ih.volnode[d->volpts]<<2); d->volenv[d->volpts].pos=ih.oldvoltick[d->volpts]; d->volpts++; } else break; } } else { d->panning=((ih.chanpan&127)==64)?255:(ih.chanpan&127)<<2; if(!(ih.chanpan&128)) d->flags|=IF_OWNPAN; if(!(ih.ppsep & 128)) { d->pitpansep=ih.ppsep<<2; d->pitpancenter=ih.ppcenter; d->flags|=IF_PITCHPAN; } d->globvol=ih.globvol>>1; d->volfade=ih.fadeout<<5; d->dct =ih.dct; d->dca =ih.dca; if(mh->cwt>=0x204) { d->rvolvar = ih.rvolvar; d->rpanvar = ih.rpanvar; } #if defined __STDC__ || defined _MSC_VER #define IT_ProcessEnvelope(name) \ if(ih. name##flg&1) d-> name##flg|=EF_ON; \ if(ih. name##flg&2) d-> name##flg|=EF_LOOP; \ if(ih. name##flg&4) d-> name##flg|=EF_SUSTAIN; \ d-> name##pts=ih. name##pts; \ d-> name##beg=ih. name##beg; \ d-> name##end=ih. name##end; \ d-> name##susbeg=ih. name##susbeg; \ d-> name##susend=ih. name##susend; \ \ for(u=0;u name##env[u].pos=ih. name##tick[u]; \ \ if((d-> name##flg&EF_ON)&&(d-> name##pts<2)) \ d-> name##flg&=~EF_ON #else #define IT_ProcessEnvelope(name) \ if(ih. name/**/flg&1) d-> name/**/flg|=EF_ON; \ if(ih. name/**/flg&2) d-> name/**/flg|=EF_LOOP; \ if(ih. name/**/flg&4) d-> name/**/flg|=EF_SUSTAIN; \ d-> name/**/pts=ih. name/**/pts; \ d-> name/**/beg=ih. name/**/beg; \ d-> name/**/end=ih. name/**/end; \ d-> name/**/susbeg=ih. name/**/susbeg; \ d-> name/**/susend=ih. name/**/susend; \ \ for(u=0;u name/**/env[u].pos=ih. name/**/tick[u]; \ \ if((d-> name/**/flg&EF_ON)&&(d-> name/**/pts<2)) \ d-> name/**/flg&=~EF_ON #endif IT_ProcessEnvelope(vol); for(u=0;uvolenv[u].val=(ih.volnode[u]<<2); IT_ProcessEnvelope(pan); for(u=0;upanenv[u].val= ih.pannode[u]==32?255:(ih.pannode[u]+32)<<2; IT_ProcessEnvelope(pit); for(u=0;upitenv[u].val=ih.pitnode[u]+32; #undef IT_ProcessEnvelope if(ih.pitflg&0x80) { /* filter envelopes not supported yet */ d->pitflg&=~EF_ON; ih.pitpts=ih.pitbeg=ih.pitend=0; #ifdef MIKMOD_DEBUG { static int warn=0; if(!warn) fprintf(stderr, "\rFilter envelopes not supported yet\n"); warn=1; } #endif } } for(u=0;usamplenote[u]=(ih.samptable[u]&255); d->samplenumber[u]= (ih.samptable[u]>>8)?((ih.samptable[u]>>8)-1):0xffff; if(d->samplenumber[u]>=of.numsmp) d->samplenote[u]=255; else if (of.flags&UF_LINEAR) { int note=(int)d->samplenote[u]+noteindex[d->samplenumber[u]]; d->samplenote[u]=(note<0)?0:(note>255?255:note); } } d++; } } else if(of.flags & UF_LINEAR) { if(!AllocInstruments()) return 0; d=of.instruments; of.flags|=UF_INST; for(t=0;tsmpnum;t++,d++) for(u=0;usamplenumber[u]>=of.numsmp) d->samplenote[u]=255; else { int note=(int)d->samplenote[u]+noteindex[d->samplenumber[u]]; d->samplenote[u]=(note<0)?0:(note>255?255:note); } } } /* Figure out how many channels this song actually uses */ of.numchn=0; memset(remap,-1,UF_MAXCHAN*sizeof(UBYTE)); for(t=0;tinsnum+mh->smpnum+t]) { /* 0 -> empty 64 row pattern */ _mm_fseek(modreader,((long)paraptr[mh->insnum+mh->smpnum+t]),SEEK_SET); _mm_read_I_UWORD(modreader); /* read pattern length (# of rows) Impulse Tracker never creates patterns with less than 32 rows, but some other trackers do, so we only check for more than 256 rows */ packlen=_mm_read_I_UWORD(modreader); if(packlen>256) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } _mm_read_I_ULONG(modreader); if(!IT_GetNumChannels(packlen)) return 0; } } /* give each of them a different number */ for(t=0;tinsnum+mh->smpnum+t]) { /* 0 -> empty 64 row pattern */ of.pattrows[t]=64; for(u=0;uinsnum+mh->smpnum+t]),SEEK_SET); packlen=_mm_read_I_UWORD(modreader); (void)packlen; /* unused */ of.pattrows[t]=_mm_read_I_UWORD(modreader); _mm_read_I_ULONG(modreader); if(!IT_ReadPattern(of.pattrows[t])) return 0; } } return 1; } static CHAR *IT_LoadTitle(void) { CHAR s[26]; _mm_fseek(modreader,4,SEEK_SET); if(!_mm_read_UBYTES(s,26,modreader)) return NULL; return(DupStr(s,26,0)); } /*========== Loader information */ MIKMODAPI MLOADER load_it={ NULL, "IT", "IT (Impulse Tracker)", IT_Init, IT_Test, IT_Load, IT_Cleanup, IT_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_mod.c0000644000000000000000000003052712222472510015626 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_mod.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Generic MOD loader (Protracker, StarTracker, FastTracker, etc) ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct MSAMPINFO { CHAR samplename[23]; /* 22 in module, 23 in memory */ UWORD length; UBYTE finetune; UBYTE volume; UWORD reppos; UWORD replen; } MSAMPINFO; typedef struct MODULEHEADER { CHAR songname[21]; /* the songname.. 20 in module, 21 in memory */ MSAMPINFO samples[31]; /* all sampleinfo */ UBYTE songlength; /* number of patterns used */ UBYTE magic1; /* should be 127 */ UBYTE positions[128]; /* which pattern to play at pos */ UBYTE magic2[4]; /* string "M.K." or "FLT4" or "FLT8" */ } MODULEHEADER; typedef struct MODTYPE { CHAR id[5]; UBYTE channels; CHAR *name; } MODTYPE; typedef struct MODNOTE { UBYTE a, b, c, d; } MODNOTE; /*========== Loader variables */ #define MODULEHEADERSIZE 0x438 static CHAR protracker[] = "Protracker"; static CHAR startrekker[] = "Startrekker"; static CHAR fasttracker[] = "Fasttracker"; static CHAR oktalyser[] = "Oktalyser"; static CHAR oktalyzer[] = "Oktalyzer"; static CHAR taketracker[] = "TakeTracker"; static CHAR orpheus[] = "Imago Orpheus (MOD format)"; static MODULEHEADER *mh = NULL; static MODNOTE *patbuf = NULL; static int modtype, trekker; /*========== Loader code */ /* given the module ID, determine the number of channels and the tracker description ; also alters modtype */ static BOOL MOD_CheckType(UBYTE *id, UBYTE *numchn, CHAR **descr) { modtype = trekker = 0; /* Protracker and variants */ if ((!memcmp(id, "M.K.", 4)) || (!memcmp(id, "M!K!", 4))) { *descr = protracker; modtype = 0; *numchn = 4; return 1; } /* Star Tracker */ if (((!memcmp(id, "FLT", 3)) || (!memcmp(id, "EXO", 3))) && (isdigit(id[3]))) { *descr = startrekker; modtype = trekker = 1; *numchn = id[3] - '0'; if (*numchn == 4 || *numchn == 8) return 1; #ifdef MIKMOD_DEBUG else fprintf(stderr, "\rUnknown FLT%d module type\n", *numchn); #endif return 0; } /* Oktalyzer (Amiga) */ if (!memcmp(id, "OKTA", 4)) { *descr = oktalyzer; modtype = 1; *numchn = 8; return 1; } /* Oktalyser (Atari) */ if (!memcmp(id, "CD81", 4)) { *descr = oktalyser; modtype = 1; *numchn = 8; return 1; } /* Fasttracker */ if ((!memcmp(id + 1, "CHN", 3)) && (isdigit(id[0]))) { *descr = fasttracker; modtype = 1; *numchn = id[0] - '0'; return 1; } /* Fasttracker or Taketracker */ if (((!memcmp(id + 2, "CH", 2)) || (!memcmp(id + 2, "CN", 2))) && (isdigit(id[0])) && (isdigit(id[1]))) { if (id[3] == 'H') { *descr = fasttracker; modtype = 2; /* this can also be Imago Orpheus */ } else { *descr = taketracker; modtype = 1; } *numchn = (id[0] - '0') * 10 + (id[1] - '0'); return 1; } return 0; } static BOOL MOD_Test(void) { UBYTE id[4], numchn; CHAR *descr; _mm_fseek(modreader, MODULEHEADERSIZE, SEEK_SET); if (!_mm_read_UBYTES(id, 4, modreader)) return 0; if (MOD_CheckType(id, &numchn, &descr)) return 1; return 0; } static BOOL MOD_Init(void) { if (!(mh = (MODULEHEADER *)_mm_malloc(sizeof(MODULEHEADER)))) return 0; return 1; } static void MOD_Cleanup(void) { _mm_free(mh); _mm_free(patbuf); } /* Old (amiga) noteinfo: _____byte 1_____ byte2_ _____byte 3_____ byte4_ / \ / \ / \ / \ 0000 0000-00000000 0000 0000-00000000 Upper four 12 bits for Lower four Effect command. bits of sam- note period. bits of sam- ple number. ple number. */ static UBYTE ConvertNote(MODNOTE *n, UBYTE lasteffect) { UBYTE instrument, effect, effdat, note; UWORD period; UBYTE lastnote = 0; /* extract the various information from the 4 bytes that make up a note */ instrument = (n->a & 0x10) | (n->c >> 4); period = (((UWORD)n->a & 0xf) << 8) + n->b; effect = n->c & 0xf; effdat = n->d; /* Convert the period to a note number */ note = 0; if (period) { for (note = 0; note < 7 * OCTAVE; note++) if (period >= npertab[note]) break; if (note == 7 * OCTAVE) note = 0; else note++; } if (instrument) { /* if instrument does not exist, note cut */ if ((instrument > 31) || (!mh->samples[instrument - 1].length)) { UniPTEffect(0xc, 0); if (effect == 0xc) effect = effdat = 0; } else { /* Protracker handling */ if (!modtype) { /* if we had a note, then change instrument... */ if (note) UniInstrument(instrument - 1); /* ...otherwise, only adjust volume... */ else { /* ...unless an effect was specified, which forces a new note to be played */ if (effect || effdat) { UniInstrument(instrument - 1); note = lastnote; } else UniPTEffect(0xc, mh->samples[instrument - 1].volume & 0x7f); } } else { /* Fasttracker handling */ UniInstrument(instrument - 1); if (!note) note = lastnote; } } } if (note) { UniNote(note + 2 * OCTAVE - 1); lastnote = note; } /* Convert pattern jump from Dec to Hex */ if (effect == 0xd) effdat = (((effdat & 0xf0) >> 4) * 10) + (effdat & 0xf); /* Volume slide, up has priority */ if ((effect == 0xa) && (effdat & 0xf) && (effdat & 0xf0)) effdat &= 0xf0; /* Handle ``heavy'' volumes correctly */ if ((effect == 0xc) && (effdat > 0x40)) effdat = 0x40; /* An isolated 100, 200 or 300 effect should be ignored (no "standalone" porta memory in mod files). However, a sequence such as 1XX, 100, 100, 100 is fine. */ if ((!effdat) && ((effect == 1)||(effect == 2)||(effect ==3)) && (lasteffect < 0x10) && (effect != lasteffect)) effect = 0; UniPTEffect(effect, effdat); if (effect == 8) of.flags |= UF_PANNING; return effect; } static UBYTE *ConvertTrack(MODNOTE *n, int numchn) { int t; UBYTE lasteffect = 0x10; /* non existant effect */ UniReset(); for (t = 0; t < 64; t++) { lasteffect = ConvertNote(n,lasteffect); UniNewline(); n += numchn; } return UniDup(); } /* Loads all patterns of a modfile and converts them into the 3 byte format. */ static BOOL ML_LoadPatterns(void) { int t, s, tracks = 0; if (!AllocPatterns()) return 0; if (!AllocTracks()) return 0; /* Allocate temporary buffer for loading and converting the patterns */ if (!(patbuf = (MODNOTE *)_mm_calloc(64U * of.numchn, sizeof(MODNOTE)))) return 0; if (trekker && of.numchn == 8) { /* Startrekker module dual pattern */ for (t = 0; t < of.numpat; t++) { for (s = 0; s < (64U * 4); s++) { patbuf[s].a = _mm_read_UBYTE(modreader); patbuf[s].b = _mm_read_UBYTE(modreader); patbuf[s].c = _mm_read_UBYTE(modreader); patbuf[s].d = _mm_read_UBYTE(modreader); } for (s = 0; s < 4; s++) if (!(of.tracks[tracks++] = ConvertTrack(patbuf + s, 4))) return 0; for (s = 0; s < (64U * 4); s++) { patbuf[s].a = _mm_read_UBYTE(modreader); patbuf[s].b = _mm_read_UBYTE(modreader); patbuf[s].c = _mm_read_UBYTE(modreader); patbuf[s].d = _mm_read_UBYTE(modreader); } for (s = 0; s < 4; s++) if (!(of.tracks[tracks++] = ConvertTrack(patbuf + s, 4))) return 0; } } else { /* Generic module pattern */ for (t = 0; t < of.numpat; t++) { /* Load the pattern into the temp buffer and convert it */ for (s = 0; s < (64U * of.numchn); s++) { patbuf[s].a = _mm_read_UBYTE(modreader); patbuf[s].b = _mm_read_UBYTE(modreader); patbuf[s].c = _mm_read_UBYTE(modreader); patbuf[s].d = _mm_read_UBYTE(modreader); } for (s = 0; s < of.numchn; s++) if (!(of.tracks[tracks++] = ConvertTrack(patbuf + s, of.numchn))) return 0; } } return 1; } static BOOL MOD_Load(BOOL curious) { int t, scan; SAMPLE *q; MSAMPINFO *s; CHAR *descr; /* try to read module header */ _mm_read_string((CHAR *)mh->songname, 20, modreader); mh->songname[20] = 0; /* just in case */ for (t = 0; t < 31; t++) { s = &mh->samples[t]; _mm_read_string(s->samplename, 22, modreader); s->samplename[22] = 0; /* just in case */ s->length = _mm_read_M_UWORD(modreader); s->finetune = _mm_read_UBYTE(modreader); s->volume = _mm_read_UBYTE(modreader); s->reppos = _mm_read_M_UWORD(modreader); s->replen = _mm_read_M_UWORD(modreader); } mh->songlength = _mm_read_UBYTE(modreader); /* this fixes mods which declare more than 128 positions. * eg: beatwave.mod */ if (mh->songlength > 128) { mh->songlength = 128; } mh->magic1 = _mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->positions, 128, modreader); _mm_read_UBYTES(mh->magic2, 4, modreader); if (_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ of.initspeed = 6; of.inittempo = 125; if (!(MOD_CheckType(mh->magic2, &of.numchn, &descr))) { _mm_errno = MMERR_NOT_A_MODULE; return 0; } if (trekker && of.numchn == 8) for (t = 0; t < 128; t++) /* if module pretends to be FLT8, yet the order table contains odd numbers, chances are it's a lying FLT4... */ if (mh->positions[t] & 1) { of.numchn = 4; break; } if (trekker && of.numchn == 8) for (t = 0; t < 128; t++) mh->positions[t] >>= 1; of.songname = DupStr(mh->songname, 21, 1); of.numpos = mh->songlength; of.reppos = 0; /* Count the number of patterns */ of.numpat = 0; for (t = 0; t < of.numpos; t++) if (mh->positions[t] > of.numpat) of.numpat = mh->positions[t]; /* since some old modules embed extra patterns, we have to check the whole list to get the samples' file offsets right - however we can find garbage here, so check carefully */ scan = 1; for (t = of.numpos; t < 128; t++) if (mh->positions[t] >= 0x80) scan = 0; if (scan) for (t = of.numpos; t < 128; t++) { if (mh->positions[t] > of.numpat) of.numpat = mh->positions[t]; if ((curious) && (mh->positions[t])) of.numpos = t + 1; } of.numpat++; of.numtrk = of.numpat * of.numchn; if (!AllocPositions(of.numpos)) return 0; for (t = 0; t < of.numpos; t++) of.positions[t] = mh->positions[t]; /* Finally, init the sampleinfo structures */ of.numins = of.numsmp = 31; if (!AllocSamples()) return 0; s = mh->samples; q = of.samples; for (t = 0; t < of.numins; t++) { /* convert the samplename */ q->samplename = DupStr(s->samplename, 23, 1); /* init the sampleinfo variables and convert the size pointers */ q->speed = finetune[s->finetune & 0xf]; q->volume = s->volume & 0x7f; q->loopstart = (ULONG)s->reppos << 1; q->loopend = q->loopstart + ((ULONG)s->replen << 1); q->length = (ULONG)s->length << 1; q->flags = SF_SIGNED; /* Imago Orpheus creates MODs with 16 bit samples, check */ if ((modtype == 2) && (s->volume & 0x80)) { q->flags |= SF_16BITS; descr = orpheus; } if (s->replen > 2) q->flags |= SF_LOOP; s++; q++; } of.modtype = strdup(descr); if (!ML_LoadPatterns()) return 0; return 1; } static CHAR *MOD_LoadTitle(void) { CHAR s[21]; _mm_fseek(modreader, 0, SEEK_SET); if (!_mm_read_UBYTES(s, 20, modreader)) return NULL; s[20] = 0; /* just in case */ return (DupStr(s, 21, 1)); } /*========== Loader information */ MIKMODAPI MLOADER load_mod = { NULL, "Standard module", "MOD (31 instruments)", MOD_Init, MOD_Test, MOD_Load, MOD_Cleanup, MOD_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_far.c0000644000000000000000000002027012225756222015621 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_far.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Farandole (FAR) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct FARHEADER1 { UBYTE id[4]; /* file magic */ CHAR songname[40]; /* songname */ CHAR blah[3]; /* 13,10,26 */ UWORD headerlen; /* remaining length of header in bytes */ UBYTE version; UBYTE onoff[16]; UBYTE edit1[9]; UBYTE speed; UBYTE panning[16]; UBYTE edit2[4]; UWORD stlen; } FARHEADER1; typedef struct FARHEADER2 { UBYTE orders[256]; UBYTE numpat; UBYTE snglen; UBYTE loopto; UWORD patsiz[256]; } FARHEADER2; typedef struct FARSAMPLE { CHAR samplename[32]; ULONG length; UBYTE finetune; UBYTE volume; ULONG reppos; ULONG repend; UBYTE type; UBYTE loop; } FARSAMPLE; typedef struct FARNOTE { UBYTE note,ins,vol,eff; } FARNOTE; /*========== Loader variables */ static CHAR FAR_Version[] = "Farandole"; static FARHEADER1 *mh1 = NULL; static FARHEADER2 *mh2 = NULL; static FARNOTE *pat = NULL; static unsigned char FARSIG[4+3]={'F','A','R',0xfe,13,10,26}; /*========== Loader code */ static BOOL FAR_Test(void) { UBYTE id[47]; if(!_mm_read_UBYTES(id,47,modreader)) return 0; if((memcmp(id,FARSIG,4))||(memcmp(id+44,FARSIG+4,3))) return 0; return 1; } static BOOL FAR_Init(void) { if(!(mh1 = (FARHEADER1*)_mm_malloc(sizeof(FARHEADER1)))) return 0; if(!(mh2 = (FARHEADER2*)_mm_malloc(sizeof(FARHEADER2)))) return 0; if(!(pat = (FARNOTE*)_mm_malloc(256*16*4*sizeof(FARNOTE)))) return 0; return 1; } static void FAR_Cleanup(void) { _mm_free(mh1); _mm_free(mh2); _mm_free(pat); } static UBYTE *FAR_ConvertTrack(FARNOTE* n,int rows) { int t,vibdepth=1; UniReset(); for(t=0;tnote) { UniInstrument(n->ins); UniNote(n->note+3*OCTAVE-1); } if (n->vol&0xf) UniPTEffect(0xc,(n->vol&0xf)<<2); if (n->eff) switch(n->eff>>4) { case 0x3: /* porta to note */ UniPTEffect(0x3,(n->eff&0xf)<<4); break; case 0x4: /* retrigger */ UniPTEffect(0x0e, 0x90 | (n->eff & 0x0f)); break; case 0x5: /* set vibrato depth */ vibdepth=n->eff&0xf; break; case 0x6: /* vibrato */ UniPTEffect(0x4,((n->eff&0xf)<<4)|vibdepth); break; case 0x7: /* volume slide up */ UniPTEffect(0xa,(n->eff&0xf)<<4); break; case 0x8: /* volume slide down */ UniPTEffect(0xa,n->eff&0xf); break; case 0xb: /* panning */ UniPTEffect(0xe,0x80|(n->eff&0xf)); break; case 0xf: /* set speed */ UniPTEffect(0xf,n->eff&0xf); break; /* others not yet implemented */ default: #ifdef MIKMOD_DEBUG fprintf(stderr,"\rFAR: unsupported effect %02X\n",n->eff); #endif break; } UniNewline(); n+=16; } return UniDup(); } static BOOL FAR_Load(BOOL curious) { int t,u,tracks=0; SAMPLE *q; FARSAMPLE s; FARNOTE *crow; UBYTE smap[8]; /* try to read module header (first part) */ _mm_read_UBYTES(mh1->id,4,modreader); _mm_read_SBYTES(mh1->songname,40,modreader); _mm_read_SBYTES(mh1->blah,3,modreader); mh1->headerlen = _mm_read_I_UWORD (modreader); mh1->version = _mm_read_UBYTE (modreader); _mm_read_UBYTES(mh1->onoff,16,modreader); _mm_read_UBYTES(mh1->edit1,9,modreader); mh1->speed = _mm_read_UBYTE(modreader); _mm_read_UBYTES(mh1->panning,16,modreader); _mm_read_UBYTES(mh1->edit2,4,modreader); mh1->stlen = _mm_read_I_UWORD (modreader); /* init modfile data */ of.modtype = strdup(FAR_Version); of.songname = DupStr(mh1->songname,40,1); of.numchn = 16; of.initspeed = mh1->speed; of.inittempo = 80; of.reppos = 0; of.flags |= UF_PANNING; for(t=0;t<16;t++) of.panning[t]=mh1->panning[t]<<4; /* read songtext into comment field */ if(mh1->stlen) if (!ReadLinedComment(mh1->stlen, 66)) return 0; /* try to read module header (second part) */ _mm_read_UBYTES(mh2->orders,256,modreader); mh2->numpat = _mm_read_UBYTE(modreader); mh2->snglen = _mm_read_UBYTE(modreader); mh2->loopto = _mm_read_UBYTE(modreader); _mm_read_I_UWORDS(mh2->patsiz,256,modreader); of.numpos = mh2->snglen; if(!AllocPositions(of.numpos)) return 0; for(t=0;torders[t]==0xff) break; of.positions[t] = mh2->orders[t]; } /* count number of patterns stored in file */ of.numpat = 0; for(t=0;t<256;t++) if(mh2->patsiz[t]) if((t+1)>of.numpat) of.numpat=t+1; of.numtrk = of.numpat*of.numchn; /* seek across eventual new data */ _mm_fseek(modreader,mh1->headerlen-(869+mh1->stlen),SEEK_CUR); /* alloc track and pattern structures */ if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; for(t=0;tpatsiz[t]) { rows = _mm_read_UBYTE(modreader); tempo = _mm_read_UBYTE(modreader); (void)tempo; /* unused */ crow = pat; /* file often allocates 64 rows even if there are less in pattern */ if (mh2->patsiz[t]<2+(rows*16*4)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } for(u=(mh2->patsiz[t]-2)/4;u;u--,crow++) { crow->note = _mm_read_UBYTE(modreader); crow->ins = _mm_read_UBYTE(modreader); crow->vol = _mm_read_UBYTE(modreader); crow->eff = _mm_read_UBYTE(modreader); } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } crow=pat; of.pattrows[t] = rows; for(u=16;u;u--,crow++) if(!(of.tracks[tracks++]=FAR_ConvertTrack(crow,rows))) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } } else tracks+=16; } /* read sample map */ if(!_mm_read_UBYTES(smap,8,modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* count number of samples used */ of.numins = 0; for(t=0;t<64;t++) if(smap[t>>3]&(1<<(t&7))) of.numins=t+1; of.numsmp = of.numins; /* alloc sample structs */ if(!AllocSamples()) return 0; q = of.samples; for(t=0;tspeed = 8363; q->flags = SF_SIGNED; if(smap[t>>3]&(1<<(t&7))) { _mm_read_SBYTES(s.samplename,32,modreader); s.length = _mm_read_I_ULONG(modreader); s.finetune = _mm_read_UBYTE(modreader); s.volume = _mm_read_UBYTE(modreader); s.reppos = _mm_read_I_ULONG(modreader); s.repend = _mm_read_I_ULONG(modreader); s.type = _mm_read_UBYTE(modreader); s.loop = _mm_read_UBYTE(modreader); q->samplename = DupStr(s.samplename,32,1); q->length = s.length; q->loopstart = s.reppos; q->loopend = s.repend; q->volume = s.volume<<2; if(s.type&1) q->flags|=SF_16BITS; if(s.loop&8) q->flags|=SF_LOOP; q->seekpos = _mm_ftell(modreader); _mm_fseek(modreader,q->length,SEEK_CUR); } else q->samplename = strdup(""); q++; } return 1; } static CHAR *FAR_LoadTitle(void) { CHAR s[40]; _mm_fseek(modreader,4,SEEK_SET); if(!_mm_read_UBYTES(s,40,modreader)) return NULL; return (DupStr(s,40,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_far={ NULL, "FAR", "FAR (Farandole Composer)", FAR_Init, FAR_Test, FAR_Load, FAR_Cleanup, FAR_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_s3m.c0000644000000000000000000002721112260336146015553 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_s3m.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Screamtracker (S3M) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* header */ typedef struct S3MHEADER { CHAR songname[28]; UBYTE t1a; UBYTE type; UBYTE unused1[2]; UWORD ordnum; UWORD insnum; UWORD patnum; UWORD flags; UWORD tracker; UWORD fileformat; CHAR scrm[4]; UBYTE mastervol; UBYTE initspeed; UBYTE inittempo; UBYTE mastermult; UBYTE ultraclick; UBYTE pantable; UBYTE unused2[8]; UWORD special; UBYTE channels[32]; } S3MHEADER; /* sample information */ typedef struct S3MSAMPLE { UBYTE type; CHAR filename[12]; UBYTE memsegh; UWORD memsegl; ULONG length; ULONG loopbeg; ULONG loopend; UBYTE volume; UBYTE dsk; UBYTE pack; UBYTE flags; ULONG c2spd; UBYTE unused[12]; CHAR sampname[28]; CHAR scrs[4]; } S3MSAMPLE; typedef struct S3MNOTE { UBYTE note,ins,vol,cmd,inf; } S3MNOTE; /*========== Loader variables */ static S3MNOTE *s3mbuf = NULL; /* pointer to a complete S3M pattern */ static S3MHEADER *mh = NULL; static UWORD *paraptr = NULL; /* parapointer array (see S3M docs) */ static unsigned int tracker; /* tracker id */ /* tracker identifiers */ #define NUMTRACKERS 4 static CHAR* S3M_Version[] = { "Screamtracker x.xx", "Imago Orpheus x.xx (S3M format)", "Impulse Tracker x.xx (S3M format)", "Unknown tracker x.xx (S3M format)", "Impulse Tracker 2.14p3 (S3M format)", "Impulse Tracker 2.14p4 (S3M format)" }; /* version number position in above array */ static int numeric[NUMTRACKERS]={14,14,16,16}; /*========== Loader code */ static BOOL S3M_Test(void) { UBYTE id[4]; _mm_fseek(modreader,0x2c,SEEK_SET); if(!_mm_read_UBYTES(id,4,modreader)) return 0; if(!memcmp(id,"SCRM",4)) return 1; return 0; } static BOOL S3M_Init(void) { if(!(s3mbuf=(S3MNOTE*)_mm_malloc(32*64*sizeof(S3MNOTE)))) return 0; if(!(mh=(S3MHEADER*)_mm_malloc(sizeof(S3MHEADER)))) return 0; if(!(poslookup=(UBYTE*)_mm_malloc(sizeof(UBYTE)*256))) return 0; memset(poslookup,-1,256); return 1; } static void S3M_Cleanup(void) { _mm_free(s3mbuf); _mm_free(paraptr); _mm_free(poslookup); _mm_free(mh); _mm_free(origpositions); } /* Because so many s3m files have 16 channels as the set number used, but really only use far less (usually 8 to 12 still), I had to make this function, which determines the number of channels that are actually USED by a pattern. For every channel that's used, it sets the appropriate array entry of the global variable 'remap' NOTE: You must first seek to the file location of the pattern before calling this procedure. Returns 0 on fail. */ static BOOL S3M_GetNumChannels(void) { int row=0,flag,ch; while(row<64) { flag=_mm_read_UBYTE(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } if(flag) { ch=flag&31; if(mh->channels[ch]<32) remap[ch] = 0; if(flag&32) {_mm_skip_BYTE(modreader);_mm_skip_BYTE(modreader);} if(flag&64) _mm_skip_BYTE(modreader); if(flag&128){_mm_skip_BYTE(modreader);_mm_skip_BYTE(modreader);} } else row++; } return 1; } static BOOL S3M_ReadPattern(void) { int row=0,flag,ch; S3MNOTE *n,dummy; /* clear pattern data */ memset(s3mbuf,255,32*64*sizeof(S3MNOTE)); while(row<64) { flag=_mm_read_UBYTE(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } if(flag) { ch=remap[flag&31]; if(ch!=-1) n=&s3mbuf[(64U*ch)+row]; else n=&dummy; if(flag&32) { n->note=_mm_read_UBYTE(modreader); n->ins=_mm_read_UBYTE(modreader); } if(flag&64) { n->vol=_mm_read_UBYTE(modreader); if (n->vol>64) n->vol=64; } if(flag&128) { n->cmd=_mm_read_UBYTE(modreader); n->inf=_mm_read_UBYTE(modreader); } } else row++; } return 1; } static UBYTE* S3M_ConvertTrack(S3MNOTE* tr) { int t; UniReset(); for(t=0;t<64;t++) { UBYTE note,ins,vol; note=tr[t].note; ins=tr[t].ins; vol=tr[t].vol; if((ins)&&(ins!=255)) UniInstrument(ins-1); if(note!=255) { if(note==254) { UniPTEffect(0xc,0); /* note cut command */ vol=255; } else UniNote(((note>>4)*OCTAVE)+(note&0xf)); /* normal note */ } if(vol<255) UniPTEffect(0xc,vol); S3MIT_ProcessCmd(tr[t].cmd,tr[t].inf, tracker == 1 ? S3MIT_OLDSTYLE | S3MIT_SCREAM : S3MIT_OLDSTYLE); UniNewline(); } return UniDup(); } static BOOL S3M_Load(BOOL curious) { int t,u,track = 0; SAMPLE *q; UBYTE pan[32]; /* try to read module header */ _mm_read_string(mh->songname,28,modreader); mh->t1a =_mm_read_UBYTE(modreader); mh->type =_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->unused1,2,modreader); mh->ordnum =_mm_read_I_UWORD(modreader); mh->insnum =_mm_read_I_UWORD(modreader); mh->patnum =_mm_read_I_UWORD(modreader); mh->flags =_mm_read_I_UWORD(modreader); mh->tracker =_mm_read_I_UWORD(modreader); mh->fileformat =_mm_read_I_UWORD(modreader); _mm_read_string(mh->scrm,4,modreader); mh->mastervol =_mm_read_UBYTE(modreader); mh->initspeed =_mm_read_UBYTE(modreader); mh->inittempo =_mm_read_UBYTE(modreader); mh->mastermult =_mm_read_UBYTE(modreader); mh->ultraclick =_mm_read_UBYTE(modreader); mh->pantable =_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->unused2,8,modreader); mh->special =_mm_read_I_UWORD(modreader); _mm_read_UBYTES(mh->channels,32,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* then we can decide the module type */ tracker=mh->tracker>>12; if((!tracker)||(tracker>=NUMTRACKERS)) tracker=NUMTRACKERS-1; /* unknown tracker */ else { if(mh->tracker>=0x3217) tracker=NUMTRACKERS+1; /* IT 2.14p4 */ else if(mh->tracker>=0x3216) tracker=NUMTRACKERS; /* IT 2.14p3 */ else tracker--; } of.modtype = strdup(S3M_Version[tracker]); if(trackertracker>>8) &0xf)+'0'; of.modtype[numeric[tracker]+2] = ((mh->tracker>>4)&0xf)+'0'; of.modtype[numeric[tracker]+3] = ((mh->tracker)&0xf)+'0'; } /* set module variables */ of.songname = DupStr(mh->songname,28,0); of.numpat = mh->patnum; of.reppos = 0; of.numins = of.numsmp = mh->insnum; of.initspeed = mh->initspeed; of.inittempo = mh->inittempo; of.initvolume = mh->mastervol<<1; of.flags |= UF_ARPMEM | UF_PANNING; if((mh->tracker==0x1300)||(mh->flags&64)) of.flags|=UF_S3MSLIDES; of.bpmlimit = 32; /* read the order data */ if(!AllocPositions(mh->ordnum)) return 0; if(!(origpositions=_mm_calloc(mh->ordnum,sizeof(UWORD)))) return 0; for(t=0;tordnum;t++) { origpositions[t]=_mm_read_UBYTE(modreader); if((origpositions[t]>=mh->patnum)&&(origpositions[t]<254)) origpositions[t]=255/*mh->patnum-1*/; } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } poslookupcnt=mh->ordnum; S3MIT_CreateOrders(curious); if(!(paraptr=(UWORD*)_mm_malloc((of.numins+of.numpat)*sizeof(UWORD)))) return 0; /* read the instrument+pattern parapointers */ _mm_read_I_UWORDS(paraptr,of.numins+of.numpat,modreader); if(mh->pantable==252) { /* read the panning table (ST 3.2 addition. See below for further portions of channel panning [past reampper]). */ _mm_read_UBYTES(pan,32,modreader); } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* load samples */ if(!AllocSamples()) return 0; q = of.samples; for(t=0;t 64000 && tracker == 1) s.length = 64000; if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } q->samplename = DupStr(s.sampname,28,0); q->speed = s.c2spd; q->length = s.length; q->loopstart = s.loopbeg; q->loopend = s.loopend; q->volume = s.volume; q->seekpos = (((long)s.memsegh)<<16|s.memsegl)<<4; if(s.flags&1) q->flags |= SF_LOOP; if(s.flags&4) q->flags |= SF_16BITS; if(mh->fileformat==1) q->flags |= SF_SIGNED; /* don't load sample if it doesn't have the SCRS tag */ if(memcmp(s.scrs,"SCRS",4)) q->length = 0; q++; } /* determine the number of channels actually used. */ of.numchn = 0; memset(remap,-1,32*sizeof(UBYTE)); for(t=0;tchannels[t]<32)&&(remap[t]!=-1)) { if(mh->channels[t]<8) of.panning[remap[t]]=0x30; else of.panning[remap[t]]=0xc0; } if(mh->pantable==252) /* set panning positions according to panning table (new for st3.2) */ for(t=0;t<32;t++) if((pan[t]&0x20)&&(mh->channels[t]<32)&&(remap[t]!=-1)) of.panning[remap[t]]=(pan[t]&0xf)<<4; /* load pattern info */ of.numtrk=of.numpat*of.numchn; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; for(t=0;t #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* sample information */ typedef struct STMSAMPLE { CHAR filename[12]; UBYTE unused; /* 0x00 */ UBYTE instdisk; /* Instrument disk */ UWORD reserved; UWORD length; /* Sample length */ UWORD loopbeg; /* Loop start point */ UWORD loopend; /* Loop end point */ UBYTE volume; /* Volume */ UBYTE reserved2; UWORD c2spd; /* Good old c2spd */ ULONG reserved3; UWORD isa; } STMSAMPLE; /* header */ typedef struct STMHEADER { CHAR songname[20]; CHAR trackername[8]; /* !Scream! for ST 2.xx */ UBYTE unused; /* 0x1A */ UBYTE filetype; /* 1=song, 2=module */ UBYTE ver_major; UBYTE ver_minor; UBYTE inittempo; /* initspeed= stm inittempo>>4 */ UBYTE numpat; /* number of patterns */ UBYTE globalvol; UBYTE reserved[13]; STMSAMPLE sample[31]; /* STM sample data */ UBYTE patorder[128]; /* Docs say 64 - actually 128 */ } STMHEADER; typedef struct STMNOTE { UBYTE note,insvol,volcmd,cmdinf; } STMNOTE; /*========== Loader variables */ static STMNOTE *stmbuf = NULL; static STMHEADER *mh = NULL; /* tracker identifiers */ static CHAR* STM_Version[STM_NTRACKERS] = { "Screamtracker 2", "Converted by MOD2STM (STM format)", "Wuzamod (STM format)" }; /*========== Loader code */ static BOOL STM_Test(void) { UBYTE str[44]; int t; _mm_fseek(modreader,20,SEEK_SET); _mm_read_UBYTES(str,44,modreader); if(str[9]!=2) return 0; /* STM Module = filetype 2 */ /* Prevent false positives for S3M files */ if(!memcmp(str+40,"SCRM",4)) return 0; for (t=0;tnote; ins = n->insvol>>3; vol = (n->insvol&7)+((n->volcmd&0x70)>>1); cmd = n->volcmd&15; inf = n->cmdinf; if((ins)&&(ins<32)) UniInstrument(ins-1); /* special values of [SBYTE0] are handled here we have no idea if these strange values will ever be encountered. but it appears as those stms sound correct. */ if((note==254)||(note==252)) { UniPTEffect(0xc,0); /* note cut */ n->volcmd|=0x80; } else /* if note < 251, then all three bytes are stored in the file */ if(note<251) UniNote((((note>>4)+2)*OCTAVE)+(note&0xf)); if((!(n->volcmd&0x80))&&(vol<65)) UniPTEffect(0xc,vol); if(cmd!=255) switch(cmd) { case 1: /* Axx set speed to xx */ UniPTEffect(0xf,inf>>4); break; case 2: /* Bxx position jump */ UniPTEffect(0xb,inf); break; case 3: /* Cxx patternbreak to row xx */ UniPTEffect(0xd,(((inf&0xf0)>>4)*10)+(inf&0xf)); break; case 4: /* Dxy volumeslide */ UniEffect(UNI_S3MEFFECTD,inf); break; case 5: /* Exy toneslide down */ UniEffect(UNI_S3MEFFECTE,inf); break; case 6: /* Fxy toneslide up */ UniEffect(UNI_S3MEFFECTF,inf); break; case 7: /* Gxx Tone portamento,speed xx */ UniPTEffect(0x3,inf); break; case 8: /* Hxy vibrato */ UniPTEffect(0x4,inf); break; case 9: /* Ixy tremor, ontime x, offtime y */ UniEffect(UNI_S3MEFFECTI,inf); break; case 0: /* protracker arpeggio */ if(!inf) break; /* fall through */ case 0xa: /* Jxy arpeggio */ UniPTEffect(0x0,inf); break; case 0xb: /* Kxy Dual command H00 & Dxy */ UniPTEffect(0x4,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 0xc: /* Lxy Dual command G00 & Dxy */ UniPTEffect(0x3,0); UniEffect(UNI_S3MEFFECTD,inf); break; /* Support all these above, since ST2 can LOAD these values but can actually only play up to J - and J is only half-way implemented in ST2 */ case 0x18: /* Xxx amiga panning command 8xx */ UniPTEffect(0x8,inf); of.flags |= UF_PANNING; break; } } static UBYTE *STM_ConvertTrack(STMNOTE *n) { int t; UniReset(); for(t=0;t<64;t++) { STM_ConvertNote(n); UniNewline(); n+=of.numchn; } return UniDup(); } static BOOL STM_LoadPatterns(void) { int t,s,tracks=0; if(!AllocPatterns()) return 0; if(!AllocTracks()) return 0; /* Allocate temporary buffer for loading and converting the patterns */ for(t=0;tsongname,20,modreader); _mm_read_string(mh->trackername,8,modreader); mh->unused =_mm_read_UBYTE(modreader); mh->filetype =_mm_read_UBYTE(modreader); mh->ver_major =_mm_read_UBYTE(modreader); mh->ver_minor =_mm_read_UBYTE(modreader); mh->inittempo =_mm_read_UBYTE(modreader); if(!mh->inittempo) { _mm_errno=MMERR_NOT_A_MODULE; return 0; } mh->numpat =_mm_read_UBYTE(modreader); mh->globalvol =_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->reserved,13,modreader); for(t=0;t<31;t++) { STMSAMPLE *s=&mh->sample[t]; /* STM sample data */ _mm_read_string(s->filename,12,modreader); s->unused =_mm_read_UBYTE(modreader); s->instdisk =_mm_read_UBYTE(modreader); s->reserved =_mm_read_I_UWORD(modreader); s->length =_mm_read_I_UWORD(modreader); s->loopbeg =_mm_read_I_UWORD(modreader); s->loopend =_mm_read_I_UWORD(modreader); s->volume =_mm_read_UBYTE(modreader); s->reserved2=_mm_read_UBYTE(modreader); s->c2spd =_mm_read_I_UWORD(modreader); s->reserved3=_mm_read_I_ULONG(modreader); s->isa =_mm_read_I_UWORD(modreader); } _mm_read_UBYTES(mh->patorder,128,modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } /* set module variables */ for(t=0;ttrackername,STM_Signatures[t],8)) break; of.modtype = strdup(STM_Version[t]); of.songname = DupStr(mh->songname,20,1); /* make a cstr of songname */ of.numpat = mh->numpat; of.inittempo = 125; /* mh->inittempo+0x1c; */ of.initspeed = mh->inittempo>>4; of.numchn = 4; /* get number of channels */ of.reppos = 0; of.flags |= UF_S3MSLIDES; of.bpmlimit = 32; t=0; if(!AllocPositions(0x80)) return 0; /* 99 terminates the patorder list */ while((mh->patorder[t]<=99)&&(mh->patorder[t]numpat)) { of.positions[t]=mh->patorder[t]; t++; } if(mh->patorder[t]<=99) t++; of.numpos=t; of.numtrk=of.numpat*of.numchn; of.numins=of.numsmp=31; if(!AllocSamples()) return 0; if(!STM_LoadPatterns()) return 0; MikMod_ISA=_mm_ftell(modreader); MikMod_ISA=(MikMod_ISA+15)&0xfffffff0; /* normalize */ for(q=of.samples,t=0;tsamplename = DupStr(mh->sample[t].filename,12,1); q->speed = (mh->sample[t].c2spd * 8363) / 8448; q->volume = mh->sample[t].volume; q->length = mh->sample[t].length; if (/*!mh->sample[t].volume || */q->length==1) q->length=0; q->loopstart = mh->sample[t].loopbeg; q->loopend = mh->sample[t].loopend; q->seekpos = MikMod_ISA; MikMod_ISA+=q->length; MikMod_ISA=(MikMod_ISA+15)&0xfffffff0; /* normalize */ /* contrary to the STM specs, sample data is signed */ q->flags = SF_SIGNED; if(q->loopend && q->loopend != 0xffff) q->flags|=SF_LOOP; } return 1; } static CHAR *STM_LoadTitle(void) { CHAR s[20]; _mm_fseek(modreader,0,SEEK_SET); if(!_mm_read_UBYTES(s,20,modreader)) return NULL; return(DupStr(s,20,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_stm={ NULL, "STM", "STM (Scream Tracker)", STM_Init, STM_Test, STM_Load, STM_Cleanup, STM_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_okt.c0000644000000000000000000002453512222472510015646 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_okt.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Oktalyzer (OKT) module loader ==============================================================================*/ /* Written by UFO based on the file description compiled by Harald Zappe */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module blocks */ /* sample information */ typedef struct OKTSAMPLE { CHAR sampname[20]; ULONG len; UWORD loopbeg; UWORD looplen; UBYTE volume; } OKTSAMPLE; typedef struct OKTNOTE { UBYTE note, ins, eff, dat; } OKTNOTE; /*========== Loader variables */ static OKTNOTE *okttrk = NULL; /*========== Loader code */ static BOOL OKT_Test(void) { CHAR id[8]; if (!_mm_read_UBYTES(id, 8, modreader)) return 0; if (!memcmp(id, "OKTASONG", 8)) return 1; return 0; } /* Pattern analysis routine. Effects not implemented (yet) : (in decimal) 11 Arpeggio 4: Change note every 50Hz tick between N,H,N,L 12 Arpeggio 5: Change note every 50Hz tick between H,H,N N = normal note being played in this channel (1-36) L = normal note number minus upper four bits of 'data'. H = normal note number plus lower four bits of 'data'. 13 Decrease note number by 'data' once per tick. 17 Increase note number by 'data' once per tick. 21 Decrease note number by 'data' once per line. 30 Increase note number by 'data' once per line. */ static UBYTE *OKT_ConvertTrack(UBYTE patrows) { int t; UBYTE ins, note, eff, dat; UniReset(); for (t = 0; t < patrows; t++) { note = okttrk[t].note; ins = okttrk[t].ins; eff = okttrk[t].eff; dat = okttrk[t].dat; if (note) { UniNote(note + 3 * OCTAVE - 1); UniInstrument(ins); } if (eff) switch (eff) { case 1: /* Porta Up */ UniPTEffect(0x1, dat); break; case 2: /* Portamento Down */ UniPTEffect(0x2, dat); break; /* case 9: what is this? */ case 10: /* Arpeggio 3 */ case 11: /* Arpeggio 4 */ case 12: /* Arpeggio 5 */ UniWriteByte(UNI_OKTARP); UniWriteByte(eff + 3 - 10); UniWriteByte(dat); break; case 15: /* Amiga filter toggle, ignored */ break; case 25: /* Pattern Jump */ dat = (dat >> 4) * 10 + (dat & 0x0f); UniPTEffect(0xb, dat); break; case 27: /* Release - similar to Keyoff */ UniWriteByte(UNI_KEYOFF); break; case 28: /* Set Tempo */ UniPTEffect(0xf, dat & 0x0f); break; case 31: /* volume Control */ if (dat <= 0x40) UniPTEffect(0xc, dat); else if (dat <= 0x50) UniEffect(UNI_XMEFFECTA, (dat - 0x40)); /* fast fade out */ else if (dat <= 0x60) UniEffect(UNI_XMEFFECTA, (dat - 0x50) << 4); /* fast fade in */ else if (dat <= 0x70) UniEffect(UNI_XMEFFECTEB, (dat - 0x60)); /* slow fade out */ else if (dat <= 0x80) UniEffect(UNI_XMEFFECTEA, (dat - 0x70)); /* slow fade in */ break; #ifdef MIKMOD_DEBUG default: fprintf(stderr, "\rUnimplemented effect (%02d,%02x)\n", eff, dat); #endif } UniNewline(); } return UniDup(); } /* Read "channel modes" i.e. channel number and panning information */ static void OKT_doCMOD(void) { /* amiga channel panning table */ UBYTE amigapan[4] = { 0x00, 0xff, 0xff, 0x00 }; int t; of.numchn = 0; of.flags |= UF_PANNING; for (t = 0; t < 4; t++) if (_mm_read_M_UWORD(modreader)) { /* two channels tied to the same Amiga hardware voice */ of.panning[of.numchn++] = amigapan[t]; of.panning[of.numchn++] = amigapan[t]; } else /* one channel tied to the Amiga hardware voice */ of.panning[of.numchn++] = amigapan[t]; } /* Read sample information */ static BOOL OKT_doSAMP(int len) { int t; SAMPLE *q; OKTSAMPLE s; of.numins = of.numsmp = (len / 0x20); if (!AllocSamples()) return 0; for (t = 0, q = of.samples; t < of.numins; t++, q++) { _mm_read_UBYTES(s.sampname, 20, modreader); s.len = _mm_read_M_ULONG(modreader); s.loopbeg = _mm_read_M_UWORD(modreader) * 2; s.looplen = _mm_read_M_UWORD(modreader) * 2; _mm_skip_BYTE(modreader); s.volume = _mm_read_UBYTE(modreader); _mm_read_M_UWORD(modreader); if (_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } if (!s.len) q->seekpos = q->length = q->loopstart = q->loopend = q->flags = 0; else { s.len--; /* sanity checks */ if (s.loopbeg > s.len) s.loopbeg = s.len; if (s.loopbeg + s.looplen > s.len) s.looplen = s.len - s.loopbeg; if (s.looplen < 2) s.looplen = 0; q->length = s.len; q->loopstart = s.loopbeg; q->loopend = s.looplen + q->loopstart; q->volume = s.volume; q->flags = SF_SIGNED; if (s.looplen) q->flags |= SF_LOOP; } q->samplename = DupStr(s.sampname, 20, 1); q->speed = 8287; } return 1; } /* Read speed information */ static void OKT_doSPEE(void) { int tempo = _mm_read_M_UWORD(modreader); of.initspeed = tempo; } /* Read song length information */ static void OKT_doSLEN(void) { of.numpat = _mm_read_M_UWORD(modreader); } /* Read pattern length information */ static void OKT_doPLEN(void) { of.numpos = _mm_read_M_UWORD(modreader); } /* Read order table */ static BOOL OKT_doPATT(void) { int t; if (!of.numpos || !AllocPositions(of.numpos)) return 0; for (t = 0; t < 128; t++) if (t < of.numpos) of.positions[t] = _mm_read_UBYTE(modreader); else break; return 1; } static BOOL OKT_doPBOD(int patnum) { char *patbuf; int rows, i; int u; if (!patnum) { of.numtrk = of.numpat * of.numchn; if (!AllocTracks() || !AllocPatterns()) return 0; } /* Read pattern */ of.pattrows[patnum] = rows = _mm_read_M_UWORD(modreader); if (!(okttrk = (OKTNOTE *) _mm_calloc(rows, sizeof(OKTNOTE))) || !(patbuf = (char *)_mm_calloc(rows * of.numchn, sizeof(OKTNOTE)))) return 0; _mm_read_UBYTES(patbuf, rows * of.numchn * sizeof(OKTNOTE), modreader); if (_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } for (i = 0; i < of.numchn; i++) { for (u = 0; u < rows; u++) { okttrk[u].note = patbuf[(u * of.numchn + i) * sizeof(OKTNOTE)]; okttrk[u].ins = patbuf[(u * of.numchn + i) * sizeof(OKTNOTE) + 1]; okttrk[u].eff = patbuf[(u * of.numchn + i) * sizeof(OKTNOTE) + 2]; okttrk[u].dat = patbuf[(u * of.numchn + i) * sizeof(OKTNOTE) + 3]; } if (!(of.tracks[patnum * of.numchn + i] = OKT_ConvertTrack(rows))) return 0; } _mm_free(patbuf); _mm_free(okttrk); return 1; } static void OKT_doSBOD(int insnum) { of.samples[insnum].seekpos = _mm_ftell(modreader); } static BOOL OKT_Load(BOOL curious) { UBYTE id[4]; ULONG len; ULONG fp; BOOL seen_cmod = 0, seen_samp = 0, seen_slen = 0, seen_plen = 0, seen_patt = 0, seen_spee = 0; int patnum = 0, insnum = 0; /* skip OKTALYZER header */ _mm_fseek(modreader, 8, SEEK_SET); of.songname = strdup(""); of.modtype = strdup("Amiga Oktalyzer"); of.numpos = of.reppos = 0; /* default values */ of.initspeed = 6; of.inittempo = 125; while (1) { /* read block header */ _mm_read_UBYTES(id, 4, modreader); len = _mm_read_M_ULONG(modreader); if (_mm_eof(modreader)) break; fp = _mm_ftell(modreader); if (!memcmp(id, "CMOD", 4)) { if (!seen_cmod) { OKT_doCMOD(); seen_cmod = 1; } else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id, "SAMP", 4)) { if (!seen_samp && OKT_doSAMP(len)) seen_samp = 1; else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id, "SPEE", 4)) { if (!seen_spee) { OKT_doSPEE(); seen_spee = 1; } else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id, "SLEN", 4)) { if (!seen_slen) { OKT_doSLEN(); seen_slen = 1; } else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id, "PLEN", 4)) { if (!seen_plen) { OKT_doPLEN(); seen_plen = 1; } else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id, "PATT", 4)) { if (!seen_plen) { _mm_errno = MMERR_LOADING_HEADER; return 0; } if (!seen_patt && OKT_doPATT()) seen_patt = 1; else { _mm_errno = MMERR_LOADING_HEADER; return 0; } } else if (!memcmp(id,"PBOD", 4)) { /* need to know numpat and numchn */ if (!seen_slen || !seen_cmod || (patnum >= of.numpat)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } if (!OKT_doPBOD(patnum++)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } } else if (!memcmp(id,"SBOD",4)) { /* need to know numsmp */ if (!seen_samp) { _mm_errno = MMERR_LOADING_HEADER; return 0; } while ((insnum < of.numins) && !of.samples[insnum].length) insnum++; if (insnum >= of.numins) { _mm_errno = MMERR_LOADING_HEADER; return 0; } OKT_doSBOD(insnum++); } /* goto next block start position */ _mm_fseek(modreader, fp + len, SEEK_SET); } if (!seen_cmod || !seen_samp || !seen_patt || !seen_slen || !seen_plen || (patnum != of.numpat)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } return 1; } static CHAR *OKT_LoadTitle(void) { return strdup(""); } /*========== Loader information */ MIKMODAPI MLOADER load_okt = { NULL, "OKT", "OKT (Amiga Oktalyzer)", NULL, OKT_Test, OKT_Load, NULL, OKT_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/Makefile.am0000644000000000000000000000072110003535131015723 0ustar rootrootEXTRA_DIST = load_669.c \ load_amf.c \ load_dsm.c \ load_far.c \ load_gdm.c \ load_imf.c \ load_it.c \ load_m15.c \ load_med.c \ load_mod.c \ load_mtm.c \ load_okt.c \ load_s3m.c \ load_stm.c \ load_stx.c \ load_ult.c \ load_uni.c \ load_xm.c libmikmod-3.1.16/loaders/load_dsm.c0000644000000000000000000002033012222472510015621 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_dsm.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ DSIK internal format (DSM) module loader ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ #define DSM_MAXCHAN (16) #define DSM_MAXORDERS (128) typedef struct DSMSONG { CHAR songname[28]; UWORD version; UWORD flags; ULONG reserved2; UWORD numord; UWORD numsmp; UWORD numpat; UWORD numtrk; UBYTE globalvol; UBYTE mastervol; UBYTE speed; UBYTE bpm; UBYTE panpos[DSM_MAXCHAN]; UBYTE orders[DSM_MAXORDERS]; } DSMSONG; typedef struct DSMINST { CHAR filename[13]; UWORD flags; UBYTE volume; ULONG length; ULONG loopstart; ULONG loopend; ULONG reserved1; UWORD c2spd; UWORD period; CHAR samplename[28]; } DSMINST; typedef struct DSMNOTE { UBYTE note,ins,vol,cmd,inf; } DSMNOTE; #define DSM_SURROUND (0xa4) /*========== Loader variables */ static CHAR* SONGID="SONG"; static CHAR* INSTID="INST"; static CHAR* PATTID="PATT"; static UBYTE blockid[4]; static ULONG blockln; static ULONG blocklp; static DSMSONG* mh=NULL; static DSMNOTE* dsmbuf=NULL; static CHAR DSM_Version[]="DSIK DSM-format"; static unsigned char DSMSIG[4+4]={'R','I','F','F','D','S','M','F'}; /*========== Loader code */ static BOOL DSM_Test(void) { UBYTE id[12]; if(!_mm_read_UBYTES(id,12,modreader)) return 0; if(!memcmp(id,DSMSIG,4) && !memcmp(id+8,DSMSIG+4,4)) return 1; return 0; } static BOOL DSM_Init(void) { if(!(dsmbuf=(DSMNOTE *)_mm_malloc(DSM_MAXCHAN*64*sizeof(DSMNOTE)))) return 0; if(!(mh=(DSMSONG *)_mm_calloc(1,sizeof(DSMSONG)))) return 0; return 1; } static void DSM_Cleanup(void) { _mm_free(dsmbuf); _mm_free(mh); } static BOOL GetBlockHeader(void) { /* make sure we're at the right position for reading the next riff block, no matter how many bytes read */ _mm_fseek(modreader, blocklp+blockln, SEEK_SET); while(1) { _mm_read_UBYTES(blockid,4,modreader); blockln=_mm_read_I_ULONG(modreader); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } if(memcmp(blockid,SONGID,4) && memcmp(blockid,INSTID,4) && memcmp(blockid,PATTID,4)) { #ifdef MIKMOD_DEBUG fprintf(stderr,"\rDSM: Skipping unknown block type %4.4s\n",blockid); #endif _mm_fseek(modreader, blockln, SEEK_CUR); } else break; } blocklp = _mm_ftell(modreader); return 1; } static BOOL DSM_ReadPattern(void) { int flag,row=0; SWORD length; DSMNOTE *n; /* clear pattern data */ memset(dsmbuf,255,DSM_MAXCHAN*64*sizeof(DSMNOTE)); length=_mm_read_I_SWORD(modreader); while(row<64) { flag=_mm_read_UBYTE(modreader); if((_mm_eof(modreader))||(--length<0)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } if(flag) { n=&dsmbuf[((flag&0xf)*64)+row]; if(flag&0x80) n->note=_mm_read_UBYTE(modreader); if(flag&0x40) n->ins=_mm_read_UBYTE(modreader); if(flag&0x20) n->vol=_mm_read_UBYTE(modreader); if(flag&0x10) { n->cmd=_mm_read_UBYTE(modreader); n->inf=_mm_read_UBYTE(modreader); } } else row++; } return 1; } static UBYTE *DSM_ConvertTrack(DSMNOTE *tr) { int t; UBYTE note,ins,vol,cmd,inf; UniReset(); for(t=0;t<64;t++) { note=tr[t].note; ins=tr[t].ins; vol=tr[t].vol; cmd=tr[t].cmd; inf=tr[t].inf; if(ins!=0 && ins!=255) UniInstrument(ins-1); if(note!=255) UniNote(note-1); /* normal note */ if(vol<65) UniPTEffect(0xc,vol); if(cmd!=255) { if(cmd==0x8) { if(inf==DSM_SURROUND) UniEffect(UNI_ITEFFECTS0,0x91); else if(inf<=0x80) { inf=(inf<0x80)?inf<<1:255; UniPTEffect(cmd,inf); } } else if(cmd==0xb) { if(inf<=0x7f) UniPTEffect(cmd,inf); } else { /* Convert pattern jump from Dec to Hex */ if(cmd == 0xd) inf = (((inf&0xf0)>>4)*10)+(inf&0xf); UniPTEffect(cmd,inf); } } UniNewline(); } return UniDup(); } static BOOL DSM_Load(BOOL curious) { int t; DSMINST s; SAMPLE *q; int cursmp=0,curpat=0,track=0; blocklp=0; blockln=12; if(!GetBlockHeader()) return 0; if(memcmp(blockid,SONGID,4)) { _mm_errno = MMERR_LOADING_HEADER; return 0; } _mm_read_UBYTES(mh->songname,28,modreader); mh->version=_mm_read_I_UWORD(modreader); mh->flags=_mm_read_I_UWORD(modreader); mh->reserved2=_mm_read_I_ULONG(modreader); mh->numord=_mm_read_I_UWORD(modreader); mh->numsmp=_mm_read_I_UWORD(modreader); mh->numpat=_mm_read_I_UWORD(modreader); mh->numtrk=_mm_read_I_UWORD(modreader); mh->globalvol=_mm_read_UBYTE(modreader); mh->mastervol=_mm_read_UBYTE(modreader); mh->speed=_mm_read_UBYTE(modreader); mh->bpm=_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->panpos,DSM_MAXCHAN,modreader); _mm_read_UBYTES(mh->orders,DSM_MAXORDERS,modreader); /* set module variables */ of.initspeed=mh->speed; of.inittempo=mh->bpm; of.modtype=strdup(DSM_Version); of.numchn=mh->numtrk; of.numpat=mh->numpat; of.numtrk=of.numchn*of.numpat; of.songname=DupStr(mh->songname,28,1); /* make a cstr of songname */ of.reppos=0; of.flags |= UF_PANNING; /* XXX whenever possible, we should try to determine the original format. Here we assume it was S3M-style wrt bpmlimit... */ of.bpmlimit = 32; for(t=0;tpanpos[t]==DSM_SURROUND?PAN_SURROUND: mh->panpos[t]<0x80?(mh->panpos[t]<<1):255; if(!AllocPositions(mh->numord)) return 0; of.numpos=0; for(t=0;tnumord;t++) { int order=mh->orders[t]; if(order==255) order=LAST_PATTERN; of.positions[of.numpos]=order; if(mh->orders[t]<254) of.numpos++; } of.numins=of.numsmp=mh->numsmp; if(!AllocSamples()) return 0; if(!AllocTracks()) return 0; if(!AllocPatterns()) return 0; while(cursmpsamplename=DupStr(s.samplename,28,1); q->seekpos=_mm_ftell(modreader); q->speed=s.c2spd; q->length=s.length; q->loopstart=s.loopstart; q->loopend=s.loopend; q->volume=s.volume; if(s.flags&1) q->flags|=SF_LOOP; if(s.flags&2) q->flags|=SF_SIGNED; /* (s.flags&4) means packed sample, but did they really exist in dsm ?*/ cursmp++; } else if(!memcmp(blockid,PATTID,4) && curpat #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ /* header */ typedef struct S69HEADER { UBYTE marker[2]; CHAR message[108]; UBYTE nos; UBYTE nop; UBYTE looporder; UBYTE orders[0x80]; UBYTE tempos[0x80]; UBYTE breaks[0x80]; } S69HEADER; /* sample information */ typedef struct S69SAMPLE { CHAR filename[13]; SLONG length; SLONG loopbeg; SLONG loopend; } S69SAMPLE; /* encoded note */ typedef struct S69NOTE { UBYTE a,b,c; } S69NOTE; /*========== Loader variables */ /* current pattern */ static S69NOTE* s69pat=NULL; /* Module header */ static S69HEADER* mh=NULL; /* file type identification */ static CHAR* S69_Version[]={ "Composer 669", "Extended 669" }; /*========== Loader code */ static BOOL S69_Test(void) { UBYTE buf[0x80]; if(!_mm_read_UBYTES(buf,2,modreader)) return 0; /* look for id */ if(!memcmp(buf,"if",2) || !memcmp(buf,"JN",2)) { int i; /* skip song message */ _mm_fseek(modreader,108,SEEK_CUR); /* sanity checks */ if(_mm_read_UBYTE(modreader) > 64) return 0; if(_mm_read_UBYTE(modreader) > 128) return 0; if(_mm_read_UBYTE(modreader) > 127) return 0; /* check order table */ if(!_mm_read_UBYTES(buf,0x80,modreader)) return 0; for(i=0;i<0x80;i++) if((buf[i]>=0x80)&&(buf[i]!=0xff)) return 0; /* check tempos table */ if(!_mm_read_UBYTES(buf,0x80,modreader)) return 0; for(i=0;i<0x80;i++) if((!buf[i])||(buf[i]>32)) return 0; /* check pattern length table */ if(!_mm_read_UBYTES(buf,0x80,modreader)) return 0; for(i=0;i<0x80;i++) if(buf[i]>0x3f) return 0; } else return 0; return 1; } static BOOL S69_Init(void) { if(!(s69pat=(S69NOTE *)_mm_malloc(64*8*sizeof(S69NOTE)))) return 0; if(!(mh=(S69HEADER *)_mm_malloc(sizeof(S69HEADER)))) return 0; return 1; } static void S69_Cleanup(void) { _mm_free(s69pat); _mm_free(mh); } static BOOL S69_LoadPatterns(void) { int track,row,channel; UBYTE note,inst,vol,effect,lastfx,lastval; S69NOTE *cur; int tracks=0; if(!AllocPatterns()) return 0; if(!AllocTracks()) return 0; for(track=0;trackbreaks[track]+1; /* load the 669 pattern */ cur=s69pat; for(row=0;row<64;row++) { for(channel=0;channel<8;channel++,cur++) { cur->a = _mm_read_UBYTE(modreader); cur->b = _mm_read_UBYTE(modreader); cur->c = _mm_read_UBYTE(modreader); } } if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_PATTERN; return 0; } /* translate the pattern */ for(channel=0;channel<8;channel++) { UniReset(); /* set pattern tempo */ UniPTEffect(0xf,78); UniPTEffect(0xf,mh->tempos[track]); lastfx=0xff,lastval=0; for(row=0;row<=mh->breaks[track];row++) { int a,b,c; /* fetch the encoded note */ a=s69pat[(row*8)+channel].a; b=s69pat[(row*8)+channel].b; c=s69pat[(row*8)+channel].c; /* decode it */ note=a>>2; inst=((a&0x3)<<4)|((b&0xf0)>>4); vol=b&0xf; if (a<0xff) { if (a<0xfe) { UniInstrument(inst); UniNote(note+2*OCTAVE); lastfx=0xff; /* reset background effect memory */ } UniPTEffect(0xc,vol<<2); } if ((c!=0xff)||(lastfx!=0xff)) { if(c==0xff) c=lastfx,effect=lastval; else effect=c&0xf; switch(c>>4) { case 0: /* porta up */ UniPTEffect(0x1,effect); lastfx=c,lastval=effect; break; case 1: /* porta down */ UniPTEffect(0x2,effect); lastfx=c,lastval=effect; break; case 2: /* porta to note */ UniPTEffect(0x3,effect); lastfx=c,lastval=effect; break; case 3: /* frequency adjust */ /* DMP converts this effect to S3M FF1. Why not ? */ UniEffect(UNI_S3MEFFECTF,0xf0|effect); break; case 4: /* vibrato */ UniPTEffect(0x4,effect); lastfx=c,lastval=effect; break; case 5: /* set speed */ if (effect) UniPTEffect(0xf,effect); else if(mh->marker[0]!=0x69) { #ifdef MIKMOD_DEBUG fprintf(stderr,"\r669: unsupported super fast tempo at pat=%d row=%d chan=%d\n", track,row,channel); #endif } break; } } UniNewline(); } if(!(of.tracks[tracks++]=UniDup())) return 0; } } return 1; } static BOOL S69_Load(BOOL curious) { int i; SAMPLE *current; S69SAMPLE sample; /* module header */ _mm_read_UBYTES(mh->marker,2,modreader); _mm_read_UBYTES(mh->message,108,modreader); mh->nos=_mm_read_UBYTE(modreader); mh->nop=_mm_read_UBYTE(modreader); mh->looporder=_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->orders,0x80,modreader); for(i=0;i<0x80;i++) if ((mh->orders[i]>=0x80)&&(mh->orders[i]!=0xff)) { _mm_errno=MMERR_NOT_A_MODULE; return 1; } _mm_read_UBYTES(mh->tempos,0x80,modreader); for(i=0;i<0x80;i++) if ((!mh->tempos[i])||(mh->tempos[i]>32)) { _mm_errno=MMERR_NOT_A_MODULE; return 1; } _mm_read_UBYTES(mh->breaks,0x80,modreader); for(i=0;i<0x80;i++) if (mh->breaks[i]>0x3f) { _mm_errno=MMERR_NOT_A_MODULE; return 1; } /* set module variables */ of.initspeed=4; of.inittempo=78; of.songname=DupStr(mh->message,36,1); of.modtype=strdup(S69_Version[memcmp(mh->marker,"JN",2)==0]); of.numchn=8; of.numpat=mh->nop; of.numins=of.numsmp=mh->nos; of.numtrk=of.numchn*of.numpat; of.flags=UF_XMPERIODS|UF_LINEAR; for(i= 35;(i>= 0)&&(mh->message[i]==' ');i--) mh->message[i]=0; for(i=36+35;(i>=36+0)&&(mh->message[i]==' ');i--) mh->message[i]=0; for(i=72+35;(i>=72+0)&&(mh->message[i]==' ');i--) mh->message[i]=0; if((mh->message[0])||(mh->message[36])||(mh->message[72])) if((of.comment=(CHAR*)_mm_malloc(3*(36+1)+1))) { strncpy(of.comment,mh->message,36); strcat(of.comment,"\r"); if (mh->message[36]) strncat(of.comment,mh->message+36,36); strcat(of.comment,"\r"); if (mh->message[72]) strncat(of.comment,mh->message+72,36); strcat(of.comment,"\r"); of.comment[3*(36+1)]=0; } if(!AllocPositions(0x80)) return 0; for(i=0;i<0x80;i++) { if(mh->orders[i]>=mh->nop) break; of.positions[i]=mh->orders[i]; } of.numpos=i; of.reppos=mh->looporderlooporder:0; if(!AllocSamples()) return 0; current=of.samples; for(i=0;isamplename=DupStr(sample.filename,13,1); current->seekpos=0; current->speed=0; current->length=sample.length; current->loopstart=sample.loopbeg; current->loopend=sample.loopend; current->flags=(sample.loopbegvolume=64; current++; } if(!S69_LoadPatterns()) return 0; return 1; } static CHAR *S69_LoadTitle(void) { CHAR s[36]; _mm_fseek(modreader,2,SEEK_SET); if(!_mm_read_UBYTES(s,36,modreader)) return NULL; return(DupStr(s,36,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_669={ NULL, "669", "669 (Composer 669, Unis 669)", S69_Init, S69_Test, S69_Load, S69_Cleanup, S69_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_m15.c0000644000000000000000000003045612223520050015444 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: load_m15.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ 15 instrument MOD loader Also supports Ultimate Sound Tracker (old M15 format) ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module Structure */ typedef struct MSAMPINFO { CHAR samplename[23]; /* 22 in module, 23 in memory */ UWORD length; UBYTE finetune; UBYTE volume; UWORD reppos; UWORD replen; } MSAMPINFO; typedef struct MODULEHEADER { CHAR songname[21]; /* the songname.., 20 in module, 21 in memory */ MSAMPINFO samples[15]; /* all sampleinfo */ UBYTE songlength; /* number of patterns used */ UBYTE magic1; /* should be 127 */ UBYTE positions[128]; /* which pattern to play at pos */ } MODULEHEADER; typedef struct MODNOTE { UBYTE a,b,c,d; } MODNOTE; /*========== Loader variables */ static MODULEHEADER *mh = NULL; static MODNOTE *patbuf = NULL; static BOOL ust_loader = 0; /* if TRUE, load as an ust module. */ /* known file formats which can confuse the loader */ #define REJECT 2 static char *signatures[REJECT]={ "CAKEWALK", /* cakewalk midi files */ "SZDD" /* Microsoft compressed files */ }; static int siglen[REJECT]={8,4}; /*========== Loader code */ static BOOL LoadModuleHeader(MODULEHEADER *h) { int t,u; _mm_read_string(h->songname,20,modreader); h->songname[20]=0; /* just in case */ /* sanity check : title should contain printable characters and a bunch of null chars */ for(t=0;t<20;t++) if((h->songname[t])&&(h->songname[t]<32)) return 0; for(t=0;(h->songname[t])&&(t<20);t++); if(t<20) for(;t<20;t++) if(h->songname[t]) return 0; for(t=0;t<15;t++) { MSAMPINFO *s=&h->samples[t]; _mm_read_string(s->samplename,22,modreader); s->samplename[22]=0; /* just in case */ s->length =_mm_read_M_UWORD(modreader); s->finetune =_mm_read_UBYTE(modreader); s->volume =_mm_read_UBYTE(modreader); s->reppos =_mm_read_M_UWORD(modreader); s->replen =_mm_read_M_UWORD(modreader); /* sanity check : sample title should contain printable characters and a bunch of null chars */ for(u=0;u<20;u++) if((s->samplename[u])&&(s->samplename[u]samplename[u])&&(u<20);u++); if(u<20) for(;u<20;u++) if(s->samplename[u]) return 0; /* sanity check : finetune values */ if(s->finetune>>4) return 0; } h->songlength =_mm_read_UBYTE(modreader); h->magic1 =_mm_read_UBYTE(modreader); /* should be 127 */ /* sanity check : no more than 128 positions, restart position in range */ if((!h->songlength)||(h->songlength>128)) return 0; /* values encountered so far are 0x6a and 0x78 */ if(((h->magic1&0xf8)!=0x78)&&(h->magic1!=0x6a)&&(h->magic1>h->songlength)) return 0; _mm_read_UBYTES(h->positions,128,modreader); /* sanity check : pattern range is 0..63 */ for(t=0;t<128;t++) if(h->positions[t]>63) return 0; return(!_mm_eof(modreader)); } /* Checks the patterns in the modfile for UST / 15-inst indications. For example, if an effect 3xx is found, it is assumed that the song is 15-inst. If a 1xx effect has dat greater than 0x20, it is UST. Returns: 0 indecisive; 1 = UST; 2 = 15-inst */ static int CheckPatternType(int numpat) { int t; UBYTE eff, dat; for(t=0;t0x1f) return 1; if(dat<0x3) return 2; break; case 2: if(dat>0x1f) return 1; return 2; case 3: if (dat) return 2; break; default: return 2; } } return 0; } static BOOL M15_Test(void) { int t, numpat; MODULEHEADER h; ust_loader = 0; if(!LoadModuleHeader(&h)) return 0; /* reject other file types */ for(t=0;t127) return 0; if((!h.songlength)||(h.songlength>h.magic1)) return 0; for(t=0;t<15;t++) { /* all finetunes should be zero */ if(h.samples[t].finetune) return 0; /* all volumes should be <= 64 */ if(h.samples[t].volume>64) return 0; /* all instrument names should begin with s, st-, or a number */ if((h.samples[t].samplename[0]=='s')|| (h.samples[t].samplename[0]=='S')) { if((memcmp(h.samples[t].samplename,"st-",3)) && (memcmp(h.samples[t].samplename,"ST-",3)) && (*h.samples[t].samplename)) ust_loader = 1; } else if(!isdigit((int)h.samples[t].samplename[0])) ust_loader = 1; if(h.samples[t].length>4999||h.samples[t].reppos>9999) { ust_loader = 0; if(h.samples[t].length>32768) return 0; } /* if loop information is incorrect as words, but correct as bytes, this is likely to be an ust-style module */ if((h.samples[t].reppos+h.samples[t].replen>h.samples[t].length)&& (h.samples[t].reppos+h.samples[t].replen<(h.samples[t].length<<1))){ ust_loader = 1; return 1; } if(!ust_loader) return 1; } for(numpat=0,t=0;tnumpat) numpat = h.positions[t]; numpat++; switch(CheckPatternType(numpat)) { case 0: /* indecisive, so check more clues... */ break; case 1: ust_loader = 1; break; case 2: ust_loader = 0; break; } return 1; } static BOOL M15_Init(void) { if(!(mh=(MODULEHEADER*)_mm_malloc(sizeof(MODULEHEADER)))) return 0; return 1; } static void M15_Cleanup(void) { _mm_free(mh); _mm_free(patbuf); } /* Old (amiga) noteinfo: _____byte 1_____ byte2_ _____byte 3_____ byte4_ / \ / \ / \ / \ 0000 0000-00000000 0000 0000-00000000 Upper four 12 bits for Lower four Effect command. bits of sam- note period. bits of sam- ple number. ple number. */ static UBYTE M15_ConvertNote(MODNOTE* n, UBYTE lasteffect) { UBYTE instrument,effect,effdat,note; UWORD period; UBYTE lastnote=0; /* decode the 4 bytes that make up a single note */ instrument = n->c>>4; period = (((UWORD)n->a&0xf)<<8)+n->b; effect = n->c&0xf; effdat = n->d; /* Convert the period to a note number */ note=0; if(period) { for(note=0;note<7*OCTAVE;note++) if(period>=npertab[note]) break; if(note==7*OCTAVE) note=0; else note++; } if(instrument) { /* if instrument does not exist, note cut */ if((instrument>15)||(!mh->samples[instrument-1].length)) { UniPTEffect(0xc,0); if(effect==0xc) effect=effdat=0; } else { /* if we had a note, then change instrument... */ if(note) UniInstrument(instrument-1); /* ...otherwise, only adjust volume... */ else { /* ...unless an effect was specified, which forces a new note to be played */ if(effect||effdat) { UniInstrument(instrument-1); note=lastnote; } else UniPTEffect(0xc,mh->samples[instrument-1].volume&0x7f); } } } if(note) { UniNote(note+2*OCTAVE-1); lastnote=note; } /* Convert pattern jump from Dec to Hex */ if(effect == 0xd) effdat=(((effdat&0xf0)>>4)*10)+(effdat&0xf); /* Volume slide, up has priority */ if((effect==0xa)&&(effdat&0xf)&&(effdat&0xf0)) effdat&=0xf0; /* Handle ``heavy'' volumes correctly */ if ((effect == 0xc) && (effdat > 0x40)) effdat = 0x40; if(ust_loader) { switch(effect) { case 0: case 3: break; case 1: UniPTEffect(0,effdat); break; case 2: if(effdat&0xf) UniPTEffect(1,effdat&0xf); else if(effdat>>2) UniPTEffect(2,effdat>>2); break; default: UniPTEffect(effect,effdat); break; } } else { /* An isolated 100, 200 or 300 effect should be ignored (no "standalone" porta memory in mod files). However, a sequence such as 1XX, 100, 100, 100 is fine. */ if ((!effdat) && ((effect == 1)||(effect == 2)||(effect ==3)) && (lasteffect < 0x10) && (effect != lasteffect)) effect = 0; UniPTEffect(effect,effdat); } if (effect == 8) of.flags |= UF_PANNING; return effect; } static UBYTE *M15_ConvertTrack(MODNOTE* n) { int t; UBYTE lasteffect = 0x10; /* non existant effect */ UniReset(); for(t=0;t<64;t++) { lasteffect = M15_ConvertNote(n,lasteffect); UniNewline(); n+=4; } return UniDup(); } /* Loads all patterns of a modfile and converts them into the 3 byte format. */ static BOOL M15_LoadPatterns(void) { int t,s,tracks=0; if(!AllocPatterns()) return 0; if(!AllocTracks()) return 0; /* Allocate temporary buffer for loading and converting the patterns */ if(!(patbuf=(MODNOTE*)_mm_calloc(64U*4,sizeof(MODNOTE)))) return 0; for(t=0;tsongname,21,1); of.numpos = mh->songlength; of.reppos = 0; /* Count the number of patterns */ of.numpat = 0; for(t=0;tpositions[t]>of.numpat) of.numpat=mh->positions[t]; /* since some old modules embed extra patterns, we have to check the whole list to get the samples' file offsets right - however we can find garbage here, so check carefully */ scan=1; for(t=of.numpos;t<128;t++) if(mh->positions[t]>=0x80) scan=0; if (scan) for(t=of.numpos;t<128;t++) { if(mh->positions[t]>of.numpat) of.numpat=mh->positions[t]; if((curious)&&(mh->positions[t])) of.numpos=t+1; } of.numpat++; of.numtrk = of.numpat*of.numchn; if(!AllocPositions(of.numpos)) return 0; for(t=0;tpositions[t]; /* Finally, init the sampleinfo structures */ of.numins=of.numsmp=15; if(!AllocSamples()) return 0; s = mh->samples; q = of.samples; for(t=0;tsamplename = DupStr(s->samplename,23,1); /* init the sampleinfo variables and convert the size pointers */ q->speed = finetune[s->finetune&0xf]; q->volume = s->volume; if(ust_loader) q->loopstart = s->reppos; else q->loopstart = s->reppos<<1; q->loopend = q->loopstart+(s->replen<<1); q->length = s->length<<1; q->flags = SF_SIGNED; if(ust_loader) q->flags |= SF_UST_LOOP; if(s->replen>2) q->flags |= SF_LOOP; s++; q++; } if(!M15_LoadPatterns()) return 0; ust_loader = 0; return 1; } static CHAR *M15_LoadTitle(void) { CHAR s[21]; _mm_fseek(modreader,0,SEEK_SET); if(!_mm_read_UBYTES(s,20,modreader)) return NULL; s[20]=0; /* just in case */ return(DupStr(s,21,1)); } /*========== Loader information */ MIKMODAPI MLOADER load_m15={ NULL, "15-instrument module", "MOD (15 instrument)", M15_Init, M15_Test, M15_Load, M15_Cleanup, M15_LoadTitle }; /* ex:set ts=4: */ libmikmod-3.1.16/loaders/load_gdm.c0000644000000000000000000003110312222472510015605 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software;you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library;if not,write to the Free Software Foundation,Inc.,59 Temple Place - Suite 330,Boston,MA 02111-1307,USA. */ /*============================================================================== $Id: load_gdm.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ General DigiMusic (GDM) module loader ==============================================================================*/ /* Written by Kev Vance based on the file format description written by 'MenTaLguY' */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif typedef struct GDMNOTE { UBYTE note; UBYTE samp; struct { UBYTE effect; UBYTE param; } effect[4]; } GDMNOTE; typedef GDMNOTE GDMTRACK[64]; typedef struct GDMHEADER { CHAR id1[4]; CHAR songname[32]; CHAR author[32]; CHAR eofmarker[3]; CHAR id2[4]; UBYTE majorver; UBYTE minorver; UWORD trackerid; UBYTE t_majorver; UBYTE t_minorver; UBYTE pantable[32]; UBYTE mastervol; UBYTE mastertempo; UBYTE masterbpm; UWORD flags; ULONG orderloc; UBYTE ordernum; ULONG patternloc; UBYTE patternnum; ULONG samhead; ULONG samdata; UBYTE samnum; ULONG messageloc; ULONG messagelen; ULONG scrollyloc; UWORD scrollylen; ULONG graphicloc; UWORD graphiclen; } GDMHEADER; typedef struct GDMSAMPLE { CHAR sampname[32]; CHAR filename[13]; UBYTE ems; ULONG length; ULONG loopbeg; ULONG loopend; UBYTE flags; UWORD c4spd; UBYTE vol; UBYTE pan; } GDMSAMPLE; static GDMHEADER *mh=NULL; /* pointer to GDM header */ static GDMNOTE *gdmbuf=NULL; /* pointer to a complete GDM pattern */ static CHAR GDM_Version[]="General DigiMusic 1.xx"; static BOOL GDM_Test(void) { /* test for gdm magic numbers */ UBYTE id[4]; _mm_fseek(modreader,0x00,SEEK_SET); if (!_mm_read_UBYTES(id,4,modreader)) return 0; if (!memcmp(id,"GDM\xfe",4)) { _mm_fseek(modreader,71,SEEK_SET); if (!_mm_read_UBYTES(id,4,modreader)) return 0; if (!memcmp(id,"GMFS",4)) return 1; } return 0; } static BOOL GDM_Init(void) { if (!(gdmbuf=(GDMNOTE*)_mm_malloc(32*64*sizeof(GDMNOTE)))) return 0; if (!(mh=(GDMHEADER*)_mm_malloc(sizeof(GDMHEADER)))) return 0; return 1; } static void GDM_Cleanup(void) { _mm_free(mh); _mm_free(gdmbuf); } static BOOL GDM_ReadPattern(void) { int pos,flag,ch,i,maxch; GDMNOTE n; UWORD length,x=0; /* get pattern length */ length=_mm_read_I_UWORD(modreader)-2; /* clear pattern data */ memset(gdmbuf,255,32*64*sizeof(GDMNOTE)); pos=0; maxch=0; while (xmaxch) maxch=ch; if (!flag) { pos++; continue; } if (flag&0x60) { if (flag&0x20) { /* new note */ n.note=_mm_read_UBYTE(modreader)&127; n.samp=_mm_read_UBYTE(modreader); x +=2; } if (flag&0x40) { do { /* effect channel set */ i=_mm_read_UBYTE(modreader); n.effect[i>>6].effect=i&31; n.effect[i>>6].param=_mm_read_UBYTE(modreader); x +=2; } while (i&32); } memcpy(gdmbuf+(64U*ch)+pos,&n,sizeof(GDMNOTE)); } } return 1; } static UBYTE *GDM_ConvertTrack(GDMNOTE*tr) { int t,i=0; UBYTE note,ins,inf; UniReset(); for (t=0;t<64;t++) { note=tr[t].note; ins=tr[t].samp; if ((ins)&&(ins!=255)) UniInstrument(ins-1); if (note!=255) { UniNote(((note>>4)*OCTAVE)+(note&0xf)-1); } for (i=0;i<4;i++) { inf = tr[t].effect[i].param; switch (tr[t].effect[i].effect) { case 1: /* toneslide up */ UniEffect(UNI_S3MEFFECTF,inf); break; case 2: /* toneslide down */ UniEffect(UNI_S3MEFFECTE,inf); break; case 3: /* glissando to note */ UniEffect(UNI_ITEFFECTG,inf); break; case 4: /* vibrato */ UniEffect(UNI_ITEFFECTH,inf); break; case 5: /* portamento+volslide */ UniEffect(UNI_ITEFFECTG,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 6: /* vibrato+volslide */ UniEffect(UNI_ITEFFECTH,0); UniEffect(UNI_S3MEFFECTD,inf); break; case 7: /* tremolo */ UniEffect(UNI_S3MEFFECTR,inf); break; case 8: /* tremor */ UniEffect(UNI_S3MEFFECTI,inf); break; case 9: /* offset */ UniPTEffect(0x09,inf); break; case 0x0a: /* volslide */ UniEffect(UNI_S3MEFFECTD,inf); break; case 0x0b: /* jump to order */ UniPTEffect(0x0b,inf); break; case 0x0c: /* volume set */ UniPTEffect(0x0c,inf); break; case 0x0d: /* pattern break */ UniPTEffect(0x0d,inf); break; case 0x0e: /* extended */ switch (inf&0xf0) { case 0x10: /* fine portamento up */ UniEffect(UNI_S3MEFFECTF, 0x0f|((inf<<4)&0x0f)); break; case 0x20: /* fine portamento down */ UniEffect(UNI_S3MEFFECTE, 0xf0|(inf&0x0f)); break; case 0x30: /* glissando control */ UniEffect(SS_GLISSANDO, inf&0x0f); break; case 0x40: /* vibrato waveform */ UniEffect(SS_VIBWAVE, inf&0x0f); break; case 0x50: /* set c4spd */ UniEffect(SS_FINETUNE, inf&0x0f); break; case 0x60: /* loop fun */ UniEffect(UNI_ITEFFECTS0, (inf&0x0f)|0xb0); break; case 0x70: /* tremolo waveform */ UniEffect(SS_TREMWAVE, inf&0x0f); break; case 0x80: /* extra fine porta up */ UniEffect(UNI_S3MEFFECTF, 0x0e|((inf<<4)&0x0f)); break; case 0x90: /* extra fine porta down */ UniEffect(UNI_S3MEFFECTE, 0xe0|(inf&0x0f)); break; case 0xa0: /* fine volslide up */ UniEffect(UNI_S3MEFFECTD, 0x0f|((inf<<4)&0x0f)); break; case 0xb0: /* fine volslide down */ UniEffect(UNI_S3MEFFECTE, 0xf0|(inf&0x0f)); break; case 0xc0: /* note cut */ case 0xd0: /* note delay */ case 0xe0: /* extend row */ UniPTEffect(0xe,inf); break; } break; case 0x0f: /* set tempo */ UniEffect(UNI_S3MEFFECTA,inf); break; case 0x10: /* arpeggio */ UniPTEffect(0x0,inf); break; case 0x12: /* retrigger */ UniEffect(UNI_S3MEFFECTQ,inf); break; case 0x13: /* set global volume */ UniEffect(UNI_XMEFFECTG,inf<<1); break; case 0x14: /* fine vibrato */ UniEffect(UNI_ITEFFECTU,inf); break; case 0x1e: /* special */ switch (inf&0xf0) { case 8: /* set pan position */ if (inf >=128) UniPTEffect(0x08,255); else UniPTEffect(0x08,inf<<1); break; } break; case 0x1f: /* set bpm */ if (inf >=0x20) UniEffect(UNI_S3MEFFECTT,inf); break; } } UniNewline(); } return UniDup(); } static BOOL GDM_Load(BOOL curious) { int i,x,u,track; SAMPLE *q; GDMSAMPLE s; ULONG position; /* read header */ _mm_read_string(mh->id1,4,modreader); _mm_read_string(mh->songname,32,modreader); _mm_read_string(mh->author,32,modreader); _mm_read_string(mh->eofmarker,3,modreader); _mm_read_string(mh->id2,4,modreader); mh->majorver=_mm_read_UBYTE(modreader); mh->minorver=_mm_read_UBYTE(modreader); mh->trackerid=_mm_read_I_UWORD(modreader); mh->t_majorver=_mm_read_UBYTE(modreader); mh->t_minorver=_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh->pantable,32,modreader); mh->mastervol=_mm_read_UBYTE(modreader); mh->mastertempo=_mm_read_UBYTE(modreader); mh->masterbpm=_mm_read_UBYTE(modreader); mh->flags=_mm_read_I_UWORD(modreader); mh->orderloc=_mm_read_I_ULONG(modreader); mh->ordernum=_mm_read_UBYTE(modreader); mh->patternloc=_mm_read_I_ULONG(modreader); mh->patternnum=_mm_read_UBYTE(modreader); mh->samhead=_mm_read_I_ULONG(modreader); mh->samdata=_mm_read_I_ULONG(modreader); mh->samnum=_mm_read_UBYTE(modreader); mh->messageloc=_mm_read_I_ULONG(modreader); mh->messagelen=_mm_read_I_ULONG(modreader); mh->scrollyloc=_mm_read_I_ULONG(modreader); mh->scrollylen=_mm_read_I_UWORD(modreader); mh->graphicloc=_mm_read_I_ULONG(modreader); mh->graphiclen=_mm_read_I_UWORD(modreader); /* have we ended abruptly? */ if (_mm_eof(modreader)) { _mm_errno=MMERR_LOADING_HEADER; return 0; } /* any orders? */ if(mh->ordernum==255) { _mm_errno=MMERR_LOADING_PATTERN; return 0; } /* now we fill */ of.modtype=strdup(GDM_Version); of.modtype[18]=mh->majorver+'0'; of.modtype[20]=mh->minorver/10+'0'; of.modtype[21]=mh->minorver%10+'0'; of.songname=DupStr(mh->songname,32,0); of.numpat=mh->patternnum+1; of.reppos=0; of.numins=of.numsmp=mh->samnum+1; of.initspeed=mh->mastertempo; of.inittempo=mh->masterbpm; of.initvolume=mh->mastervol<<1; of.flags|=UF_S3MSLIDES | UF_PANNING; /* XXX whenever possible, we should try to determine the original format. Here we assume it was S3M-style wrt bpmlimit... */ of.bpmlimit = 32; /* read the order data */ if (!AllocPositions(mh->ordernum+1)) { _mm_errno=MMERR_OUT_OF_MEMORY; return 0; } _mm_fseek(modreader,mh->orderloc,SEEK_SET); for (i=0;iordernum+1;i++) of.positions[i]=_mm_read_UBYTE(modreader); of.numpos=0; for (i=0;iordernum+1;i++) { int order=of.positions[i]; if(order==255) order=LAST_PATTERN; of.positions[of.numpos]=order; if (of.positions[i]<254) of.numpos++; } /* have we ended abruptly yet? */ if (_mm_eof(modreader)) { _mm_errno=MMERR_LOADING_HEADER; return 0; } /* time to load the samples */ if (!AllocSamples()) { _mm_errno=MMERR_OUT_OF_MEMORY; return 0; } q=of.samples; position=mh->samdata; /* seek to instrument position */ _mm_fseek(modreader,mh->samhead,SEEK_SET); for (i=0;isamplename=DupStr(s.sampname,32,0); q->speed=s.c4spd; q->length=s.length; q->loopstart=s.loopbeg; q->loopend=s.loopend; q->volume=s.vol; q->panning=s.pan; q->seekpos=position; position +=s.length; if (s.flags&1) q->flags |=SF_LOOP; if (s.flags&2) q->flags |=SF_16BITS; if (s.flags&16) q->flags |=SF_STEREO; q++; } /* set the panning */ for (i=x=0;i<32;i++) { of.panning[i]=mh->pantable[i]; if (!of.panning[i]) of.panning[i]=PAN_LEFT; else if (of.panning[i]==8) of.panning[i]=PAN_CENTER; else if (of.panning[i]==15) of.panning[i]=PAN_RIGHT; else if (of.panning[i]==16) of.panning[i]=PAN_SURROUND; else if (of.panning[i]==255) of.panning[i]=128; else of.panning[i]<<=3; if (mh->pantable[i]!=255) x=i; } of.numchn=x+1; if (of.numchn<1) of.numchn=1; /* for broken counts */ /* load the pattern info */ of.numtrk=of.numpat*of.numchn; /* jump to patterns */ _mm_fseek(modreader,mh->patternloc,SEEK_SET); if (!AllocTracks()) { _mm_errno=MMERR_OUT_OF_MEMORY; return 0; } if (!AllocPatterns()) { _mm_errno=MMERR_OUT_OF_MEMORY; return 0; } for (i=track=0;i #endif #include #ifdef HAVE_MEMORY_H #include #endif #include #include "mikmod_internals.h" #ifdef SUNOS extern int fprintf(FILE *, const char *, ...); #endif /*========== Module structure */ typedef struct UNIHEADER { CHAR id[4]; UBYTE numchn; UWORD numpos; UWORD reppos; UWORD numpat; UWORD numtrk; UWORD numins; UWORD numsmp; UBYTE initspeed; UBYTE inittempo; UBYTE initvolume; UWORD flags; UBYTE numvoices; UWORD bpmlimit; UBYTE positions[256]; UBYTE panning[32]; } UNIHEADER; typedef struct UNISMP05 { UWORD c2spd; UWORD transpose; UBYTE volume; UBYTE panning; ULONG length; ULONG loopstart; ULONG loopend; UWORD flags; CHAR* samplename; UBYTE vibtype; UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; } UNISMP05; /*========== Loader variables */ static UWORD universion; static UNIHEADER mh; #define UNI_SMPINCR 64 static UNISMP05 *wh=NULL,*s=NULL; /*========== Loader code */ static char * readstring(void) { char *str=NULL; UWORD len; len=_mm_read_I_UWORD(modreader); if(len) { str=_mm_malloc(len+1); _mm_read_UBYTES(str,len,modreader); str[len]=0; } return str; } static BOOL UNI_Test(void) { char id[6]; if(!_mm_read_UBYTES(id,6,modreader)) return 0; /* UNIMod created by MikCvt */ if(!(memcmp(id,"UN0",3))) { if((id[3]>='4')&&(id[3]<='6')) return 1; } /* UNIMod created by APlayer */ if(!(memcmp(id,"APUN\01",5))) { if((id[5]>=1)&&(id[5]<=6)) return 1; } return 0; } static BOOL UNI_Init(void) { return 1; } static void UNI_Cleanup(void) { _mm_free(wh); s=NULL; } static UBYTE* readtrack(void) { UBYTE *t; UWORD len; int cur=0,chunk; if(universion>=6) len=_mm_read_M_UWORD(modreader); else len=_mm_read_I_UWORD(modreader); if(!len) return NULL; if(!(t=_mm_malloc(len))) return NULL; _mm_read_UBYTES(t,len,modreader); /* Check if the track is correct */ while(1) { chunk=t[cur++]; if(!chunk) break; chunk=(chunk&0x1f)-1; while(chunk>0) { int opcode,oplen; if(cur>=len) { free(t); return NULL; } opcode=t[cur]; /* Remap opcodes */ if (universion <= 5) { if (opcode > 29) { free(t); return NULL; } switch (opcode) { /* UNI_NOTE .. UNI_S3MEFFECTQ are the same */ case 25: opcode = UNI_S3MEFFECTT; break; case 26: opcode = UNI_XMEFFECTA; break; case 27: opcode = UNI_XMEFFECTG; break; case 28: opcode = UNI_XMEFFECTH; break; case 29: opcode = UNI_XMEFFECTP; break; } } else { /* APlayer < 1.05 does not have XMEFFECT6 */ if (opcode >= UNI_XMEFFECT6 && universion < 0x105) opcode++; /* APlayer < 1.03 does not have ITEFFECTT */ if (opcode >= UNI_ITEFFECTT && universion < 0x103) opcode++; /* APlayer < 1.02 does not have ITEFFECTZ */ if (opcode >= UNI_ITEFFECTZ && universion < 0x102) opcode++; } if((!opcode)||(opcode>=UNI_LAST)) { free(t); return NULL; } t[cur]=opcode; oplen=unioperands[opcode]+1; cur+=oplen; chunk-=oplen; } if((chunk<0)||(cur>=len)) { free(t); return NULL; } } return t; } static BOOL loadsmp6(void) { int t; SAMPLE *sptr; sptr=of.samples; for(t=0;tflags=0; if(flags&0x0004) sptr->flags|=SF_STEREO; if(flags&0x0002) sptr->flags|=SF_SIGNED; if(flags&0x0001) sptr->flags|=SF_16BITS; /* convert flags */ if(universion>=0x104) { if(flags&0x2000) sptr->flags|=SF_UST_LOOP; if(flags&0x1000) sptr->flags|=SF_OWNPAN; if(flags&0x0800) sptr->flags|=SF_SUSTAIN; if(flags&0x0400) sptr->flags|=SF_REVERSE; if(flags&0x0200) sptr->flags|=SF_BIDI; if(flags&0x0100) sptr->flags|=SF_LOOP; if(flags&0x0020) sptr->flags|=SF_ITPACKED; if(flags&0x0010) sptr->flags|=SF_DELTA; if(flags&0x0008) sptr->flags|=SF_BIG_ENDIAN; } else if(universion>=0x102) { if(flags&0x0800) sptr->flags|=SF_UST_LOOP; if(flags&0x0400) sptr->flags|=SF_OWNPAN; if(flags&0x0200) sptr->flags|=SF_SUSTAIN; if(flags&0x0100) sptr->flags|=SF_REVERSE; if(flags&0x0080) sptr->flags|=SF_BIDI; if(flags&0x0040) sptr->flags|=SF_LOOP; if(flags&0x0020) sptr->flags|=SF_ITPACKED; if(flags&0x0010) sptr->flags|=SF_DELTA; if(flags&0x0008) sptr->flags|=SF_BIG_ENDIAN; } else { if(flags&0x400) sptr->flags|=SF_UST_LOOP; if(flags&0x200) sptr->flags|=SF_OWNPAN; if(flags&0x100) sptr->flags|=SF_REVERSE; if(flags&0x080) sptr->flags|=SF_SUSTAIN; if(flags&0x040) sptr->flags|=SF_BIDI; if(flags&0x020) sptr->flags|=SF_LOOP; if(flags&0x010) sptr->flags|=SF_BIG_ENDIAN; if(flags&0x008) sptr->flags|=SF_DELTA; } sptr->speed = _mm_read_M_ULONG(modreader); sptr->volume = _mm_read_UBYTE(modreader); sptr->panning = _mm_read_M_UWORD(modreader); sptr->length = _mm_read_M_ULONG(modreader); sptr->loopstart = _mm_read_M_ULONG(modreader); sptr->loopend = _mm_read_M_ULONG(modreader); sptr->susbegin = _mm_read_M_ULONG(modreader); sptr->susend = _mm_read_M_ULONG(modreader); sptr->globvol = _mm_read_UBYTE(modreader); sptr->vibflags = _mm_read_UBYTE(modreader); sptr->vibtype = _mm_read_UBYTE(modreader); sptr->vibsweep = _mm_read_UBYTE(modreader); sptr->vibdepth = _mm_read_UBYTE(modreader); sptr->vibrate = _mm_read_UBYTE(modreader); sptr->samplename=readstring(); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } } return 1; } static BOOL loadinstr6(void) { int t,w; INSTRUMENT *i; i=of.instruments; for(t=0;tflags = _mm_read_UBYTE(modreader); i->nnatype = _mm_read_UBYTE(modreader); i->dca = _mm_read_UBYTE(modreader); i->dct = _mm_read_UBYTE(modreader); i->globvol = _mm_read_UBYTE(modreader); i->panning = _mm_read_M_UWORD(modreader); i->pitpansep = _mm_read_UBYTE(modreader); i->pitpancenter = _mm_read_UBYTE(modreader); i->rvolvar = _mm_read_UBYTE(modreader); i->rpanvar = _mm_read_UBYTE(modreader); i->volfade = _mm_read_M_UWORD(modreader); #if defined __STDC__ || defined _MSC_VER #define UNI_LoadEnvelope6(name) \ i-> name##flg=_mm_read_UBYTE(modreader); \ i-> name##pts=_mm_read_UBYTE(modreader); \ i-> name##susbeg=_mm_read_UBYTE(modreader); \ i-> name##susend=_mm_read_UBYTE(modreader); \ i-> name##beg=_mm_read_UBYTE(modreader); \ i-> name##end=_mm_read_UBYTE(modreader); \ for(w=0;w<(universion>=0x100?32:i-> name##pts);w++) { \ i-> name##env[w].pos=_mm_read_M_SWORD(modreader); \ i-> name##env[w].val=_mm_read_M_SWORD(modreader); \ } #else #define UNI_LoadEnvelope6(name) \ i-> name/**/flg=_mm_read_UBYTE(modreader); \ i-> name/**/pts=_mm_read_UBYTE(modreader); \ i-> name/**/susbeg=_mm_read_UBYTE(modreader); \ i-> name/**/susend=_mm_read_UBYTE(modreader); \ i-> name/**/beg=_mm_read_UBYTE(modreader); \ i-> name/**/end=_mm_read_UBYTE(modreader); \ for (w=0;w<(universion>=0x100?32:i-> name/**/pts);w++) { \ i-> name/**/env[w].pos=_mm_read_M_SWORD(modreader); \ i-> name/**/env[w].val=_mm_read_M_SWORD(modreader); \ } #endif UNI_LoadEnvelope6(vol); UNI_LoadEnvelope6(pan); UNI_LoadEnvelope6(pit); #undef UNI_LoadEnvelope6 if(universion>=0x103) _mm_read_M_UWORDS(i->samplenumber,120,modreader); else for(w=0;w<120;w++) i->samplenumber[w]=_mm_read_UBYTE(modreader); _mm_read_UBYTES(i->samplenote,120,modreader); i->insname=readstring(); if(_mm_eof(modreader)) { _mm_errno = MMERR_LOADING_SAMPLEINFO; return 0; } } return 1; } static BOOL loadinstr5(void) { INSTRUMENT *i; int t; UWORD wavcnt=0; UBYTE vibtype,vibsweep,vibdepth,vibrate; i=of.instruments; for(of.numsmp=t=0;tsamplenumber,0xff,INSTNOTES*sizeof(UWORD)); for(u=0;u<96;u++) i->samplenumber[u]=of.numsmp+_mm_read_UBYTE(modreader); #if defined __STDC__ || defined _MSC_VER #define UNI_LoadEnvelope5(name) \ i-> name##flg=_mm_read_UBYTE(modreader); \ i-> name##pts=_mm_read_UBYTE(modreader); \ i-> name##susbeg=_mm_read_UBYTE(modreader); \ i-> name##susend=i-> name##susbeg; \ i-> name##beg=_mm_read_UBYTE(modreader); \ i-> name##end=_mm_read_UBYTE(modreader); \ for(u=0;u<12;u++) { \ i-> name##env[u].pos=_mm_read_I_SWORD(modreader); \ i-> name##env[u].val=_mm_read_I_SWORD(modreader); \ } #else #define UNI_LoadEnvelope5(name) \ i-> name/**/flg=_mm_read_UBYTE(modreader); \ i-> name/**/pts=_mm_read_UBYTE(modreader); \ i-> name/**/susbeg=_mm_read_UBYTE(modreader); \ i-> name/**/susend=i-> name/**/susbeg; \ i-> name/**/beg=_mm_read_UBYTE(modreader); \ i-> name/**/end=_mm_read_UBYTE(modreader); \ for(u=0;u<12;u++) { \ i-> name/**/env[u].pos=_mm_read_I_SWORD(modreader); \ i-> name/**/env[u].val=_mm_read_I_SWORD(modreader); \ } #endif UNI_LoadEnvelope5(vol); UNI_LoadEnvelope5(pan); #undef UNI_LoadEnvelope5 vibtype =_mm_read_UBYTE(modreader); vibsweep =_mm_read_UBYTE(modreader); vibdepth =_mm_read_UBYTE(modreader); vibrate =_mm_read_UBYTE(modreader); i->volfade=_mm_read_I_UWORD(modreader); i->insname=readstring(); for(u=0;uc2spd =_mm_read_I_UWORD(modreader); s->transpose=_mm_read_SBYTE(modreader); s->volume =_mm_read_UBYTE(modreader); s->panning =_mm_read_UBYTE(modreader); s->length =_mm_read_I_ULONG(modreader); s->loopstart=_mm_read_I_ULONG(modreader); s->loopend =_mm_read_I_ULONG(modreader); s->flags =_mm_read_I_UWORD(modreader); s->samplename=readstring(); s->vibtype =vibtype; s->vibsweep=vibsweep; s->vibdepth=vibdepth; s->vibrate =vibrate; if(_mm_eof(modreader)) { free(wh);wh=NULL; _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } } } /* sanity check */ if(!of.numsmp) { if(wh) { free(wh);wh=NULL; } _mm_errno=MMERR_LOADING_SAMPLEINFO; return 0; } return 1; } static BOOL loadsmp5(void) { int t,u; SAMPLE *q; INSTRUMENT *d; q=of.samples;s=wh; for(u=0;usamplename=s->samplename; q->length =s->length; q->loopstart=s->loopstart; q->loopend =s->loopend; q->volume =s->volume; q->speed =s->c2spd; q->panning =s->panning; q->vibtype =s->vibtype; q->vibsweep =s->vibsweep; q->vibdepth =s->vibdepth; q->vibrate =s->vibrate; /* convert flags */ q->flags=0; if(s->flags&128) q->flags|=SF_REVERSE; if(s->flags& 64) q->flags|=SF_SUSTAIN; if(s->flags& 32) q->flags|=SF_BIDI; if(s->flags& 16) q->flags|=SF_LOOP; if(s->flags& 8) q->flags|=SF_BIG_ENDIAN; if(s->flags& 4) q->flags|=SF_DELTA; if(s->flags& 2) q->flags|=SF_SIGNED; if(s->flags& 1) q->flags|=SF_16BITS; } d=of.instruments;s=wh; for(u=0;usamplenote[t]=(d->samplenumber[t]>=of.numsmp)? 255:(t+s[d->samplenumber[t]].transpose); free(wh);wh=NULL; return 1; } static BOOL UNI_Load(BOOL curious) { int t; char *modtype,*oldtype=NULL; INSTRUMENT *d; SAMPLE *q; /* read module header */ _mm_read_UBYTES(mh.id,4,modreader); if(mh.id[3]!='N') universion=mh.id[3]-'0'; else universion=0x100; if(universion>=6) { if (universion==6) { _mm_skip_BYTE(modreader); } else { universion=_mm_read_M_UWORD(modreader); } mh.flags =_mm_read_M_UWORD(modreader); mh.numchn =_mm_read_UBYTE(modreader); mh.numvoices =_mm_read_UBYTE(modreader); mh.numpos =_mm_read_M_UWORD(modreader); mh.numpat =_mm_read_M_UWORD(modreader); mh.numtrk =_mm_read_M_UWORD(modreader); mh.numins =_mm_read_M_UWORD(modreader); mh.numsmp =_mm_read_M_UWORD(modreader); mh.reppos =_mm_read_M_UWORD(modreader); mh.initspeed =_mm_read_UBYTE(modreader); mh.inittempo =_mm_read_UBYTE(modreader); mh.initvolume=_mm_read_UBYTE(modreader); /* I expect this to show up soon in APlayer 1.06 format */ if (universion >= 0x106) mh.bpmlimit=_mm_read_M_UWORD(modreader); else mh.bpmlimit=32; mh.flags &= UF_XMPERIODS | UF_LINEAR | UF_INST | UF_NNA; mh.flags |= UF_PANNING; } else { mh.numchn =_mm_read_UBYTE(modreader); mh.numpos =_mm_read_I_UWORD(modreader); mh.reppos =(universion==5)?_mm_read_I_UWORD(modreader):0; mh.numpat =_mm_read_I_UWORD(modreader); mh.numtrk =_mm_read_I_UWORD(modreader); mh.numins =_mm_read_I_UWORD(modreader); mh.initspeed =_mm_read_UBYTE(modreader); mh.inittempo =_mm_read_UBYTE(modreader); _mm_read_UBYTES(mh.positions,256,modreader); _mm_read_UBYTES(mh.panning,32,modreader); mh.flags =_mm_read_UBYTE(modreader); mh.bpmlimit =32; mh.flags &= UF_XMPERIODS | UF_LINEAR; mh.flags |= UF_INST | UF_NOWRAP | UF_PANNING; } /* set module parameters */ of.flags =mh.flags; of.numchn =mh.numchn; of.numpos =mh.numpos; of.numpat =mh.numpat; of.numtrk =mh.numtrk; of.numins =mh.numins; of.reppos =mh.reppos; of.initspeed =mh.initspeed; of.inittempo =mh.inittempo; if(mh.bpmlimit) of.bpmlimit=mh.bpmlimit; else /* be bug-compatible with older releases */ of.bpmlimit=32; of.songname=readstring(); if(universion<0x102) oldtype=readstring(); if(oldtype) { size_t len=strlen(oldtype)+20; if(!(modtype=_mm_malloc(len))) return 0; #ifdef HAVE_SNPRINTF snprintf(modtype,len,"%s (was %s)",(universion>=0x100)?"APlayer":"MikCvt2",oldtype); #else sprintf(modtype,"%s (was %s)",(universion>=0x100)?"APlayer":"MikCvt2",oldtype); #endif } else { if(!(modtype=_mm_malloc(10))) return 0; #ifdef HAVE_SNPRINTF snprintf(modtype,10,"%s",(universion>=0x100)?"APlayer":"MikCvt3"); #else sprintf(modtype,"%s",(universion>=0x100)?"APlayer":"MikCvt3"); #endif } of.modtype=strdup(modtype); free(modtype);free(oldtype); of.comment=readstring(); if(universion>=6) { of.numvoices=mh.numvoices; of.initvolume=mh.initvolume; } if(_mm_eof(modreader)) { _mm_errno=MMERR_LOADING_HEADER; return 0; } /* positions */ if(!AllocPositions(of.numpos)) return 0; if(universion>=6) { if(universion>=0x100) _mm_read_M_UWORDS(of.positions,of.numpos,modreader); else for(t=0;t256)||(mh.numchn>32)) { _mm_errno=MMERR_LOADING_HEADER; return 0; } for(t=0;t=6) { of.numsmp=mh.numsmp; if(!AllocSamples()) return 0; if(!loadsmp6()) return 0; if(of.flags&UF_INST) { if(!AllocInstruments()) return 0; if(!loadinstr6()) return 0; } } else { if(!AllocInstruments()) return 0; if(!loadinstr5()) return 0; if(!AllocSamples()) { if(wh) { free(wh);wh=NULL; } return 0; } if(!loadsmp5()) return 0; /* check if the original file had no instruments */ if(of.numsmp==of.numins) { for(t=0,d=of.instruments;tvolpts)||(d->panpts)||(d->globvol!=64)) break; for(u=0;u<96;u++) if((d->samplenumber[u]!=t)||(d->samplenote[u]!=u)) break; if(u!=96) break; } if(t==of.numins) { of.flags&=~UF_INST; of.flags&=~UF_NOWRAP; for(t=0,d=of.instruments,q=of.samples;tsamplename=d->insname; d->insname=NULL; } } } } /* patterns */ if(!AllocPatterns()) return 0; if(universion>=6) { _mm_read_M_UWORDS(of.pattrows,of.numpat,modreader); _mm_read_M_UWORDS(of.patterns,of.numpat*of.numchn,modreader); } else { _mm_read_I_UWORDS(of.pattrows,of.numpat,modreader); _mm_read_I_UWORDS(of.patterns,of.numpat*of.numchn,modreader); } /* tracks */ if(!AllocTracks()) return 0; for(t=0;t Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libmikmod-3.1.16/autotools/0000755000000000000000000000000012262343244014302 5ustar rootrootlibmikmod-3.1.16/autotools/mkinstalldirs0000755000000000000000000000672212255302430017111 0ustar rootroot#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the 'mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because '.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libmikmod-3.1.16/autotools/depcomp0000755000000000000000000005600512255302430015657 0ustar rootroot#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-07-12.20; # UTC # Copyright (C) 1999-2012 Free Software Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'` tmpdepfile="$base.d" # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir="$base.d-lock" trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0 ; do # mkdir is a portable test-and-set. if mkdir $lockdir 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rm -rf $lockdir break else ## the lock is being held by a different process, ## wait until the winning process is done or we timeout while test -d $lockdir && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libmikmod-3.1.16/autotools/compile0000755000000000000000000001610312255302430015653 0ustar rootroot#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-03-05.13; # UTC # Copyright (C) 1999-2012 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libmikmod-3.1.16/autotools/config.guess0000755000000000000000000013135512255302430016624 0ustar rootroot#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file 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 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp 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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libmikmod-3.1.16/autotools/ltmain.sh0000755000000000000000000073311312260336514016135 0ustar rootroot# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION=2.2.6b TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libmikmod-3.1.16/autotools/texinfo.tex0000644000000000000000000116130512255302430016501 0ustar rootroot% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2012-03-11.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. % % This texinfo.tex file 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 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\relax % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % emacs-page end of cmaps % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. This is the default in % Texinfo. % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % like \smartslanted except unconditionally uses \ttsl, and no ic. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % ctrl is no longer a Texinfo command. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\indicateurl \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\}{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\topbox \newbox\printedrefnamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % \edef\pdfxrefdest{#1}% \txiescapepdf\pdfxrefdest % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % % Cross-manual reference. Only include the "Section ``foo'' in" if % the foo is neither missing or Top. Thus, @xref{,,,foo,The Foo Manual} % outputs simply "see The Foo Manual". \ifdim \wd\printedmanualbox > 0pt % What is the 7sp about? The idea is that we also want to omit % the Section part if we would be printing "Top", since they are % clearly trying to refer to the whole manual. But, this being % TeX, we can't easily compare strings while ignoring the possible % spaces before and after in the input. By adding the arbitrary % 7sp, we make it much less likely that a real node name would % happen to have the same width as "Top" (e.g., in a monospaced font). % I hope it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \setbox\topbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp \ifdim \wd2 = \wd\topbox \else \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi \cite{\printedmanual}% \else % Reference in this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore libmikmod-3.1.16/autotools/install-sh0000755000000000000000000003325512255302430016310 0ustar rootroot#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libmikmod-3.1.16/autotools/config.sub0000755000000000000000000010541212255302430016262 0ustar rootroot#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-10-01' # This file 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 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libmikmod-3.1.16/autotools/missing0000755000000000000000000002370312255302430015700 0ustar rootroot#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.18; # UTC # Copyright (C) 1996-2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, 'missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file 'aclocal.m4' autoconf touch file 'configure' autoheader touch file 'config.h.in' autom4te touch the output file, or create a stub one automake touch all 'Makefile.in' files bison create 'y.tab.[ch]', if possible, from existing .[ch] flex create 'lex.yy.c', if possible, from existing .c help2man touch the output file lex create 'lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create 'y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running '$TOOL --version' or '$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acconfig.h' or '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: '$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get '$1' as part of Autoconf from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: '$1' $msg. You should only need it if you modified a '.y' file. You may need the Bison package in order for those modifications to take effect. You can get Bison from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.l' file. You may need the Flex package in order for those modifications to take effect. You can get Flex from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the Help2man package in order for those modifications to take effect. You can get Help2man from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.texi' or '.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy 'make' (AIX, DU, IRIX). You might want to install the Texinfo package or the GNU make package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: '$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the 'README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing '$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libmikmod-3.1.16/INSTALL0000644000000000000000000001723006666426720013321 0ustar rootrootBasic Installation ================== These are generic installation instructions. 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, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). 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 at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' 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. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. 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. 4. Type `make install' to install the programs and any data files and documentation. 5. 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. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure 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 must use a version of `make' that supports the `VPATH' variable, such as 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 `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have 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. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' 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. 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'. Optional Features ================= 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. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM 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 host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. 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. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--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. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. libmikmod-3.1.16/configure0000755000000000000000000157767712262054404014213 0ustar rootroot#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.64 for libmikmod 3.1.16. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. 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. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$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 about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do 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 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=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # 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='libmikmod' PACKAGE_TARNAME='libmikmod' PACKAGE_VERSION='3.1.16' PACKAGE_STRING='libmikmod 3.1.16' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="include/mikmod.h.in" ac_config_libobj_dir=posix # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB_LDADD LIBMIKMOD_VERSION LIBMIKMOD_MICRO_VERSION LIBMIKMOD_MINOR_VERSION LIBMIKMOD_MAJOR_VERSION LIBRARY_LIB DOES_NOT_HAVE_SIGNED REENTRANT LIBOBJS ESD_LIBS ESD_CFLAGS ESD_CONFIG CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS LN_S 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 host_os host_vendor host_cpu host build_os build_vendor build_cpu build MIKMOD_LT_AGE MIKMOD_LT_REVISION MIKMOD_LT_CURRENT 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_af enable_alsa enable_esd enable_wav enable_raw enable_stdout enable_pipe enable_oss enable_win enable_ds enable_os2 enable_dart enable_sam9407 enable_ultra enable_dl enable_debug enable_threads enable_unix enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock with_esd_prefix with_esd_exec_prefix enable_esdtest ' 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=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 libmikmod 3.1.16 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/libmikmod] --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 System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libmikmod 3.1.16:";; 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 --enable-af include DEC AudioFile server driver [default=no] --enable-alsa Linux only: include ALSA driver [guessed] --enable-esd include EsounD (Enlightened Sound Daemon) driver [guessed] --enable-wav include support for output to a wav file [default=yes] --enable-raw include support for output raw data to a file [default=yes] --enable-stdout include support for output to stdout [guessed] --enable-pipe include support for output via a pipe to another command [guessed] --enable-oss include OSS driver [guessed] --enable-win Windows only: include Windows MCI driver [guessed] --enable-ds Windows only: include Direct Sound driver [guessed] --enable-os2 OS/2 only: include the OS/2 MCI driver [guessed] --enable-dart OS/2 (Warp 4) only: include OS/2 direct audio (DART) [default=no] --enable-sam9407 Linux only: include sam9407 driver [default=no] --enable-ultra Linux only: include Ultra driver [default=no] --enable-dl load alsa, esound and ultra drivers at runtime [default=yes] --enable-debug build a debug version of libmikmod [default=no] --enable-threads build a thread-safe version of libmikmod [guessed] --enable-unix override the default value of MIKMOD_UNIX in mikmod_internals.h (if you *really* need to.) --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-esdtest Do not try to compile and run a test ESD program Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-esd-prefix=PFX Prefix where ESD is installed (optional) --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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 the package provider. _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 libmikmod configure 3.1.16 generated by GNU Autoconf 2.64 Copyright (C) 2009 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_compile # 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_link # 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_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; } >/dev/null && { 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_cpp # 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_run # 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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 declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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.$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;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type 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 libmikmod $as_me 3.1.16, which was generated by GNU Autoconf 2.64. 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 cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX 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 cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX 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 cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX 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 cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX 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 ac_site_file1=$CONFIG_SITE 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 -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" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $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 LIBMIKMOD_MAJOR_VERSION=3 LIBMIKMOD_MINOR_VERSION=1 LIBMIKMOD_MICRO_VERSION=16 LIBMIKMOD_VERSION=$LIBMIKMOD_MAJOR_VERSION.$LIBMIKMOD_MINOR_VERSION.$LIBMIKMOD_MICRO_VERSION ac_aux_dir= for ac_dir in autotools "$srcdir"/autotools; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$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 test "${ac_cv_path_install+set}" = set; 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test "${ac_cv_path_mkdir+set}" = set; 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 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. test -d ./--version && rmdir ./--version 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 test "${ac_cv_prog_AWK+set}" = set; 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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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='libmikmod' VERSION='3.1.16' 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 -' ac_config_headers="$ac_config_headers config.h" { $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 # Library versioning for libtool: CURRENT, REVISION, AGE # - library source changed -> increment REVISION # - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 # - interfaces added -> increment AGE # - interfaces removed -> AGE = 0 MIKMOD_LT_CURRENT=2 MIKMOD_LT_REVISION=6 MIKMOD_LT_AGE=0 # =================== # build target: # =================== # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # these for convenience libmikmod_mingw=no libmikmod_cygwin=no libmikmod_linux=no libmikmod_darwin=no libmikmod_netbsd=no libmikmod_openbsd=no libmikmod_os2=no libmikmod_djgpp=no case $host_os in mingw*) libmikmod_mingw=yes ;; cygwin*) libmikmod_cygwin=yes ;; linux*) libmikmod_linux=yes ;; darwin*) libmikmod_darwin=yes ;; netbsd*) libmikmod_netbsd=yes ;; openbsd*) libmikmod_openbsd=yes ;; emx*) libmikmod_os2=yes;; *djgpp) libmikmod_djgpp=yes ;; esac # ============================================================== # libmikmod specific control variables and their default values. # ============================================================== libmikmod_driver_af=no libmikmod_driver_aix=no libmikmod_driver_alsa=yes libmikmod_driver_esd=yes libmikmod_driver_hp=no libmikmod_driver_oss=yes libmikmod_driver_sam9407=no libmikmod_driver_sgi=no libmikmod_driver_sun=no libmikmod_driver_win=yes libmikmod_driver_ds=yes libmikmod_driver_ultra=no libmikmod_driver_os2=yes libmikmod_driver_dart=yes libmikmod_driver_wav=yes libmikmod_driver_raw=yes libmikmod_driver_stdout=yes libmikmod_driver_pipe=yes libmikmod_dynload=yes libmikmod_dynload_underscores=no libmikmod_debug=no libmikmod_threads=yes libmikmod_unix=default # ========================= # Configure script options. # ========================= # Check whether --enable-af was given. if test "${enable_af+set}" = set; then : enableval=$enable_af; if test "$enableval" = "yes" then libmikmod_driver_af=yes else libmikmod_driver_af=no fi fi # Check whether --enable-alsa was given. if test "${enable_alsa+set}" = set; then : enableval=$enable_alsa; if test "$enableval" = "yes" then libmikmod_driver_alsa=yes else libmikmod_driver_alsa=no fi fi # Check whether --enable-esd was given. if test "${enable_esd+set}" = set; then : enableval=$enable_esd; if test "$enableval" = "yes" then libmikmod_driver_esd=yes else libmikmod_driver_esd=no fi fi case $host_os in mingw*|emx*|*djgpp) # windows, dos, os2 don't need stdout or pipe. # so default to disabled, but still user-selectable. libmikmod_driver_pipe=no libmikmod_driver_stdout=no ;; *) ;; esac # Check whether --enable-wav was given. if test "${enable_wav+set}" = set; then : enableval=$enable_wav; if test "$enableval" = "yes" then libmikmod_driver_wav=yes else libmikmod_driver_wav=no fi fi # Check whether --enable-raw was given. if test "${enable_raw+set}" = set; then : enableval=$enable_raw; if test "$enableval" = "yes" then libmikmod_driver_raw=yes else libmikmod_driver_raw=no fi fi # Check whether --enable-stdout was given. if test "${enable_stdout+set}" = set; then : enableval=$enable_stdout; if test "$enableval" = "yes" then libmikmod_driver_stdout=yes else libmikmod_driver_stdout=no fi fi # Check whether --enable-pipe was given. if test "${enable_pipe+set}" = set; then : enableval=$enable_pipe; if test "$enableval" = "yes" then libmikmod_driver_pipe=yes else libmikmod_driver_pipe=no fi fi # Check whether --enable-oss was given. if test "${enable_oss+set}" = set; then : enableval=$enable_oss; if test "$enableval" = "yes" then libmikmod_driver_oss=yes else libmikmod_driver_oss=no fi fi # Check whether --enable-win was given. if test "${enable_win+set}" = set; then : enableval=$enable_win; if test "$enableval" = "yes" then libmikmod_driver_win=yes else libmikmod_driver_win=no fi fi # Check whether --enable-ds was given. if test "${enable_ds+set}" = set; then : enableval=$enable_ds; if test "$enableval" = "yes" then libmikmod_driver_ds=yes else libmikmod_driver_ds=no fi fi # Check whether --enable-os2 was given. if test "${enable_os2+set}" = set; then : enableval=$enable_os2; if test "$enableval" = "yes" then libmikmod_driver_os2=yes else libmikmod_driver_os2=no fi fi # Check whether --enable-dart was given. if test "${enable_dart+set}" = set; then : enableval=$enable_dart; if test "$enableval" = "yes" then libmikmod_driver_dart=yes else libmikmod_driver_dart=no fi fi # Check whether --enable-sam9407 was given. if test "${enable_sam9407+set}" = set; then : enableval=$enable_sam9407; if test "$enableval" = "yes" then libmikmod_driver_sam9407=yes else libmikmod_driver_sam9407=no fi fi # Check whether --enable-ultra was given. if test "${enable_ultra+set}" = set; then : enableval=$enable_ultra; if test "$enableval" = "yes" then libmikmod_driver_ultra=yes else libmikmod_driver_ultra=no fi fi # Check whether --enable-dl was given. if test "${enable_dl+set}" = set; then : enableval=$enable_dl; if test "$enableval" = "yes" then libmikmod_dynload=yes else libmikmod_dynload=no fi fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "$enableval" = "yes" then libmikmod_debug=yes else libmikmod_debug=no fi fi # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; if test "$enableval" = "yes" then libmikmod_threads=yes else libmikmod_threads=no fi fi # Check whether --enable-unix was given. if test "${enable_unix+set}" = set; then : enableval=$enable_unix; if test "$enableval" = "yes" ;then libmikmod_unix=1 elif test "$enableval" = "no" ;then libmikmod_unix=0 fi fi # =================== # Check for programs. # =================== ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 rm -f conftest.er1 conftest.err fi $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. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; 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 conftest.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 for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then : $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_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } fi ac_exeext=$ac_cv_exeext # 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 the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { { 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: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out ac_clean_files=$ac_clean_files_save # 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; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $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$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 { $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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 #include #include #include /* 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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 { $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 enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # 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_AS="${ac_tool_prefix}as" $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 AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_AS="as" $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_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" 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 AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool" $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 DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool" $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" 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 DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" 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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_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 '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $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 test "${ac_cv_path_GREP+set}" = set; 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 test "${ac_cv_path_EGREP+set}" = set; 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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_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 fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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 DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" 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 DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:5190: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:5193: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:5196: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" 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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar" $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 AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar" $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_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" 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 AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru 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 test "${ac_cv_prog_STRIP+set}" = set; 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 test -z "$STRIP" && STRIP=: 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 test "${ac_cv_prog_RANLIB+set}" = set; 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6388 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" $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 DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" 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 DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" $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 NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" 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 NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" $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 LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" $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_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" 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 LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" $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 OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" 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 OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" $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 OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" 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 OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac 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 test "${ac_cv_prog_CPP+set}" = set; 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 to if __STDC__ is defined, since # 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 #else # include #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.$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 _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.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $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 to if __STDC__ is defined, since # 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 #else # include #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.$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 _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.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include 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 _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 _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 #include #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 " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7916: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7920: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8255: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8259: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8360: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8364: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8415: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8419: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 10782 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 10878 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } 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 CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: { $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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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 # Check if makeinfo support html output. If it doesn't, pretend it's missing # rather than failing rebuilding the documentation. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if makeinfo supports html output" >&5 $as_echo_n "checking if makeinfo supports html output... " >&6; } if test "${libmikmod_cv_makeinfo_html+set}" = set; then : $as_echo_n "(cached) " >&6 else if (makeinfo --help 2>&1 | grep html > /dev/null) 2>/dev/null then libmikmod_cv_makeinfo_html=yes else libmikmod_cv_makeinfo_html=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_makeinfo_html" >&5 $as_echo "$libmikmod_cv_makeinfo_html" >&6; } if test $libmikmod_cv_makeinfo_html = no then MAKEINFO="$missing_dir/missing makeinfo" else MAKEINFO="$MAKEINFO --no-split" fi # ==================== # Check for libraries. # ==================== # dl functions # ------------ if test $libmikmod_mingw = yes; then # libmikmod_dynload variable is for dlopen() api only libmikmod_dynload=no fi if test $libmikmod_dynload = yes then libmikmod_dynload=no libmikmod_dllib= # SunOS-style shared libraries for ac_header in dlfcn.h do : ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done if test $ac_cv_header_dlfcn_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lc" >&5 $as_echo_n "checking for dlopen in -lc... " >&6; } if test "${ac_cv_lib_c_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_dlopen=yes else ac_cv_lib_c_dlopen=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_c_dlopen" >&5 $as_echo "$ac_cv_lib_c_dlopen" >&6; } if test "x$ac_cv_lib_c_dlopen" = x""yes; then : libmikmod_dynload=sun else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : libmikmod_dynload=sun libmikmod_dllib="-ldl" else libmikmod_dynload=no fi fi else # HP-UX-style shared libraries for ac_header in dl.h do : ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default" if test "x$ac_cv_header_dl_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DL_H 1 _ACEOF fi done if test $ac_cv_header_dl_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : libmikmod_dynload=hp libmikmod_dllib="-ldld" CFLAGS="${CFLAGS} -DMIKMOD_DLAPI_HP=1 -I${srcdir}/dlapi" else libmikmod_dynload=no fi fi fi fi if test $libmikmod_dynload = sun then { $as_echo "$as_me:${as_lineno-$LINENO}: checking wherever dynamically loaded symbols need underscores" >&5 $as_echo_n "checking wherever dynamically loaded symbols need underscores... " >&6; } if test "${libmikmod_cv_dynload_underscores+set}" = set; then : $as_echo_n "(cached) " >&6 else libmikmod_oldlibs=$LIBS LIBS="$LIBS $libmikmod_dllib" 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 "$cross_compiling" = yes; then : libmikmod_cv_dynload_underscores=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef RTLD_GLOBAL #define RTLD_GLOBAL 0 #endif int main(void) { void *libc, *printfptr; libc = dlopen("libc.so", RTLD_LAZY | RTLD_GLOBAL); if (!libc) exit(1); printfptr = dlsym(libc, "_printf"); dlclose(libc); exit(!printfptr); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : libmikmod_cv_dynload_underscores=yes else libmikmod_cv_dynload_underscores=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext 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 LIBS=$libmikmod_oldlibs fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_dynload_underscores" >&5 $as_echo "$libmikmod_cv_dynload_underscores" >&6; } if test $libmikmod_cv_dynload_underscores = yes then $as_echo "#define DLSYM_NEEDS_UNDERSCORE 1" >>confdefs.h fi fi # POSIX.4 threads # --------------- if test $libmikmod_mingw = yes ; then # libmikmod_threads variable is for pthreads only libmikmod_threads=no fi if test $libmikmod_threads = yes then libmikmod_threads=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler recognizes -pthread" >&5 $as_echo_n "checking if compiler recognizes -pthread... " >&6; } if test "${libmikmod_cv_gcc_pthread+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -pthread" 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int p = pthread_create(NULL,NULL,NULL,NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : libmikmod_cv_gcc_pthread=yes else libmikmod_cv_gcc_pthread=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CFLAGS=$ac_save_CFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_gcc_pthread" >&5 $as_echo "$libmikmod_cv_gcc_pthread" >&6; } if test $libmikmod_cv_gcc_pthread = yes then if test $libmikmod_darwin = no then libmikmod_threads="" CFLAGS="$CFLAGS -pthread" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $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 pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=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_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then : libmikmod_threads=-lpthread else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 $as_echo_n "checking for pthread_create in -lc_r... " >&6; } if test "${ac_cv_lib_c_r_pthread_create+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $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 pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_create=yes else ac_cv_lib_c_r_pthread_create=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_c_r_pthread_create" >&5 $as_echo "$ac_cv_lib_c_r_pthread_create" >&6; } if test "x$ac_cv_lib_c_r_pthread_create" = x""yes; then : libmikmod_threads=-lc_r fi fi fi fi # ALSA - Linux only # ----------------- if test $libmikmod_linux = yes && test $libmikmod_driver_alsa = yes then libmikmod_driver_alsa=no for ac_header in alsa/asoundlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ALSA_ASOUNDLIB_H 1 _ACEOF fi done if test $ac_cv_header_alsa_asoundlib_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_pcm_open in -lasound" >&5 $as_echo_n "checking for snd_pcm_open in -lasound... " >&6; } if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lasound $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 snd_pcm_open (); int main () { return snd_pcm_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_asound_snd_pcm_open=yes else ac_cv_lib_asound_snd_pcm_open=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_asound_snd_pcm_open" >&5 $as_echo "$ac_cv_lib_asound_snd_pcm_open" >&6; } if test "x$ac_cv_lib_asound_snd_pcm_open" = x""yes; then : libmikmod_driver_alsa=yes fi fi else libmikmod_driver_alsa=no fi # esd # --- if test $libmikmod_driver_esd = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then libmikmod_driver_esd=no # Check whether --with-esd-prefix was given. if test "${with_esd_prefix+set}" = set; then : withval=$with_esd_prefix; esd_prefix="$withval" else esd_prefix="" fi # Check whether --with-esd-exec-prefix was given. if test "${with_esd_exec_prefix+set}" = set; then : withval=$with_esd_exec_prefix; esd_exec_prefix="$withval" else esd_exec_prefix="" fi # Check whether --enable-esdtest was given. if test "${enable_esdtest+set}" = set; then : enableval=$enable_esdtest; else enable_esdtest=yes fi if test x$esd_exec_prefix != x ; then esd_args="$esd_args --exec-prefix=$esd_exec_prefix" if test x${ESD_CONFIG+set} != xset ; then ESD_CONFIG=$esd_exec_prefix/bin/esd-config fi fi if test x$esd_prefix != x ; then esd_args="$esd_args --prefix=$esd_prefix" if test x${ESD_CONFIG+set} != xset ; then ESD_CONFIG=$esd_prefix/bin/esd-config fi fi # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ESD_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ESD_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ESD_CONFIG="$ESD_CONFIG" # Let the user override the test with a path. ;; *) 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_path_ESD_CONFIG="$as_dir/$ac_word$ac_exec_ext" $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 test -z "$ac_cv_path_ESD_CONFIG" && ac_cv_path_ESD_CONFIG="no" ;; esac fi ESD_CONFIG=$ac_cv_path_ESD_CONFIG if test -n "$ESD_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ESD_CONFIG" >&5 $as_echo "$ESD_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_esd_version=0.2.18 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ESD - version >= $min_esd_version" >&5 $as_echo_n "checking for ESD - version >= $min_esd_version... " >&6; } no_esd="" if test "$ESD_CONFIG" = "no" ; then no_esd=yes else 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 ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` esd_major_version=`$ESD_CONFIG $esd_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` esd_minor_version=`$ESD_CONFIG $esd_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_esdtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $ESD_CFLAGS" LIBS="$LIBS $ESD_LIBS" rm -f conf.esdtest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *) malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main () { int major, minor, micro; char *tmp_version; system ("touch conf.esdtest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_esd_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_esd_version"); exit(1); } if (($esd_major_version > major) || (($esd_major_version == major) && ($esd_minor_version > minor)) || (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) { return 0; } else { printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); printf("*** to point to the correct copy of esd-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_esd=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" 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 fi fi if test "x$no_esd" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } libmikmod_driver_esd=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$ESD_CONFIG" = "no" ; then echo "*** The esd-config script installed by ESD could not be found" echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the ESD_CONFIG environment variable to the" echo "*** full path to esd-config." else if test -f conf.esdtest ; then : else echo "*** Could not run ESD test program, checking why..." CFLAGS="$CFLAGS $ESD_CFLAGS" LIBS="$LIBS $ESD_LIBS" 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding ESD or finding the wrong" echo "*** version of ESD. If it is not finding ESD, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means ESD was incorrectly installed" echo "*** or that you have moved ESD since it was installed. In the latter case, you" echo "*** may want to edit the esd-config script: $ESD_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" 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 fi fi ESD_CFLAGS="" ESD_LIBS="" : fi rm -f conf.esdtest else libmikmod_driver_esd=no fi # Windows audio # --------------------- case $host_os in mingw*|cygwin*) # do a windows.h check, just in case.. for ac_header in windows.h do : ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINDOWS_H 1 _ACEOF fi done if test $ac_cv_header_windows_h != yes ; then libmikmod_driver_win=no libmikmod_driver_ds=no libmikmod_driver_xaudio2=no fi if test $libmikmod_driver_ds = yes then libmikmod_driver_ds=no for ac_header in dsound.h do : ac_fn_c_check_header_mongrel "$LINENO" "dsound.h" "ac_cv_header_dsound_h" "$ac_includes_default" if test "x$ac_cv_header_dsound_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DSOUND_H 1 _ACEOF fi done if test $ac_cv_header_dsound_h = yes ; then libmikmod_driver_ds=yes fi fi ;; *) libmikmod_driver_win=no libmikmod_driver_ds=no ;; esac # OS/2 audio # --------------------- case $host_os in emx*) # do an os2.h check, just in case.. for ac_header in os2.h do : ac_fn_c_check_header_mongrel "$LINENO" "os2.h" "ac_cv_header_os2_h" "$ac_includes_default" if test "x$ac_cv_header_os2_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OS2_H 1 _ACEOF fi done if test $ac_cv_header_os2_h != yes ; then libmikmod_driver_os2=no libmikmod_driver_dart=no fi ;; *) libmikmod_driver_os2=no libmikmod_driver_dart=no ;; esac # sgi audio - IRIX only # --------------------- case $host_os in irix*) for ac_header in dmedia/audio.h do : ac_fn_c_check_header_mongrel "$LINENO" "dmedia/audio.h" "ac_cv_header_dmedia_audio_h" "$ac_includes_default" if test "x$ac_cv_header_dmedia_audio_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DMEDIA_AUDIO_H 1 _ACEOF fi done if test $ac_cv_header_dmedia_audio_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALseterrorhandler in -laudio" >&5 $as_echo_n "checking for ALseterrorhandler in -laudio... " >&6; } if test "${ac_cv_lib_audio_ALseterrorhandler+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laudio $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 ALseterrorhandler (); int main () { return ALseterrorhandler (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_audio_ALseterrorhandler=yes else ac_cv_lib_audio_ALseterrorhandler=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_audio_ALseterrorhandler" >&5 $as_echo "$ac_cv_lib_audio_ALseterrorhandler" >&6; } if test "x$ac_cv_lib_audio_ALseterrorhandler" = x""yes; then : libmikmod_driver_sgi=yes fi fi ;; esac # audiofile # --------- if test $libmikmod_driver_af = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then libmikmod_driver_af=no for ac_header in AF/AFlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "AF/AFlib.h" "ac_cv_header_AF_AFlib_h" "$ac_includes_default" if test "x$ac_cv_header_AF_AFlib_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_AF_AFLIB_H 1 _ACEOF fi done if test $ac_cv_header_AF_AFlib_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AFOpenAudioConn in -lAF" >&5 $as_echo_n "checking for AFOpenAudioConn in -lAF... " >&6; } if test "${ac_cv_lib_AF_AFOpenAudioConn+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lAF $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 AFOpenAudioConn (); int main () { return AFOpenAudioConn (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_AF_AFOpenAudioConn=yes else ac_cv_lib_AF_AFOpenAudioConn=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_AF_AFOpenAudioConn" >&5 $as_echo "$ac_cv_lib_AF_AFOpenAudioConn" >&6; } if test "x$ac_cv_lib_AF_AFOpenAudioConn" = x""yes; then : libmikmod_driver_af=yes fi fi else libmikmod_driver_af=no fi # libgus - Linux only # ------------------- if test $libmikmod_linux = yes && test $libmikmod_driver_ultra = yes then libmikmod_driver_ultra=no for ac_header in libgus.h do : ac_fn_c_check_header_mongrel "$LINENO" "libgus.h" "ac_cv_header_libgus_h" "$ac_includes_default" if test "x$ac_cv_header_libgus_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGUS_H 1 _ACEOF fi done if test $ac_cv_header_libgus_h = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libgus is new enough" >&5 $as_echo_n "checking if libgus is new enough... " >&6; } if test "${libmikmod_cv_libgus_h_good+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { gus_info_t *info; int flg1=GUS_INSTR_SIMPLE; int flg2=GUS_WAVE_BIDIR; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libmikmod_cv_libgus_h_good=yes else libmikmod_cv_libgus_h_good=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_libgus_h_good" >&5 $as_echo "$libmikmod_cv_libgus_h_good" >&6; } if test $libmikmod_cv_libgus_h_good = yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gus_cards in -lgus" >&5 $as_echo_n "checking for gus_cards in -lgus... " >&6; } if test "${ac_cv_lib_gus_gus_cards+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgus $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 gus_cards (); int main () { return gus_cards (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gus_gus_cards=yes else ac_cv_lib_gus_gus_cards=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_gus_gus_cards" >&5 $as_echo "$ac_cv_lib_gus_gus_cards" >&6; } if test "x$ac_cv_lib_gus_gus_cards" = x""yes; then : libmikmod_driver_ultra=yes fi fi fi else libmikmod_driver_ultra=no fi # sam9407 - Linux only # -------------------- if test $libmikmod_linux = yes && test $libmikmod_driver_sam9407 = yes then libmikmod_driver_sam9407=no for ac_header in sys/sam9407.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/sam9407.h" "ac_cv_header_sys_sam9407_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sam9407_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SAM9407_H 1 _ACEOF fi done if test $ac_cv_header_sys_sam9407_h = yes then libmikmod_driver_sam9407=yes fi else libmikmod_driver_sam9407=no fi # ======================= # Check for header files. # ======================= { $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 test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include 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 _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 _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 #include #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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test "${ac_cv_header_sys_wait_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_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_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in fcntl.h limits.h malloc.h memory.h strings.h sys/ioctl.h unistd.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" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # ============================================================= # Check for typedefs, structures, and compiler characteristics. # ============================================================= if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if test "${ac_cv_prog_gcc_traditional+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF 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" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if test "${ac_cv_c_bigendian+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes 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_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler understands the signed keyword" >&5 $as_echo_n "checking if compiler understands the signed keyword... " >&6; } if test "${libmikmod_cv_gcc_signed+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { signed int t = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libmikmod_cv_gcc_signed=yes else libmikmod_cv_gcc_signed=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_gcc_signed" >&5 $as_echo "$libmikmod_cv_gcc_signed" >&6; } if test $libmikmod_cv_gcc_signed = yes then DOES_NOT_HAVE_SIGNED="" else DOES_NOT_HAVE_SIGNED="#define signed" fi # ============================ # Check for library functions. # ============================ for ac_func in setenv snprintf srandom 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" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memcmp strcasecmp strdup strstr 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" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for floor in -lm" >&5 $as_echo_n "checking for floor in -lm... " >&6; } if test "${ac_cv_lib_m_floor+set}" = set; 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 floor (); int main () { return floor (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_floor=yes else ac_cv_lib_m_floor=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_floor" >&5 $as_echo "$ac_cv_lib_m_floor" >&6; } if test "x$ac_cv_lib_m_floor" = x""yes; then : LIBRARY_LIB="-lm $LIBRARY_LIB" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "srandom" >/dev/null 2>&1; then : $as_echo "#define SRANDOM_IN_MATH_H 1" >>confdefs.h fi rm -f conftest* # ================ # Choose settings. # ================ libmikmod_driverlist=nosound if test $libmikmod_driver_raw = yes ; then libmikmod_driverlist="raw $libmikmod_driverlist" $as_echo "#define DRV_RAW 1" >>confdefs.h fi if test $libmikmod_driver_wav = yes ; then libmikmod_driverlist="wav $libmikmod_driverlist" $as_echo "#define DRV_WAV 1" >>confdefs.h fi if test $libmikmod_driver_pipe = yes ; then libmikmod_driverlist="pipe $libmikmod_driverlist" $as_echo "#define DRV_PIPE 1" >>confdefs.h fi if test $libmikmod_driver_stdout = yes ; then libmikmod_driverlist="stdout $libmikmod_driverlist" $as_echo "#define DRV_STDOUT 1" >>confdefs.h fi # If we can guess the drivers needed from the system, no need to ask the user # to specify it manually case $host_os in aix*) $as_echo "#define AIX 1" >>confdefs.h for ac_header in sys/audio.h sys/acpa.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" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_sys_audio_h = yes && \ test $ac_cv_header_sys_acpa_h = yes then libmikmod_driver_aix=yes fi ;; hpux*) for ac_header in sys/audio.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/audio.h" "ac_cv_header_sys_audio_h" "$ac_includes_default" if test "x$ac_cv_header_sys_audio_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_AUDIO_H 1 _ACEOF fi done if test $ac_cv_header_sys_audio_h = yes then libmikmod_driver_hp=yes fi ;; netbsd*|openbsd*) for ac_header in sys/audioio.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/audioio.h" "ac_cv_header_sys_audioio_h" "$ac_includes_default" if test "x$ac_cv_header_sys_audioio_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_AUDIOIO_H 1 _ACEOF fi done if test $ac_cv_header_sys_audioio_h = yes then libmikmod_driver_sun=yes if test $libmikmod_netbsd = yes then libmikmod_driverlist="netbsd $libmikmod_driverlist" else libmikmod_driverlist="openbsd $libmikmod_driverlist" fi fi ;; sunos*|solaris*) for ac_header in sun/audioio.h sys/audioio.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" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_sun_audioio_h = yes || \ test $ac_cv_header_sys_audioio_h = yes then libmikmod_driver_sun=yes libmikmod_driverlist="sun $libmikmod_driverlist" if test "$cross_compiling" != yes then case `uname -r` in 4*) $as_echo "#define SUNOS 1" >>confdefs.h ;; esac fi fi ;; esac if test $libmikmod_driver_af = yes then libmikmod_driverlist="$libmikmod_driverlist audiofile" $as_echo "#define DRV_AF 1" >>confdefs.h LIBRARY_LIB="-lAF $LIBRARY_LIB" fi if test $libmikmod_driver_win = yes then libmikmod_driverlist="win $libmikmod_driverlist" $as_echo "#define DRV_WIN 1" >>confdefs.h LIBRARY_LIB="-lwinmm $LIBRARY_LIB" fi if test $libmikmod_driver_ds = yes then libmikmod_driverlist="ds $libmikmod_driverlist" $as_echo "#define DRV_DS 1" >>confdefs.h LIBRARY_LIB="-ldsound $LIBRARY_LIB" fi if test $libmikmod_driver_os2 = yes then libmikmod_driverlist="os2 $libmikmod_driverlist" $as_echo "#define DRV_OS2 1" >>confdefs.h # drv_os2 and drv_dart both link to mmpm2 if test $libmikmod_driver_dart = no ; then LIBRARY_LIB="-lmmpm2 $LIBRARY_LIB" fi fi if test $libmikmod_driver_dart = yes then libmikmod_driverlist="dart $libmikmod_driverlist" $as_echo "#define DRV_DART 1" >>confdefs.h LIBRARY_LIB="-lmmpm2 $LIBRARY_LIB" fi if test $libmikmod_driver_aix = yes then libmikmod_driverlist="aix $libmikmod_driverlist" $as_echo "#define DRV_AIX 1" >>confdefs.h fi if test $libmikmod_driver_alsa = yes then libmikmod_driverlist="alsa $libmikmod_driverlist" $as_echo "#define DRV_ALSA 1" >>confdefs.h if test $libmikmod_dynload = no then LIBRARY_LIB="-lasound $LIBRARY_LIB" fi fi if test $libmikmod_driver_esd = yes then libmikmod_driverlist="esd $libmikmod_driverlist" $as_echo "#define DRV_ESD 1" >>confdefs.h CFLAGS="$CFLAGS $ESD_CFLAGS" # Under Solaris and perhaps other systems, we have to forward esd # dependencies to libmikmod's dependency list. # However, no need to keep libraries we won't require (libossaudio on BSD # systems, libaudiofile, libasound on Linux) if test $libmikmod_dynload != no then ESD_LIBS="`echo $ESD_LIBS|sed -e 's/-lesd//'|sed -e 's/-lasound//'|sed -e 's/-laudiofile//'|sed -e 's/-lossaudio//'`" fi LIBRARY_LIB="$ESD_LIBS $LIBRARY_LIB" fi if test $libmikmod_driver_hp = yes then libmikmod_driverlist="hp $libmikmod_driverlist" $as_echo "#define DRV_HP 1" >>confdefs.h fi if test $libmikmod_driver_oss = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then # under Linux, /dev/sndstat is deprecated, never check for OSS as the # headers are always found. if test $libmikmod_linux = no && test "$cross_compiling" != yes then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSS (/dev/sndstat)" >&5 $as_echo_n "checking for OSS (/dev/sndstat)... " >&6; } if test "${libmikmod_cv_oss_dev_sndstat+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -c /dev/sndstat then libmikmod_cv_oss_dev_sndstat=yes else libmikmod_cv_oss_dev_sndstat=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_oss_dev_sndstat" >&5 $as_echo "$libmikmod_cv_oss_dev_sndstat" >&6; } else libmikmod_cv_oss_dev_sndstat=yes fi if test $libmikmod_cv_oss_dev_sndstat = yes then for ac_header in machine/soundcard.h do : ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default" if test "x$ac_cv_header_machine_soundcard_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MACHINE_SOUNDCARD_H 1 _ACEOF fi done for ac_header in sys/soundcard.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default" if test "x$ac_cv_header_sys_soundcard_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SOUNDCARD_H 1 _ACEOF fi done if test $ac_cv_header_machine_soundcard_h = yes || \ test $ac_cv_header_sys_soundcard_h = yes then libmikmod_driverlist="oss $libmikmod_driverlist" $as_echo "#define DRV_OSS 1" >>confdefs.h fi fi else libmikmod_driver_oss=no fi if test $libmikmod_driver_sam9407 = yes then libmikmod_driverlist="sam9407 $libmikmod_driverlist" $as_echo "#define DRV_SAM9407 1" >>confdefs.h fi if test $libmikmod_driver_sgi = yes then libmikmod_driverlist="sgi $libmikmod_driverlist" $as_echo "#define DRV_SGI 1" >>confdefs.h LIBRARY_LIB="-laudio $LIBRARY_LIB" fi if test $libmikmod_driver_sun = yes then $as_echo "#define DRV_SUN 1" >>confdefs.h fi if test $libmikmod_driver_ultra = yes then libmikmod_driverlist="ultra $libmikmod_driverlist" $as_echo "#define DRV_ULTRA 1" >>confdefs.h if test $libmikmod_dynload = no then LIBRARY_LIB="-lgus $LIBRARY_LIB" fi fi if test $libmikmod_debug = yes then $as_echo "#define MIKMOD_DEBUG 1" >>confdefs.h CC="$CC -g" fi if test $libmikmod_dynload != no then $as_echo "#define MIKMOD_DYNAMIC 1" >>confdefs.h LIBRARY_LIB="$libmikmod_dllib $LIBRARY_LIB" if test $libmikmod_dynload = sun then # RTLD_GLOBAL is not defined under every system { $as_echo "$as_me:${as_lineno-$LINENO}: checking if RTLD_GLOBAL is defined" >&5 $as_echo_n "checking if RTLD_GLOBAL is defined... " >&6; } if test "${libmikmod_cv_decl_rtld_global+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int flag=RTLD_GLOBAL; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libmikmod_cv_decl_rtld_global=yes else libmikmod_cv_decl_rtld_global=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_decl_rtld_global" >&5 $as_echo "$libmikmod_cv_decl_rtld_global" >&6; } if test $libmikmod_cv_decl_rtld_global = yes then $as_echo "#define HAVE_RTLD_GLOBAL 1" >>confdefs.h fi fi fi # If compiling with gcc, use adequate optimization flags if test $ac_cv_c_compiler_gnu = yes then # On at least x86 platforms, gcc 2.7.2.1 and earlier won't work if -O3 (or # -finline-functions) are used. Versions 2.7.2.3, 2.8.x and egcs are ok # (didn't test 2.7.2.2). # Until there's an easy way to catch broken inlining, we choose flags known # to work correctly depending of the compiler version. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inlining functions is safe" >&5 $as_echo_n "checking if inlining functions is safe... " >&6; } if test "${libmikmod_cv_gcc_inline_safe+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !(defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 7)) #error inlining functions is not safe #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libmikmod_cv_gcc_inline_safe=yes else libmikmod_cv_gcc_inline_safe=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_gcc_inline_safe" >&5 $as_echo "$libmikmod_cv_gcc_inline_safe" >&6; } if test $libmikmod_cv_gcc_inline_safe = no then CFLAGS="$CFLAGS -fno-strength-reduce" fi CFLAGS="$CFLAGS -ffast-math" if test $libmikmod_darwin = yes; then CFLAGS="$CFLAGS -fno-common" fi if test $libmikmod_debug = yes then CFLAGS="$CFLAGS -Wall -Werror" else CFLAGS="$CFLAGS -Wall" fi # pgcc 2.95.2 appears not to be able to compile libmikmod, although regular # gcc works fine. Issue a warning if the compiler is pgcc, until a reliable # way to detect flawed version (or, better, a reliable workaround) is # found. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is pgcc" >&5 $as_echo_n "checking if compiler is pgcc... " >&6; } if ($CC -v 2>&1 | grep ^pgcc > /dev/null) 2>/dev/null then libmikmod_gcc_is_pgcc=yes else libmikmod_gcc_is_pgcc=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_gcc_is_pgcc" >&5 $as_echo "$libmikmod_gcc_is_pgcc" >&6; } if test $libmikmod_gcc_is_pgcc = yes then echo " *** Version 2.95.2 of this compiler, and perhaps others, are unable to *** compile libmikmod. If compilation fails for playercode/virtch.c *** around line 650, with the error ``internal error--insn does not *** satisfy its constraints'', then you'll have to use another compiler. " >&2 fi fi if test x$libmikmod_threads != xno then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h CFLAGS="$CFLAGS -D_REENTRANT" LIBRARY_LIB="$libmikmod_threads $LIBRARY_LIB" REENTRANT="-D_REENTRANT" if test $libmikmod_cv_gcc_pthread = yes then if test $libmikmod_darwin = no then REENTRANT="-pthread $REENTRANT" LIB_LDADD="-pthread" fi fi fi # MIKMOD_UNIX override if test "$libmikmod_unix" = "0" || test "$libmikmod_unix" = "1" then cat >>confdefs.h <<_ACEOF #define MIKMOD_UNIX $libmikmod_unix _ACEOF fi # symbol visibility ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden -Werror" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility attributes" >&5 $as_echo_n "checking if compiler supports visibility attributes... " >&6; } if test "${libmikmod_cv_gcc_visibility+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void foo(void); __attribute__((visibility("default"))) void foo(void) {} int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libmikmod_cv_gcc_visibility=yes else libmikmod_cv_gcc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmikmod_cv_gcc_visibility" >&5 $as_echo "$libmikmod_cv_gcc_visibility" >&6; } # we want symbol -fvisibility for elf targets, however it works # with darwin/macho too. other than that, windows, dos and os2 # do not need it: for any such targets, the -Werror switch is # supposed to fail the above check. (I'm adding the manual test # below nonetheless, just in case.) case $host_os in mingw*|cygwin*|emx*|*djgpp) libmikmod_cv_gcc_visibility=no ;; esac CFLAGS="$ac_save_CFLAGS" if test $libmikmod_cv_gcc_visibility = yes ;then CFLAGS="$CFLAGS -DSYM_VISIBILITY -fvisibility=hidden" fi # ================= # Create Makefiles. # ================= ac_config_files="$ac_config_files libmikmod-config libmikmod.pc libmikmod.spec Makefile docs/Makefile docs/libmikmod-config.1 dlapi/Makefile drivers/Makefile include/Makefile include/mikmod.h include/mikmod_build.h:include/mikmod.h.in loaders/Makefile mmio/Makefile playercode/Makefile posix/Makefile macintosh/Makefile macintosh/mikmod.h:include/mikmod.h.in macintosh/mikmod_build.h:include/mikmod.h.in macintosh/_libmikmodversion.r os2/Makefile win32/Makefile win32/mikmod.h:include/mikmod.h.in win32/mikmod_build.h:include/mikmod.h.in" 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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file 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}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_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. 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 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=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&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 libmikmod $as_me 3.1.16, which was generated by GNU Autoconf 2.64. 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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" 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 -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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ libmikmod config.status 3.1.16 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2009 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=$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 ;; --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"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _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 "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "libmikmod-config") CONFIG_FILES="$CONFIG_FILES libmikmod-config" ;; "libmikmod.pc") CONFIG_FILES="$CONFIG_FILES libmikmod.pc" ;; "libmikmod.spec") CONFIG_FILES="$CONFIG_FILES libmikmod.spec" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "docs/libmikmod-config.1") CONFIG_FILES="$CONFIG_FILES docs/libmikmod-config.1" ;; "dlapi/Makefile") CONFIG_FILES="$CONFIG_FILES dlapi/Makefile" ;; "drivers/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/mikmod.h") CONFIG_FILES="$CONFIG_FILES include/mikmod.h" ;; "include/mikmod_build.h") CONFIG_FILES="$CONFIG_FILES include/mikmod_build.h:include/mikmod.h.in" ;; "loaders/Makefile") CONFIG_FILES="$CONFIG_FILES loaders/Makefile" ;; "mmio/Makefile") CONFIG_FILES="$CONFIG_FILES mmio/Makefile" ;; "playercode/Makefile") CONFIG_FILES="$CONFIG_FILES playercode/Makefile" ;; "posix/Makefile") CONFIG_FILES="$CONFIG_FILES posix/Makefile" ;; "macintosh/Makefile") CONFIG_FILES="$CONFIG_FILES macintosh/Makefile" ;; "macintosh/mikmod.h") CONFIG_FILES="$CONFIG_FILES macintosh/mikmod.h:include/mikmod.h.in" ;; "macintosh/mikmod_build.h") CONFIG_FILES="$CONFIG_FILES macintosh/mikmod_build.h:include/mikmod.h.in" ;; "macintosh/_libmikmodversion.r") CONFIG_FILES="$CONFIG_FILES macintosh/_libmikmodversion.r" ;; "os2/Makefile") CONFIG_FILES="$CONFIG_FILES os2/Makefile" ;; "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; "win32/mikmod.h") CONFIG_FILES="$CONFIG_FILES win32/mikmod.h:include/mikmod.h.in" ;; "win32/mikmod_build.h") CONFIG_FILES="$CONFIG_FILES win32/mikmod_build.h:include/mikmod.h.in" ;; *) 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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # 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` 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 {' >"$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 >>"\$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 ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$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 < "$tmp/subs1.awk" > "$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 $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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="$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 "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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _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" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :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 } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; 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 $? 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 chmod +x libmikmod-config cat macintosh/_libmikmodversion.r | tr '\n' '\r' > macintosh/libmikmodversion.r # ==================== # Print configuration. # ==================== libmikmod_driverlist=`echo $libmikmod_driverlist|sed -e 's, , ,g'` if test $libmikmod_dynload != no then libmikmod_dynload="yes, ${libmikmod_dynload} style" fi echo " Library configuration: Source code location: $srcdir Compiler: $CC Compiler flags: $CFLAGS Debug version: $libmikmod_debug Dynamically loaded drivers whenever possible: $libmikmod_dynload Drivers to be compiled: $libmikmod_driverlist Install path: $prefix/lib, $prefix/include " libmikmod-3.1.16/NEWS0000644000000000000000000006010712262343244012754 0ustar rootrootSummary of changes between libmikmod 3.1.15 and libmikmod 3.1.16 ========================================================================== libmikmod 3.1.16 was released on 05-Jan-2014. This is a minor bugfix / maintenance release. - Improved ALSA driver. - mikmod.texi: Fixed document generation using newer texinfo. - Updates and fixes to configury (autotools). - Made the wav and raw file writer drivers configurable: the library can be configured and compiled without any audio output drivers if so required, except for drv_nos ('nosound') of course. - Minor compilation fixes against ancient software versions. - Backported pkg-config file and rpm spec file from HEAD branch. Summary of changes between libmikmod 3.1.14 and libmikmod 3.1.15 ========================================================================== libmikmod 3.1.15 was released on 28-Nov-2013. This is a minor bugfix / maintenance release. - libmikmod.m4: fixed so that it works with C++ compilers. - S3M loader: Enforce the 64000 bytes sample length limit, which has been in effect since libmikmod-v3.1.10, only for tracker id 1, i.e. only if setting the S3MIT_SCREAM flag during track conversion. - ULT loader: Fix version array size (was 1 less then its initializer.) - ESD driver: Fix signature for esd_playstream function pointer (const) - ALSA driver: Remove unused function pointers. Summary of changes between libmikmod 3.1.13 and libmikmod 3.1.14 ========================================================================== libmikmod 3.1.14 was released on 14-Oct-2013. This is a minor bugfix / maintenance release. - Fixed a small memory leak in samples freeing (thanks to S. Michel.) - Fixed calling the previous position while at position 0 resulting in an invalid read. (noticed while running mikmod under valgrind.) - Fix return types for MREADER->Seek and MWRITER->Put to be int, and not BOOL. (identical functionality but non-misleading.) - Provided new Visual Studio 6 and Visual Studio 2005 project files. The latter imports into newer Visual Studio versions, e.g. VS2012. Summary of changes between libmikmod 3.1.12 and libmikmod 3.1.13 ======================================================================== libmikmod-3.1.13 was released on 05-Oct-2013 This is a major bugfix / maintenance release. BUGFIXES backported from the HEAD branch: - 64 bit detection fixes. - Fixes for CVE-2007-6720, CVE-2009-0179, CVE-2009-3995, CVE-2010-2546. - Fix MikMod_strerror() might read beyond end of a static array. - Fix looping volume in Player_SetVolume(), based on an old patch by Yi-Huang Han. - Fix "unclick" code to consider loop lengths shorter than 16: fixes crashes seen with several xm files (sf.net bug #12, mpd bug #3425.) - XM loader now reads songlength amount of orders from the file and then seeks to mh->headersize+60 (sf.net bug #10.) - A double driver registration fix. - MikMod_InfoDriver and MikMod_InfoLoader list print fixes. - Fix a possible crash on accessing the samples menu in mikmod. - Fix wav file writer for big endian platforms. - Fix wav file writer to output a correct rifflength in header. CLEANUPS backported from the HEAD branch: - Updated configury, proper support for cross-compilation, support for building in a separate directory, support latest autotools. - Fix BOOL type use all over the source. - Multiple compiler warning fixes, other small cleanups. PLATFORM SPECIFIC stuff backported from the HEAD branch: - Linux: backport ALSA driver from HEAD branch to support contemporary ALSA versions. - Unix: ESD driver updates from Fedora, now require >= 0.2.18. - Unix: minor OSS fixes. - Windows: fixes/updates, win64 fully supported. MinGW[-w64] fully supported along with MSVC and LCC. new standalone MinGW makefile with cross-compilation support. - Windows: dllexport/dllimport attributes work properly for MinGW[-w64], as well as windows compilers. Static builds using MSVC, LCC, etc are now named mikmod_static.lib. When compiling against static libmikmod, MIKMOD_STATIC should be defined so that dllimport wouldn't be assumed. - GCC elf and macho symbol visibility attributes now supported. - Linux: the old Alsa-0.3.x/0.4.x driver is now retired. the source is still in the drivers directory but not tested, nor will be maintained any more. - Linux: the old sam9407 and ultra drivers haven't been maintained for quite some time and they now default to disabled in the configury. the ultra driver had got an update in the 3.2.0 (libmikmod3) releases, which won't be back merged to libmikmod2. - Misc: the pipe and stdout drivers are now configurable. Summary of changes between libmikmod 3.1.11-a and libmikmod 3.1.12 ======================================================================== libmikmod-3.1.12 was released on 15/12/2007 This is bugfix release by denis111(keygenmusic). BUGFIXES - libmikmod no more hangs on loading XM modules with incorrect number of instrumens. - modules with more then 255 orders are now supported Summary of changes between libmikmod 3.1.11 and libmikmod 3.1.11-a ======================================================================== libmikmod-3.1.11-a was released on 05/03/2004 Most of my work and attention goes on the 3.2.x series, but I still receive occasional bug reports and patchs for the 3.1.11 version. There are not enough changes to make a full release, but many people may find this patch useful. BUGFIXES - libmikmod playback now works correcly on amd64 (type size problem) - fixed warning issued by automake >= 1.8 - config.sub and config.guess updated Summary of changes between libmikmod 3.1.10 and libmikmod 3.1.11 (Thiers): ========================================================================== libmikmod 3.1.11 was released on 01/21/2004. This is a small maintenance release. I know there are not many changes, but since it has been a very long time since the last one, and meanwhile libmikmod changed maintainer, I think it is justified. THANKS - Ingo Saitz, the maintainer of the mikmod packages for debian, for bugfixes. - Frank Loemker, for the lcc-win32 stuff and fixes for the direct sound driver. BUGFIXES - Playback problems in MODs of length >128. This fixes the file beatwave.mod. Thanks to Emmanuel Coirier for pointing this out. - Applied debian patches: - Fix for broken volume fadeouts of IT instruments - Fixed configure test for pthread - devfs support for Linux OSS - Makefile for lcc-win32. To compile libmikmod with lcc-win32 a rather new version is needed. I currently use version 3.7 compiled on Jan 20 2002. A version half a year old did not work. To compile - check that you have the lcc bin directory in the PATH (and no other compiler bin dirs), - change to libmikmod-3.1.11/win32, - check Makefile.lcc for any needed changes, and - use make -f Makefile.lcc. - Different fixes for the direct sound driver: - Pausing did only work for half of the buffer. - Restarting the player did not work as the output thread was removed in DS_PlayStop(). - Removed busy waiting for end of thread. - Sound output is started immediately on the first call to DS_Update() to be consistent with other non threaded drivers. - Different small clean ups. - In MikMod_Reset() the raw output driver driver did not use the filename set via the cmdline. Summary of changes between libmikmod 3.1.9 and libmikmod 3.1.10 (Arlanc): ========================================================================= libmikmod 3.1.10 was released on 01/24/2002. This version is yet another bugfix release. I have more contributions coming, especially a native MacOS X driver, that will not be present in 3.1.10 but will be in 3.1.11. THANKS - Most of the bugs mentioned below have been squished by ``UFO'', Holger Jakob, Thomas Neumann, Mark Page and Juan Linietsky. BUGFIXES - Systematic coredumps on library initialization and calls to MikMod_InfoDriver have been eliminated. Sorry, and thanks to Shlomi Fish for the best fix. - The fix for spurious effect memory for portamentos in MOD files shouldn't have been applied to the ``porta to note'' (effect 3) effect. Fixed in this release. In the process, the aforementioned fix was perfected, as it broke a few modules by accident. - IT Panbrello effect with random wave did not work. - IT Tempo slide (T0x, T1x) was not updated accurately, and the effect memory was not implemented. The only tempo slide command which worked accurately was T10, which is a no-op (-: - IT effect SC0 (cut note with no delay) is now correctly interpreted as SC1. - XM effect 6 (porta + volume slide) didn't have memory. - ProTracker effect F (change speed or bpm) should now be correctly handled when its value is 32, depending on the module type (some formats will use it as a speed value, others as a bpm value). - XM playback stopped when reaching pattern 255 in the order list. - Corrupted envelopes in XM instruments are detected and some repair is attempted. - Some valid AMF, IMF and IT modules refused to load. - Fine volume slide effects in volume column of IT modules, when using the effect memory (i.e. A0 and B0) were misinterpreted as AF and BF, thus causing unwanted large slides. - Portamento to note effect in volume column of IT modules was not rendered correctly. - S3M files marked as created by ScreamTracker will honour the limit of 64000 bytes (not 64KB!) for sample length and sample offset effect position. - Loops in instrument envelopes were processed one tick too fast. - In-song message in FAR modules were not displayed correctly. - ProTracker effect E9 (Retrig) was not played correctly. NEW FEATURES - Modules which are not panning-aware (not using any panning effects and with the tracker's default panning) use a recentered panning, so as to sound better with headphones. Suggested by Urpo Lankinen. - Retrigger and panning effects are now recognized in FAR modules. - All arpeggio effects are now played in OKT modules. - FLT8 modules (8 channel StarTrekker) are now recognized and played. PLATFORM SPECIFIC - The Windows DirectSound driver has been improved and will use less resources during playback. - The native audio driver for NetBSD and OpenBSD should work better with recent versions of these systems, as well as with old sound cards such as the SoundBlaster Pro. - Mac OS X is supported, although no native sound driver is available for it yet, thanks to Juha Kaunisto. - Dynamically loading drivers is now supported on HP-PA systems running under HP-UX, as well on systems using the a.out binary file format. Summary of changes between libmikmod 3.1.8 and libmikmod 3.1.9 (Vorey): ======================================================================= libmikmod 3.1.9 was released on 02/14/2000. This version is a bugfix release, and was primarily considered as a public patch for 3.1.8 (namely, version 3.1.8-a). However, due to the very important bug fix in XM playback, among other things, it's worth being 3.1.9... THANKS - Many thanks to ``UFO'', Thomas Neumann, James Kehl and Vito Caputo for their help, code and feedback. - Special thanks to Gerd Rausch, for writing both the Linux sam9407 driver and the associated Mikmod driver. Nice work ! - Thanks to Bastien Nocera for letting me do some tests under Linux/PPC. BUGFIXES - Envelopes weren't loaded correctly for IMF and XM modules. In the average case, the first envelope point was correct, the remaining half points were bogus, and the other half completely random. This fix is definitely worth the upgrade. - In MOD files, effect 0xc (set channel volume) with effect parameter 0xff was misplayed as a note cut. - In MOD files too, effects 0x1, 0x2 and 0x3 (portamentos) with effect parameter 0x00 were using the command memory, but these commands do not have effect memory for MOD files. - The Wuzamod check for STM modules wasn't present in 3.1.8, despite what the release notes said )-: - Enabling the envelope (with an effect) for a sample with no associated envelope would cause immediate coredumps. Now fixed. - Panning was ignored in GDM modules. - Sample rate was incorrect for STM and STX modules. - Arpeggio memory (for IT modules) was ignored. - Tempo slide for IT modules was not processed correctly. - Toggling surround sound didn't have effect until the driver was reset. NEW FEATURES - New loader for Amiga Oktalyzer (.OKT) modules. - UNI loader recognizes recent APlayer modules (.APUN format level 0x104). - Due to popular request, the function Player_LoadTitleFP() has been added to the library. - Under Unix systems, make targets "check" and "uninstall" have been added. However, due to a bug in automake, "make uninstall" will only work correctly with the next release of automake (or the current CVS tree). - New output driver for sam9407-based soundcards under Linux, featuring hardware playback. PLATFORM SPECIFIC - Support for the latest Linux Ultra driver development versions (2.99) has been added. Also, a few bugs in this driver have been fixed. - The DirectSound driver (win32) shipped with the previous release didn't compile. It should now - at least things are better ! - The OSS driver from 3.1.8 didn't work very well with some versions of the Linux kernel, as well as under Linux/PPC. The problems should be gone now. Also, the OSS driver now handles multi-soundcard configurations. Summary of changes between libmikmod 3.1.7 and libmikmod 3.1.8 (Tence): ======================================================================= libmikmod 3.1.8 was released on 10/25/1999. THANKS - Many thanks (in no particular order) to Frank Loemker, Bjornar Henden, Joshua Shagam, Vito Caputo, Thomas Neumann, Zach Metzinger, and Kevin Langman for their help, code and feedback. - Special thanks to Andrew Zabolotny for his huge work on the OS/2 drivers. The rest of your code is not lost, it will go into 3.2... BUGFIXES (more details can be found in file ``PROBLEMS'') - IT global volume slide effect was played too fast. - IT effect S6x (pattern delay for x ticks) was misunderstood as SEx (pattern delay for x rows). - Finetune effect was not handled correctly for some XM modules. - Software mixer incorrectly produced extra clicks in interpolated mode (fix by Frank Loemker). - Under Unix systems, the piped output driver (drv_pipe), as well as the output to file drivers (drv_raw, drv_wav) had security issues if the libmikmod application is setuid root. - Trying to read data from a file, with the data not located at offset 0, didn't work correctly since 3.1.5. - Almost any text file beginning with "if" was considered as a valid module by Player_LoadTitle(), yet hopefully rejected when trying to load it. - AMF effect 4 and variants lacked memory. - IT modules featuring patterns with less than 32 rows could not be loaded. - Some samples and effects in APlayer converted modules (.apun) were not played correctly. - Linefeeds in the song message in IT modules weren't loaded correctly. NEW FEATURES - IMF effect XE (ignore envelope) implemented. - Support for uLaw output with the OSS driver, for Linux/sparc. - Started to modularize semaphore usage when possible. The Player_LoadTitle() function can be used while a module is playing without causing a short pause in playback. - STM modules with the Wuzamod signature can now be loaded. - More ``slightly corrupted'' XM modules can be loaded. PLATFORM SPECIFIC - libmikmod 3.1.7 didn't compile out of the box under IRIX (sorry !) - The EsounD driver didn't compile under Solaris - Solaris driver forced playback to either headphone or speaker, instead of using the current output setting as default. This is now fixed. - Under SunOS 4, libmikmod should compile with the non-ansi C compiler bundled by default. - The ALSA driver now works with ALSA 0.4. - The OSS driver should now work with Linux/ppc. - Under OS/2, the MMPM/2 and DART driver have been almost rewritten by Andrew Zabolotny and work much better. And they are now somewhat configurable, too. - libmikmod 3.1.8 should work as a DLL under win32 environments. And the non-directX driver is now registered in MikMod_RegisterAllDrivers(). Summary of changes between libmikmod 3.1.6 and libmikmod 3.1.7 (Sauxillanges): ============================================================================== libmikmod 3.1.7 was released on 06/28/1999. THANKS - Anders Bjoerklund did a terrific job of creating a Macintosh driver ! I'm proud to add the MacOS to the list of supported systems. - Bjornar Henden provided a non-directX driver for Windows NT users. This makes libmikmod more portable than ever. Thanks a lot ! - Simon Hosie contributed speed optimizations and bug fixes to the software mixer. Thanks for your work ! - Timo Taipalus pointed out several severe problems and helped me to get rid of them. Thanks for your efforts ! BUGFIXES (more details can be found in file ``PROBLEMS'') - Very long samples were truncated when played with the normal software mixer. - Invalid notes using non-existent instruments caused the current note to be retrigged instead of being ignored. - Porta to note effects did not restart the sample envelopes. - Note cut with non empty volume column on the same row resulted in the note cut being ignored. - Disabling/enabling envelopes had no effect. - 15 instrument modules embedding a ``Music Channel BBS'' ad were rejected. - Huge (>64Kb) sample offsets were ignored with the hiqh quality mixer. - Delay note effect was incorrectly converted to pattern jump, and porta to note was incorrectly converted to tremor, for GDM modules. - Dual effect Lxx in S3M and IT was misconverted to L00 (this bug was introduced in 3.1.5-beta2, thanks to Timo Taipalus for noticing it) - Pitch envelope was not played accurately (IT). - XM modules in format 1.03 couldn't be loaded. - XM modules with the tracker name empty made the library coredump on some platforms. - Set finetune effect (E5x) wasn't handled correctly for XM modules. - Fine slides (X1x,X2x) didn't play correctly for XM modules (thanks to Frank Loemker for reporting it). - If the MikMod_InitThreads() function was called more than once, the library did not behave correctly. - Sample loops were not computed correctly for Oktalyzer modules. NEW FEATURES - Modules can be played with a speed shift (suggested by Roope Anttinnen). - MikMod_Init() and MikMod_Reset() have been extended to pass specific parameters to the drivers. This makes libmikmod 3.1.7 incompatible with the previous versions, but updated libmikmod-based players will be released soon. The shared library version has increased (now 2.0). This number scheme is going to be as crazy as ncurses' one... PLATFORM SPECIFIC - It was not possible to create a multithreaded library on FreeBSD (fix by Roope Anttinnen). - HP-UX driver used to reset mixer settings at initialization. - Added MacOS support, thanks to Anders Bjoerklund. - Solaris driver now works on Solaris/Intel edition. Summary of changes between libmikmod 3.1.5 and libmikmod 3.1.6 (Romegier): ========================================================================== libmikmod 3.1.6 was released on 03/24/1999. BUGFIXES - When the library was built thread-safe, calls to Player_SetPosition resulted in a deadlock. - The OSS driver was too strict and didn't allow OSS to select a different playback frequency. - A volume bug has been removed from the module player (thanks to Thomas Neumann for the report). NEW FEATURES - Volume ramping has been ported from the high quality mixer to the regular mixer, and is enabled when interpolated mixing is requested. You should hear less clicks in interpolated mode from now ! (Suggested by Bjornar Henden) - The UNI loader recognizes APlayer format 1.3 modules. PLATFORM SPECIFIC - The NetBSD and OpenBSD driver should work with recent NetBSD and OpenBSD versions. - Some Windows code has been merged. Feedback will be appreciated. Note that, as I don't have a windows development system (and no plan to have one in the near future), I can't test or debug the Windows part myself. Summary of changes between libmikmod 3.1.2 and libmikmod 3.1.5 (Pradelles): =========================================================================== libmikmod 3.1.5 was released on 03/01/1999. THANKS - Many thanks to Lutz Roeder and Uwe Thoma, who send me the description of the Imago Orpheus file format (IMF), as well as some of Imago's code, which made the creation of the IMF loader a pure C exercise (-: - Many thanks to Claudio Matsuoka, Tobias Gloth, C. Ray C. and Ben Collver for their contributions and bug reports. - Also big thanks to Jan Havelka for his help in tracking and fixing bugs. - I almost forgot to thank Cedric Hebert for pointing out the gcc 2.x optimization options bug ! - And as a last-minute add-on, Kev Vance submitted a GDM loader. BUGFIXES - The OSS driver used much more memory than necessary without reason. - Samples longer than 1 Mb were not played correctly. However, the fix now requires that your C compiler provides a 64 bit integer type. As a result, libmikmod will not compile anymore on AIX with old versions of xlC. - Samples with ping pong loops could make the library segfault on some rare conditions. This bug was also present in MikIT and in the module plugin of winamp, which are also based on old MikMod 3 sources... - The sample loaders will now load samples with extra information blocks in them, and has been made more robust. - More checks to detect empty song messages. - The song message loading routine was bugged and could make the library coredump. - AMF modules in formats 1.0, 1.2 and 1.3 couldn't be loaded. - MED loader now loads instrument names and song message if they exist. - More check have been added to the 15 instrument MOD loader to prevent it from hanging on non-mod files ; let me know if you still experience problems with it. - STM loader rejected STM created by MOD2STM ; the last pattern was never played ; also, in some STM modules the samples were not loaded correctly. - XM modules in format 1.02 couldn't be loaded. - Envelope sustain loops in XM modules were not processed correctly. - Porta to note using the command memory used sometimes an incorrect value when playing AMF, IT, S3M and ULT modules. - Volume slides for IT (Dxx) and XM (Axx) modules didn't continue in the background. - Porta down effect in the volume column of IT modules was not played correctly. - Problems occuring when compiling libmikmod when an older version of libmikmod is installed are now fixed. DOCUMENTATION FIXES - The documentation incorrectly referred to PAN_MIDDLE instead of PAN_CENTER. NEW FEATURES - On platforms that support POSIX.4 threads, the library is now thread-safe. - Depending on your system's capabilities, ALSA and EsounD driver can now be dynamically loaded when a libmikmod application is run, so if you built your binary with the shared ALSA or EsounD libraries (which is the default), it will run on other systems lacking those libraries. - New loaders for GDM (General Digital Music), IMF (Imago Orpheus) and STX (STMIK 0.2) modules. - UNI loader is back, for those who need to play the ``Acid Tetris'' songs. - S3M loader correctly identifies S3M modules created by Impulse Tracker an Imago Orpheus. - IT effect T (slide tempo) is now implemented. - The driver for the Linux Ultrasound project (the ancestor of ALSA) is back, too. - The selection of the standard or high-quality software mixer is now made at runtime. - New interfaces Voice_Get{Frequency,Panning,Volume} and Player_GetChannelPeriod (this one is for x11amp's MikMod plugin). - Due to the addition of the new driver and loaders, library version has increased. PLATFORM SPECIFIC - Compiling with gcc 2.x under Linux on x86 platforms performed aggressive optimizations which had nasty interferences with the channel volumes on some modules. Hopefully this is now fixed, so gcc users will get the same sound quality as egcs users. I apologize to everyone told me of this volume problem for the time it took me to figure out where it came from. Previous versions of libmikmod were bundled with the MikMod player ; refer to its ``NEWS'' file for older changes information. libmikmod-3.1.16/drivers/0000755000000000000000000000000012262343244013727 5ustar rootrootlibmikmod-3.1.16/drivers/drv_stdout.c0000644000000000000000000000477112222472510016274 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_stdout.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Output data to stdout ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef DRV_STDOUT #ifdef HAVE_UNISTD_H #include #endif #include #include "mikmod_internals.h" #define BUFFERSIZE 32768 static SBYTE *audiobuffer=NULL; static BOOL stdout_IsThere(void) { /* only allow this driver on pipes */ return 1-isatty(1); } static int stdout_Init(void) { if(!(audiobuffer=(SBYTE*)_mm_malloc(BUFFERSIZE))) return 1; #ifdef __EMX__ _fsetmode(stdout,"b"); #endif return VC_Init(); } static void stdout_Exit(void) { VC_Exit(); #ifdef __EMX__ _fsetmode(stdout,"t"); #endif if (audiobuffer) { free(audiobuffer); audiobuffer=NULL; } } static void stdout_Update(void) { #ifdef _WIN32 _write #else write #endif (1,audiobuffer,VC_WriteBytes((SBYTE*)audiobuffer,BUFFERSIZE)); } static int stdout_Reset(void) { VC_Exit(); return VC_Init(); } MIKMODAPI MDRIVER drv_stdout={ NULL, "stdout", "Standard output driver v1.1", 0,255, "stdout", NULL, stdout_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, stdout_Init, stdout_Exit, stdout_Reset, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, stdout_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else #include "mikmod_internals.h" MISSING(drv_stdout); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/Makefile.in0000644000000000000000000002631312260336527016005 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = drivers DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = drv_AF.c \ drv_aix.c \ drv_alsa04.c \ drv_alsa.c \ drv_dart.c \ drv_ds.c \ drv_esd.c \ drv_hp.c \ drv_mac.c \ drv_nos.c \ drv_os2.c \ drv_oss.c \ drv_pipe.c \ drv_raw.c \ drv_sam9407.c\ drv_sgi.c \ drv_stdout.c \ drv_sun.c \ drv_ultra.c \ drv_wav.c \ drv_win.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/drivers/drv_dart.c0000644000000000000000000002006412222472510015675 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_dart.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on OS/2 MMPM/2 using direct audio (DART) ==============================================================================*/ /* Written by Miodrag Vallat Lots of improvements (basically made usable...) by Andrew Zabolotny */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_DART #define INCL_DOS #define INCL_OS2MM #include /* Prevent a warning: PPFN redefined */ #define PPFN _PPFN #include #undef PPFN #include #include #define MAX_BUFFERCOUNT 8 static MCI_MIX_BUFFER MixBuffers[MAX_BUFFERCOUNT]; static MCI_MIXSETUP_PARMS MixSetupParms; static MCI_BUFFER_PARMS BufferParms; static ULONG DeviceIndex = 0; /* use default waveaudio device */ static ULONG BufferSize = (ULONG)-1; /* autodetect buffer size */ static ULONG BufferCount = 2; /* use two buffers */ static ULONG DeviceID = 0; static void Dart_CommandLine(CHAR *cmdline) { char *ptr; int buf; if ((ptr = MD_GetAtom("buffer", cmdline, 0))) { buf = atoi(ptr); if (buf >= 12 && buf <= 16) BufferSize = 1 << buf; free(ptr); } if ((ptr = MD_GetAtom("count", cmdline, 0))) { buf = atoi(ptr); if (buf >= 2 && buf <= MAX_BUFFERCOUNT) BufferCount = buf; free(ptr); } if ((ptr = MD_GetAtom("device", cmdline, 0))) { buf = atoi(ptr); if (buf >= 0 && buf <= 8) DeviceIndex = buf; free(ptr); } } /* Buffer update thread (created and called by DART) This is a high-priority thread used to compute and update the audio stream, automatically created by the DART subsystem. We compute the next audio buffer and feed it to the waveaudio device. */ static LONG APIENTRY Dart_UpdateBuffers(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags) { /* sanity check */ if (!pBuffer) return TRUE; /* if we have finished a buffer, we're ready to play a new one */ if ((ulFlags == MIX_WRITE_COMPLETE) || ((ulFlags == (MIX_WRITE_COMPLETE | MIX_STREAM_ERROR)) && (ulStatus == ERROR_DEVICE_UNDERRUN))) { /* refill this audio buffer and feed it again */ MUTEX_LOCK(vars); if (Player_Paused_internal()) pBuffer->ulBufferLength = VC_SilenceBytes(pBuffer->pBuffer, BufferSize); else pBuffer->ulBufferLength = VC_WriteBytes(pBuffer->pBuffer, BufferSize); MUTEX_UNLOCK(vars); MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, pBuffer, 1); } return TRUE; } static BOOL Dart_IsPresent(void) { MCI_AMP_OPEN_PARMS AmpOpenParms; MCI_GENERIC_PARMS GenericParms; memset(&AmpOpenParms, 0, sizeof(MCI_AMP_OPEN_PARMS)); AmpOpenParms.pszDeviceType = (PSZ) MAKEULONG(MCI_DEVTYPE_AUDIO_AMPMIX, (USHORT) DeviceIndex); if (mciSendCommand(0, MCI_OPEN, MCI_WAIT | MCI_OPEN_SHAREABLE | MCI_OPEN_TYPE_ID, (PVOID) &AmpOpenParms, 0) != MCIERR_SUCCESS) return 0; mciSendCommand(AmpOpenParms.usDeviceID, MCI_CLOSE, MCI_WAIT, (PVOID) &GenericParms, 0); return 1; } static int Dart_Init(void) { MCI_AMP_OPEN_PARMS AmpOpenParms; MCI_GENERIC_PARMS GenericParms; MixBuffers[0].pBuffer = NULL; /* marker */ DeviceID = 0; memset(&GenericParms, 0, sizeof(MCI_GENERIC_PARMS)); /* open AMP device */ memset(&AmpOpenParms, 0, sizeof(MCI_AMP_OPEN_PARMS)); AmpOpenParms.usDeviceID = 0; AmpOpenParms.pszDeviceType = (PSZ) MAKEULONG(MCI_DEVTYPE_AUDIO_AMPMIX, (USHORT) DeviceIndex); if (mciSendCommand(0, MCI_OPEN, MCI_WAIT | MCI_OPEN_SHAREABLE | MCI_OPEN_TYPE_ID, (PVOID) & AmpOpenParms, 0) != MCIERR_SUCCESS) { _mm_errno = MMERR_OPENING_AUDIO; return 1; } DeviceID = AmpOpenParms.usDeviceID; /* setup playback parameters */ memset(&MixSetupParms, 0, sizeof(MCI_MIXSETUP_PARMS)); MixSetupParms.ulBitsPerSample = (md_mode & DMODE_16BITS) ? 16 : 8; MixSetupParms.ulFormatTag = MCI_WAVE_FORMAT_PCM; MixSetupParms.ulSamplesPerSec = md_mixfreq; MixSetupParms.ulChannels = (md_mode & DMODE_STEREO) ? 2 : 1; MixSetupParms.ulFormatMode = MCI_PLAY; MixSetupParms.ulDeviceType = MCI_DEVTYPE_WAVEFORM_AUDIO; MixSetupParms.pmixEvent = Dart_UpdateBuffers; if (mciSendCommand(DeviceID, MCI_MIXSETUP, MCI_WAIT | MCI_MIXSETUP_INIT, (PVOID) & MixSetupParms, 0) != MCIERR_SUCCESS) { _mm_errno = MMERR_OS2_MIXSETUP; return 1; } /* Compute audio buffer size now if necessary */ if (BufferSize == (ULONG)-1) { /* DART suggested buffer size is somewhat too big. We compute a size for circa 1/4" of playback. */ int bit; BufferSize = md_mixfreq >> 2; if (md_mode & DMODE_STEREO) BufferSize <<= 1; if (md_mode & DMODE_16BITS) BufferSize <<= 1; for (bit = 15; bit >= 12; bit--) if (BufferSize & (1 << bit)) break; BufferSize = (1 << bit); } /* make sure buffer is not greater than 64 Kb, as DART can't handle this situation. */ if (BufferSize > 65536) BufferSize = 65536; BufferParms.ulStructLength = sizeof(BufferParms); BufferParms.ulNumBuffers = BufferCount; BufferParms.ulBufferSize = BufferSize; BufferParms.pBufList = MixBuffers; if (mciSendCommand(DeviceID, MCI_BUFFER, MCI_WAIT | MCI_ALLOCATE_MEMORY, (PVOID) &BufferParms, 0) != MCIERR_SUCCESS) { _mm_errno = MMERR_OUT_OF_MEMORY; return 1; } return VC_Init(); } static void Dart_Exit(void) { MCI_GENERIC_PARMS GenericParms; VC_Exit(); if (MixBuffers[0].pBuffer) { mciSendCommand(DeviceID, MCI_BUFFER, MCI_WAIT | MCI_DEALLOCATE_MEMORY, &BufferParms, 0); MixBuffers[0].pBuffer = NULL; } if (DeviceID) { mciSendCommand(DeviceID, MCI_CLOSE, MCI_WAIT, (PVOID) &GenericParms, 0); DeviceID = 0; } } static int Dart_PlayStart(void) { MCI_GENERIC_PARMS GenericParms; int i; if (VC_PlayStart()) return 1; /* silence buffers */ for (i = 0; i < BufferCount; i++) { VC_SilenceBytes(MixBuffers[i].pBuffer, BufferSize); MixBuffers[i].ulBufferLength = BufferSize; } /* grab exclusive rights to device instance (not entire device) */ GenericParms.hwndCallback = 0; /* Not needed, so set to 0 */ if (mciSendCommand(DeviceID, MCI_ACQUIREDEVICE, MCI_EXCLUSIVE_INSTANCE, (PVOID) &GenericParms, 0) != MCIERR_SUCCESS) { mciSendCommand(DeviceID, MCI_CLOSE, MCI_WAIT, (PVOID) &GenericParms, 0); _mm_errno = MMERR_OPENING_AUDIO; return 1; } /* wake DART up */ MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, MixBuffers, BufferCount); return 0; } static void Dart_Update(void) { /* Nothing to do: everything is done in DART_UpdateBuffers() */ } static void Dart_PlayStop(void) { MCI_GENERIC_PARMS GenericParms; GenericParms.hwndCallback = 0; mciSendCommand(DeviceID, MCI_STOP, MCI_WAIT, (PVOID) &GenericParms, 0); VC_PlayStop(); } MIKMODAPI MDRIVER drv_dart = { NULL, "Direct audio (DART)", "OS/2 DART driver v1.2", 0, 255, "dart", Dart_CommandLine, Dart_IsPresent, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, Dart_Init, Dart_Exit, NULL, VC_SetNumVoices, Dart_PlayStart, Dart_PlayStop, Dart_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_dart); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_esd.c0000644000000000000000000002350612236770575015543 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_esd.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for the Enlightened sound daemon (EsounD) ==============================================================================*/ /* You should set the hostname of the machine running esd in the environment variable 'ESPEAKER'. If this variable is not set, localhost is used. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_ESD #ifdef HAVE_UNISTD_H #include #endif #ifdef MIKMOD_DYNAMIC #include #endif #include #ifdef HAVE_FCNTL_H #include #endif #include #include #include #include #ifdef MIKMOD_DYNAMIC /* runtime link with libesd */ /* note that since we only need the network part of EsounD, we don't need to load libasound.so or libaudiofile.so as well */ static int(*esd_closestream)(int); static int(*esd_playstream)(esd_format_t,int,const char*,const char*); static void* libesd=NULL; #ifndef HAVE_RTLD_GLOBAL #define RTLD_GLOBAL (0) #endif #else /* MIKMOD_DYNAMIC */ /* compile-time link with libesd */ #define esd_closestream esd_close #define esd_playstream esd_play_stream #endif #ifdef HAVE_SETENV #define SETENV setenv("ESD_NO_SPAWN","1",0) #else static char ESDENV[] = "ESD_NO_SPAWN=1"; #define SETENV putenv(ESDENV) #endif static int sndfd=-1; static esd_format_t format; static CHAR *espeaker=NULL; #ifdef MIKMOD_DYNAMIC /* straight from audio.c in esd sources */ esd_format_t esd_audio_format=ESD_BITS16|ESD_STEREO; int esd_audio_rate=ESD_DEFAULT_RATE; static int ESD_Link(void) { if (libesd) return 0; /* load libesd.so */ libesd=dlopen("libesd.so",RTLD_LAZY|RTLD_GLOBAL); if (!libesd) return 1; /* resolve function references */ if (!(esd_closestream=dlsym(libesd,"esd_close"))) return 1; if (!(esd_playstream=dlsym(libesd,"esd_play_stream"))) return 1; return 0; } static void ESD_Unlink(void) { esd_closestream=NULL; esd_playstream=NULL; if (libesd) { dlclose(libesd); libesd=NULL; } } #endif /* A simple chunk fifo buffer, as we cannot query to ask how much free space there is with esd, we keep a fifo filled and try to write the entire fifo non blocking, stopping when we get -EAGAIN */ #define AUDIO_BUF_SIZE (ESD_BUF_SIZE * 4) static SBYTE audiobuffer[AUDIO_BUF_SIZE]; static int audiobuffer_start, audiobuffer_end, audiobuffer_empty; static void audiobuffer_init(void) { audiobuffer_empty = 1; audiobuffer_start = audiobuffer_end = 0; } /* Get a free chunk of the fifo, the caller is expected to use all of it, so all of it gets marked filled */ static SBYTE *audiobuffer_get_free_chunk(int *size) { int end = audiobuffer_end; if (audiobuffer_empty) { audiobuffer_empty = 0; *size = AUDIO_BUF_SIZE; } else if (audiobuffer_end > audiobuffer_start) { *size = AUDIO_BUF_SIZE - audiobuffer_end; audiobuffer_end = 0; } else { *size = audiobuffer_start - audiobuffer_end; audiobuffer_end = audiobuffer_start; } return audiobuffer + end; } /* Get a filled chunk from the fifo, the caller must call audiobuffer_mark_free to tell the fifo how much of the chunk it has consumed */ static SBYTE *audiobuffer_get_filled_chunk(int *size) { if (audiobuffer_empty) { *size = 0; } else if (audiobuffer_end > audiobuffer_start) { *size = audiobuffer_end - audiobuffer_start; } else { *size = AUDIO_BUF_SIZE - audiobuffer_start; } return audiobuffer + audiobuffer_start; } /* Tell the fifo to mark size bytes as free starting from the current head of the fifo */ static void audiobuffer_mark_free(int size) { audiobuffer_start = (audiobuffer_start + size) % AUDIO_BUF_SIZE; if (audiobuffer_start == audiobuffer_end) { audiobuffer_empty = 1; audiobuffer_start = audiobuffer_end = 0; } } /* I hope to have this function integrated into libesd someday...*/ static ssize_t esd_writebuf(int fd,const void *buffer,size_t count) { ssize_t res; res = write(fd, (char*)buffer, count); if (res < 0 && errno == EAGAIN) return 0; return res; } static void ESD_CommandLine(CHAR *cmdline) { CHAR *ptr=MD_GetAtom("machine",cmdline,0); if (ptr) { if (espeaker) free(espeaker); espeaker=ptr; } } static BOOL ESD_IsThere(void) { BOOL retval; int fd; #ifdef MIKMOD_DYNAMIC if (ESD_Link()) return 0; #endif /* Try to esablish a connection with default esd settings, but we don't want esdlib to spawn esd if esd is not running ! */ if (SETENV) retval=0; else { if ((fd=esd_playstream(ESD_BITS16|ESD_STEREO|ESD_STREAM|ESD_PLAY, ESD_DEFAULT_RATE,espeaker,"libmikmod"))<0) retval=0; else { esd_closestream(fd); retval=1; } } #ifdef MIKMOD_DYNAMIC ESD_Unlink(); #endif return retval; } static int ESD_Init_internal(void) { format=(md_mode&DMODE_16BITS?ESD_BITS16:ESD_BITS8)| (md_mode&DMODE_STEREO?ESD_STEREO:ESD_MONO)|ESD_STREAM|ESD_PLAY; if (md_mixfreq > ESD_DEFAULT_RATE) md_mixfreq = ESD_DEFAULT_RATE; /* make sure we can open an esd stream with our parameters */ if (!(SETENV)) { if ((sndfd=esd_playstream(format,md_mixfreq,espeaker,"libmikmod"))<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } fcntl(sndfd, F_SETFL, fcntl(sndfd, F_GETFL) | O_NONBLOCK); } else { _mm_errno=MMERR_OUT_OF_MEMORY; return 1; } /* Initialize the audiobuffer */ audiobuffer_init(); return VC_Init(); } static int ESD_Init(void) { #ifdef MIKMOD_DYNAMIC if (ESD_Link()) { _mm_errno=MMERR_DYNAMIC_LINKING; return 1; } #endif return ESD_Init_internal(); } static void ESD_Exit_internal(void) { VC_Exit(); if (sndfd>=0) { esd_closestream(sndfd); sndfd=-1; signal(SIGPIPE,SIG_DFL); } } static void ESD_Exit(void) { ESD_Exit_internal(); #ifdef MIKMOD_DYNAMIC ESD_Unlink(); #endif } typedef ULONG (*VC_WriteBytesFunc)(SBYTE*, ULONG); static void ESD_Update_internal(VC_WriteBytesFunc WriteBytes) { static time_t losttime; if (sndfd>=0) { SBYTE *chunk; int size; ssize_t written; /* Fill fifo */ chunk = audiobuffer_get_free_chunk(&size); while (size) { WriteBytes(chunk, size); chunk = audiobuffer_get_free_chunk(&size); } /* And write untill fifo empty, or we would block */ chunk = audiobuffer_get_filled_chunk(&size); while (size) { written = esd_writebuf(sndfd, chunk, size); if (written < 0) { /* if we lost our connection with esd, clean up and work as the nosound driver until we can reconnect */ esd_closestream(sndfd); sndfd = -1; signal(SIGPIPE, SIG_DFL); losttime = time(NULL); break; } /* Stop if the buffer is full */ if (written == 0) break; audiobuffer_mark_free(written); chunk = audiobuffer_get_filled_chunk(&size); } } else { /* an alarm would be better, but then the library user could not use alarm(2) himself... */ if (time(NULL)-losttime>=5) { losttime=time(NULL); /* Attempt to reconnect every 5 seconds */ if (!(SETENV)) if ((sndfd=esd_playstream(format,md_mixfreq,espeaker,"libmikmod"))>=0) { /* reconnected, clear fifo (contains old sound) and recurse to play sound */ audiobuffer_init(); fcntl(sndfd, F_SETFL, fcntl(sndfd, F_GETFL) | O_NONBLOCK); ESD_Update_internal(WriteBytes); } } } } static void ESD_Update(void) { ESD_Update_internal(VC_WriteBytes); } static void ESD_Pause(void) { ESD_Update_internal(VC_SilenceBytes); } static int ESD_PlayStart(void) { if (sndfd<0) if (!(SETENV)) { if ((sndfd=esd_playstream(format,md_mixfreq,espeaker,"libmikmod"))<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } fcntl(sndfd, F_SETFL, fcntl(sndfd, F_GETFL) | O_NONBLOCK); } /* since the default behaviour of SIGPIPE on most Unices is to kill the program, we'll prefer handle EPIPE ourselves should the esd die - recent esdlib use a do-nothing handler, which prevents us from receiving EPIPE, so we override this */ signal(SIGPIPE,SIG_IGN); /* silence buffers */ VC_SilenceBytes(audiobuffer,ESD_BUF_SIZE); esd_writebuf(sndfd,audiobuffer,ESD_BUF_SIZE); audiobuffer_init(); return VC_PlayStart(); } static void ESD_PlayStop(void) { if (sndfd>=0) { /* silence buffers */ VC_SilenceBytes(audiobuffer,ESD_BUF_SIZE); esd_writebuf(sndfd,audiobuffer,ESD_BUF_SIZE); audiobuffer_init(); signal(SIGPIPE,SIG_DFL); } VC_PlayStop(); } static int ESD_Reset(void) { ESD_Exit_internal(); return ESD_Init_internal(); } MIKMODAPI MDRIVER drv_esd={ NULL, "Enlightened sound daemon", /* use the same version number as the EsounD release it works best with */ "Enlightened sound daemon (EsounD) driver v0.2.38", 0,255, "esd", ESD_CommandLine, ESD_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, ESD_Init, ESD_Exit, ESD_Reset, VC_SetNumVoices, ESD_PlayStart, ESD_PlayStop, ESD_Update, ESD_Pause, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_esd); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_mac.c0000644000000000000000000001540612222472510015507 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_mac.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output to the Macintosh Sound Manager ==============================================================================*/ /* Written by Anders F Bjoerklund Based on free MADlibrary code by Antoine Rosset (author of PlayerPRO) */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_MAC #ifndef __SOUND__ #include #endif #ifndef __GESTALT__ #include #endif #define SOUND_BUFFER_SIZE 4096L static SndChannelPtr soundChannel=NULL; /* pointer to a sound channel */ static SndDoubleBufferHeader doubleHeader; /* pointer to double buffers */ static pascal void MyDoubleBackProc(SndChannelPtr soundChannel,SndDoubleBufferPtr doubleBuffer) { #pragma unused(soundChannel) SBYTE *buffer; long written; #if TARGET_CPU_68K long oldA5=SetA5(doubleBuffer->dbUserInfo[0]); #endif buffer=(SBYTE*)doubleBuffer->dbSoundData; if (Player_Paused()) { MUTEX_LOCK written=VC_SilenceBytes(buffer,(ULONG)SOUND_BUFFER_SIZE); MUTEX_UNLOCK } else { MUTEX_LOCK written=VC_WriteBytes(buffer,(ULONG)SOUND_BUFFER_SIZE); MUTEX_UNLOCK } if (doubleHeader.dbhNumChannels==2) written>>=1; if (doubleHeader.dbhSampleSize==16) written>>=1; doubleBuffer->dbNumFrames=written; doubleBuffer->dbFlags|=dbBufferReady; #if TARGET_CPU_68K SetA5(oldA5); #endif } static BOOL MAC_IsThere(void) { NumVersion nVers; nVers=SndSoundManagerVersion(); if (nVers.majorRev>=2) return 1; /* need SoundManager 2.0+ for SndPlayDoubleBuffer */ else return 0; } static int MAC_Init(void) { OSErr err,iErr; int i; SndDoubleBufferPtr doubleBuffer; long rate,maxrate,maxbits; long gestaltAnswer; NumVersion nVers; Boolean Stereo,StereoMixing,Audio16; Boolean NewSoundManager,NewSoundManager31; NewSoundManager31=NewSoundManager=false; nVers=SndSoundManagerVersion(); if (nVers.majorRev>=3) { NewSoundManager=true; if (nVers.minorAndBugRev>=0x10) NewSoundManager31=true; } else if (nVers.majorRev<2) return 1; /* failure, need SoundManager 2.0+ for SndPlayDoubleBuffer */ iErr=Gestalt(gestaltSoundAttr,&gestaltAnswer); if (iErr==noErr) { Stereo=(gestaltAnswer & (1<maxrate) rate=maxrate; if (md_mixfreq>(maxrate>>16)) md_mixfreq=maxrate>>16; err=SndNewChannel(&soundChannel,sampledSynth, (md_mode&DMODE_STEREO)?initStereo:initMono, NULL); if(err!=noErr) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } doubleHeader.dbhCompressionID=0; doubleHeader.dbhPacketSize =0; doubleHeader.dbhSampleRate =rate; doubleHeader.dbhSampleSize =(md_mode&DMODE_16BITS)?16:8; doubleHeader.dbhNumChannels =(md_mode&DMODE_STEREO)?2:1; doubleHeader.dbhDoubleBack =NewSndDoubleBackProc(&MyDoubleBackProc); for(i=0;i<2;i++) { doubleBuffer=(SndDoubleBufferPtr)NewPtrClear(sizeof(SndDoubleBuffer)+ SOUND_BUFFER_SIZE); if(!doubleBuffer) { _mm_errno=MMERR_OUT_OF_MEMORY; return 1; } doubleBuffer->dbNumFrames=0; doubleBuffer->dbFlags=0; doubleBuffer->dbUserInfo[0]=SetCurrentA5(); doubleBuffer->dbUserInfo[1]=0; doubleHeader.dbhBufferPtr[i]=doubleBuffer; } return VC_Init(); } static void MAC_Exit(void) { int i; SndDisposeChannel(soundChannel,true); soundChannel=NULL; DisposeRoutineDescriptor((UniversalProcPtr)doubleHeader.dbhDoubleBack); doubleHeader.dbhDoubleBack=NULL; for(i=0;i Portability: Unixes running Digital AudioFile library, available from ftp://crl.dec.com/pub/DEC/AF Usage: Run the audio server (Aaxp&, Amsb&, whatever) Set environment variable AUDIOFILE to something like 'mymachine:0'. Remember, stereo is default! See commandline switches. I have a version which uses 2 computers for stereo. Contact me if you want it. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_AF #ifdef HAVE_UNISTD_H #include #endif #include #include /* Global variables */ static SBYTE *audiobuffer=NULL; static int AFFragmentSize; static AFAudioConn *AFaud=NULL; static ATime AFtime; static AC AFac; static AFDeviceDescriptor *AFdesc; static CHAR *soundbox=NULL; static void AF_CommandLine(CHAR *cmdline) { CHAR *machine=MD_GetAtom("machine",cmdline,0); if(machine) { if(soundbox) free(soundbox); soundbox=machine; } } static BOOL AF_IsThere(void) { if ((AFaud=AFOpenAudioConn(soundbox))) AFCloseAudioConn(AFaud); AFaud=NULL; return 1; } else return 0; } static int AF_Init(void) { unsigned long mask; AFSetACAttributes attributes; int srate; ADevice device; int n; if (!(AFaud=AFOpenAudioConn(soundbox))) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } /* Search for a suitable device */ device=-1; for (n=0;nndevices;n++) { AFdesc=AAudioDeviceDescriptor(AFaud,n); if ((AFdesc->playNchannels==2)&&(md_mode&DMODE_STEREO)) { device=n; break; } if ((AFdesc->playNchannels==1)&&!(md_mode&DMODE_STEREO)) { device=n; break; } } if (device==-1) { _mm_errno=MMERR_AF_AUDIO_PORT; return 1; } attributes.preempt=Mix; attributes.start_timeout=0; attributes.end_silence=0; /* in case of an 8bit device, the AF converts the 16 bit data to 8 bit */ attributes.type=LIN16; attributes.channels=(md_mode&DMODE_STEREO)?Stereo:Mono; mask=ACPreemption|ACEncodingType|ACStartTimeout|ACEndSilence|ACChannels; AFac=AFCreateAC(AFaud,device,mask,&attributes); srate=AFac->device->playSampleFreq; md_mode|=DMODE_16BITS; /* This driver only handles 16bits */ AFFragmentSize=(srate/40)*8; /* Update 5 times/sec */ md_mixfreq=srate; /* set mixing freq */ if (md_mode&DMODE_STEREO) { if (!(audiobuffer=(SBYTE*)_mm_malloc(2*2*AFFragmentSize))) return 1; } else { if (!(audiobuffer=(SBYTE*)_mm_malloc(2*AFFragmentSize))) return 1; } return VC_Init(); } static int AF_PlayStart(void) { AFtime=AFGetTime(AFac); return VC_PlayStart(); } static void AF_Exit(void) { VC_Exit(); _mm_free(audiobuffer); if (AFaud) { AFCloseAudioConn(AFaud); AFaud=NULL; } } static void AF_Update(void) { ULONG done; done=VC_WriteBytes(audiobuffer,AFFragmentSize); if (md_mode&DMODE_STEREO) { AFPlaySamples(AFac,AFtime,done,(unsigned char*)audiobuffer); AFtime+=done/4; /* while (AFGetTime(AFac) Updated to work with later versions of both the ultrasound driver and libmikmod by C. Ray C. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_ULTRA #ifdef HAVE_UNISTD_H #include #endif #ifdef MIKMOD_DYNAMIC #include #endif #include #include #include #include #include #if !defined(GUS_INSTR_SIMPLE) || !defined(GUS_WAVE_BIDIR) #error libgus version is too old #endif /* just in case */ #ifndef LIBGUS_VERSION_MAJOR #define LIBGUS_VERSION_MAJOR 0x0003 #endif #ifdef MIKMOD_DYNAMIC /* runtime link with libgus */ static int (*_libgus_cards) (void); #if LIBGUS_VERSION_MAJOR < 0x0004 static int (*_libgus_close) (int); static int (*_libgus_do_flush) (void); static void (*_libgus_do_tempo) (unsigned int); static void (*_libgus_do_voice_frequency) (unsigned char, unsigned int); static void (*_libgus_do_voice_pan) (unsigned char, unsigned short); static void (*_libgus_do_voice_start) (unsigned char, unsigned int, unsigned int, unsigned short, unsigned short); static void (*_libgus_do_voice_start_position) (unsigned char, unsigned int, unsigned int, unsigned short, unsigned short, unsigned int); static void (*_libgus_do_voice_volume) (unsigned char, unsigned short); static void (*_libgus_do_wait) (unsigned int); static int (*_libgus_get_handle) (void); static int (*_libgus_info) (gus_info_t *, int); static int (*_libgus_memory_alloc) (gus_instrument_t *); static int (*_libgus_memory_free) (gus_instrument_t *); static int (*_libgus_memory_free_size) (void); static int (*_libgus_memory_pack) (void); static int (*_libgus_open) (int, size_t, int); static int (*_libgus_queue_flush) (void); static int (*_libgus_queue_read_set_size) (int); static int (*_libgus_queue_write_set_size) (int); static int (*_libgus_reset) (int, unsigned int); static int (*_libgus_select) (int); static int (*_libgus_timer_start) (void); static int (*_libgus_timer_stop) (void); static int (*_libgus_timer_tempo) (int); #else static int (*_libgus_close) (void*); static int (*_libgus_do_flush) (void*); static void (*_libgus_do_tempo) (void*, unsigned int); static void (*_libgus_do_voice_frequency) (void*, unsigned char, unsigned int); static void (*_libgus_do_voice_pan) (void*, unsigned char,unsigned short); static void (*_libgus_do_voice_start) (void*, unsigned char, unsigned int, unsigned int, unsigned short, unsigned short); static void (*_libgus_do_voice_start_position) (void*, unsigned char, unsigned int, unsigned int,unsigned short, unsigned short, unsigned int); static void (*_libgus_do_voice_volume) (void*, unsigned char, unsigned short); static void (*_libgus_do_wait) (void*, unsigned int); static int (*_libgus_get_file_descriptor) (void*); static int (*_libgus_info) (void*, gus_info_t*, int); static int (*_libgus_memory_alloc) (void*, gus_instrument_t*); static int (*_libgus_memory_free) (void*, gus_instrument_t*); static int (*_libgus_memory_free_size) (void*); static int (*_libgus_memory_pack) (void*); static int (*_libgus_open) (void**, int, int, size_t, int); static int (*_libgus_queue_flush) (void*); static int (*_libgus_queue_read_set_size) (void*, int); static int (*_libgus_queue_write_set_size) (void*, int); static int (*_libgus_reset) (void*, int, unsigned int); static int (*_libgus_timer_start)(void*); static int (*_libgus_timer_stop) (void*); static int (*_libgus_timer_tempo) (void*, int); #endif #ifndef HAVE_RTLD_GLOBAL #define RTLD_GLOBAL (0) #endif static void *libgus = NULL; #else /* compile-time link with libgus */ #define _libgus_cards gus_cards #define _libgus_close gus_close #define _libgus_do_flush gus_do_flush #define _libgus_do_tempo gus_do_tempo #define _libgus_do_voice_frequency gus_do_voice_frequency #define _libgus_do_voice_pan gus_do_voice_pan #define _libgus_do_voice_start gus_do_voice_start #define _libgus_do_voice_start_position gus_do_voice_start_position #define _libgus_do_voice_volume gus_do_voice_volume #define _libgus_do_wait gus_do_wait #if LIBGUS_VERSION_MAJOR < 0x0004 #define _libgus_get_handle gus_get_handle #else #define _libgus_get_file_descriptor gus_get_file_descriptor #endif #define _libgus_info gus_info #define _libgus_memory_alloc gus_memory_alloc #define _libgus_memory_free gus_memory_free #define _libgus_memory_free_size gus_memory_free_size #define _libgus_memory_pack gus_memory_pack #define _libgus_open gus_open #define _libgus_queue_flush gus_queue_flush #define _libgus_queue_read_set_size gus_queue_read_set_size #define _libgus_queue_write_set_size gus_queue_write_set_size #define _libgus_reset gus_reset #if LIBGUS_VERSION_MAJOR < 0x0004 #define _libgus_select gus_select #endif #define _libgus_timer_start gus_timer_start #define _libgus_timer_stop gus_timer_stop #define _libgus_timer_tempo gus_timer_tempo #endif #define libgus_cards _libgus_cards /* same between v3 and v4 */ #define libgus_open _libgus_open /* different between v3 and v4: must use #ifdef */ #define libgus_close _libgus_close /* different between v3 and v4: must use #ifdef */ /* the following can be handled easily by macros: v4 only adds them the handle as the first param */ #if LIBGUS_VERSION_MAJOR < 0x0004 #define libgus_get_handle _libgus_get_handle /* only in v3 */ #define libgus_do_flush _libgus_do_flush #define libgus_do_tempo _libgus_do_tempo #define libgus_do_voice_frequency _libgus_do_voice_frequency #define libgus_do_voice_pan _libgus_do_voice_pan #define libgus_do_voice_start _libgus_do_voice_start #define libgus_do_voice_start_position _libgus_do_voice_start_position #define libgus_do_voice_volume _libgus_do_voice_volume #define libgus_do_wait _libgus_do_wait #define libgus_info _libgus_info #define libgus_memory_alloc _libgus_memory_alloc #define libgus_memory_free _libgus_memory_free #define libgus_memory_free_size _libgus_memory_free_size #define libgus_memory_pack _libgus_memory_pack #define libgus_queue_flush _libgus_queue_flush #define libgus_queue_read_set_size _libgus_queue_read_set_size #define libgus_queue_write_set_size _libgus_queue_write_set_size #define libgus_reset _libgus_reset #define libgus_select _libgus_select #define libgus_timer_start _libgus_timer_start #define libgus_timer_stop _libgus_timer_stop #define libgus_timer_tempo _libgus_timer_tempo #else #define libgus_get_file_descriptor _libgus_get_file_descriptor /* only in v4 */ #define libgus_do_flush() _libgus_do_flush(ultra_h) #define libgus_do_tempo(t) _libgus_do_tempo(ultra_h,t) #define libgus_do_voice_frequency(a,b) _libgus_do_voice_frequency(ultra_h,a,b) #define libgus_do_voice_pan(a,b) _libgus_do_voice_pan(ultra_h,a,b) #define libgus_do_voice_start(a,b,c,d,e) _libgus_do_voice_start(ultra_h,a,b,c,d,e) #define libgus_do_voice_start_position(a,b,c,d,e,f) _libgus_do_voice_start_position(ultra_h,a,b,c,d,e,f) #define libgus_do_voice_volume(a,b) _libgus_do_voice_volume(ultra_h,a,b) #define libgus_do_wait(a) _libgus_do_wait(ultra_h,a) #define libgus_info(a,b) _libgus_info(ultra_h,a,b) #define libgus_memory_alloc(a) _libgus_memory_alloc(ultra_h,a) #define libgus_memory_free(a) _libgus_memory_free(ultra_h,a) #define libgus_memory_free_size() _libgus_memory_free_size(ultra_h) #define libgus_memory_pack() _libgus_memory_pack(ultra_h) #define libgus_queue_flush() _libgus_queue_flush(ultra_h) #define libgus_queue_read_set_size(a) _libgus_queue_read_set_size(ultra_h,a) #define libgus_queue_write_set_size(a) _libgus_queue_write_set_size(ultra_h,a) #define libgus_reset(a,b) _libgus_reset(ultra_h,a,b) #define libgus_timer_start() _libgus_timer_start(ultra_h) #define libgus_timer_stop() _libgus_timer_stop(ultra_h) #define libgus_timer_tempo(a) _libgus_timer_tempo(ultra_h,a) #endif #define MAX_INSTRUMENTS 128 /* Max. instruments loadable */ #define GUS_CHANNELS 32 /* Max. GUS channels available */ #define SIZE_OF_SEQBUF (8 * 1024) /* Size of the sequence buffer */ #define ULTRA_PAN_MIDDLE (16384 >> 1) /* Middle balance position */ #define CH_FREQ 1 #define CH_VOL 2 #define CH_PAN 4 /* This structure holds the information regarding a loaded sample, which is also kept in normal memory. */ typedef struct GUS_SAMPLE { SWORD *sample; ULONG length; ULONG loopstart; ULONG loopend; UWORD flags; UWORD active; } GUS_SAMPLE; /* This structure holds the current state of a GUS voice channel. */ typedef struct GUS_VOICE { UBYTE kick; UBYTE active; UWORD flags; SWORD handle; ULONG start; ULONG size; ULONG reppos; ULONG repend; ULONG frq; int vol; int pan; int changes; time_t started; } GUS_VOICE; /* Global declarations follow */ static GUS_SAMPLE instrs[MAX_INSTRUMENTS]; static GUS_VOICE voices[GUS_CHANNELS]; /* channel status */ static int nr_instrs = 0; static UWORD ultra_bpm; static int ultra_dev = 0; /* GUS index, if more than one card */ #if LIBGUS_VERSION_MAJOR < 0x0004 static int ultra_card = -1; /* returned by gus_open(ultra_dev,,) - must be same as ultra_dev */ #else static void* ultra_h = NULL; /* GUS handle */ #endif static int ultra_fd = -1; /* GUS file descriptor */ #ifdef MIKMOD_DYNAMIC static int Ultra_Link(void) { if (libgus) return 0; /* load libgus.so */ libgus = dlopen("libgus.so", RTLD_LAZY | RTLD_GLOBAL); if (!libgus) return 1; /* resolve function references */ #define IMPORT_SYMBOL(x) \ if (!(_lib##x = dlsym(libgus, #x))) return 1 IMPORT_SYMBOL(gus_cards); IMPORT_SYMBOL(gus_close); IMPORT_SYMBOL(gus_do_flush); IMPORT_SYMBOL(gus_do_tempo); IMPORT_SYMBOL(gus_do_voice_frequency); IMPORT_SYMBOL(gus_do_voice_pan); IMPORT_SYMBOL(gus_do_voice_start); IMPORT_SYMBOL(gus_do_voice_start_position); IMPORT_SYMBOL(gus_do_voice_volume); IMPORT_SYMBOL(gus_do_wait); #if LIBGUS_VERSION_MAJOR < 0x0004 IMPORT_SYMBOL(gus_get_handle); #else IMPORT_SYMBOL(gus_get_file_descriptor); #endif IMPORT_SYMBOL(gus_info); IMPORT_SYMBOL(gus_memory_alloc); IMPORT_SYMBOL(gus_memory_free); IMPORT_SYMBOL(gus_memory_free_size); IMPORT_SYMBOL(gus_memory_pack); IMPORT_SYMBOL(gus_open); IMPORT_SYMBOL(gus_queue_flush); IMPORT_SYMBOL(gus_queue_read_set_size); IMPORT_SYMBOL(gus_queue_write_set_size); IMPORT_SYMBOL(gus_reset); #if LIBGUS_VERSION_MAJOR < 0x0004 IMPORT_SYMBOL(gus_select); #endif IMPORT_SYMBOL(gus_timer_start); IMPORT_SYMBOL(gus_timer_stop); IMPORT_SYMBOL(gus_timer_tempo); #undef IMPORT_SYMBOL return 0; } static void Ultra_Unlink(void) { _libgus_cards = NULL; _libgus_close = NULL; _libgus_do_flush = NULL; _libgus_do_tempo = NULL; _libgus_do_voice_frequency = NULL; _libgus_do_voice_pan = NULL; _libgus_do_voice_start = NULL; _libgus_do_voice_start_position = NULL; _libgus_do_voice_volume = NULL; _libgus_do_wait = NULL; #if LIBGUS_VERSION_MAJOR < 0x0004 _libgus_get_handle = NULL; #else _libgus_get_file_descriptor = NULL; #endif _libgus_info = NULL; _libgus_memory_alloc = NULL; _libgus_memory_free = NULL; _libgus_memory_free_size = NULL; _libgus_memory_pack = NULL; _libgus_open = NULL; _libgus_queue_flush = NULL; _libgus_queue_read_set_size = NULL; _libgus_queue_write_set_size = NULL; _libgus_reset = NULL; #if LIBGUS_VERSION_MAJOR < 0x0004 _libgus_select = NULL; #endif _libgus_timer_start = NULL; _libgus_timer_stop = NULL; _libgus_timer_tempo = NULL; if (libgus) { dlclose(libgus); libgus = NULL; } } #endif /* Checks for the presence of GUS cards */ static BOOL Ultra_IsThere(void) { BOOL retval; #ifdef MIKMOD_DYNAMIC if (Ultra_Link()) return 0; #endif retval = libgus_cards()? 1 : 0; #ifdef MIKMOD_DYNAMIC Ultra_Unlink(); #endif return retval; } /* Loads all the samples into the GUS memory */ static BOOL loadsamples(void) { int i; GUS_SAMPLE *smp; for (i = 0, smp = instrs; i < MAX_INSTRUMENTS; i++, smp++) if (smp->active) { ULONG length, loopstart, loopend; gus_instrument_t instrument; gus_layer_t layer; gus_wave_t wave; unsigned int type; /* convert position/length data from samples to bytes */ length = smp->length; loopstart = smp->loopstart; loopend = smp->loopend; if (smp->flags & SF_16BITS) { length <<=1; loopstart<<=1; loopend <<=1; } memset(&instrument, 0, sizeof(instrument)); memset(&layer, 0, sizeof(layer)); memset(&wave, 0, sizeof(wave)); instrument.mode=layer.mode=wave.mode=GUS_INSTR_SIMPLE; instrument.number.instrument=i; instrument.info.layer=&layer; layer.wave=&wave; type = ((smp->flags & SF_16BITS)?GUS_WAVE_16BIT:0)| ((smp->flags & SF_DELTA) ?GUS_WAVE_DELTA:0)| ((smp->flags & SF_LOOP) ?GUS_WAVE_LOOP :0)| ((smp->flags & SF_BIDI) ?GUS_WAVE_BIDIR:0); wave.format = (unsigned char)type; wave.begin.ptr = (unsigned char*)smp->sample; wave.loop_start = loopstart<<4; wave.loop_end = loopend<<4; wave.size = length; if (smp->flags&SF_LOOP) { smp->sample[loopend] = smp->sample[loopstart]; if ((smp->flags&SF_16BITS) && loopstart && loopend) smp->sample[loopend-1] = smp->sample[loopstart-1]; } /* Download the sample to GUS RAM */ if (libgus_memory_alloc(&instrument)) { _mm_errno = MMERR_SAMPLE_TOO_BIG; return 1; } } return 0; } /* Load a new sample into memory, but not in the GUS */ static SWORD Ultra_SampleLoad(struct SAMPLOAD *sload, int type) { int handle; SAMPLE *s = sload->sample; ULONG length, loopstart, loopend; GUS_SAMPLE *smp; if (type == MD_SOFTWARE) return -1; /* Find empty slot to put sample in */ for (handle = 0; handle < MAX_INSTRUMENTS; handle++) if (!instrs[handle].active) break; if (handle == MAX_INSTRUMENTS) { _mm_errno = MMERR_OUT_OF_HANDLES; return -1; } length = s->length; loopstart = s->loopstart; loopend = s->loopend; smp = &instrs[handle]; smp->length = length; smp->loopstart = loopstart; smp->loopend = loopend?loopend:length-1; smp->flags = s->flags; SL_SampleSigned(sload); if (!(smp->sample = (SWORD*)_mm_malloc((length+20)<<1))) { _mm_errno = MMERR_SAMPLE_TOO_BIG; return -1; } if (SL_Load(smp->sample,sload,s->length)) return -1; smp->active = 1; nr_instrs++; return handle; } /* Discards a sample from the GUS memory, and from computer memory */ static void Ultra_SampleUnload(SWORD handle) { GUS_SAMPLE *smp; if (handle >= MAX_INSTRUMENTS || handle < 0) return; smp = &instrs[handle]; if (smp->active) { gus_instrument_t instrument; memset(&instrument, 0, sizeof(instrument)); instrument.mode = GUS_INSTR_SIMPLE; instrument.number.instrument = handle; libgus_memory_free(&instrument); free(smp->sample); nr_instrs--; smp->active = 0; } } /* Reports available sample space */ static ULONG Ultra_SampleSpace(int type) { if (type == MD_SOFTWARE) return 0; libgus_memory_pack(); return (libgus_memory_free_size()); } /* Reports the size of a sample */ static ULONG Ultra_SampleLength(int type, SAMPLE *s) { if (!s) return 0; return (s->length*(s->flags&SF_16BITS?2:1))+16; } /* Initializes the driver */ static int Ultra_Init_internal(void) { gus_info_t info; /* Check that requested settings are compatible with the GUS requirements */ if((!(md_mode & DMODE_16BITS)) || (!(md_mode & DMODE_STEREO)) || (md_mixfreq!=44100)) { _mm_errno = MMERR_GUS_SETTINGS; return 1; } md_mode &= ~(DMODE_SOFT_MUSIC|DMODE_SOFT_SNDFX); ultra_dev = getenv("MM_ULTRA")? atoi(getenv("MM_ULTRA")) : 0; #if LIBGUS_VERSION_MAJOR < 0x0004 if ((ultra_card = libgus_open(ultra_dev, SIZE_OF_SEQBUF, 0)) < 0) { _mm_errno = (errno == ENOMEM)? MMERR_OUT_OF_MEMORY : MMERR_INVALID_DEVICE; return 1; } libgus_select(ultra_card); ultra_fd = libgus_get_handle(); #else if (libgus_open(&ultra_h, ultra_dev, 0, SIZE_OF_SEQBUF, GUS_OPEN_FLAG_NONE) < 0) { _mm_errno = (errno == ENOMEM)? MMERR_OUT_OF_MEMORY : MMERR_INVALID_DEVICE; return 1; } ultra_fd = libgus_get_file_descriptor(ultra_h); #endif libgus_info(&info, 0); #ifdef MIKMOD_DEBUG switch (info.version) { case 0x24: fputs("GUS 2.4", stderr); break; case 0x35: fputs("GUS 3.7 (flipped)", stderr); break; case 0x37: fputs("GUS 3.7", stderr); break; case 0x90: fputs("GUS ACE", stderr); break; case 0xa0: fputs("GUS MAX 10", stderr); break; case 0xa1: fputs("GUS MAX 11", stderr); break; case 0x100: fputs("Interwave/GUS PnP", stderr); break; default: fprintf(stderr, "Unknown GUS type %x", info.version); break; } fprintf(stderr, " with %dKb RAM on board\n", info.memory_size >> 10); #endif return 0; } static int Ultra_Init(void) { #ifdef MIKMOD_DYNAMIC if (Ultra_Link()) { _mm_errno = MMERR_DYNAMIC_LINKING; return 1; } #endif return Ultra_Init_internal(); } /* Closes the driver */ static void Ultra_Exit_internal(void) { #if LIBGUS_VERSION_MAJOR < 0x0004 if (ultra_card >= 0) { ultra_card = -1; libgus_close(ultra_dev); } #else if (ultra_h) { libgus_close(ultra_h); ultra_h = NULL; } #endif ultra_fd = -1; } static void Ultra_Exit(void) { Ultra_Exit_internal(); #ifdef MIKMOD_DYNAMIC Ultra_Unlink(); #endif } /* Poor man's reset function */ static int Ultra_Reset(void) { Ultra_Exit_internal(); return Ultra_Init_internal(); } static int Ultra_SetNumVoices(void) { return 0; } /* Start playback */ static int Ultra_PlayStart(void) { int t; for (t = 0; t < md_hardchn; t++) { voices[t].flags = 0; voices[t].handle = 0; voices[t].size = 0; voices[t].start = 0; voices[t].reppos = 0; voices[t].repend = 0; voices[t].changes = 0; voices[t].kick = 0; voices[t].frq = 10000; voices[t].vol = 64; voices[t].pan = ULTRA_PAN_MIDDLE; voices[t].active = 0; } #if LIBGUS_VERSION_MAJOR < 0x0004 libgus_select(ultra_card); #endif if (libgus_reset(md_hardchn, 0) < 0) { _mm_errno = MMERR_GUS_RESET; return 1; } if (loadsamples()) return 1; libgus_queue_write_set_size(1024); libgus_queue_read_set_size(128); if (libgus_timer_start() < 0) { _mm_errno = MMERR_GUS_TIMER; return 1; } libgus_timer_tempo(50); ultra_bpm = 0; for (t = 0; t < md_hardchn; t++) { libgus_do_voice_pan(t, ULTRA_PAN_MIDDLE); libgus_do_voice_volume(t, 64 << 8); } libgus_do_flush(); return 0; } /* Stop playback */ static void Ultra_PlayStop(void) { libgus_queue_flush(); libgus_timer_stop(); libgus_queue_write_set_size(0); libgus_queue_read_set_size(0); } /* Module player tick function */ static void ultraplayer(void) { int t; struct GUS_VOICE *voice; md_player(); for(t=0,voice=voices;tchanges & CH_FREQ) libgus_do_voice_frequency(t, voice->frq); if (voice->changes & CH_VOL); libgus_do_voice_volume(t,voice->vol << 8); if (voice->changes & CH_PAN) { if (voice->pan == PAN_SURROUND) libgus_do_voice_pan(t, ULTRA_PAN_MIDDLE); else libgus_do_voice_pan(t, voice->pan << 6); } voice->changes = 0; if (voice->kick) { voice->kick = 0; if (voice->start > 0) libgus_do_voice_start_position(t, voice->handle,voice->frq, voice->vol << 8, voice->pan << 6, voice->start << 4); else libgus_do_voice_start(t, voice->handle, voice->frq, voice->vol << 8, voice->pan << 6); } } libgus_do_wait(1); } /* Play sound */ static void Ultra_Update(void) { fd_set write_fds; int need_write; if (ultra_bpm != md_bpm) { libgus_do_tempo((md_bpm * 50) / 125); ultra_bpm = md_bpm; } ultraplayer(); do { need_write = libgus_do_flush(); FD_ZERO(&write_fds); do { FD_SET(ultra_fd, &write_fds); select(ultra_fd+1, NULL, &write_fds, NULL, NULL); } while (!FD_ISSET(ultra_fd, &write_fds)); } while (need_write > 0); } /* Set the volume for the given voice */ static void Ultra_VoiceSetVolume(UBYTE voice, UWORD vol) { if (voice < md_numchn) if (vol != voices[voice].vol) { voices[voice].vol = vol; voices[voice].changes |= CH_VOL; } } /* Returns the volume of the given voice */ static UWORD Ultra_VoiceGetVolume(UBYTE voice) { return (voice < md_numchn) ? voices[voice].vol : 0; } /* Set the pitch for the given voice */ static void Ultra_VoiceSetFrequency(UBYTE voice, ULONG frq) { if (voice < md_numchn) if (frq != voices[voice].frq) { voices[voice].frq = frq; voices[voice].changes |= CH_FREQ; } } /* Returns the frequency of the given voice */ static ULONG Ultra_VoiceGetFrequency(UBYTE voice) { return (voice < md_numchn) ? voices[voice].frq : 0; } /* Set the panning position for the given voice */ static void Ultra_VoiceSetPanning(UBYTE voice, ULONG pan) { if (voice < md_numchn) if (pan != voices[voice].pan) { voices[voice].pan = pan; voices[voice].changes |= CH_PAN; } } /* Returns the panning of the given voice */ static ULONG Ultra_VoiceGetPanning(UBYTE voice) { return (voice < md_numchn) ? voices[voice].pan : 0; } /* Start a new sample on a voice */ static void Ultra_VoicePlay(UBYTE voice, SWORD handle, ULONG start, ULONG size, ULONG reppos, ULONG repend, UWORD flags) { if ((voice >= md_numchn) || (start >= size)) return; if (flags & SF_LOOP) if (repend > size) repend = size; voices[voice].flags = flags; voices[voice].handle = handle; voices[voice].start = start; voices[voice].size = size; voices[voice].reppos = reppos; voices[voice].repend = repend; voices[voice].kick = 1; voices[voice].active = 1; voices[voice].started = time(NULL); } /* Stops a voice */ static void Ultra_VoiceStop(UBYTE voice) { if (voice < md_numchn) voices[voice].active = 0; } /* Returns whether a voice is stopped */ static BOOL Ultra_VoiceStopped(UBYTE voice) { if (voice >= md_numchn) return 1; if (voices[voice].active) { /* is sample looping ? */ if (voices[voice].flags & (SF_LOOP | SF_BIDI)) return 0; else if (time(NULL) - voices[voice].started >= ((voices[voice].size - voices[voice].start + 44099) / 44100)) { voices[voice].active = 0; return 1; } return 0; } else return 1; } /* Returns current voice position */ static SLONG Ultra_VoiceGetPosition(UBYTE voice) { /* NOTE This information can not be determined. */ return -1; } /* Returns voice real volume */ static ULONG Ultra_VoiceRealVolume(UBYTE voice) { /* NOTE This information can not be accurately determined. */ return 0; } MIKMODAPI MDRIVER drv_ultra={ NULL, "Ultrasound driver", "Linux Ultrasound driver v1.12", GUS_CHANNELS,0, "ultra", NULL, Ultra_IsThere, Ultra_SampleLoad, Ultra_SampleUnload, Ultra_SampleSpace, Ultra_SampleLength, Ultra_Init, Ultra_Exit, Ultra_Reset, Ultra_SetNumVoices, Ultra_PlayStart, Ultra_PlayStop, Ultra_Update, NULL, Ultra_VoiceSetVolume, Ultra_VoiceGetVolume, Ultra_VoiceSetFrequency, Ultra_VoiceGetFrequency, Ultra_VoiceSetPanning, Ultra_VoiceGetPanning, Ultra_VoicePlay, Ultra_VoiceStop, Ultra_VoiceStopped, Ultra_VoiceGetPosition, Ultra_VoiceRealVolume }; #else MISSING(drv_ultra); #endif /* DRV_ULTRA */ /* ex:set ts=8: */ libmikmod-3.1.16/drivers/drv_os2.c0000644000000000000000000002302312260322544015447 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_os2.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on OS/2 using MMPM/2 MCI interface ==============================================================================*/ /* Written by Stefan Tibus Improvements by Andrew Zabolotny */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef DRV_OS2 #define INCL_DOS #define INCL_OS2MM #include /* Prevent a warning: PPFN redefined */ #define PPFN _PPFN #include #undef PPFN #include #include #include /* _beginthread */ #include "mikmod_internals.h" /* fragment count */ #define FRAGMENTS 4 /* global variables */ static ULONG DeviceIndex = 0; static ULONG BufferSize = (ULONG)-1; static ULONG DeviceID = 0; static PVOID AudioBuffer = NULL; static TID ThreadID = NULLHANDLE; static BOOL FinishPlayback; /* flag for update thread to die */ static HEV Play = NULLHANDLE; /* posted on PlayStart event */ static HEV Update = NULLHANDLE; /* timer event semaphore */ static HTIMER Timer = NULLHANDLE; /* playlist-structure */ typedef struct { ULONG ulCommand; ULONG ulOperand1, ulOperand2, ulOperand3; } PLAYLISTSTRUCTURE; static PLAYLISTSTRUCTURE PlayList[FRAGMENTS + 1]; /* thread handling buffer-updates */ /* ARGSUSED */ void OS2_UpdateBufferThread(void *dummy) { /* Run at timecritical priority */ DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, PRTYD_MAXIMUM - 1, 0); while (!FinishPlayback) { ULONG count; static ULONG NextBuffer = 0; /* next fragment to be filled */ /* wait for play enable */ DosWaitEventSem(Play, SEM_INDEFINITE_WAIT); /* wait for timer event */ DosWaitEventSem(Update, SEM_INDEFINITE_WAIT); /* reset timer semaphore */ DosResetEventSem(Update, &count); /* fill all free buffers */ while (PlayList[NextBuffer].ulOperand3 >= PlayList[NextBuffer].ulOperand2) { MUTEX_LOCK(vars); if (Player_Paused_internal()) PlayList[NextBuffer].ulOperand2 = VC_SilenceBytes((SBYTE *)PlayList[NextBuffer].ulOperand1, BufferSize); else PlayList[NextBuffer].ulOperand2 = VC_WriteBytes((SBYTE *)PlayList[NextBuffer].ulOperand1, BufferSize); MUTEX_UNLOCK(vars); /* Reset play offset, although it seems MMOS2 does it automagically */ PlayList[NextBuffer].ulOperand3 = 0; NextBuffer = (NextBuffer + 1) % FRAGMENTS; } } /* Tell main thread we're done */ ThreadID = 0; } static void OS2_CommandLine(CHAR *cmdline) { char *ptr; int buf; if ((ptr = MD_GetAtom("buffer", cmdline, 0))) { buf = atoi(ptr); if (buf >= 12 && buf <= 16) BufferSize = 1 << buf; free(ptr); } if ((ptr = MD_GetAtom("device", cmdline, 0))) { buf = atoi(ptr); if (buf >= 0 && buf <= 8) DeviceIndex = buf; free(ptr); } } /* checks for availability of an OS/2 MCI-WAVEAUDIO-device */ static BOOL OS2_IsPresent(void) { MCI_OPEN_PARMS mciOpenParms; MCI_GENERIC_PARMS mciGenericParms; memset(&mciOpenParms, 0, sizeof(mciOpenParms)); mciOpenParms.pszDeviceType = (PSZ) MAKEULONG(MCI_DEVTYPE_WAVEFORM_AUDIO, (USHORT) DeviceIndex); /* try to open WAVEAUDIO-device */ if (mciSendCommand(0, MCI_OPEN, MCI_WAIT | MCI_OPEN_SHAREABLE | MCI_OPEN_TYPE_ID, (PVOID) & mciOpenParms, 0) != MCIERR_SUCCESS) return 0; mciSendCommand(mciOpenParms.usDeviceID, MCI_CLOSE, MCI_WAIT, (PVOID) & mciGenericParms, 0); return 1; } static int OS2_Init(void) { MCI_OPEN_PARMS mciOpenParms; MCI_WAVE_SET_PARMS mciWaveSetParms; int i, bpsrate; ULONG ulInterval; if (VC_Init()) return 1; DeviceID = 0; ThreadID = 0; Timer = NULLHANDLE; Update = NULLHANDLE; Play = NULLHANDLE; AudioBuffer = NULL; /* Compute the bytes per second output rate */ bpsrate = md_mixfreq; if (md_mode & DMODE_STEREO) bpsrate <<= 1; if (md_mode & DMODE_16BITS) bpsrate <<= 1; /* Compute audio buffer size if necessary */ if (BufferSize == (ULONG)-1) { int bit; BufferSize = bpsrate >> 3; for (bit = 15; bit >= 12; bit--) if (BufferSize & (1 << bit)) break; BufferSize = 1 << bit; } /* WARNING: with big buffer sizes there is an audible click between sub-blocks. Don't know whenever this is a driver issue (I've tested it only with Gravis Ultrasound driver) but its something to take into consideration. That's why above code chooses relatively small buffer sizes (16K for 44KHz, 16 bit stereo). */ /* Allocate buffer */ if (!(AudioBuffer = _mm_malloc(BufferSize * FRAGMENTS))) { _mm_errno = MMERR_OUT_OF_MEMORY; return 1; } /* create playlist */ for (i = 0; i < FRAGMENTS; i++) { PlayList[i].ulCommand = DATA_OPERATION; /* play data */ PlayList[i].ulOperand1 = ((ULONG)AudioBuffer) + i * BufferSize; PlayList[i].ulOperand2 = BufferSize; /* size */ PlayList[i].ulOperand3 = 0; /* offset */ } PlayList[FRAGMENTS].ulCommand = BRANCH_OPERATION; /* jump */ PlayList[FRAGMENTS].ulOperand1 = 0; PlayList[FRAGMENTS].ulOperand2 = 0; /* destination */ PlayList[FRAGMENTS].ulOperand3 = 0; memset(&mciOpenParms, 0, sizeof(mciOpenParms)); mciOpenParms.pszDeviceType = (PSZ) MAKEULONG(MCI_DEVTYPE_WAVEFORM_AUDIO, (USHORT) DeviceIndex); mciOpenParms.pszElementName = (PSZ) & PlayList; /* open WAVEAUDIO-device */ if (mciSendCommand(0, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE_ID | MCI_OPEN_PLAYLIST, (PVOID) & mciOpenParms, 0)) { _mm_errno = MMERR_OPENING_AUDIO; return 1; } DeviceID = mciOpenParms.usDeviceID; memset(&mciWaveSetParms, 0, sizeof(mciWaveSetParms)); mciWaveSetParms.ulSamplesPerSec = md_mixfreq; mciWaveSetParms.usBitsPerSample = (md_mode & DMODE_16BITS) ? 16 : 8; mciWaveSetParms.usChannels = (md_mode & DMODE_STEREO) ? 2 : 1; mciWaveSetParms.ulAudio = MCI_SET_AUDIO_ALL; /* set play-parameters */ if (mciSendCommand(DeviceID, MCI_SET, MCI_WAIT | MCI_WAVE_SET_SAMPLESPERSEC | MCI_WAVE_SET_BITSPERSAMPLE | MCI_WAVE_SET_CHANNELS, (PVOID) & mciWaveSetParms, 0)) { _mm_errno = MMERR_OS2_MIXSETUP; return 1; } /* Setup semaphore for playing and for buffer updates */ if (DosCreateEventSem(NULL, &Play, DC_SEM_SHARED, FALSE) || DosCreateEventSem(NULL, &Update, DC_SEM_SHARED, FALSE)) { _mm_errno = MMERR_OS2_SEMAPHORE; return 1; } /* Compute interval in ms (2 possible updates while playing 1 block) */ ulInterval = BufferSize * 1000L / bpsrate; /* Setup timer for buffer updates */ if (DosStartTimer(ulInterval, (HSEM) Update, &Timer)) { _mm_errno = MMERR_OS2_TIMER; return 1; } /* Create thread for buffer updates */ FinishPlayback = FALSE; ThreadID = _beginthread(OS2_UpdateBufferThread, NULL, 0x4000, NULL); if (!ThreadID) { _mm_errno = MMERR_OS2_THREAD; return 1; } return 0; } static void OS2_Exit(void) { MCI_GENERIC_PARMS mciGenericParms; FinishPlayback = TRUE; while (ThreadID) { DosPostEventSem(Play); DosPostEventSem(Update); DosSleep(1); } if (Timer) { DosStopTimer(Timer); Timer = NULLHANDLE; } if (Update) { DosCloseEventSem(Update); Update = NULLHANDLE; } if (Play) { DosCloseEventSem(Play); Play = NULLHANDLE; } VC_Exit(); if (DeviceID) { mciGenericParms.hwndCallback = (HWND) NULL; mciSendCommand(DeviceID, MCI_CLOSE, MCI_WAIT, (PVOID) & mciGenericParms, 0); DeviceID = 0; } _mm_free(AudioBuffer); } static int OS2_PlayStart(void) { MCI_PLAY_PARMS mciPlayParms; int i; VC_SilenceBytes((SBYTE *)AudioBuffer, BufferSize * FRAGMENTS); VC_PlayStart(); /* Signal update of audio fragments */ for (i = 0; i < FRAGMENTS; i++) PlayList[i].ulOperand3 = 0; /* Signal play */ DosPostEventSem(Play); /* no MCI_WAIT here, because application program has to continue */ memset(&mciPlayParms, 0, sizeof(mciPlayParms)); if (mciSendCommand(DeviceID, MCI_PLAY, MCI_FROM, &mciPlayParms, 0)) { _mm_errno = MMERR_OS2_MIXSETUP; return 1; } return 0; } static void OS2_PlayStop(void) { MCI_GENERIC_PARMS mciGenericParms; ULONG count; mciGenericParms.hwndCallback = (HWND) NULL; mciSendCommand(DeviceID, MCI_STOP, MCI_WAIT, &mciGenericParms, 0); DosResetEventSem(Play, &count); VC_PlayStop(); } static void OS2_Update(void) { /* does nothing since buffer is updated in the background */ } MIKMODAPI MDRIVER drv_os2 = { NULL, "OS/2 MMPM/2", "OS/2 MMPM/2 MCI driver v1.2", 0,255, "os2", OS2_CommandLine, OS2_IsPresent, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, OS2_Init, OS2_Exit, NULL, VC_SetNumVoices, OS2_PlayStart, OS2_PlayStop, OS2_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else #include "mikmod_internals.h" MISSING(drv_os2); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_sgi.c0000644000000000000000000001173312222472510015530 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_sgi.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on SGI audio system (needs libaudio from the dmedia package). ==============================================================================*/ /* Written by Stephan Kanthak Fragment configuration: ======================= You can use the driver options fragsize and bufsize to override the default size of the audio buffer. If you experience crackles & pops, try experimenting with these values. Please read the SGI section of libmikmod's README file first before contacting the author because there are some things to know about the specials of the SGI audio driver. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_SGI #ifdef HAVE_UNISTD_H #include #endif #include #include #include #define DEFAULT_SGI_FRAGSIZE 20000 #define DEFAULT_SGI_BUFSIZE 40000 static ALconfig sgi_config; static ALport sgi_port; static int sample_factor; static int sgi_fragsize=DEFAULT_SGI_FRAGSIZE; static int sgi_bufsize=DEFAULT_SGI_BUFSIZE; static SBYTE *audiobuffer=NULL; static void SGI_CommandLine(CHAR *cmdline) { CHAR *ptr; if ((ptr=MD_GetAtom("fragsize",cmdline,0))) { sgi_fragsize=atol(ptr); free(ptr); } else sgi_fragsize=DEFAULT_SGI_FRAGSIZE; if ((ptr=MD_GetAtom("bufsize",cmdline,0))) { sgi_bufsize=atol(ptr); free(ptr); } else sgi_bufsize=DEFAULT_SGI_BUFSIZE; } static BOOL SGI_IsThere(void) { ALseterrorhandler(0); return(ALqueryparams(AL_DEFAULT_DEVICE,0,0))?1:0; } static int SGI_Init(void) { long chpars[] = { AL_OUTPUT_RATE, AL_RATE_22050 }; switch(md_mixfreq) { case 8000: chpars[1] = AL_RATE_8000; break; case 11025: chpars[1] = AL_RATE_11025; break; case 16000: chpars[1] = AL_RATE_16000; break; case 22050: chpars[1] = AL_RATE_22050; break; case 32000: chpars[1] = AL_RATE_32000; break; case 44100: chpars[1] = AL_RATE_44100; break; case 48000: chpars[1] = AL_RATE_48000; break; default: _mm_errno=MMERR_SGI_SPEED; return 1; } ALseterrorhandler(0); ALsetparams(AL_DEFAULT_DEVICE, chpars, 2); if (!(sgi_config=ALnewconfig())) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } if (md_mode&DMODE_16BITS) { if (ALsetwidth(sgi_config,AL_SAMPLE_16)<0) { _mm_errno=MMERR_SGI_16BIT; return 1; } sample_factor = 1; } else { if (ALsetwidth(sgi_config,AL_SAMPLE_8)<0) { _mm_errno=MMERR_SGI_8BIT; return 1; } sample_factor = 0; } if (md_mode&DMODE_STEREO) { if (ALsetchannels(sgi_config,AL_STEREO)<0) { _mm_errno=MMERR_SGI_STEREO; return 1; } } else { if (ALsetchannels(sgi_config,AL_MONO)<0) { _mm_errno=MMERR_SGI_MONO; return 1; } } if ((getenv("MM_SGI_FRAGSIZE"))&&(sgi_fragsize!=DEFAULT_SGI_FRAGSIZE)) sgi_fragsize=atol(getenv("MM_SGI_FRAGSIZE")); if (!sgi_fragsize) sgi_fragsize=DEFAULT_SGI_FRAGSIZE; if ((getenv("MM_SGI_BUFSIZE"))&&(sgi_bufsize!=DEFAULT_SGI_BUFSIZE)) sgi_bufsize=atol(getenv("MM_SGI_BUFSIZE")); if (!sgi_bufsize) sgi_fragsize=DEFAULT_SGI_BUFSIZE; ALsetqueuesize(sgi_config, sgi_bufsize); if (!(sgi_port=ALopenport("libmikmod","w",sgi_config))) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } if(!(audiobuffer=(SBYTE*)_mm_malloc(sgi_fragsize))) return 1; return VC_Init(); } static void SGI_Exit(void) { VC_Exit(); _mm_free(audiobuffer); } static void SGI_Update(void) { ALwritesamps(sgi_port,audiobuffer, VC_WriteBytes(audiobuffer,sgi_fragsize)>>sample_factor); } MIKMODAPI MDRIVER drv_sgi={ NULL, "SGI Audio System", "SGI Audio System driver v0.5", 0,255, "sgi", SGI_CommandLine, SGI_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, SGI_Init, SGI_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, SGI_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_sgi); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_alsa.c0000644000000000000000000003335012262064446015676 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id$ Driver for Advanced Linux Sound Architecture (ALSA) ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_ALSA #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_MEMORY_H #include #endif #ifdef MIKMOD_DYNAMIC #include #endif #include #include #include #if defined(SND_LIB_VERSION) && (SND_LIB_VERSION >= 0x20000) #undef DRV_ALSA #endif #if defined(SND_LIB_VERSION) && (SND_LIB_VERSION < 0x600) #error ALSA Version too old. Please upgrade your Linux distribution. #endif #endif /* DRV_ALSA */ #ifdef DRV_ALSA #ifdef MIKMOD_DYNAMIC /* runtime link with libasound */ #ifndef HAVE_RTLD_GLOBAL #define RTLD_GLOBAL (0) #endif static int (*alsa_pcm_subformat_mask_malloc)(snd_pcm_subformat_mask_t **); static const char * (*alsa_strerror)(int); static int (*alsa_pcm_resume)(snd_pcm_t *); static int (*alsa_pcm_prepare)(snd_pcm_t *); static int (*alsa_pcm_hw_params_any)(snd_pcm_t *, snd_pcm_hw_params_t *); static int (*alsa_pcm_hw_params)(snd_pcm_t *, snd_pcm_hw_params_t *); static int (*alsa_pcm_hw_params_current)(snd_pcm_t *, snd_pcm_hw_params_t *); static int (*alsa_pcm_hw_params_set_access)(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_access_t); static int (*alsa_pcm_hw_params_set_format)(snd_pcm_t *, snd_pcm_hw_params_t *, snd_pcm_format_t); static int (*alsa_pcm_hw_params_set_rate_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *); static int (*alsa_pcm_hw_params_set_channels_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *); static int (*alsa_pcm_hw_params_set_buffer_time_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *); static int (*alsa_pcm_hw_params_set_period_time_near)(snd_pcm_t *, snd_pcm_hw_params_t *, unsigned int *, int *); static int (*alsa_pcm_hw_params_get_buffer_size)(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *); static int (*alsa_pcm_hw_params_get_period_size)(const snd_pcm_hw_params_t *, snd_pcm_uframes_t *, int *); static int (*alsa_pcm_sw_params_sizeof)(void); static int (*alsa_pcm_hw_params_sizeof)(void); static int (*alsa_pcm_open)(snd_pcm_t**, const char *, int, int); static int (*alsa_pcm_close)(snd_pcm_t*); static int (*alsa_pcm_drain)(snd_pcm_t*); static int (*alsa_pcm_drop)(snd_pcm_t*); static int (*alsa_pcm_start)(snd_pcm_t *); static snd_pcm_sframes_t (*alsa_pcm_writei)(snd_pcm_t*,const void*,snd_pcm_uframes_t); static void* libasound = NULL; #else /* compile-time link with libasound */ #define alsa_pcm_subformat_mask_malloc snd_pcm_subformat_mask_malloc #define alsa_strerror snd_strerror #define alsa_pcm_hw_params_any snd_pcm_hw_params_any #define alsa_pcm_hw_params snd_pcm_hw_params #define alsa_pcm_hw_params_current snd_pcm_hw_params_current #define alsa_pcm_hw_params_set_access snd_pcm_hw_params_set_access #define alsa_pcm_hw_params_set_format snd_pcm_hw_params_set_format #define alsa_pcm_hw_params_set_rate_near snd_pcm_hw_params_set_rate_near #define alsa_pcm_hw_params_set_channels_near snd_pcm_hw_params_set_channels_near #define alsa_pcm_hw_params_set_buffer_time_near snd_pcm_hw_params_set_buffer_time_near #define alsa_pcm_hw_params_set_period_time_near snd_pcm_hw_params_set_period_time_near #define alsa_pcm_hw_params_get_buffer_size snd_pcm_hw_params_get_buffer_size #define alsa_pcm_hw_params_get_period_size snd_pcm_hw_params_get_period_size #define alsa_pcm_resume snd_pcm_resume #define alsa_pcm_prepare snd_pcm_prepare #define alsa_pcm_close snd_pcm_close #define alsa_pcm_drain snd_pcm_drain #define alsa_pcm_drop snd_pcm_drop #define alsa_pcm_start snd_pcm_start #define alsa_pcm_open snd_pcm_open #define alsa_pcm_writei snd_pcm_writei #endif /* MIKMOD_DYNAMIC */ #if defined(MIKMOD_DEBUG) # define dbgprint fprintf #elif defined (__GNUC__) && !(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) # define dbgprint(f, fmt, args...) do {} while (0) #else # define dbgprint(f, ...) do {} while (0) #endif static BOOL enabled = 0; static snd_pcm_t *pcm_h = NULL; static SBYTE *audiobuffer = NULL; static snd_pcm_sframes_t period_size; static int bytes_written = 0, bytes_played = 0; static int global_frame_size; #ifdef MIKMOD_DYNAMIC static int ALSA_Link(void) { if (libasound) return 0; /* load libasound.so */ libasound = dlopen("libasound.so",RTLD_LAZY|RTLD_GLOBAL); if (!libasound) return 1; if (!(alsa_pcm_subformat_mask_malloc = dlsym(libasound,"snd_pcm_subformat_mask_malloc"))) return 1; if (!(alsa_strerror = dlsym(libasound,"snd_strerror"))) return 1; if (!(alsa_pcm_prepare = dlsym(libasound,"snd_pcm_prepare"))) return 1; if (!(alsa_pcm_sw_params_sizeof = dlsym(libasound,"snd_pcm_sw_params_sizeof"))) return 1; if (!(alsa_pcm_hw_params_sizeof = dlsym(libasound,"snd_pcm_hw_params_sizeof"))) return 1; if (!(alsa_pcm_resume = dlsym(libasound,"snd_pcm_resume"))) return 1; if (!(alsa_pcm_hw_params_any = dlsym(libasound,"snd_pcm_hw_params_any"))) return 1; if (!(alsa_pcm_hw_params = dlsym(libasound,"snd_pcm_hw_params"))) return 1; if (!(alsa_pcm_hw_params_current = dlsym(libasound,"snd_pcm_hw_params_current"))) return 1; if (!(alsa_pcm_hw_params_set_access = dlsym(libasound,"snd_pcm_hw_params_set_access"))) return 1; if (!(alsa_pcm_hw_params_set_format = dlsym(libasound,"snd_pcm_hw_params_set_format"))) return 1; if (!(alsa_pcm_hw_params_set_rate_near = dlsym(libasound,"snd_pcm_hw_params_set_rate_near"))) return 1; if (!(alsa_pcm_hw_params_set_channels_near = dlsym(libasound,"snd_pcm_hw_params_set_channels_near"))) return 1; if (!(alsa_pcm_hw_params_set_buffer_time_near = dlsym(libasound,"snd_pcm_hw_params_set_buffer_time_near"))) return 1; if (!(alsa_pcm_hw_params_set_period_time_near = dlsym(libasound,"snd_pcm_hw_params_set_period_time_near"))) return 1; if (!(alsa_pcm_hw_params_get_buffer_size = dlsym(libasound,"snd_pcm_hw_params_get_buffer_size"))) return 1; if (!(alsa_pcm_hw_params_get_period_size = dlsym(libasound,"snd_pcm_hw_params_get_period_size"))) return 1; if (!(alsa_pcm_open = dlsym(libasound,"snd_pcm_open"))) return 1; if (!(alsa_pcm_close = dlsym(libasound,"snd_pcm_close"))) return 1; if (!(alsa_pcm_drain = dlsym(libasound,"snd_pcm_drain"))) return 1; if (!(alsa_pcm_drop = dlsym(libasound,"snd_pcm_drop"))) return 1; if (!(alsa_pcm_start = dlsym(libasound,"snd_pcm_start"))) return 1; if (!(alsa_pcm_writei = dlsym(libasound,"snd_pcm_writei"))) return 1; return 0; } static void ALSA_Unlink(void) { alsa_pcm_subformat_mask_malloc = NULL; alsa_strerror = NULL; alsa_pcm_resume = NULL; alsa_pcm_prepare = NULL; alsa_pcm_hw_params_any = NULL; alsa_pcm_hw_params = NULL; alsa_pcm_hw_params_current = NULL; alsa_pcm_hw_params_set_access = NULL; alsa_pcm_hw_params_set_format = NULL; alsa_pcm_hw_params_set_rate_near = NULL; alsa_pcm_hw_params_set_channels_near = NULL; alsa_pcm_hw_params_set_buffer_time_near = NULL; alsa_pcm_hw_params_set_period_time_near = NULL; alsa_pcm_hw_params_get_buffer_size = NULL; alsa_pcm_hw_params_get_period_size = NULL; alsa_pcm_close = NULL; alsa_pcm_drain = NULL; alsa_pcm_drop = NULL; alsa_pcm_start = NULL; alsa_pcm_open = NULL; alsa_pcm_writei = NULL; if (libasound) { dlclose(libasound); libasound = NULL; } } /* This is done to override the identifiers expanded * in the macros provided by the ALSA includes which are * not available. * */ #define snd_strerror alsa_strerror #define snd_pcm_sw_params_sizeof alsa_pcm_sw_params_sizeof #define snd_pcm_hw_params_sizeof alsa_pcm_hw_params_sizeof #endif /* MIKMOD_DYNAMIC */ static void ALSA_CommandLine(CHAR *cmdline) { /* no options */ } static BOOL ALSA_IsThere(void) { snd_pcm_subformat_mask_t *ptr = NULL; BOOL retval; #ifdef MIKMOD_DYNAMIC if (ALSA_Link()) return 0; #endif retval = (alsa_pcm_subformat_mask_malloc(&ptr) == 0) && (ptr != NULL); free(ptr); #ifdef MIKMOD_DYNAMIC ALSA_Unlink(); #endif return retval; } static int ALSA_Init_internal(void) { snd_pcm_format_t pformat; unsigned int btime = 250000; /* 250ms */ unsigned int ptime = 50000; /* 50ms */ snd_pcm_uframes_t psize; snd_pcm_uframes_t bsize; unsigned int rate, channels; snd_pcm_hw_params_t * hwparams; int err; /* setup playback format structure */ pformat = (md_mode&DMODE_16BITS)? SND_PCM_FORMAT_S16 : SND_PCM_FORMAT_U8; channels = (md_mode&DMODE_STEREO)?2:1; rate = md_mixfreq; #define MIKMOD_ALSA_DEVICE "default" if ((err = alsa_pcm_open(&pcm_h, MIKMOD_ALSA_DEVICE, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK)) < 0) { _mm_errno = MMERR_OPENING_AUDIO; goto END; } snd_pcm_hw_params_alloca(&hwparams); err = alsa_pcm_hw_params_any(pcm_h, hwparams); if (err < 0) { _mm_errno = MMERR_ALSA_NOCONFIG; goto END; } err = alsa_pcm_hw_params_set_access(pcm_h, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); if (!err) err = alsa_pcm_hw_params_set_format(pcm_h, hwparams, pformat); if (!err) err = alsa_pcm_hw_params_set_rate_near(pcm_h, hwparams, &rate, NULL); if (!err) err = alsa_pcm_hw_params_set_channels_near(pcm_h, hwparams, &channels); if (!err) err = alsa_pcm_hw_params_set_buffer_time_near(pcm_h, hwparams, &btime, NULL); if (!err) err = alsa_pcm_hw_params_set_period_time_near(pcm_h, hwparams, &ptime, NULL); if (!err) err = alsa_pcm_hw_params(pcm_h, hwparams); if (err < 0) { _mm_errno = MMERR_ALSA_SETPARAMS; goto END; } if (rate != md_mixfreq) { _mm_errno = MMERR_ALSA_SETRATE; goto END; } if (!(md_mode&DMODE_STEREO) && channels != 1) { _mm_errno = MMERR_ALSA_SETCHANNELS; goto END; } if ((md_mode&DMODE_STEREO) && channels != 2) { _mm_errno = MMERR_ALSA_SETCHANNELS; goto END; } err = alsa_pcm_hw_params_current(pcm_h, hwparams); if (!err) err = alsa_pcm_hw_params_get_buffer_size(hwparams, &bsize); if (!err) err = alsa_pcm_hw_params_get_period_size(hwparams, &psize, NULL); if (err < 0) { _mm_errno = MMERR_ALSA_BUFFERSIZE; goto END; } period_size = psize; global_frame_size = channels * ((md_mode&DMODE_16BITS)? 2 : 1); if (!(audiobuffer=(SBYTE*)_mm_malloc(period_size * global_frame_size))) { _mm_errno = MMERR_OUT_OF_MEMORY; goto END; } /* sound device is ready to work */ if (!VC_Init()) { enabled = 1; return 0; } END: alsa_pcm_close(pcm_h); pcm_h = NULL; return 1; } static int ALSA_Init(void) { #ifdef MIKMOD_DYNAMIC if (ALSA_Link()) { _mm_errno=MMERR_DYNAMIC_LINKING; return 1; } #endif return ALSA_Init_internal(); } static void ALSA_Exit_internal(void) { enabled = 0; VC_Exit(); if (pcm_h) { alsa_pcm_drain(pcm_h); alsa_pcm_close(pcm_h); pcm_h = NULL; } _mm_free(audiobuffer); } static void ALSA_Exit(void) { ALSA_Exit_internal(); #ifdef MIKMOD_DYNAMIC ALSA_Unlink(); #endif } /* Underrun and suspend recovery - from alsa-lib:test/pcm.c */ static int xrun_recovery(snd_pcm_t *handle, int err) { if (err == -EPIPE) { /* under-run */ err = alsa_pcm_prepare(handle); if (err < 0) dbgprint(stderr, "Can't recover from underrun, prepare failed: %s\n", snd_strerror(err)); return 0; } else if (err == -ESTRPIPE) { while ((err = alsa_pcm_resume(handle)) == -EAGAIN) sleep(1); /* wait until the suspend flag is released */ if (err < 0) { err = alsa_pcm_prepare(handle); if (err < 0) dbgprint(stderr, "Can't recover from suspend, prepare failed: %s\n", snd_strerror(err)); } return 0; } return err; } static void ALSA_Update(void) { int err; if (!enabled) return; if (bytes_written == 0 || bytes_played == bytes_written) { bytes_written = VC_WriteBytes(audiobuffer,period_size * global_frame_size); bytes_played = 0; } while (bytes_played < bytes_written) { err = alsa_pcm_writei(pcm_h, &audiobuffer[bytes_played], (bytes_written - bytes_played) / global_frame_size); if (err == -EAGAIN) continue; if (err < 0) { if ((err = xrun_recovery(pcm_h, err)) < 0) { _mm_errno = MMERR_ALSA_PCM_RECOVER; enabled = 0; dbgprint(stderr, "Write error: %s\n", alsa_strerror(err)); } break; } bytes_played += err * global_frame_size; } } static int ALSA_PlayStart(void) { int err; if (pcm_h == NULL) return 1; err = alsa_pcm_prepare(pcm_h); if (err == 0) err = alsa_pcm_start(pcm_h); if (err < 0) { enabled = 0; _mm_errno = MMERR_ALSA_PCM_START; return 1; } return VC_PlayStart(); } static void ALSA_PlayStop(void) { VC_PlayStop(); if (pcm_h) alsa_pcm_drop(pcm_h); } static int ALSA_Reset(void) { ALSA_Exit_internal(); return ALSA_Init_internal(); } MIKMODAPI MDRIVER drv_alsa = { NULL, "ALSA", "Advanced Linux Sound Architecture (ALSA) driver v1.10", 0,255, "alsa", ALSA_CommandLine, ALSA_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, ALSA_Init, ALSA_Exit, ALSA_Reset, VC_SetNumVoices, ALSA_PlayStart, ALSA_PlayStop, ALSA_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_alsa); #endif /* ex:set ts=8: */ libmikmod-3.1.16/drivers/drv_ds.c0000644000000000000000000002245112222472510015353 0ustar rootroot/* MikMod sound library (c) 1998-2001 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_ds.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on win32 platforms using DirectSound ==============================================================================*/ /* Written by Brian McKinney */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_DS #include #include #define INITGUID #include /* DSBCAPS_CTRLALL is not defined anymore with DirectX 7. Of course DirectSound is a coherent, backwards compatible API... */ #ifndef DSBCAPS_CTRLALL #define DSBCAPS_CTRLALL ( DSBCAPS_CTRLPOSITIONNOTIFY | DSBCAPS_CTRLVOLUME | \ DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | \ DSBCAPS_CTRL3D ) #endif /* size of each buffer */ #define FRAGSIZE 16 /* buffer count */ #define UPDATES 2 static LPDIRECTSOUND pSoundCard = NULL; static LPDIRECTSOUNDBUFFER pPrimarySoundBuffer = NULL, pSoundBuffer = NULL; static LPDIRECTSOUNDNOTIFY pSoundBufferNotify = NULL; static HANDLE notifyUpdateHandle = NULL, updateBufferHandle = NULL; static BOOL threadInUse = FALSE; static int fragsize=1<lpVtbl->Release((p)); \ (p) = NULL; \ } \ } while (0) static DWORD WINAPI updateBufferProc(LPVOID lpParameter) { LPVOID pBlock1 = NULL, pBlock2 = NULL; DWORD soundBufferCurrentPosition, blockBytes1, blockBytes2; DWORD start; while (threadInUse) { if (WaitForSingleObject(notifyUpdateHandle,INFINITE)==WAIT_OBJECT_0) { if (!threadInUse) break; pSoundBuffer->lpVtbl->GetCurrentPosition (pSoundBuffer,&soundBufferCurrentPosition,NULL); if (soundBufferCurrentPosition < fragsize) start = fragsize; else start = 0; if (pSoundBuffer->lpVtbl->Lock (pSoundBuffer,start,fragsize,&pBlock1,&blockBytes1, &pBlock2,&blockBytes2,0)==DSERR_BUFFERLOST) { pSoundBuffer->lpVtbl->Restore(pSoundBuffer); pSoundBuffer->lpVtbl->Lock (pSoundBuffer,start,fragsize,&pBlock1,&blockBytes1, &pBlock2,&blockBytes2,0); } MUTEX_LOCK(vars); if (Player_Paused_internal()) { VC_SilenceBytes((SBYTE*)pBlock1,(ULONG)blockBytes1); if (pBlock2) VC_SilenceBytes((SBYTE*)pBlock2,(ULONG)blockBytes2); } else { VC_WriteBytes((SBYTE*)pBlock1,(ULONG)blockBytes1); if (pBlock2) VC_WriteBytes((SBYTE*)pBlock2,(ULONG)blockBytes2); } MUTEX_UNLOCK(vars); pSoundBuffer->lpVtbl->Unlock (pSoundBuffer,pBlock1,blockBytes1,pBlock2,blockBytes2); } } return 0; } static void DS_CommandLine(CHAR *cmdline) { CHAR *ptr=MD_GetAtom("buffer",cmdline,0); if (ptr) { int buf=atoi(ptr); if ((buf<12)||(buf>19)) buf=FRAGSIZE; fragsize=1<lpVtbl->SetCooperativeLevel (pSoundCard,GetForegroundWindow(),DSSCL_PRIORITY)!=DS_OK) { _mm_errno=MMERR_DS_PRIORITY; return 1; } memset(&soundBufferFormat,0,sizeof(DSBUFFERDESC)); soundBufferFormat.dwSize = sizeof(DSBUFFERDESC); soundBufferFormat.dwFlags = DSBCAPS_PRIMARYBUFFER; soundBufferFormat.dwBufferBytes = 0; soundBufferFormat.lpwfxFormat = NULL; if (pSoundCard->lpVtbl->CreateSoundBuffer (pSoundCard,&soundBufferFormat,&pPrimarySoundBuffer,NULL)!=DS_OK) { _mm_errno=MMERR_DS_BUFFER; return 1; } memset(&pcmwf,0,sizeof(WAVEFORMATEX)); pcmwf.wFormatTag =WAVE_FORMAT_PCM; pcmwf.nChannels =(md_mode&DMODE_STEREO)?2:1; pcmwf.nSamplesPerSec =md_mixfreq; pcmwf.wBitsPerSample =(md_mode&DMODE_16BITS)?16:8; pcmwf.nBlockAlign =(pcmwf.wBitsPerSample * pcmwf.nChannels) / 8; pcmwf.nAvgBytesPerSec=pcmwf.nSamplesPerSec*pcmwf.nBlockAlign; if (pPrimarySoundBuffer->lpVtbl->SetFormat(pPrimarySoundBuffer,&pcmwf)!=DS_OK) { _mm_errno=MMERR_DS_FORMAT; return 1; } pPrimarySoundBuffer->lpVtbl->Play(pPrimarySoundBuffer,0,0,DSBPLAY_LOOPING); memset(&soundBufferFormat,0,sizeof(DSBUFFERDESC)); soundBufferFormat.dwSize =sizeof(DSBUFFERDESC); soundBufferFormat.dwFlags =controlflags|DSBCAPS_GETCURRENTPOSITION2 ; soundBufferFormat.dwBufferBytes =fragsize*UPDATES; soundBufferFormat.lpwfxFormat =&pcmwf; if (pSoundCard->lpVtbl->CreateSoundBuffer (pSoundCard,&soundBufferFormat,&pSoundBuffer,NULL)!=DS_OK) { _mm_errno=MMERR_DS_BUFFER; return 1; } pSoundBuffer->lpVtbl->QueryInterface(pSoundBuffer,&IID_IDirectSoundNotify,&p); if (!p) { _mm_errno=MMERR_DS_NOTIFY; return 1; } pSoundBufferNotify = (LPDIRECTSOUNDNOTIFY) p; notifyUpdateHandle=CreateEvent (NULL,FALSE,FALSE,"libmikmod DirectSound Driver positionNotify Event"); if (!notifyUpdateHandle) { _mm_errno=MMERR_DS_EVENT; return 1; } updateBufferHandle=CreateThread (NULL,0,updateBufferProc,NULL,CREATE_SUSPENDED,&updateBufferThreadID); if (!updateBufferHandle) { _mm_errno=MMERR_DS_THREAD; return 1; } memset(positionNotifications,0,2*sizeof(DSBPOSITIONNOTIFY)); positionNotifications[0].dwOffset =0; positionNotifications[0].hEventNotify=notifyUpdateHandle; positionNotifications[1].dwOffset =fragsize; positionNotifications[1].hEventNotify=notifyUpdateHandle; if (pSoundBufferNotify->lpVtbl->SetNotificationPositions (pSoundBufferNotify,2,positionNotifications) != DS_OK) { _mm_errno=MMERR_DS_UPDATE; return 1; } return VC_Init(); } static void DS_Exit(void) { DWORD statusInfo; if(updateBufferHandle) { /* Signal thread to exit and wait for the exit */ if (threadInUse) { threadInUse = 0; MUTEX_UNLOCK(vars); SetEvent (notifyUpdateHandle); WaitForSingleObject (updateBufferHandle, INFINITE); MUTEX_LOCK(vars); } CloseHandle(updateBufferHandle), updateBufferHandle = NULL; } if (notifyUpdateHandle) { CloseHandle(notifyUpdateHandle), notifyUpdateHandle = NULL; } SAFE_RELEASE(pSoundBufferNotify); if(pSoundBuffer) { if(pSoundBuffer->lpVtbl->GetStatus(pSoundBuffer,&statusInfo)==DS_OK) if(statusInfo&DSBSTATUS_PLAYING) pSoundBuffer->lpVtbl->Stop(pSoundBuffer); SAFE_RELEASE(pSoundBuffer); } if(pPrimarySoundBuffer) { if(pPrimarySoundBuffer->lpVtbl->GetStatus (pPrimarySoundBuffer,&statusInfo)==DS_OK) if(statusInfo&DSBSTATUS_PLAYING) pPrimarySoundBuffer->lpVtbl->Stop(pPrimarySoundBuffer); SAFE_RELEASE(pPrimarySoundBuffer); } SAFE_RELEASE(pSoundCard); VC_Exit(); } static BOOL do_update = 0; static void DS_Update(void) { LPVOID block; DWORD bBytes; /* Do first update in DS_Update() to be consistent with other non threaded drivers. */ if (do_update && pSoundBuffer) { do_update = 0; if (pSoundBuffer->lpVtbl->Lock (pSoundBuffer, 0, fragsize, &block, &bBytes, NULL, NULL, 0) == DSERR_BUFFERLOST) { pSoundBuffer->lpVtbl->Restore (pSoundBuffer); pSoundBuffer->lpVtbl->Lock (pSoundBuffer, 0, fragsize, &block, &bBytes, NULL, NULL, 0); } if (Player_Paused_internal()) { VC_SilenceBytes ((SBYTE *)block, (ULONG)bBytes); } else { VC_WriteBytes ((SBYTE *)block, (ULONG)bBytes); } pSoundBuffer->lpVtbl->Unlock (pSoundBuffer, block, bBytes, NULL, 0); pSoundBuffer->lpVtbl->SetCurrentPosition(pSoundBuffer, 0); pSoundBuffer->lpVtbl->Play(pSoundBuffer, 0, 0, DSBPLAY_LOOPING); threadInUse=1; ResumeThread (updateBufferHandle); } } static void DS_PlayStop(void) { do_update = 0; if (pSoundBuffer) pSoundBuffer->lpVtbl->Stop(pSoundBuffer); VC_PlayStop(); } static int DS_PlayStart(void) { do_update = 1; return VC_PlayStart(); } MIKMODAPI MDRIVER drv_ds= { NULL, "DirectSound", "DirectSound Driver (DX6+) v0.4", 0,255, "ds", DS_CommandLine, DS_IsPresent, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, DS_Init, DS_Exit, NULL, VC_SetNumVoices, DS_PlayStart, DS_PlayStop, DS_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_ds); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_pipe.c0000644000000000000000000001001312222472510015671 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_pipe.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output via a pipe to another command ==============================================================================*/ /* Written by Simon Hosie */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_PIPE #ifdef HAVE_UNISTD_H #include #endif #include #include #if (MIKMOD_UNIX) #include #include #endif #ifdef SUNOS extern int fclose(FILE *); #endif #define BUFFERSIZE 32768 static MWRITER *pipeout=NULL; static FILE *pipefile=NULL; #if (MIKMOD_UNIX) static int pipefd[2]={-1,-1}; static pid_t pid; #endif static SBYTE *audiobuffer=NULL; static CHAR *target=NULL; static void pipe_CommandLine(CHAR *cmdline) { CHAR *ptr=MD_GetAtom("pipe",cmdline,0); if(ptr) { _mm_free(target); target=ptr; } } static BOOL pipe_IsThere(void) { return 1; } static int pipe_Init(void) { if(!target) { _mm_errno=MMERR_OPENING_FILE; return 1; } #if !(MIKMOD_UNIX) #ifdef __EMX__ _fsetmode(stdout, "b"); #endif #ifdef __WATCOMC__ pipefile = _popen(target, "wb"); #else pipefile = popen(target, "wb"); #endif if (!pipefile) { _mm_errno=MMERR_OPENING_FILE; return 1; } #else /* poor man's popen() */ if (pipe(pipefd)) { _mm_errno = MMERR_OPENING_FILE; return 1; } switch (pid=fork()) { case -1: close(pipefd[0]); close(pipefd[1]); pipefd[0]=pipefd[1]=-1; _mm_errno=MMERR_OPENING_FILE; return 1; case 0: if (pipefd[0]) { dup2(pipefd[0],0); close(pipefd[0]); } close(pipefd[1]); if (!MD_DropPrivileges()) execl("/bin/sh","sh","-c",target,NULL); exit(127); } close(pipefd[0]); if (!(pipefile=fdopen(pipefd[1],"wb"))) { _mm_errno=MMERR_OPENING_FILE; return 1; } #endif if(!(pipeout=_mm_new_file_writer(pipefile))) return 1; if(!(audiobuffer=(SBYTE*)_mm_malloc(BUFFERSIZE))) return 1; md_mode|=DMODE_SOFT_MUSIC|DMODE_SOFT_SNDFX; return VC_Init(); } static void pipe_Exit(void) { #if (MIKMOD_UNIX) int pstat; pid_t pid2; #endif VC_Exit(); _mm_free(audiobuffer); if(pipeout) { _mm_delete_file_writer(pipeout); pipeout=NULL; } if(pipefile) { #if !(MIKMOD_UNIX) #ifdef __WATCOMC__ _pclose(pipefile); #else pclose(pipefile); #endif #ifdef __EMX__ _fsetmode(stdout,"t"); #endif #else /* unix: */ fclose(pipefile); do { pid2=waitpid(pid,&pstat,0); } while (pid2==-1 && errno==EINTR); #endif pipefile=NULL; } } static void pipe_Update(void) { _mm_write_UBYTES(audiobuffer,VC_WriteBytes(audiobuffer,BUFFERSIZE),pipeout); } MIKMODAPI MDRIVER drv_pipe={ NULL, "Piped writer", "Piped Output driver v0.2", 0,255, "pipe", pipe_CommandLine, pipe_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, pipe_Init, pipe_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, pipe_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_pipe); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_nos.c0000644000000000000000000000407112222472510015542 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_nos.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for no output ==============================================================================*/ /* Written by Jean-Paul Mikkers */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include "mikmod_internals.h" #define ZEROLEN 32768 static SBYTE *zerobuf=NULL; static BOOL NS_IsThere(void) { return 1; } static int NS_Init(void) { zerobuf=(SBYTE*)_mm_malloc(ZEROLEN); return VC_Init(); } static void NS_Exit(void) { VC_Exit(); _mm_free(zerobuf); } static void NS_Update(void) { if (zerobuf) VC_WriteBytes(zerobuf,ZEROLEN); } MIKMODAPI MDRIVER drv_nos={ NULL, "No Sound", "Nosound Driver v3.0", 255,255, "nosound", NULL, NS_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, NS_Init, NS_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, NS_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_win.c0000644000000000000000000001165712222472510015550 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_win.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on win32 platforms using the multimedia API ==============================================================================*/ /* Written by Bjornar Henden */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_WIN #include #if defined(_MSC_VER) #pragma comment(lib,"winmm.lib") #if (_MSC_VER < 1300) typedef DWORD DWORD_PTR; #endif #endif #define NUMBUFFERS 6 /* number of buffers */ #define BUFFERSIZE 120 /* buffer size in milliseconds */ static HWAVEOUT hwaveout; static WAVEHDR header[NUMBUFFERS]; static HPSTR buffer[NUMBUFFERS]; /* pointers to buffers */ static WORD buffersout; /* number of buffers playing/about to be played */ static WORD nextbuffer; /* next buffer to be mixed */ static ULONG buffersize; /* buffer size in bytes */ /* converts Windows error to libmikmod error */ static int WIN_GetError(MMRESULT mmr) { switch (mmr) { case MMSYSERR_INVALHANDLE: return MMERR_WINMM_HANDLE; case MMSYSERR_NODRIVER: return MMERR_OPENING_AUDIO; case MMSYSERR_NOMEM: return MMERR_OUT_OF_MEMORY; case MMSYSERR_ALLOCATED: return MMERR_WINMM_ALLOCATED; case MMSYSERR_BADDEVICEID: return MMERR_WINMM_DEVICEID; case WAVERR_BADFORMAT: return MMERR_WINMM_FORMAT; default: return MMERR_WINMM_UNKNOWN; /* should hopefully not happen */ } } static BOOL WIN_IsThere(void) { return waveOutGetNumDevs()>0?1:0; } static void CALLBACK WIN_CallBack(HWAVEOUT hwo,UINT uMsg,DWORD_PTR dwInstance,DWORD_PTR dwParam1,DWORD_PTR dwParam2) { if (uMsg==WOM_DONE) --buffersout; } static int WIN_Init(void) { WAVEFORMATEX wfe; WORD samplesize; MMRESULT mmr; int n; samplesize=1; if (md_mode&DMODE_STEREO) samplesize<<=1; if (md_mode&DMODE_16BITS) samplesize<<=1; wfe.wFormatTag=WAVE_FORMAT_PCM; wfe.nChannels=md_mode&DMODE_STEREO?2:1; wfe.nSamplesPerSec=md_mixfreq; wfe.nAvgBytesPerSec=md_mixfreq*samplesize; wfe.nBlockAlign=samplesize; wfe.wBitsPerSample=md_mode&DMODE_16BITS?16:8; wfe.cbSize=sizeof(wfe); mmr=waveOutOpen(&hwaveout,WAVE_MAPPER,&wfe,(DWORD_PTR)WIN_CallBack,0,CALLBACK_FUNCTION); if (mmr!=MMSYSERR_NOERROR) { _mm_errno=WIN_GetError(mmr); return 1; } buffersize=md_mixfreq*samplesize*BUFFERSIZE/1000; for (n=0;n=NUMBUFFERS) nextbuffer%=NUMBUFFERS; ++buffersout; } } static void WIN_PlayStop(void) { if (hwaveout) waveOutReset(hwaveout); VC_PlayStop(); } MIKMODAPI MDRIVER drv_win={ NULL, "Windows waveform-audio", "Windows waveform-audio driver v0.1", 0,255, "winmm", NULL, WIN_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, WIN_Init, WIN_Exit, NULL, VC_SetNumVoices, VC_PlayStart, WIN_PlayStop, WIN_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_win); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_hp.c0000644000000000000000000000743612222472510015362 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_hp.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output to HP 9000 series /dev/audio ==============================================================================*/ /* Written by Lutz Vieweg */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_HP #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #include #include #define BUFFERSIZE 15 static int fd=-1; static SBYTE *audiobuffer=NULL; static int buffersize=1<19)) buf=BUFFERSIZE; buffersize=1<=0) { close(fd); return 1; } return (errno==EACCES?1:0); } static int HP_Init(void) { int flags; if (!(md_mode&DMODE_16BITS)) { _mm_errno=MMERR_16BIT_ONLY; return 1; } if ((fd=open("/dev/audio",O_WRONLY|O_NDELAY,0))<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } if ((flags=fcntl(fd,F_GETFL,0))<0) { _mm_errno=MMERR_NON_BLOCK; return 1; } flags|=O_NDELAY; if (fcntl(fd,F_SETFL,flags)<0) { _mm_errno=MMERR_NON_BLOCK; return 1; } if (ioctl(fd,AUDIO_SET_DATA_FORMAT,AUDIO_FORMAT_LINEAR16BIT)) { _mm_errno=MMERR_HP_SETSAMPLESIZE; return 1; } if (ioctl(fd,AUDIO_SET_SAMPLE_RATE,md_mixfreq)) { _mm_errno=MMERR_HP_SETSPEED; return 1; } if (ioctl(fd,AUDIO_SET_CHANNELS,(md_mode&DMODE_STEREO)?2:1)) { _mm_errno=MMERR_HP_CHANNELS; return 1; } if (ioctl(fd,AUDIO_SET_OUTPUT, headphone?AUDIO_OUT_HEADPHONE:AUDIO_OUT_SPEAKER)) { _mm_errno=MMERR_HP_AUDIO_OUTPUT; return 1; } if (ioctl(fd,AUDIO_SET_TXBUFSIZE,buffersize<<3)) { _mm_errno=MMERR_HP_BUFFERSIZE; return 1; } if (!(audiobuffer=(SBYTE*)_mm_malloc(buffersize))) return 1; return VC_Init(); } static void HP_Exit(void) { VC_Exit(); if (fd>=0) { ioctl(fd,AUDIO_DRAIN,0); close(fd); fd=-1; } if (audiobuffer) { free(audiobuffer); audiobuffer=NULL; } } static void HP_Update(void) { write(fd,audiobuffer,VC_WriteBytes(audiobuffer,buffersize)); } MIKMODAPI MDRIVER drv_hp={ NULL, "HP-UX Audio", "HP-UX Audio driver v1.3", 0,255, "hp", HP_CommandLine, HP_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, HP_Init, HP_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, HP_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_hp); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_oss.c0000644000000000000000000002151712222472510015553 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_oss.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on Linux and FreeBSD Open Sound System (OSS) (/dev/dsp) ==============================================================================*/ /* Written by Chris Conn Extended by Miodrag Vallat: - compatible with all OSS/Voxware versions on Linux/i386, at least - support for uLaw output (for sparc systems) */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_OSS #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_FCNTL_H #include #endif #include #include #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_MACHINE_SOUNDCARD_H #include #endif #ifdef HAVE_SYS_SOUNDCARD_H #include #endif /* Compatibility with old versions of OSS (Voxware <= 2.03, Linux kernel < 1.1.31) */ #ifndef AFMT_S16_LE #define AFMT_S16_LE 16 #endif #ifndef AFMT_S16_BE #define AFMT_S16_BE 0x20 #endif #ifndef AFMT_U8 #define AFMT_U8 8 #endif #ifndef SNDCTL_DSP_SETFMT #define SNDCTL_DSP_SETFMT SNDCTL_DSP_SAMPLESIZE #endif /* Compatibility with not-so-old versions of OSS (OSS < 3.7, Linux kernel < 2.1.16) */ #ifndef AFMT_S16_NE #if defined(_AIX) || defined(AIX) || defined(sparc) || defined(HPPA) || defined(PPC) #define AFMT_S16_NE AFMT_S16_BE #else #define AFMT_S16_NE AFMT_S16_LE #endif #endif static int sndfd=-1; static SBYTE *audiobuffer=NULL; static int buffersize; static int play_precision; #define DEFAULT_CARD 0 static int card=DEFAULT_CARD; #ifdef SNDCTL_DSP_SETFRAGMENT #define DEFAULT_FRAGSIZE 14 #define DEFAULT_NUMFRAGS 16 static int fragsize=DEFAULT_FRAGSIZE; static int numfrags=DEFAULT_NUMFRAGS; #endif static void OSS_CommandLine(CHAR *cmdline) { CHAR *ptr; #ifdef SNDCTL_DSP_SETFRAGMENT if((ptr=MD_GetAtom("buffer",cmdline,0))) { fragsize=atoi(ptr); if((fragsize<7)||(fragsize>17)) fragsize=DEFAULT_FRAGSIZE; free(ptr); } if((ptr=MD_GetAtom("count",cmdline,0))) { numfrags=atoi(ptr); if((numfrags<2)||(numfrags>255)) numfrags=DEFAULT_NUMFRAGS; free(ptr); } #endif if((ptr=MD_GetAtom("card",cmdline,0))) { card = atoi(ptr); if((card<0)||(card>99)) card=DEFAULT_CARD; free(ptr); } } static char *OSS_GetDeviceName(void) { static char sounddevice[20]; /* First test for devfs enabled Linux sound devices */ if (card) sprintf(sounddevice,"/dev/sound/dsp%d",card); else strcpy(sounddevice,"/dev/sound/dsp"); if(!access(sounddevice,F_OK)) return sounddevice; sprintf(sounddevice,"/dev/dsp%d",card); if (!card) { /* prefer /dev/dsp0 over /dev/dsp, as /dev/dsp might be a symbolic link to something else than /dev/dsp0. Revert to /dev/dsp if /dev/dsp0 does not exist. */ if(access("/dev/dsp0",F_OK)) strcpy(sounddevice,"/dev/dsp"); } return sounddevice; } static BOOL OSS_IsThere(void) { /* under Linux, and perhaps other Unixes, access()ing the device is not enough since it won't fail if the machine doesn't have sound support in the kernel or sound hardware */ int fd; if((fd=open(OSS_GetDeviceName(),O_WRONLY|O_NONBLOCK))>=0) { close(fd); return 1; } return (errno==EACCES?1:0); } static int OSS_Init_internal(void) { int play_stereo,play_rate; int orig_precision,orig_stereo; int formats; #if SOUND_VERSION >= 301 audio_buf_info buffinf; #endif #ifdef SNDCTL_DSP_GETFMTS /* Ask device for supported formats */ if(ioctl(sndfd,SNDCTL_DSP_GETFMTS,&formats)<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } #else formats=AFMT_S16_NE|AFMT_U8; #endif orig_precision=play_precision=(md_mode&DMODE_16BITS)?AFMT_S16_NE:AFMT_U8; /* Device does not support the format we would prefer... */ if(!(formats & play_precision)) { /* We could try 8 bit sound if available */ if(play_precision==AFMT_S16_NE &&(formats&AFMT_U8)) { _mm_errno=MMERR_8BIT_ONLY; return 1; } #ifdef AFMT_MU_LAW /* We could try uLaw if available */ if(formats&AFMT_MU_LAW) { if((md_mode&DMODE_STEREO)||(md_mode&DMODE_16BITS)|| md_mixfreq!=8000) { _mm_errno=MMERR_ULAW; return 1; } else orig_precision=play_precision=AFMT_MU_LAW; } else #endif /* Otherwise, just abort */ { _mm_errno=MMERR_OSS_SETSAMPLESIZE; return 1; } } if((ioctl(sndfd,SNDCTL_DSP_SETFMT,&play_precision)<0)|| (orig_precision!=play_precision)) { _mm_errno=MMERR_OSS_SETSAMPLESIZE; return 1; } #ifdef SNDCTL_DSP_CHANNELS orig_stereo=play_stereo=(md_mode&DMODE_STEREO)?2:1; if((ioctl(sndfd,SNDCTL_DSP_CHANNELS,&play_stereo)<0)|| (orig_stereo!=play_stereo)) { _mm_errno=MMERR_OSS_SETSTEREO; return 1; } #else orig_stereo=play_stereo=(md_mode&DMODE_STEREO)?1:0; if((ioctl(sndfd,SNDCTL_DSP_STEREO,&play_stereo)<0)|| (orig_stereo!=play_stereo)) { _mm_errno=MMERR_OSS_SETSTEREO; return 1; } #endif play_rate=md_mixfreq; if((ioctl(sndfd,SNDCTL_DSP_SPEED,&play_rate)<0)) { _mm_errno=MMERR_OSS_SETSPEED; return 1; } md_mixfreq=play_rate; #if SOUND_VERSION >= 301 /* This call fails on Linux/PPC */ if((ioctl(sndfd,SNDCTL_DSP_GETOSPACE,&buffinf)<0)) ioctl(sndfd,SNDCTL_DSP_GETBLKSIZE,&buffinf.fragsize); if(!(audiobuffer=(SBYTE*)_mm_malloc(buffinf.fragsize))) return 1; buffersize = buffinf.fragsize; #else ioctl(sndfd,SNDCTL_DSP_GETBLKSIZE,&buffersize); if(!(audiobuffer=(SBYTE*)_mm_malloc(buffersize))) return 1; #endif return VC_Init(); } static int OSS_Init(void) { #ifdef SNDCTL_DSP_SETFRAGMENT int fragmentsize; #endif if((sndfd=open(OSS_GetDeviceName(),O_WRONLY))<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } #ifdef SNDCTL_DSP_SETFRAGMENT if((fragsize==DEFAULT_FRAGSIZE)&&(getenv("MM_FRAGSIZE"))) { fragsize=atoi(getenv("MM_FRAGSIZE")); if((fragsize<7)||(fragsize>17)) fragsize=DEFAULT_FRAGSIZE; } if((numfrags==DEFAULT_NUMFRAGS)&&(getenv("MM_NUMFRAGS"))) { numfrags=atoi(getenv("MM_NUMFRAGS")); if((numfrags<2)||(numfrags>255)) numfrags=DEFAULT_NUMFRAGS; } fragmentsize=(numfrags<<16)|fragsize; if(ioctl(sndfd,SNDCTL_DSP_SETFRAGMENT,&fragmentsize)<0) { _mm_errno=MMERR_OSS_SETFRAGMENT; return 1; } #endif return OSS_Init_internal(); } static void OSS_Exit_internal(void) { VC_Exit(); _mm_free(audiobuffer); } static void OSS_Exit(void) { OSS_Exit_internal(); if (sndfd>=0) { close(sndfd); sndfd=-1; } } static void OSS_PlayStop(void) { VC_PlayStop(); ioctl(sndfd,SNDCTL_DSP_POST,0); } static void OSS_Update(void) { int done; #if SOUND_VERSION >= 301 audio_buf_info buffinf; buffinf.fragments = 2; for(;;) { /* This call fails on Linux/PPC */ if ((ioctl(sndfd,SNDCTL_DSP_GETOSPACE,&buffinf)<0)) { buffinf.fragments--; buffinf.fragsize = buffinf.bytes = buffersize; } if(!buffinf.fragments) break; done=VC_WriteBytes(audiobuffer,buffinf.fragsize>buffinf.bytes? buffinf.bytes:buffinf.fragsize); #ifdef AFMT_MU_LAW if (play_precision==AFMT_MU_LAW) unsignedtoulaw((char *)audiobuffer,done); #endif write(sndfd,audiobuffer,done); } #else done=VC_WriteBytes(audiobuffer,buffersize); #ifdef AFMT_MU_LAW if (play_precision==AFMT_MU_LAW) unsignedtoulaw(audiobuffer,done); #endif write(sndfd,audiobuffer,done); #endif } static int OSS_Reset(void) { OSS_Exit_internal(); ioctl(sndfd,SNDCTL_DSP_RESET,0); return OSS_Init_internal(); } MIKMODAPI MDRIVER drv_oss={ NULL, "Open Sound System", "Open Sound System driver v1.7", 0,255, "oss", OSS_CommandLine, OSS_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, OSS_Init, OSS_Exit, OSS_Reset, VC_SetNumVoices, VC_PlayStart, OSS_PlayStop, OSS_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_oss); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/Makefile.am0000644000000000000000000000111012222471454015755 0ustar rootrootEXTRA_DIST = drv_AF.c \ drv_aix.c \ drv_alsa04.c \ drv_alsa.c \ drv_dart.c \ drv_ds.c \ drv_esd.c \ drv_hp.c \ drv_mac.c \ drv_nos.c \ drv_os2.c \ drv_oss.c \ drv_pipe.c \ drv_raw.c \ drv_sam9407.c\ drv_sgi.c \ drv_stdout.c \ drv_sun.c \ drv_ultra.c \ drv_wav.c \ drv_win.c libmikmod-3.1.16/drivers/drv_sam9407.c0000644000000000000000000002426612260231702016055 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_sam9407.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for the Linux sam9407 driver ==============================================================================*/ /* Written by Gerd Rausch Tempo contributions by Xavier Hosxe Released with libmikmod under LGPL license with the author's permission. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_SAM9407 #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include /* Backwards compatibility with driver version 0.9.x */ #ifndef SAM_MOD_API_VERSION #define SAM_MOD_API_VERSION SAM_API_VERSION #endif #define SAM_NUM_BANKS 256 #define SAM_NUM_VOICES 32 #define NO_LOOP_SAMPLES 8 #define PENDING_PLAY (1<<0) #define PENDING_STOP (1<<1) #define PENDING_VOLUME (1<<2) #define PENDING_FREQ (1<<3) typedef struct { BOOL inUse; ULONG length, loopstart, loopend; UWORD flags; } Bank; typedef struct { BOOL playing; ULONG pending; SWORD handle; ULONG start; ULONG length; ULONG loopstart; ULONG repend; UWORD flags; ULONG freq; UWORD vol; ULONG pan; } Voice; static Bank banks[SAM_NUM_BANKS]; static Voice voices[SAM_NUM_VOICES]; static int card=0; static int modfd=-1; static void commandLine(CHAR *cmdline) { CHAR *ptr; if((ptr=MD_GetAtom("card", cmdline, 0))) { card=atoi(ptr); free(ptr); } } static BOOL isPresent(void) { int fd; char devName[256]; sprintf(devName, "/dev/sam%d_mod", card); if((fd=open(devName, O_RDWR))>=0) { close(fd); return 1; } return (errno == EACCES ? 1 : 0); } static ULONG freeSampleSpace(int type) { SamModMemInfo memInfo; if(ioctl(modfd, SAM_IOC_MOD_MEM_INFO, &memInfo)<0) return 0; return memInfo.memFree<<1; } static SWORD sampleLoad(SAMPLOAD *s, int type) { Bank *bankP; SamModSamples modSamples; SWORD handle; SWORD *samples; int rc; for(handle=0; handle=SAM_NUM_BANKS) { _mm_errno=MMERR_OUT_OF_HANDLES; return -1; } bankP=banks+handle; bankP->inUse=1; SL_SampleSigned(s); SL_Sample8to16(s); bankP->length=s->sample->length; bankP->loopstart=s->sample->loopstart; bankP->loopend=s->sample->loopend ? s->sample->loopend : s->sample->length; bankP->flags=s->sample->flags; if(!(samples=(SWORD *)malloc((bankP->length+NO_LOOP_SAMPLES)<<1))) { bankP->inUse=0; _mm_errno=MMERR_SAMPLE_TOO_BIG; return -1; } if(SL_Load(samples, s, bankP->length)) { free(samples); bankP->inUse=0; _mm_errno=MMERR_SAMPLE_TOO_BIG; return -1; } if(!(bankP->flags & SF_LOOP)) { memset(samples+bankP->length, 0, NO_LOOP_SAMPLES); bankP->loopstart=bankP->length; bankP->length+=NO_LOOP_SAMPLES; bankP->loopend=bankP->length-1; } modSamples.handle=handle; modSamples.data=(unsigned short *)samples; modSamples.size=bankP->length; if((rc=ioctl(modfd, SAM_IOC_MOD_SAMPLES_LOAD, &modSamples))<0) { free(samples); bankP->inUse=0; _mm_errno=MMERR_SAMPLE_TOO_BIG; return -1; } free(samples); return handle; } void sampleUnload(SWORD handle) { unsigned char modHandle; if(!banks[handle].inUse) return; modHandle=handle; ioctl(modfd, SAM_IOC_MOD_SAMPLES_UNLOAD, &modHandle); banks[handle].inUse=0; } static ULONG realSampleLength(int type, SAMPLE *s) { if(!s) return 0; return s->length<<1; } static int init(void) { int i; Voice *voiceP; char devName[256]; SamApiInfo apiInfo; sprintf(devName, "/dev/sam%d_mod", card); if((modfd=open(devName, O_RDWR))<0) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } if(ioctl(modfd, SAM_IOC_API_INFO, &apiInfo)<0 || apiInfo.version!=SAM_MOD_API_VERSION) { _mm_errno=MMERR_OPENING_AUDIO; return 1; } for(i=0; ifreq=44100; voiceP->vol=0xFF; voiceP->pan=0x80; } md_mode&=~(DMODE_SOFT_MUSIC|DMODE_SOFT_SNDFX); return 0; } static void exitHook(void) { if(modfd>=0) { close(modfd); modfd=-1; } } static int reset(void) { if(ioctl(modfd, SAM_IOC_MOD_RESET)<0) return 1; return 0; } static int setNumVoices(void) { return 0; } static int playStart(void) { ioctl(modfd, SAM_IOC_MOD_TIMER_START); return 0; } static void playStop(void) { ioctl(modfd, SAM_IOC_MOD_POST); ioctl(modfd, SAM_IOC_MOD_TIMER_STOP); } static void update(void) { static int wait_echo; static long ticker_idx; int i; Voice *voiceP; SamModEvent event, eventBuf[SAM_NUM_VOICES*10+8], *eventP; eventP = eventBuf; for(i=0; ipending & PENDING_STOP) || ((voiceP->pending & PENDING_PLAY) && voiceP->playing)) { voiceP->playing=0; eventP->type=SAM_MOD_EVENT_STOP; eventP->trigger.voice=i; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModTriggerEvent)); eventP->type=SAM_MOD_EVENT_CLOSE; eventP->trigger.voice=i; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModTriggerEvent)); voiceP->pending&=~PENDING_STOP; } if(voiceP->pending & PENDING_PLAY) { Bank *bankP=banks+voiceP->handle; eventP->type=SAM_MOD_EVENT_OPEN; eventP->trigger.voice=i; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModTriggerEvent)); eventP->type=SAM_MOD_EVENT_MEM; eventP->mem.voice=i; eventP->mem.handle=voiceP->handle; eventP->mem.sampleType=SamModSample16Bit; eventP->mem.loopType=(bankP->flags & SF_BIDI) ? SamModLoopReverse : SamModLoopForward; eventP->mem.start=voiceP->start; eventP->mem.loop=bankP->loopstart; eventP->mem.end=bankP->loopend; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModMemEvent)); eventP->type=SAM_MOD_EVENT_VOL; eventP->volOut.voice=i; eventP->volOut.volume=0xFF; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModVolOutEvent)); voiceP->pending|=PENDING_VOLUME|PENDING_FREQ; } if(voiceP->pending & PENDING_VOLUME) { eventP->type=SAM_MOD_EVENT_MAIN; eventP->volSend.voice=i; eventP->volSend.left=voiceP->vol*(255-voiceP->pan)/255; eventP->volSend.right=voiceP->vol*voiceP->pan/255; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModVolSendEvent)); voiceP->pending&=~PENDING_VOLUME; } if(voiceP->pending & PENDING_FREQ) { eventP->type=SAM_MOD_EVENT_PITCH; eventP->pitch.voice=i; eventP->pitch.freq=voiceP->freq; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModPitchEvent)); voiceP->pending&=~PENDING_FREQ; } if(voiceP->pending & PENDING_PLAY) { voiceP->playing=1; eventP->type=SAM_MOD_EVENT_START; eventP->trigger.voice=i; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModTriggerEvent)); voiceP->pending&=~PENDING_PLAY; } } eventP->type=SAM_MOD_EVENT_WAIT_REL; eventP->timer.time.tv_sec=0; eventP->timer.time.tv_usec=2500000/md_bpm; eventP=(SamModEvent *)((char *)eventP+sizeof(SamModTimerEvent)); eventP->type=SAM_MOD_EVENT_ECHO; eventP->echo.closure=(void *)(ticker_idx+1); eventP=(SamModEvent *)((char *)eventP+sizeof(SamModEchoEvent)); if(wait_echo) while(read(modfd, &event, sizeof(event))>0 && (long)event.echo.closure!=ticker_idx); wait_echo=1; ticker_idx++; (*md_player)(); write(modfd, eventBuf, (char *)eventP-(char *)eventBuf); } static void voiceSetVolume(UBYTE voice, UWORD vol) { if(voice>=SAM_NUM_VOICES) return; voices[voice].vol=vol<=255 ? vol : 255; voices[voice].pending|=PENDING_VOLUME; } static UWORD voiceGetVolume(UBYTE voice) { return voice=SAM_NUM_VOICES) return; voices[voice].freq=freq; voices[voice].pending|=PENDING_FREQ; } static ULONG voiceGetFrequency(UBYTE voice) { return voice=SAM_NUM_VOICES) return; voices[voice].pan=pan<=255 ? pan : 255; voices[voice].pending|=PENDING_VOLUME; } static ULONG voiceGetPanning(UBYTE voice) { return voice=SAM_NUM_VOICES) return; voiceP=voices+voice; voiceP->handle=handle; voiceP->flags=flags; voiceP->start=start; voiceP->length=length; voiceP->loopstart=loopstart; voiceP->repend=repend; voiceP->flags=flags; voiceP->pending&=~PENDING_STOP; voiceP->pending|=PENDING_PLAY; } static void voiceStop(UBYTE voice) { if(voice>=SAM_NUM_VOICES) return; voices[voice].pending&=~PENDING_PLAY; voices[voice].pending|=PENDING_STOP; } static BOOL voiceStopped(UBYTE voice) { return (voice */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_AIX #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #include #include #include #define BUFFERSIZE 15 static int buffersize=1<19)) buf=BUFFERSIZE; buffersize=1<=0) { close(fd); fd=-1; } _mm_free(audiobuffer); } static void AIX_Update(void) { write(fd,audiobuffer,VC_WriteBytes(audiobuffer,buffersize)); } static void AIX_Pause(void) { write(fd,audiobuffer,VC_SilenceBytes(audiobuffer,buffersize)); } MIKMODAPI MDRIVER drv_aix={ NULL, "AIX Audio", "AIX Audio driver v1.2", 0,255, "AIX", AIX_CommandLine, AIX_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, AIX_Init, AIX_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, AIX_Update, AIX_Pause, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_aix); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_sun.c0000644000000000000000000002720312222472510015552 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_sun.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output on the Sun audio device (/dev/audio). Also works under NetBSD and OpenBSD ==============================================================================*/ /* Written by Valtteri Vuorikoski NetBSD/OpenBSD code from Miodrag Vallat */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_SUN #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #include #include #include #ifdef HAVE_SYS_IOCTL_H #include #endif #include #ifdef HAVE_SUN_AUDIOIO_H #include #endif #ifdef HAVE_SYS_AUDIOIO_H #include #endif #ifdef SUNOS extern int ioctl(int, unsigned long, ...); extern int fputs(const char *, FILE *); #endif #define DEFAULT_FRAGSIZE 12 #if !defined __NetBSD__ && !defined __OpenBSD__ #ifdef HAVE_SUN_AUDIOIO_H #define SUNOS4 #else #define SOLARIS #endif #endif /* Sound device to open */ #ifdef SUNOS4 #define SOUNDDEVICE "/dev/sound" #else /* Solaris, *BSD */ #define SOUNDDEVICE "/dev/audio" #endif /* Solaris doesn't have these */ #ifdef SOLARIS #define AUDIO_ENCODING_SLINEAR AUDIO_ENCODING_LINEAR #define AUDIO_ENCODING_ULINEAR AUDIO_ENCODING_LINEAR8 #endif /* Compatibility defines, for old *BSD or SunOS systems */ #ifndef AUDIO_ENCODING_PCM16 #define AUDIO_ENCODING_PCM16 AUDIO_ENCODING_LINEAR #endif #ifndef AUDIO_ENCODING_PCM8 #define AUDIO_ENCODING_PCM8 AUDIO_ENCODING_LINEAR8 #endif #ifndef AUDIO_ENCODING_SLINEAR_LE #define AUDIO_ENCODING_SLINEAR_LE AUDIO_ENCODING_PCM16 #endif #ifndef AUDIO_ENCODING_ULINEAR_LE #define AUDIO_ENCODING_ULINEAR_LE AUDIO_ENCODING_PCM8 #endif #ifndef AUDIO_ENCODING_SLINEAR #if BYTE_ORDER == BIG_ENDIAN #define AUDIO_ENCODING_SLINEAR AUDIO_ENCODING_SLINEAR_BE #else #define AUDIO_ENCODING_SLINEAR AUDIO_ENCODING_SLINEAR_LE #endif #endif #ifndef AUDIO_ENCODING_ULINEAR #if BYTE_ORDER == BIG_ENDIAN #define AUDIO_ENCODING_ULINEAR AUDIO_ENCODING_ULINEAR_BE #else #define AUDIO_ENCODING_ULINEAR AUDIO_ENCODING_ULINEAR_LE #endif #endif /* Compatibility defines, for old *BSD systems */ #ifndef AUDIO_SPEAKER #define AUDIO_SPEAKER 0x01 #endif #ifndef AUDIO_HEADPHONE #define AUDIO_HEADPHONE 0x02 #endif /* ``normalize'' AUDIO_ENCODING_xxx values for comparison */ static int normalize(int encoding) { switch (encoding) { #ifdef AUDIO_ENCODING_LINEAR case AUDIO_ENCODING_LINEAR: return AUDIO_ENCODING_PCM16; #endif #ifdef AUDIO_ENCODING_LINEAR8 case AUDIO_ENCODING_LINEAR8: return AUDIO_ENCODING_PCM8; #endif #if BYTE_ORDER == BIG_ENDIAN #ifdef AUDIO_ENCODING_SLINEAR_BE case AUDIO_ENCODING_SLINEAR: return AUDIO_ENCODING_SLINEAR_BE; #endif #ifdef AUDIO_ENCODING_ULINEAR_BE case AUDIO_ENCODING_ULINEAR: return AUDIO_ENCODING_ULINEAR_BE; #endif #else #ifdef AUDIO_ENCODING_SLINEAR_LE case AUDIO_ENCODING_SLINEAR: return AUDIO_ENCODING_SLINEAR_LE; #endif #ifdef AUDIO_ENCODING_ULINEAR_LE case AUDIO_ENCODING_ULINEAR: return AUDIO_ENCODING_ULINEAR_LE; #endif #endif default: return encoding; } } static int sndfd = -1; static unsigned int port = 0; static int play_encoding; static int play_precision; static int fragsize = 1 << DEFAULT_FRAGSIZE; static SBYTE *audiobuffer = NULL; static void Sun_CommandLine(CHAR *cmdline) { CHAR *ptr; if ((ptr = MD_GetAtom("buffer", cmdline, 0))) { int buf = atoi(ptr); if (buf >= 7 && buf <= 17) fragsize = 1 << buf; free(ptr); } if ((ptr = MD_GetAtom("headphone", cmdline, 1))) { port = AUDIO_HEADPHONE; free(ptr); } else if ((ptr = MD_GetAtom("speaker", cmdline, 1))) { port = AUDIO_SPEAKER; free(ptr); } } static BOOL Sun_IsThere(void) { if (getenv("AUDIODEV")) return (access(getenv("AUDIODEV"), W_OK) == 0); else { if (access(SOUNDDEVICE, W_OK) == 0) return 1; #if defined __NetBSD__ || defined __OpenBSD__ /* old OpenBSD/sparc installation program creates /dev/audio0 but no /dev/audio. Didn't check NetBSD behaviour */ if (access(SOUNDDEVICE "0", W_OK) == 0) return 1; #endif } return 0; } static int Sun_Init(void) { int play_stereo, play_rate; #ifdef SUNOS4 int audiotype; #else audio_device_t audiotype; #endif struct audio_info audioinfo; if (getenv("AUDIODEV")) sndfd = open(getenv("AUDIODEV"), O_WRONLY); else { sndfd = open(SOUNDDEVICE, O_WRONLY); #if defined __NetBSD__ || defined __OpenBSD__ if (sndfd < 0) sndfd = open(SOUNDDEVICE "0", O_WRONLY); #endif } if (sndfd < 0) { _mm_errno = MMERR_OPENING_AUDIO; return 1; } if (!(audiobuffer = (SBYTE *)_mm_malloc(fragsize))) return 1; play_precision = (md_mode & DMODE_16BITS) ? 16 : 8; play_stereo = (md_mode & DMODE_STEREO) ? 2 : 1; play_rate = md_mixfreq; /* attempt to guess the encoding */ play_encoding = -1; if (ioctl(sndfd, AUDIO_GETDEV, &audiotype) < 0) { #ifdef MIKMOD_DEBUG fputs("\rSun driver warning: could not determine audio device type\n", stderr); #endif } else { #if defined SUNOS4 /* SunOS 4 */ switch (audiotype) { case AUDIO_DEV_AMD: /* AMD 79C30 */ /* 8bit mono ulaw 8kHz */ play_rate = md_mixfreq = 8000; md_mode &= ~(DMODE_STEREO | DMODE_16BITS); play_precision = 8; play_stereo = 1; play_encoding = AUDIO_ENCODING_ULAW; break; case AUDIO_DEV_SPEAKERBOX: case AUDIO_DEV_CODEC: /* CS 4231 or DBRI or speaker box */ /* 16bit mono/stereo linear 8kHz - 48kHz */ if (play_precision == 16) play_encoding = AUDIO_ENCODING_LINEAR; /* 8bit mono ulaw 8kHz - 48kHz */ else if (play_precision == 8) { md_mode &= ~(DMODE_STEREO); play_stereo = 1; play_encoding = AUDIO_ENCODING_ULAW; } else { _mm_errno = MMERR_SUN_INIT; return 1; } break; } #elif defined SOLARIS /* Solaris */ if (!strcmp(audiotype.name, "SUNW,am79c30")) { /* AMD 79C30 */ /* 8bit mono ulaw 8kHz */ play_rate = md_mixfreq = 8000; md_mode &= ~(DMODE_STEREO | DMODE_16BITS); play_precision = 8; play_stereo = 1; play_encoding = AUDIO_ENCODING_ULAW; } else if ((!strcmp(audiotype.name, "SUNW,CS4231")) || (!strcmp(audiotype.name, "SUNW,dbri")) || (!strcmp(audiotype.name, "speakerbox"))) { /* CS 4231 or DBRI or speaker box */ /* 16bit mono/stereo linear 8kHz - 48kHz */ if (play_precision == 16) play_encoding = AUDIO_ENCODING_LINEAR; /* 8bit mono ulaw 8kHz - 48kHz */ else if (play_precision == 8) { md_mode &= ~(DMODE_STEREO); play_stereo = 1; play_encoding = AUDIO_ENCODING_ULAW; } else { _mm_errno = MMERR_SUN_INIT; return 1; } } #else /* NetBSD, OpenBSD */ if (!strcmp(audiotype.name, "amd7930")) { /* AMD 79C30 */ /* 8bit mono ulaw 8kHz */ play_rate = md_mixfreq = 8000; md_mode &= ~(DMODE_STEREO | DMODE_16BITS); play_precision = 8; play_stereo = 1; play_encoding = AUDIO_ENCODING_ULAW; } if ((!strcmp(audiotype.name, "Am78C201")) || (!strcmp(audiotype.name, "UltraSound")) ) { /* Gravis UltraSound, AMD Interwave and compatible cards */ /* 16bit stereo linear 44kHz */ play_rate = md_mixfreq = 44100; md_mode |= (DMODE_STEREO | DMODE_16BITS); play_precision = 16; play_stereo = 2; play_encoding = AUDIO_ENCODING_SLINEAR; } #endif } /* Sound devices which were not handled above don't have specific limitations, so try and guess optimal settings */ if (play_encoding == -1) { if ((play_precision == 8) && (play_stereo == 1) && (play_rate <= 8000)) play_encoding = AUDIO_ENCODING_ULAW; else #ifdef SUNOS4 play_encoding = AUDIO_ENCODING_LINEAR; #else play_encoding = (play_precision == 16) ? AUDIO_ENCODING_SLINEAR : AUDIO_ENCODING_ULINEAR; #endif } /* get current audio settings if we want to keep the playback output port */ if (!port) { AUDIO_INITINFO(&audioinfo); if (ioctl(sndfd, AUDIO_GETINFO, &audioinfo) < 0) { _mm_errno = MMERR_SUN_INIT; return 1; } port = audioinfo.play.port; } AUDIO_INITINFO(&audioinfo); audioinfo.play.precision = play_precision; audioinfo.play.channels = play_stereo; audioinfo.play.sample_rate = play_rate; audioinfo.play.encoding = play_encoding; audioinfo.play.port = port; #if defined __NetBSD__ || defined __OpenBSD__ #if defined AUMODE_PLAY_ALL audioinfo.mode = AUMODE_PLAY | AUMODE_PLAY_ALL; #else audioinfo.mode = AUMODE_PLAY; #endif #endif if (ioctl(sndfd, AUDIO_SETINFO, &audioinfo) < 0) { _mm_errno = MMERR_SUN_INIT; return 1; } /* check if our changes were accepted */ if (ioctl(sndfd, AUDIO_GETINFO, &audioinfo) < 0) { _mm_errno = MMERR_SUN_INIT; return 1; } if ((audioinfo.play.precision != play_precision) || (audioinfo.play.channels != play_stereo) || (normalize(audioinfo.play.encoding) != normalize(play_encoding))) { _mm_errno = MMERR_SUN_INIT; return 1; } if (audioinfo.play.sample_rate != play_rate) { /* Accept a shift inferior to 5% of the expected rate */ int delta = audioinfo.play.sample_rate - play_rate; if (delta < 0) delta = -delta; if (delta * 20 > play_rate) { _mm_errno = MMERR_SUN_INIT; return 1; } /* Align to what the card gave us */ md_mixfreq = audioinfo.play.sample_rate; } return VC_Init(); } static void Sun_Exit(void) { VC_Exit(); _mm_free(audiobuffer); if (sndfd >= 0) { close(sndfd); sndfd = -1; } } static void Sun_Update(void) { int done; done = VC_WriteBytes((char *)audiobuffer, fragsize); if (play_encoding == AUDIO_ENCODING_ULAW) unsignedtoulaw(audiobuffer, done); write(sndfd, audiobuffer, done); } static void Sun_Pause(void) { int done; done = VC_SilenceBytes((char *)audiobuffer, fragsize); write(sndfd, audiobuffer, done); } static int Sun_PlayStart(void) { struct audio_info audioinfo; AUDIO_INITINFO(&audioinfo); audioinfo.play.pause = 0; if (ioctl(sndfd, AUDIO_SETINFO, &audioinfo) < 0) return 1; return VC_PlayStart(); } static void Sun_PlayStop(void) { struct audio_info audioinfo; VC_PlayStop(); if (ioctl(sndfd, AUDIO_DRAIN) < 0) return; AUDIO_INITINFO(&audioinfo); audioinfo.play.pause = 1; ioctl(sndfd, AUDIO_SETINFO, &audioinfo); } MIKMODAPI MDRIVER drv_sun = { NULL, #if defined __OpenBSD__ "OpenBSD Audio", "OpenBSD audio driver v1.0", #elif defined __NetBSD__ "NetBSD Audio", "NetBSD audio driver v1.0", #elif defined SUNOS4 "SunOS Audio", "SunOS audio driver v1.4", #elif defined SOLARIS "Solaris Audio", "Solaris audio driver v1.4", #endif 0, 255, "audio", Sun_CommandLine, Sun_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, Sun_Init, Sun_Exit, NULL, VC_SetNumVoices, Sun_PlayStart, Sun_PlayStop, Sun_Update, Sun_Pause, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_sun); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_alsa04.c0000644000000000000000000003043512222472510016032 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_alsa.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for Advanced Linux Sound Architecture (ALSA) ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_ALSA #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_MEMORY_H #include #endif #ifdef MIKMOD_DYNAMIC #include #endif #include #include #include #if defined(SND_LIB_VERSION) && (SND_LIB_VERSION >= 0x500) #undef DRV_ALSA #endif #endif #ifdef DRV_ALSA #ifdef MIKMOD_DYNAMIC /* runtime link with libasound */ static unsigned int(*alsa_cards_mask)(void); static int(*alsa_ctl_close)(snd_ctl_t*); static int(*alsa_ctl_hw_info)(snd_ctl_t*,struct snd_ctl_hw_info*); static int(*alsa_ctl_open)(snd_ctl_t**,int); static int(*alsa_ctl_pcm_info)(snd_ctl_t*,int,snd_pcm_info_t*); #if defined(SND_LIB_VERSION) && (SND_LIB_VERSION >= 0x400) static int(*alsa_ctl_pcm_playback_info)(snd_ctl_t*,int,int,snd_pcm_playback_info_t*); #else static int(*alsa_ctl_pcm_playback_info)(snd_ctl_t*,int,snd_pcm_playback_info_t*); #endif static int(*alsa_pcm_close)(snd_pcm_t*); static int(*alsa_pcm_drain_playback)(snd_pcm_t*); static int(*alsa_pcm_flush_playback)(snd_pcm_t*); static int(*alsa_pcm_open)(snd_pcm_t**,int,int,int); static int(*alsa_pcm_playback_format)(snd_pcm_t*,snd_pcm_format_t*); static int(*alsa_pcm_playback_info)(snd_pcm_t*,snd_pcm_playback_info_t*); static int(*alsa_pcm_playback_params)(snd_pcm_t*,snd_pcm_playback_params_t*); static int(*alsa_pcm_playback_status)(snd_pcm_t*,snd_pcm_playback_status_t*); static int(*alsa_pcm_write)(snd_pcm_t*,const void*,size_t); static void* libasound=NULL; #ifndef HAVE_RTLD_GLOBAL #define RTLD_GLOBAL (0) #endif #else /* compile-time link with libasound */ #define alsa_cards_mask snd_cards_mask #define alsa_ctl_close snd_ctl_close #define alsa_ctl_hw_info snd_ctl_hw_info #define alsa_ctl_open snd_ctl_open #define alsa_ctl_pcm_info snd_ctl_pcm_info #define alsa_ctl_pcm_playback_info snd_ctl_pcm_playback_info #define alsa_pcm_close snd_pcm_close #define alsa_pcm_drain_playback snd_pcm_drain_playback #define alsa_pcm_flush_playback snd_pcm_flush_playback #define alsa_pcm_open snd_pcm_open #define alsa_pcm_playback_format snd_pcm_playback_format #define alsa_pcm_playback_info snd_pcm_playback_info #define alsa_pcm_playback_params snd_pcm_playback_params #define alsa_pcm_playback_status snd_pcm_playback_status #define alsa_pcm_write snd_pcm_write #endif /* MIKMOD_DYNAMIC */ #define DEFAULT_NUMFRAGS 4 static snd_pcm_t *pcm_h = NULL; static int fragmentsize, numfrags = DEFAULT_NUMFRAGS; static SBYTE *audiobuffer = NULL; static int cardmin = 0, cardmax = SND_CARDS; static int device = -1; #ifdef MIKMOD_DYNAMIC static int ALSA_Link(void) { if (libasound) return 0; /* load libasound.so */ libasound = dlopen("libasound.so",RTLD_LAZY|RTLD_GLOBAL); if (!libasound) return 1; /* resolve function references */ if (!(alsa_cards_mask = dlsym(libasound,"snd_cards_mask"))) return 1; if (!(alsa_ctl_close = dlsym(libasound,"snd_ctl_close"))) return 1; if (!(alsa_ctl_hw_info = dlsym(libasound,"snd_ctl_hw_info"))) return 1; if (!(alsa_ctl_open = dlsym(libasound,"snd_ctl_open"))) return 1; if (!(alsa_ctl_pcm_info = dlsym(libasound,"snd_ctl_pcm_info"))) return 1; if (!(alsa_ctl_pcm_playback_info = dlsym(libasound,"snd_ctl_pcm_playback_info"))) return 1; if (!(alsa_pcm_close = dlsym(libasound,"snd_pcm_close"))) return 1; if (!(alsa_pcm_drain_playback = dlsym(libasound,"snd_pcm_drain_playback"))) return 1; if (!(alsa_pcm_flush_playback = dlsym(libasound,"snd_pcm_flush_playback"))) return 1; if (!(alsa_pcm_open = dlsym(libasound,"snd_pcm_open"))) return 1; if (!(alsa_pcm_playback_format = dlsym(libasound,"snd_pcm_playback_format"))) return 1; if (!(alsa_pcm_playback_info = dlsym(libasound,"snd_pcm_playback_info"))) return 1; if (!(alsa_pcm_playback_params = dlsym(libasound,"snd_pcm_playback_params"))) return 1; if (!(alsa_pcm_playback_status = dlsym(libasound,"snd_pcm_playback_status"))) return 1; if (!(alsa_pcm_write = dlsym(libasound,"snd_pcm_write"))) return 1; return 0; } static void ALSA_Unlink(void) { alsa_cards_mask = NULL; alsa_ctl_close = NULL; alsa_ctl_hw_info = NULL; alsa_ctl_open = NULL; alsa_ctl_pcm_info = NULL; alsa_ctl_pcm_playback_info = NULL; alsa_pcm_close = NULL; alsa_pcm_drain_playback = NULL; alsa_pcm_flush_playback = NULL; alsa_pcm_open = NULL; alsa_pcm_playback_format = NULL; alsa_pcm_playback_info = NULL; alsa_pcm_playback_params = NULL; alsa_pcm_playback_status = NULL; alsa_pcm_write = NULL; if (libasound) { dlclose(libasound); libasound = NULL; } } #endif /* MIKMOD_DYNAMIC */ static void ALSA_CommandLine(CHAR *cmdline) { CHAR *ptr; if((ptr = MD_GetAtom("card", cmdline, 0))) { cardmin = atoi(ptr); cardmax = cardmin + 1; free(ptr); } else { cardmin = 0; cardmax = SND_CARDS; } if((ptr = MD_GetAtom("pcm",cmdline,0))) { device = atoi(ptr); free(ptr); } else device = -1; if((ptr = MD_GetAtom("buffer", cmdline, 0))) { numfrags = atoi(ptr); if ((numfrags < 2) || (numfrags > 16)) numfrags = DEFAULT_NUMFRAGS; free(ptr); } else numfrags = DEFAULT_NUMFRAGS; } static BOOL ALSA_IsThere(void) { BOOL retval; #ifdef MIKMOD_DYNAMIC if (ALSA_Link()) return 0; #endif retval = (alsa_cards_mask())? 1 : 0; #ifdef MIKMOD_DYNAMIC ALSA_Unlink(); #endif return retval; } static int ALSA_Init_internal(void) { snd_pcm_format_t pformat; int mask,card; /* adjust user-configurable settings */ if ((getenv("MM_NUMFRAGS")) && (numfrags == DEFAULT_NUMFRAGS)) { numfrags = atoi(getenv("MM_NUMFRAGS")); if ((numfrags < 2) || (numfrags > 16)) numfrags = DEFAULT_NUMFRAGS; } if ((getenv("ALSA_CARD")) && (!cardmin) && (cardmax == SND_CARDS)) { cardmin = atoi(getenv("ALSA_CARD")); cardmax = cardmin+1; if (getenv("ALSA_PCM")) device = atoi(getenv("ALSA_PCM")); } /* setup playback format structure */ memset(&pformat, 0, sizeof(pformat)); #ifdef SND_LITTLE_ENDIAN pformat.format = (md_mode&DMODE_16BITS)? SND_PCM_SFMT_S16_LE: SND_PCM_SFMT_U8; #else pformat.format = (md_mode&DMODE_16BITS)? SND_PCM_SFMT_S16_BE: SND_PCM_SFMT_U8; #endif pformat.channels = (md_mode&DMODE_STEREO)? 2 : 1; pformat.rate = md_mixfreq; /* scan for appropriate sound card */ mask = alsa_cards_mask(); _mm_errno = MMERR_OPENING_AUDIO; for (card = cardmin; card < cardmax; card++) { struct snd_ctl_hw_info info; snd_ctl_t *ctl_h; int dev, devmin, devmax; /* no card here, onto the next */ if (!(mask & (1<= 0x400) if (alsa_ctl_pcm_playback_info(ctl_h, dev, 0, &ctlinfo) < 0) continue; #else if (alsa_ctl_pcm_playback_info(ctl_h, dev, &ctlinfo) < 0) continue; #endif /* If control goes here, we have found a sound device able to play PCM data. Let's open in in playback mode and see if we have compatible playback settings. */ if (alsa_pcm_open(&pcm_h, card, dev, SND_PCM_OPEN_PLAYBACK) < 0) continue; if (alsa_pcm_playback_info(pcm_h, &pinfo) < 0) { alsa_pcm_close(pcm_h); pcm_h = NULL; continue; } /* check we have compatible settings */ if((pinfo.min_rate > pformat.rate) || (pinfo.max_rate < pformat.rate) || (!(pinfo.formats & (1 << pformat.format)))) { alsa_pcm_close(pcm_h); pcm_h = NULL; continue; } fragmentsize = pinfo.buffer_size / numfrags; #ifdef MIKMOD_DEBUG if ((fragmentsize < 512) || (fragmentsize > 16777216L)) fprintf(stderr, "\rweird pinfo.buffer_size:%d\n", pinfo.buffer_size); #endif alsa_pcm_flush_playback(pcm_h); /* set new parameters */ if (alsa_pcm_playback_format(pcm_h, &pformat) < 0) { alsa_pcm_close(pcm_h); pcm_h = NULL; continue; } /* compute a fragmentsize hint each fragment should be shorter than, but close to, half a second of playback */ bps = (pformat.rate * pformat.channels * (md_mode&DMODE_16BITS? 2 : 1)) >> 1; size = fragmentsize; while (size > bps) size >>= 1; #ifdef MIKMOD_DEBUG if (size < 16) { fprintf(stderr,"\rweird hint result:%d from %d, bps=%d\n", size, fragmentsize, bps); size = 16; } #endif memset(&pparams, 0, sizeof(pparams)); pparams.fragment_size = size; pparams.fragments_max = -1; /* choose the best */ pparams.fragments_room = -1; if (alsa_pcm_playback_params(pcm_h, &pparams) < 0) { alsa_pcm_close(pcm_h); pcm_h = NULL; continue; } if (!(audiobuffer = (SBYTE*)_mm_malloc(fragmentsize))) { alsa_ctl_close(ctl_h); return 1; } /* sound device is ready to work */ if (VC_Init()) { alsa_ctl_close(ctl_h); return 1; } else return 0; } alsa_ctl_close(ctl_h); } return 1; } static int ALSA_Init(void) { #ifdef MIKMOD_DYNAMIC if (ALSA_Link()) { _mm_errno=MMERR_DYNAMIC_LINKING; return 1; } #endif return ALSA_Init_internal(); } static void ALSA_Exit_internal(void) { VC_Exit(); if (pcm_h) { alsa_pcm_drain_playback(pcm_h); alsa_pcm_close(pcm_h); pcm_h=NULL; } _mm_free(audiobuffer); } static void ALSA_Exit(void) { ALSA_Exit_internal(); #ifdef MIKMOD_DYNAMIC ALSA_Unlink(); #endif } static void ALSA_Update(void) { snd_pcm_playback_status_t status; int total, count; if (alsa_pcm_playback_status(pcm_h, &status) >= 0) { /* Update md_mixfreq if necessary */ if (md_mixfreq != status.rate) md_mixfreq = status.rate; /* Using status.count would cause clicks, as this is always less than the freespace in the buffer - so compute how many bytes we can afford */ total = status.fragments * status.fragment_size - status.queue; if (total < fragmentsize) total = fragmentsize; } else total = fragmentsize; /* Don't send data if ALSA is too busy */ while (total) { count = fragmentsize > total ? total : fragmentsize; total -= count; alsa_pcm_write(pcm_h, audiobuffer, VC_WriteBytes(audiobuffer, count)); } } static void ALSA_PlayStop(void) { VC_PlayStop(); alsa_pcm_flush_playback(pcm_h); } static int ALSA_Reset(void) { ALSA_Exit_internal(); return ALSA_Init_internal(); } MIKMODAPI MDRIVER drv_alsa = { NULL, "ALSA", "Advanced Linux Sound Architecture (ALSA) driver v0.4", 0,255, "alsa", ALSA_CommandLine, ALSA_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, ALSA_Init, ALSA_Exit, ALSA_Reset, VC_SetNumVoices, VC_PlayStart, ALSA_PlayStop, ALSA_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_alsa); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_wav.c0000644000000000000000000001067412260322070015543 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_wav.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output to a file called MUSIC.WAV ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #ifdef DRV_WAV #ifdef HAVE_UNISTD_H #include #endif #include #ifdef SUNOS extern int fclose(FILE *); #endif #define BUFFERSIZE 32768 #define FILENAME "music.wav" static MWRITER *wavout=NULL; static FILE *wavfile=NULL; static SBYTE *audiobuffer=NULL; static ULONG dumpsize; static CHAR *filename=NULL; static void putheader(void) { ULONG rflen = 36; rflen += dumpsize; _mm_fseek(wavout,0,SEEK_SET); _mm_write_string("RIFF",wavout); _mm_write_I_ULONG(rflen,wavout); _mm_write_string("WAVEfmt ",wavout); _mm_write_I_ULONG(16,wavout); /* length of this RIFF block crap */ _mm_write_I_UWORD(1, wavout); /* WAVE_FORMAT_PCM :1 */ _mm_write_I_UWORD((md_mode&DMODE_STEREO)?2:1,wavout); _mm_write_I_ULONG(md_mixfreq,wavout); _mm_write_I_ULONG(md_mixfreq * ((md_mode&DMODE_STEREO)?2:1) * ((md_mode&DMODE_16BITS)?2:1), wavout); /* block alignment (8/16 bit) */ _mm_write_I_UWORD(((md_mode&DMODE_16BITS)?2:1)* ((md_mode&DMODE_STEREO)?2:1),wavout); _mm_write_I_UWORD((md_mode&DMODE_16BITS)?16:8,wavout); _mm_write_string("data",wavout); _mm_write_I_ULONG(dumpsize,wavout); } static void WAV_CommandLine(CHAR *cmdline) { CHAR *ptr=MD_GetAtom("file",cmdline,0); if(ptr) { _mm_free(filename); filename=ptr; } } static BOOL WAV_IsThere(void) { return 1; } static int WAV_Init(void) { #if (MIKMOD_UNIX) if (!MD_Access(filename?filename:FILENAME)) { _mm_errno=MMERR_OPENING_FILE; return 1; } #endif if(!(wavfile=fopen(filename?filename:FILENAME,"wb"))) { _mm_errno=MMERR_OPENING_FILE; return 1; } if(!(wavout=_mm_new_file_writer (wavfile))) { fclose(wavfile);unlink(filename?filename:FILENAME); wavfile=NULL; return 1; } if(!(audiobuffer=(SBYTE*)_mm_malloc(BUFFERSIZE))) { _mm_delete_file_writer(wavout); fclose(wavfile);unlink(filename?filename:FILENAME); wavfile=NULL;wavout=NULL; return 1; } md_mode|=DMODE_SOFT_MUSIC|DMODE_SOFT_SNDFX; if (VC_Init()) { _mm_delete_file_writer(wavout); fclose(wavfile);unlink(filename?filename:FILENAME); wavfile=NULL;wavout=NULL; return 1; } dumpsize=0; putheader(); return 0; } static void WAV_Exit(void) { VC_Exit(); /* write in the actual sizes now */ if(wavout) { putheader(); _mm_delete_file_writer(wavout); fclose(wavfile); wavfile=NULL;wavout=NULL; } if(audiobuffer) { free(audiobuffer); audiobuffer=NULL; } } static void WAV_Update(void) { ULONG done; done=VC_WriteBytes(audiobuffer,BUFFERSIZE); if (md_mode & DMODE_16BITS) { /* Fix for 16bit samples on big endian systems: Just swap * bytes via "_mm_write_I_UWORDS ()" if we have 16 bit output. */ _mm_write_I_UWORDS((UWORD *) audiobuffer,done>>1,wavout); } else { _mm_write_UBYTES(audiobuffer,done,wavout); } dumpsize+=done; } MIKMODAPI MDRIVER drv_wav={ NULL, "Disk writer (wav)", "Wav disk writer (music.wav) v1.2", 0,255, "wav", WAV_CommandLine, WAV_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, WAV_Init, WAV_Exit, NULL, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, WAV_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else MISSING(drv_wav); #endif /* ex:set ts=4: */ libmikmod-3.1.16/drivers/drv_raw.c0000644000000000000000000000722412260322070015534 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: drv_raw.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Driver for output to a file called MUSIC.RAW ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef DRV_RAW #ifdef HAVE_UNISTD_H #include #endif #ifndef macintosh #include #include #endif #ifdef HAVE_FCNTL_H #include #endif #include "mikmod_internals.h" #define BUFFERSIZE 32768 #define FILENAME "music.raw" #ifndef O_BINARY #define O_BINARY 0 #endif #if defined(_WIN32) && !defined(__MWERKS__) #define open _open #endif static int rawout=-1; static SBYTE *audiobuffer=NULL; static CHAR *filename=NULL; static void RAW_CommandLine(CHAR *cmdline) { CHAR *ptr=MD_GetAtom("file",cmdline,0); if(ptr) { _mm_free(filename); filename=ptr; } } static BOOL RAW_IsThere(void) { return 1; } static int RAW_Init(void) { #if (MIKMOD_UNIX) if(!MD_Access(filename?filename:FILENAME)) { _mm_errno=MMERR_OPENING_FILE; return 1; } #endif #if !defined(macintosh) && !defined(__MWERKS__) rawout=open(filename?filename:FILENAME,O_RDWR|O_TRUNC|O_CREAT|O_BINARY,S_IREAD|S_IWRITE); #else rawout=open(filename?filename:FILENAME,O_RDWR|O_TRUNC|O_CREAT|O_BINARY); #endif if(rawout<0) { _mm_errno=MMERR_OPENING_FILE; return 1; } md_mode|=DMODE_SOFT_MUSIC|DMODE_SOFT_SNDFX; if (!(audiobuffer=(SBYTE*)_mm_malloc(BUFFERSIZE))) { close(rawout); unlink(filename?filename:FILENAME); rawout=-1; return 1; } if ((VC_Init())) { close(rawout); unlink(filename?filename:FILENAME); rawout=-1; return 1; } return 0; } static void RAW_Exit(void) { VC_Exit(); if (rawout!=-1) { close(rawout); rawout=-1; } _mm_free(audiobuffer); } static void RAW_Update(void) { write(rawout,audiobuffer,VC_WriteBytes(audiobuffer,BUFFERSIZE)); } static int RAW_Reset(void) { close(rawout); #if !defined(macintosh) && !defined(__MWERKS__) rawout=open(filename?filename:FILENAME,O_RDWR|O_TRUNC|O_CREAT|O_BINARY,S_IREAD|S_IWRITE); #else rawout=open(filename?filename:FILENAME,O_RDWR|O_TRUNC|O_CREAT|O_BINARY); #endif if(rawout<0) { _mm_errno=MMERR_OPENING_FILE; return 1; } return 0; } MIKMODAPI MDRIVER drv_raw={ NULL, "Disk writer (raw data)", "Raw disk writer (music.raw) v1.1", 0,255, "raw", RAW_CommandLine, RAW_IsThere, VC_SampleLoad, VC_SampleUnload, VC_SampleSpace, VC_SampleLength, RAW_Init, RAW_Exit, RAW_Reset, VC_SetNumVoices, VC_PlayStart, VC_PlayStop, RAW_Update, NULL, VC_VoiceSetVolume, VC_VoiceGetVolume, VC_VoiceSetFrequency, VC_VoiceGetFrequency, VC_VoiceSetPanning, VC_VoiceGetPanning, VC_VoicePlay, VC_VoiceStop, VC_VoiceStopped, VC_VoiceGetPosition, VC_VoiceRealVolume }; #else #include "mikmod_internals.h" MISSING(drv_raw); #endif /* ex:set ts=4: */ libmikmod-3.1.16/posix/0000755000000000000000000000000012262343244013413 5ustar rootrootlibmikmod-3.1.16/posix/Makefile.in0000644000000000000000000002526212260336530015465 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = posix DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = memcmp.c strcasecmp.c strdup.c strstr.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign posix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign posix/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/posix/strdup.c0000644000000000000000000000043312222471454015101 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include char* strdup(const char *__s) { char *charptr; if (!__s) return NULL; charptr=(char *)malloc(sizeof(char) * (strlen(__s) + 1)); if (charptr) strcpy(charptr, __s); return charptr; } libmikmod-3.1.16/posix/strcasecmp.c0000644000000000000000000000050510003535130015707 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include int strcasecmp(const char *__s1, const char *__s2) { register unsigned char c1, c2; while (*__s1 && *__s2) { c1 = tolower(*__s1); c2 = tolower(*__s2); if (c1 != c2) return (int)(c1 - c2); __s1++; __s2++; } return (int)(*__s1 - *__s2); } libmikmod-3.1.16/posix/memcmp.c0000644000000000000000000000051010003535130015015 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include int memcmp(const void *__s1, const void *__s2, size_t __n) { const char *scan1, *scan2; size_t n; scan1 = __s1; scan2 = __s2; for (n = __n; n > 0; n--) if (*scan1 == *scan2) { scan1++; scan2++; } else return *scan1 - *scan2; return 0; } libmikmod-3.1.16/posix/Makefile.am0000644000000000000000000000006510003535130015434 0ustar rootrootEXTRA_DIST = memcmp.c strcasecmp.c strdup.c strstr.c libmikmod-3.1.16/posix/strstr.c0000644000000000000000000000053010003535130015102 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include char *strstr(const char *haystack, const char *needle) { const char *scan; size_t len; char firstc; firstc = *needle; len = strlen(needle); for (scan = haystack; *scan != firstc || strncmp(scan, needle, len); ) if (!*scan++) return NULL; return (char *)scan; } libmikmod-3.1.16/libmikmod.spec0000644000000000000000000000435012260337651015101 0ustar rootroot%define version 3.1.16 %define release 1 Summary: sound library for module files Name: libmikmod Version: %{version} Release: %{release} License: LGPL Group: System Environment/Libraries URL: http://mikmod.sourceforge.net/ #Source: http://mikmod.sourceforge.net/files/%{name}-%{version}.tar.gz Source: http://download.sourceforge.net/mikmod/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root %description A portable sound library for Unix and other systems, capable of playing samples as well as module files, on a wide range of sound devices. %package devel Summary: Libraries and include files to develop libmikmod applications Group: Development/Libraries Requires: %{name} = %{version} %description devel Install the libmikmod-devel package if you want to develop applications that will use the libmikmod library. %prep %setup -q -n %{name}-%{version} %build %configure make %install [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT %makeinstall rm -f $RPM_BUILD_ROOT/%{_infodir}/dir %clean [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %post devel if [ "$1" = "1" ]; then # first install if [ -x /sbin/install-info ]; then for infofile in %{_infodir}/mikmod.info*; do /sbin/install-info $infofile %{_infodir}/dir done fi fi %preun devel if [ "$1" = "0" ]; then # last uninstall if [ -x /sbin/install-info ]; then for infofile in %{_infodir}/mikmod.info*; do /sbin/install-info --delete $infofile %{_infodir}/dir done fi fi %ifos darwin %define __defattr %defattr(-,root,wheel) %define __soext dylib %else %define __defattr %defattr(-,root,root) %define __soext so %endif %files %{__defattr} %doc AUTHORS COPYING.LESSER COPYING.LIB INSTALL NEWS README TODO %ifnos darwin %{_libdir}/libmikmod.%{__soext}.* %else %{_libdir}/libmikmod.*.%{__soext} %endif %files devel %{__defattr} %doc docs/mikmod.html %{_bindir}/libmikmod-config %{_mandir}/man?/* %{_includedir}/mikmod.h %{_libdir}/libmikmod.a %{_libdir}/libmikmod.la %{_libdir}/libmikmod.%{__soext} %{_libdir}/pkgconfig/libmikmod.pc %{_infodir}/mikmod.info* %{_datadir}/aclocal/* libmikmod-3.1.16/docs/0000755000000000000000000000000012262343244013201 5ustar rootrootlibmikmod-3.1.16/docs/mikmod.texi0000644000000000000000000033616712262064446015400 0ustar rootroot\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename mikmod.info @settitle MikMod sound library @c %**end of header @ignore MikMod Sound Library Documentation @end ignore @c comment this during modifications @finalout @c @iftex @c @afourpaper @c @end iftex @syncodeindex tp vr @set documentation-version 1.3 @set documentation-date December 2013 @set library-version 3.1.16 @set authorname Miodrag Vallat @set authoraddress miod@@mikmod.org @c ========================================================== Copyright (info) @ifinfo Copyright @copyright{} 1998-2014 Miodrag Vallat and others --- see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @end ifinfo @c ========================================================== Title page @titlepage @title MikMod Sound Library @subtitle Documentation edition @value{documentation-version} @subtitle @value{documentation-date} @author @value{authorname} @author (@code{@value{authoraddress}}) @page @vskip 0pt plus 1filll @c ========================================================== Copyright (TeX) Copyright @copyright{} 1998-2014 Miodrag Vallat and others --- see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @end titlepage @c ========================================================== File information @ifnottex @dircategory Programming @direntry * MikMod: (mikmod). MikMod Sound Library. @end direntry @c ========================================================== Top node @node Top, Introduction, (dir), (dir) @top MikMod Sound Library @w{This manual documents the MikMod Sound Library, version @value{library-version}.} @menu * Introduction:: What is MikMod ? * Tutorial:: Your first steps with MikMod. * Using the Library:: A thematic presentation of the library. * Library Reference:: Detailed description of the functions and variables. * Index:: @end menu @end ifnottex @c ========================================================== Introduction @node Introduction, Tutorial, Top, Top @chapter Introduction The MikMod sound library is an excellent way for a programmer to add music and sound effects to an application. It is a powerful and flexible library, with a simple and easy-to-learn API. Besides, the library is very portable and runs under a lot of Unices, as well as under OS/2, MacOS and Windows. Third party individuals also maintain ports on other systems, including MS-DOS, and BeOS. MikMod is able to play a wide range of module formats, as well as digital sound files. It can take advantage of particular features of your system, such as sound redirection over the network. And due to its modular nature, the library can be extended to support more sound or module formats, as well as new hardware or other sound output capabilities, as they appear. @c ========================================================== Tutorial @node Tutorial, Using the Library, Introduction, Top @chapter Tutorial This chapter will describe how to quickly incorporate MikMod's power into your programs. It doesn't cover everything, but that's a start and I hope it will help you understand the library philosophy. If you have a real tutorial to put here, you're welcome ! Please send it to me@enddots{} @menu * MikMod Concepts:: A few things you'll need to know. * A Skeleton Program:: The shortest MikMod program. * Playing Modules:: How to create a simple module player. * Playing Sound Effects:: How to play simple sound effects. * More Sound Effects:: How to play more complex sound effects. @end menu @c ========================================================== Concepts @node MikMod Concepts, A Skeleton Program, Tutorial, Tutorial @section MikMod Concepts MikMod's sound output is composed of several sound @emph{voices} which are mixed, either in software or in hardware, depending of your hardware configuration. Simple sounds, like sound effects, use only one voice, whereas sound modules, which are complex arrangements of sound effects, use several voices. MikMod's functions operate either globally, or at the voice level. Differences in the handling of sound effects and modules are kept minimal, at least for the programmer. The sound playback is done by a @emph{sound driver}. MikMod provides several sound drivers: different hardware drivers, and some software drivers to redirect sound in a file, or over the network. You can even add your own driver, register it to make it known by the library, and select it (this is exactly what the module plugin of xmms does). @c ========================================================== Skeleton @node A Skeleton Program, Playing Modules, MikMod Concepts, Tutorial @section A Skeleton Program @iftex @findex MikMod_Exit @findex MikMod_Init @findex MikMod_RegisterAllDrivers @end iftex To use MikMod in your program, there are a few steps required: @itemize @bullet @item Include @file{mikmod.h} in your program. @item Register the MikMod drivers you need. @item Initialize the library with MikMod_Init() before using any other MikMod function. @item Give up resources with MikMod_Exit() at the end of your program, or before when MikMod is not needed anymore. @item Link your application with the MikMod sound library. @end itemize Here's a program which meets all those conditions: @example /* MikMod Sound Library example program: a skeleton */ #include main() @{ /* register all the drivers */ MikMod_RegisterAllDrivers(); /* initialize the library */ MikMod_Init(""); /* we could play some sound here... */ /* give up */ MikMod_Exit(); @} @end example This program would be compiled with the following command line: @code{cc -o example example.c `libmikmod-config --cflags` `libmikmod-config --libs`} Although this programs produces no useful result, many things happen when you run it. The call to @code{MikMod_RegisterAllDrivers} registers all the drivers embedded in the MikMod library. Then, @code{MikMod_Init} chooses the more adequate driver and initializes it. The program is now ready to produce sound. When sound is not needed any more, @code{MikMod_Exit} is used to relinquish memory and let other programs have access to the sound hardware. @c ========================================================== Modules @node Playing Modules, Playing Sound Effects, A Skeleton Program, Tutorial @section Playing Modules @iftex @findex MikMod_Exit @findex MikMod_Init @findex MikMod_RegisterAllDrivers @findex MikMod_RegisterAllLoaders @findex MikMod_Update @vindex MikMod_errno @findex MikMod_strerror @findex Player_Active @findex Player_Free @findex Player_Load @findex Player_Start @findex Player_Stop @end iftex Our program is not really useful if it doesn't produce sound. Let's suppose you've got this good old module, ``Beyond music'', in the file @file{beyond music.mod}. How about playing it ? To do this, we'll use the following code: @example /* MikMod Sound Library example program: a simple module player */ #include #include main() @{ MODULE *module; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* register all the module loaders */ MikMod_RegisterAllLoaders(); /* initialize the library */ md_mode |= DMODE_SOFT_MUSIC; if (MikMod_Init("")) @{ fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; @} /* load module */ module = Player_Load("beyond music.mod", 64, 0); if (module) @{ /* start module */ Player_Start(module); while (Player_Active()) @{ /* we're playing */ usleep(10000); MikMod_Update(); @} Player_Stop(); Player_Free(module); @} else fprintf(stderr, "Could not load module, reason: %s\n", MikMod_strerror(MikMod_errno)); /* give up */ MikMod_Exit(); @} @end example What's new here ? First, we've not only registered MikMod's device driver, but also the module loaders. MikMod comes with a large choice of module loaders, each one for a different module type. Since @emph{every} loader is called to determine the type of the module when we try to load them, you may want to register only a few of them to save time. In our case, we don't matter, so we happily register every module loader. Then, there's an extra line before calling @code{MikMod_Init}. We change the value of MikMod's variable @code{md_mode} to tell the library that we want the module to be processed by the software. If you're the happy owner of a GUS-type card, you could use the specific hardware driver for this card, but in this case you should not set the @code{DMODE_SOFT_MUSIC} flag. We'll ensure that @code{MikMod_Init} was successful. Note that, in case of error, MikMod provides the variable @code{MikMod_errno}, an equivalent of the C library @code{errno} for MikMod errors, and the function @code{MikMod_strerror}, an equivalent to @code{strerror}. Now onto serious business ! The module is loaded with the @code{Player_Load} function, which takes the name of the module file, and the number of voices afforded to the module. In this case, the module has only 4 channels, so 4 voices, but complex Impulse Tracker modules can have a lot of voices (as they can have as many as 256 virtual channels with so-called ``new note actions''). Since empty voices don't cost time to be processed, it is safe to use a big value, such as 64 or 128. The third parameter is the ``curiosity'' of the loader: if nonzero, the loader will search for hidden parts in the module. However, only a few module formats can embed hidden or non played parts, so we'll use 0 here. Now that the module is ready to play, let's play it. We inform the player that the current module is @code{module} with @code{Player_Start}. Playback starts, but we have to update it on a regular basis. So there's a loop on the result of the @code{Player_Active} function, which will tell us if the module has finished. To update the sound, we simply call @code{MikMod_Update}. After the module has finished, we tell the player its job is done with @code{Player_Stop}, and we free the module with @code{Player_Free}. @c ========================================================== Sound effects @node Playing Sound Effects, More Sound Effects, Playing Modules, Tutorial @section Playing Sound Effects @iftex @findex MikMod_DisableOutput @findex MikMod_EnableOutput @findex MikMod_Exit @findex MikMod_Init @findex MikMod_RegisterAllDrivers @findex MikMod_SetNumVoices @findex MikMod_Update @findex Voice_Stopped @findex Sample_Free @findex Sample_Load @findex Sample_Play @end iftex MikMod is not limited to playing modules, it can also play sound effects, that is, module samples. It's a bit more complex than playing a module, because the module player does a lot of things for us, but here we'll get more control over what is actually played by the program. Let's look at an example: @example /* MikMod Sound Library example program: sound effects */ #include #include main() @{ int i; /* sound effects */ SAMPLE *sfx1, *sfx2; /* voices */ int v1, v2; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* initialize the library */ md_mode |= DMODE_SOFT_SNDFX; if (MikMod_Init("")) @{ fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; @} /* load samples */ sfx1 = Sample_Load("first.wav"); if (!sfx1) @{ MikMod_Exit(); fprintf(stderr, "Could not load the first sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; @} sfx2 = Sample_Load("second.wav"); if (!sfx2) @{ Sample_Free(sfx1); MikMod_Exit(); fprintf(stderr, "Could not load the second sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; @} /* reserve 2 voices for sound effects */ MikMod_SetNumVoices(-1, 2); /* get ready to play */ MikMod_EnableOutput(); /* play first sample */ v1 = Sample_Play(sfx1, 0, 0); for(i = 0; i < 5; i++) @{ MikMod_Update(); usleep(100000); @} /* half a second later, play second sample */ v2 = Sample_Play(sfx2, 0, 0); do @{ MikMod_Update(); usleep(100000); @} while (!Voice_Stopped(v2)); MikMod_DisableOutput(); Sample_Free(sfx2); Sample_Free(sfx1); MikMod_Exit(); @} @end example As in the previous example, we begin by registering the sound drivers and initializing the library. We also ask for software mixing by modifying the variable @code{md_mode}. It's time to load our files, with the @code{Sample_Load} function. Don't forget to test the return value --- it looks ugly here on such a small example, but it's a good practice@enddots{} Since we want to play two samples, we have to use at least two voices for this, so we reserve them with a @code{MikMod_SetNumVoices} call. The first parameter sets the number of module voices, and the second parameter the number of sound effect voices. We don't want to set the number of module voices here (it's part of the module player's duty), so we use the value @code{-1} to keep the current value, and we reserve two sound effect voices. Now we're ready to play, so we call @code{MikMod_EnableOutput} to make the driver ready. Sound effects are played by the @code{Sample_Play} function. You just have to specify which sample you want to play, the offset from which you want to start, and the playback flags. More on this later. The function returns the number of the voice associated to the sample. We play the first sample for half a second, then we start to play the second sample. Since we've reserved two channels, both samples play simultaneously. We use the @code{Voice_Stopped} function to stop the playback: it returns the current status of the voice argument, which is zero when the sample plays and nonzero when it has finished. So the @code{do} loop will stop exactly when the second sample is finished, regardless of the length of the first sample. To finish, we get rid of the samples with @code{Sample_Free}. @c ========================================================== More effects @node More Sound Effects, , Playing Sound Effects, Tutorial @section More Sound Effects @iftex @findex MikMod_Update @findex Sample_Play @findex Voice_SetFrequency @findex Voice_SetPanning @findex Voice_SetVolume @findex Voice_Stop @findex Voice_Stopped @end iftex Sound effects have some attributes that can be affected to control the playback. These are speed, panning, and volume. Given a voice number, you can affect these attributes with the @code{Voice_SetFrequency}, @code{Voice_SetPanning} and @code{Voice_SetVolume} functions. In the previous example, we'll replace the actual sound code, located between the calls to @code{MikMod_EnableOutput} and @code{MikMod_DisableOutput}, with the following code: @example Sample_Play(sfx1, 0, 0); for(i = 0; i < 5; i++) @{ MikMod_Update(); usleep(100000); @} v2 = Sample_Play(sfx2, 0, SFX_CRITICAL); i = 0; do @{ MikMod_Update(); usleep(100000); v1 = Sample_Play(sfx1, 0, 0); Voice_SetVolume(v1, 160); Voice_SetFrequency(v1, (sfx1->speed * (100 + i)) / 100); Voice_SetPanning(v2, (i++ & 1) ? PAN_LEFT : PAN_RIGHT); @} while (!Voice_Stopped(v2)); @end example The first thing you'll notice, is the @code{SFX_CRITICAL} flag used to play the second sample. Since the @code{do} loop will add another sample every 100 @dmn{milliseconds}, and we reserved only two voices, the oldest voice will be cut each time this is necessary. Doing this would cut the second sample in the second iteration of the loop. However, since we flagged this sound as ``critical'', it won't be cut until it is finished or we stop it with a @code{Voice_Stop} call. So the second sample will play fine, whereas the first sample will be stopped every loop iteration. Then, we choose to play the first sample a bit lower, with @code{Voice_SetVolume}. Volume voices range from 0 (silence) to 256. In this case we play the sample at 160. To make the sound look weird, we also change its frequency with @code{Voice_SetFrequency}. The computation in the example code makes the frequency more and more high (starting from the sample frequency and then increasing from 1% each iteration). And to demonstrate the @code{Voice_SetPanning} function, we change the panning of the second sample at each iteration from the left to the right. The argument can be one of the standard panning @code{PAN_LEFT}, @code{PAN_RIGHT}, @code{PAN_CENTER} and @code{PAN_SURROUND}@footnote{@code{PAN_SURROUND} will be mapped to @code{PAN_CENTER} if the library is initialized without surround sound, that is, if the variable @code{md_mode} doesn't have the bit @code{DMODE_SURROUND} set.}, or a numeric value between 0 (@code{PAN_LEFT}) and 255 (@code{PAN_RIGHT}). @c ========================================================== Using @node Using the Library, Library Reference, Tutorial, Top @chapter Using the Library This chapter describes the various parts of the library and their uses. @menu * Library Version:: * Type Definitions:: * Error Handling:: * Library Initialization:: * Samples and Voice Control:: * Modules and Player Control:: * Loading Data from Memory:: @end menu @c ========================================================== Version @node Library Version, Type Definitions, Using the Library, Using the Library @section Library Version @iftex @findex MikMod_GetVersion @end iftex If your program is dynamically linked with the MikMod library, you should check which version of the library you're working with. To do this, the library defines a few constants and a function to help you determine if the current library is adequate for your needs or if it has to be upgraded. When your program includes @code{mikmod.h}, the following constants are defined: @itemize @bullet @item @code{LIBMIKMOD_VERSION_MAJOR} is equal to the major version number of the library. @item @code{LIBMIKMOD_VERSION_MINOR} is equal to the minor version number of the library. @item @code{LIBMIKMOD_REVISION} is equal to the revision number of the library. @item @code{LIBMIKMOD_VERSION} is the sum of @code{LIBMIKMOD_VERSION_MAJOR} shifted 16 times, @code{LIBMIKMOD_VERSION_MINOR} shifted 8 times, and @code{LIBMIKMOD_REVISION}. @end itemize So your program can tell with which version of the library it has been compiled this way: @example printf("Compiled with MikMod Sound Library version %ld.%ld.%ld\n", LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION); @end example The library defines the function @code{MikMod_GetVersion} which returns the value of LIBMIKMOD_VERSION for the library. If this value is greater than or equal to the value of LIBMIKMOD_VERSION for your program, your program will work; otherwise, you'll have to inform the user that he has to upgrade the library: @example @{ long engineversion = MikMod_GetVersion(); if (engineversion < LIBMIKMOD_VERSION) @{ printf("MikMod library version (%ld.%ld.%ld) is too old.\n", (engineversion >> 16) & 255, (engineversion >> 8) & 255, (engineversion) & 255); printf("This programs requires at least version %ld.%ld.%ld\n", LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION); puts("Please upgrade your MikMod library."); exit(1); @} @} @end example @c ========================================================== Types @node Type Definitions, Error Handling, Library Version, Using the Library @section Type Definitions @iftex @tindex BOOL @tindex CHAR @tindex SBYTE @tindex SLONG @tindex SWORD @tindex UBYTE @tindex ULONG @tindex UWORD @end iftex MikMod defines several data types to deal with modules and sample data. These types have the same memory size on every platform MikMod has been ported to. These types are: @itemize @bullet @item @code{CHAR} is a printable character. For now it is the same as the @code{char} type, but in the future it may be wide char (Unicode) on some platforms. @item @code{SBYTE} is a signed 8 bit number (can range from -128 to 127). @item @code{UBYTE} is an unsigned 8 bit number (can range from 0 to 255). @item @code{SWORD} is a signed 16 bit number (can range from -32768 to 32767). @item @code{UWORD} is an unsigned 16 bit number (can range from 0 to 65535). @item @code{SLONG} is a signed 32 bit number (can range from -2.147.483.648 to 2.147.483.647). @item @code{ULONG} is an unsigned 32 bit number (can range from 0 to 4.294.967.296). @item @code{BOOL} is a boolean value. A value of 0 means false, any other value means true. @end itemize @c ========================================================== Errors @node Error Handling, Library Initialization, Type Definitions, Using the Library @section Error Handling @iftex @findex MikMod_RegisterErrorHandler @vindex MikMod_critical @vindex MikMod_errno @vindex MikMod_strerror @end iftex Although MikMod does its best to do its work, there are times where it can't. For example, if you're trying to play a corrupted file, well, it can't. A lot of MikMod functions return pointers or @code{BOOL} values. If the pointer is @code{NULL} or the @code{BOOL} is 0 (false), an error has occurred. MikMod errors are returned in the variable @code{MikMod_errno}. Each possible error has a symbolic error code, beginning with @code{MMERR_}. For example, if MikMod can't open a file, @code{MikMod_errno} will receive the value @code{MMERR_OPENING_FILE}. You can get an appropriate error message to display from the function @code{MikMod_strerror}. There is a second error variable named @code{MikMod_critical}. As its name suggests, it is only set if the error lets the library in an unstable state. This variable can only be set by the functions @code{MikMod_Init}, @code{MikMod_SetNumVoices} and @code{MikMod_EnableOutput}. If one of these functions return an error and @code{MikMod_critical} is set, the library is left in the uninitialized state (i.e. it was not initialized, or @code{MikMod_Exit} was called). If you prefer, you can use a callback function to get notified of errors. This function must be prototyped as @code{void MyFunction(void)}. Then, call @code{MikMod_RegisterHandler} with your function as argument to have it notified when an error occurs. There can only be one callback function registered, but @code{MikMod_RegisterHandler} will return you the previous handler, so you can chain handlers if you want to. @c ========================================================== Initialization @node Library Initialization, Samples and Voice Control, Error Handling, Using the Library @section Library Initialization and Core Functions @iftex @findex MikMod_Active @findex MikMod_DisableOutput @findex MikMod_EnableOutput @findex MikMod_Exit @findex MikMod_InfoDriver @findex MikMod_Init @findex MikMod_InitThreads @findex MikMod_Lock @findex MikMod_RegisterAllDrivers @findex MikMod_RegisterDriver @findex MikMod_Reset @findex MikMod_SetNumVoices @findex MikMod_Unlock @findex MikMod_Update @vindex md_device @vindex md_mixfreq @vindex md_mode @end iftex To initialize the library, you must register some sound drivers first. You can either register all the drivers embedded in the library for your platform with @code{MikMod_RegisterAllDrivers}, or register only some of them with @code{MikMod_RegisterDriver}. If you choose to register the drivers manually, you must be careful in their order, since @code{MikMod_Init} will try them in the order you registered them. The @code{MikMod_RegisterAllDrivers} function registers the network drivers first (for playing sound over the network), then the hardware drivers, then the disk writers, and in last resort, the nosound driver. Registering the nosound driver first would not be a very good idea@enddots{} You can get some printable information regarding the registered drivers with @code{MikMod_InfoDriver}; don't forget to call @code{free} on the returned string when you don't need it anymore. After you've registered your drivers, you can initialize the sound playback with @code{MikMod_Init}, passing specific information to the driver if necessary. If you set the variable @code{md_device} to zero, which is its default value, the driver will be autodetected, that is, the first driver in the list that is available on the system will be used; otherwise only the driver whose order in the list of the registered drivers is equal to @code{md_device} will be tried. If your playback settings, in the variables @code{md_mixfreq} and @code{md_mode}, are not supported by the device, @code{MikMod_Init} will fail. You can then choose the number of voices you need with @code{MikMod_SetNumVoices}, and activate the playback with @code{MikMod_EnableOutput}. Don't forget to call @code{MikMod_Update} as often as possible to process the sound mixing. If necessary, fork a dedicated process to do this, or if the library is thread-safe on your system, use a dedicated thread. If you want to change playback settings, most of them can't be changed on the fly. You'll need to stop the playback and reinitialize the driver. Use @code{MikMod_Active} to check if there is still sound playing; in this case, call @code{MikMod_DisableOutput} to end playback. Then, change your settings and call @code{MikMod_Reset}. You're now ready to select your number of voices and restart playback. When your program ends, don't forget to stop playback and call @code{MikMod_Exit} to leave the sound hardware in a coherent state. On systems that have pthreads, libmikmod is thread-safe@footnote{Unless you explicitely choose to create a non thread-safe version of libmikmod at compile-time.}. You can check this in your programs with the @code{MikMod_InitThreads} function. If this function returns 1, the library is thread-safe. The main benefit of thread-safety is that @code{MikMod_Update} can be called from a separate thread, which often makes application design easier. However, several libmikmod global variables are accessible from all your threads, so when more than one thread need to access libmikmod variables, you'll have to protect these access with the @code{MikMod_Lock} and @code{MikMod_Unlock} functions. If libmikmod is not thread-safe, these functions are no-ops. @c ========================================================== Samples @node Samples and Voice Control, Modules and Player Control, Library Initialization, Using the Library @section Samples and Voice Control @iftex @findex Voice_GetFrequency @findex Voice_GetPanning @findex Voice_GetPosition @findex Voice_GetVolume @findex Voice_Play @findex Voice_Stop @findex Voice_Stopped @findex Voice_SetFrequency @findex Voice_SetPanning @findex Voice_SetVolume @findex Sample_Free @findex Sample_Load @findex Sample_LoadFP @findex Sample_Play @end iftex Currently, MikMod only supports uncompressed mono WAV files as samples. You can load a sample by calling @code{Sample_Load} with a filename, or by calling @code{Sample_LoadFP} with an open @code{FILE*} pointer. These functions return a pointer to a @code{SAMPLE} structure, or @code{NULL} in case of error. The @code{SAMPLE} structure has a few interesting fields: @itemize @minus @item @code{speed} contains the default frequency of the sample. @item @code{volume} contains the default volume of the sample, ranging from 0 (silence) to 64. @item @code{panning} contains the default panning position of the sample. @end itemize Altering one of those fields will affect all voices currently playing the sample. You can achieve the same result on a single voice with the functions @code{Voice_SetFrequency}, @code{Voice_SetVolume} and @code{Voice_SetPanning}. Since the same sample can be played with different frequency, volume and panning parameters on each voice, you can get voice specific information with @code{Voice_GetFrequency}, @code{Voice_GetVolume} and @code{Voice_GetPanning}. You can also make your sample loop by setting the fields @code{loopstart} and @code{loopend} and or'ing @code{flags} with @code{SF_LOOP}. To compute your loop values, the field @code{length} will be useful. However, you must know that all the sample length are expressed in samples, i.e. 8 bits for an 8 bit sample, and 16 bit for a 16 bit sample@dots{} Test @code{flags} for the value @code{SF_16BITS} to know this. Speaking of flags, if you're curious and want to know the original format of the sample on disk (since libmikmod does some work on the sample data internally), refer to the @code{inflags} field. If the common forward loop isn't enough, you can play with some other flags: @code{SF_BIDI} will make your sample loop ``ping pong'' (back and forth), and @code{SF_REVERSE} will make it play backwards. To play your sample, use the @code{Sample_Play} function. This function will return a voice number which enable you to use the @code{Voice_xx} functions. The sample will play until another sample takes over its voice (when you play more samples than you reserved sound effect voices), unless it has been flagged as @code{SFX_CRITICAL}. You can force it to stop with @code{Voice_Stop}, or you can force another sample to take over this voice with @code{Voice_Play}; however @code{Voice_Play} doesn't let you flag the new sample as critical. Non looping samples will free their voice channel as soon as they are finished; you can know the current playback position of your sample with @code{Voice_GetPosition}. If it is zero, either the sample has finished playing or it is just beginning; use @code{Voice_Stopped} to know. When you don't need a sample anymore, don't forget to free its memory with @code{Sample_Free}. @c ========================================================== Module player @node Modules and Player Control, Loading Data from Memory, Samples and Voice Control, Using the Library @section Modules and Player Control @iftex @findex MikMod_InfoLoader @findex MikMod_RegisterAllLoaders @findex MikMod_RegisterLoader @findex MikMod_RegisterPlayer @findex Player_Active @findex Player_Free @findex Player_GetChannelVoice @findex Player_GetModule @findex Player_Load @findex Player_LoadFP @findex Player_LoadTitle @findex Player_LoadTitleFP @findex Player_Mute @findex Player_Muted @findex Player_NextPosition @findex Player_Paused @findex Player_PrevPosition @findex Player_SetPosition @findex Player_SetSpeed @findex Player_SetTempo @findex Player_SetVolume @findex Player_Start @findex Player_Stop @findex Player_ToggleMute @findex Player_TogglePause @findex Player_UnMute @end iftex As for the sound drivers, you have to register the module loaders you want to use for MikMod to be able to load modules. You can either register all the module loaders with @code{MikMod_RegisterAllLoaders}, or only a few of them with @code{MikMod_RegisterLoader}. Be careful if you choose this solution, as the 15 instrument MOD loader has to be registered last, since loaders are called in the order they were register to identify modules, and the detection of this format is not fully reliable, so other modules might be mistaken as 15 instrument MOD files. You can get some printable information regarding the registered loaders with @code{MikMod_InfoLoader}; don't forget to call @code{free} on the returned string when you don't need it anymore. Note that, contrary to the sound drivers, you can register module loaders at any time, it doesn't matter. For playlists, you might be interested in knowing the module title first, and @code{Player_LoadTitle} will give you this information. Don't forget to @code{free} the returned text when you don't need it anymore. You can load a module either with @code{Player_Load} and the name of the module, or with @code{Player_LoadFP} and an open @code{FILE*} pointer. These functions also expect a maximal number of voices, and a curiosity flag. Unless you have excellent reasons not to do so, choose a big limit, such as 64 or even 128 for complex Impulse Tracker modules. Both functions return a pointer to an @code{MODULE} structure, or @code{NULL} if an error occurs. You'll find some useful information in this structure: @itemize @minus @item @code{numchn} contains the number of module ``real'' channels. @item @code{numvoices} contains the number of voices reserved by the player for the real channels and the virtual channels (NNA). @item @code{numpas} and @code{numpat} contain the number of song positions and song patterns. @item @code{numins} and @code{numsmp} contain the number of instruments and samples. @item @code{songname} contains the song title. @item @code{modtype} contains the name of the tracker used to create the song. @item @code{comment} contains the song comment, if it has one. @item @code{sngtime} contains the time elapsed in the module, in @math{2^@minus{}10} @dmn{seconds} (not exactly a millisecond). @item @code{sngspd} and @code{bpm} contain the song speed and tempo. @item @code{realchn} contains the actual number of active channels. @item @code{totalchn} contains the actual number of active virtual channels, i.e. the sum of @code{realchn} and the number of NNA virtual channels. @end itemize Now that the module is loaded, you need to tell the module player that you want to play this particular module with @code{Player_Start} (the player can only play one module, but you can have several modules in memory). The playback begins. Should you forget which module is playing, @code{Player_GetModule} will return it to you. You can change the current song position with the functions @code{Player_NextPosition}, @code{Player_PrevPosition} and @code{Player_SetPosition}, the speed with @code{Player_SetSpeed} and @code{Player_SetTempo}, and the volume (ranging from 0 to 128) with @code{Player_SetVolume}. Playback can be paused or resumed with @code{Player_TogglePause}. Be sure to check with @code{Player_Paused} that it isn't already in the state you want ! Fine player control is achieved by the functions @code{Player_Mute}, @code{Player_UnMute} and @code{Player_ToggleMute} which can silence or resume a set of module channels. The function @code{Player_Muted} will return the state of a given channel. And if you want even more control, you can get the voice corresponding to a module channel with @code{Player_GetChannelVoice} and act directly on the voice. Modules play only once, but can loop indefinitely if they are designed to do so. You can change this behavior with the @code{wrap} and @code{loop} of the @code{MODULE} structure; the first one, if set, will make the module restart when it's finished, and the second one, if set, will prevent the module from jumping backwards. You can test if the module is still playing with @code{Player_Active}, and you can stop it at any time with @code{Player_Stop}. When the module isn't needed anymore, get rid of it with @code{Player_Free}. @c ========================================================== Mreaders @node Loading Data from Memory, ,Modules and Player Control, Using the Library @section Loading Data from Memory @iftex @tindex MREADER @tindex MWRITER @findex Player_LoadGeneric @findex Sample_LoadGeneric @end iftex If you need to load modules or sound effects from other places than plain files, you can use the @code{MREADER} and @code{MWRITER} objects to achieve this. The @code{MREADER} and @code{MWRITER} structures contain a list of function pointers, which emulate the behaviour of a regular @code{FILE *} object. In fact, all functions which take filenames or @code{FILE *} as arguments are only wrappers to a real function which takes an @code{MREADER} or an @code{MWRITER} argument. So, if you need to load a module from memory, or for a multi-file archive, for example, all you need is to build an adequate @code{MREADER} object, and use @code{Player_LoadGeneric} instead of @code{Player_Load} or @code{Player_LoadFP}. For samples, use @code{Sample_LoadGeneric} instead of @code{Sample_Load} or @code{Sample_LoadFP}. @c ========================================================== Reference @node Library Reference, Index, Using the Library, Top @chapter Library Reference This chapter describes in more detail all the functions and variables provided by the library. @xref{Type Definitions}, for the basic type reference. @menu * Variable Reference:: * Structure Reference:: * Error Reference:: * Function Reference:: * Loader Reference:: * Driver Reference:: @end menu @c ========================================================== Variable reference @node Variable Reference, Structure Reference, Library Reference, Library Reference @section Variable Reference @subsection Error Variables The following variables are set by the library to return error information. @table @code @vindex MikMod_errno @item int MikMod_errno When an error occurs, this variable contains the error code. @xref{Error Reference}, for more information. @vindex MikMod_critical @item BOOL MikMod_critical When an error occurs, this variable informs of the severity of the error. Its value has sense only if the value of @code{MikMod_errno} is different from zero. If the value of @code{MikMod_critical} is zero, the error wasn't fatal and the library is in a stable state. However, if it is nonzero, then the library can't be used and has reseted itself to the uninitialized state. This often means that the mixing parameters you choose were not supported by the driver, or that it doesn't has enough voices for your needs if you called @code{MikMod_SetNumVoices}. @end table @subsection Sound Settings The following variables control the sound output parameters and their changes take effect immediately. @table @code @vindex md_musicvolume @item UBYTE md_musicvolume Volume of the module. Allowed values range from 0 to 128. The default value is 128. @vindex md_pansep @item UBYTE md_pansep Stereo channels separation. Allowed values range from 0 (no separation, thus mono sound) to 128 (full channel separation). The default value is 128. @vindex md_reverb @item UBYTE md_reverb Amount of sound reverberation. Allowed values range from 0 (no reverberation) to 15 (a rough estimate for chaos@dots{}). The default value is 0. @vindex md_sndfxvolume @item UBYTE md_sndfxvolume Volume of the sound effects. Allowed values range from 0 to 128. The default value is 128. @vindex md_volume @item UBYTE md_volume Overall sound volume. Allowed values range from 0 to 128. The default value is 128. @end table @subsection Driver Settings The following variables control more in-depth sound output parameters. Except for some @code{md_mode} flags, their changes do not have any effect until you call @code{MikMod_Init} or @code{MikMod_Reset}. @table @code @vindex md_device @item UWORD md_device This variable contains the order, in the list of the registered drivers, of the sound driver which will be used for sound playback. This order is one-based; if this variable is set to zero, the driver is autodetected, which means the list is tested until a driver is present on the system. The default value is 0, thus driver is autodetected. @vindex md_driver @item MDRIVER* md_driver This variable points to the driver which is being used for sound playback, and is undefined when the library is uninitialized (before @code{MikMod_Init} and after @code{MikMod_Exit}). This variable is for information only, you should never attempt to change its value. Use @code{md_driver} and @code{MikMod_Init} (or @code{MikMod_Reset}) instead. @vindex md_mixfreq @item UWORD md_mixfreq Sound playback frequency, in hertz. High values yield high sound quality, but need more computing power than lower values. The default value is 44100 Hz, which is compact disc quality. Other common values are 22100 Hz (radio quality), 11025 Hz (phone quality), and 8000 Hz (mu-law quality). @vindex md_mode @item UWORD md_mode This variable is a combination of several flags, to select which output mode to select. The following flags have a direct action to the sound output (i.e. changes take effect immediately): @table @samp @item DMODE_INTERP This flag, if set, enables the interpolated mixers. Interpolated mixing gives better sound but takes a bit more time than standard mixing. If the library is built with the high quality mixer, interpolated mixing is always enabled, regardless of this flag. @item DMODE_REVERSE This flag, if set, exchanges the left and right stereo channels. @item DMODE_SURROUND This flag, if set, enables the surround mixers. Since surround mixing works only for stereo sound, this flag has no effect if the sound playback is in mono. @end table The following flags aren't taken in account until the sound driver is changed or reset: @table @samp @item DMODE_16BIT This flag, if set, selects 16 bit sound mode. This mode yields better sound quality, but needs twice more mixing time. @item DMODE_HQMIXER This flag, if set, selects the high-quality software mixer. This mode yields better sound quality, but needs more mixing time. Of course, this flag has no effect if no @code{DMODE_SOFT_xx} flag is set. @item DMODE_SOFT_MUSIC This flag, if set, selects software mixing of the module. @item DMODE_SOFT_SNDFX This flag, if set, selects software mixing of the sound effects. @item DMODE_STEREO This flag, if set, selects stereo sound. @end table The default value of this variable is @samp{DMODE_STEREO | DMODE_SURROUND | DMODE_16BITS | DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX}. @end table @c ========================================================== Structure reference @node Structure Reference, Error Reference, Variable Reference, Library Reference @section Structure Reference Only the useful fields are described here; if a structure field is not described, you must assume that it's an internal field which must not be modified. @subsection Drivers @tindex MDRIVER The @code{MDRIVER} structure is not meant to be used by anything else than the core of the library, but its first four fields contain useful information for your programs: @table @code @item CHAR* Name Name of the driver, usually never more than 20 characters. @item CHAR* Description Description of the driver, usually never more than 50 characters. @item UBYTE HardVoiceLimit Maximum number of hardware voices for this driver, 0 if the driver has no hardware mixing support. @item UBYTE SoftVoiceLimit Maximum number of software voices for this driver, 0 if the driver has no software mixing support. @item CHAR* Alias A short name for the driver, without spaces, usually never more than 10 characters. @end table @subsection Modules @tindex MODULE The @code{MODULE} structure gathers all the necessary information needed to play a module file, regardless of its initial format. @subsubsection General Module Information The fields described in this section contain general information about the module and should not be modified. @table @code @item CHAR* songname Name of the module. @item CHAR* modtype Type of the module (which tracker format). @item CHAR* comment Either the module comments, or NULL if the module doesn't have comments. @end table @table @code @item UWORD flags Several module flags or'ed together. @table @samp @item UF_ARPMEM If set, arpeggio effects have memory. @item UF_BGSLIDES If set, volume slide effects continue until a new note or a new effect is played. @item UF_HIGHBPM If set, the module is allowed to have its tempo value (bpm) over 255. @item UF_INST If set, the module has instruments and samples; otherwise, the module has only samples. @item UF_LINEAR If set, slide periods are linear; otherwise, they are logarithmic. @item UF_NNA If set, module uses new note actions (NNA) and the @code{numvoices} field is valid. @item UF_NOWRAP If set, pattern break on the last pattern does not continue to the first pattern. @item UF_S3MSLIDES If set, module uses old-S3M style volume slides (slides processed every tick); otherwise, it uses the standard style (slides processed every tick except the first). @item UF_XMPERIODS If set, module uses XM-type periods; otherwise, it uses Amiga periods. @item UF_FT2QUIRKS If set, module player will reproduce some FastTracker 2 quirks during playback. @item UF_PANNING If set, module use panning commands. @end table @item UBYTE numchn The number of channels in the module. @item UBYTE numvoices If the module uses NNA, and this variable is not zero, it contains the limit of module voices; otherwise, the limit is set to the @code{maxchan} parameter of the @code{Player_Loadxx} functions. @item UWORD numpos The number of sound positions in the module. @item UWORD numpat The number of patterns. @item UWORD numins The number of instruments. @item UWORD numsmp The number of samples. @end table @table @code @item INSTRUMENT* instruments Points to an array of instrument structures. @item SAMPLE* samples Points to an array of sample structures. @end table @table @code @item UBYTE realchn During playback, this variable contains the number of active channels (not counting NNA channels). @item UBYTE totalchn During playback, this variable contains the total number of channels (including NNA channels). @item ULONG sngtime Elapsed song time, in @math{2^@minus{}10} @dmn{seconds} units (not exactly a millisecond). To convert this value to seconds, divide by 1024, not 1000 ! @end table @subsubsection Playback Settings The fields described here control the module playback and can be modified at any time, unless otherwise specified. @table @code @item UBYTE initspeed The initial speed of the module (Protracker compatible). Valid range is 1-32. @item UBYTE inittempo The initial tempo of the module (Protracker compatible). Valid range is 32-255. @item UBYTE initvolume The initial overall volume of the module. Valid range is 0-128. @item UWORD panning[] The current channel panning positions. Only the first @code{numchn} values are defined. @item UBYTE chanvol[] The current channel volumes. Only the first @code{numchn} values are defined. @item UWORD bpm The current tempo of the module. Use @code{Player_SetTempo} to change its value. @item UBYTE sngspd The current speed of the module. Use @code{Player_SetSpeed} to change its value. @item UBYTE volume The current overall volume of the module, in range 0-128. Use @code{Player_SetVolume} to change its value. @end table @table @code @item BOOL extspd If zero, Protracker extended speed effect (in-module tempo modification) is not processed. The default value is 1, which causes this effect to be processed. However, some old modules might not play correctly if this effect is not neutralized. @item BOOL panflag If zero, panning effects are not processed. The default value is 1, which cause all panning effects to be processed. However, some old modules might not play correctly if panning is not neutralized. @item BOOL wrap If nonzero, module wraps to its restart position when it is finished, to play continuously. Default value is zero (play only once). @item UBYTE reppos The restart position of the module, when it wraps. @item BOOL loop If nonzero, all in-module loops are processed; otherwise, backward loops which decrease the current position are not processed (i.e. only forward loops, and backward loops in the same pattern, are processed). This ensures that the module never loops endlessly. The default value is 1 (all loops are processed). @item BOOL fadeout If nonzero, volume fades out during when last position of the module is being played. Default value us zero (no fadeout). @end table @table @code @item UWORD patpos Current position (row) in the pattern being played. Must not be changed. @item SWORD sngpos Current song position. Do not change this variable directly, use @code{Player_NextPosition}, @code{Player_PrevPosition} or @code{Player_SetPosition} instead. @end table @table @code @item SWORD relspd Relative playback speed. The value of this variable is added to the module tempo to define the actual playback speed. The default value is 0, which make modules play at their intended speed. @end table @subsection Module Instruments @tindex INSTRUMENT Although the @code{INSTRUMENT} structure is intended for internal use, you might need to know its name: @table @code @item CHAR* insname The instrument text, theoretically its name, but often a message line. @end table @subsection Samples @tindex SAMPLE The @code{SAMPLE} structure is used for sound effects and module samples as well. You can play with the following fields: @table @code @item SWORD panning Panning value of the sample. Valid values range from PAN_LEFT (0) to PAN_RIGHT (255), or PAN_SURROUND. @item ULONG speed Playing frequency of the sample, it hertz. @item UBYTE volume Sample volume. Valid range is 0-64. @item UWORD flags Several format flags or'ed together describing the format of the sample in memory. Format flags: @table @samp @item SF_16BITS If set, sample data is 16 bit wide; otherwise, it is 8 bit wide. @item SF_BIG_ENDIAN If set, sample data is in big--endian (Motorola) format; otherwise, it is in little--endian (Intel) format. @item SF_DELTA If set, sample is stored as delta values (differences between two consecutive samples); otherwise, sample is stored as sample values. @item SF_ITPACKED If set, sample data is packed with Impulse Tracker's compression method; otherwise, sample is not packed. @item SF_SIGNED If set, sample data is made of signed values; otherwise, it is made of unsigned values. @item SF_STEREO If set, sample data is stereo (two channels); otherwise, it is mono. @end table Playback flags: @table @samp @item SF_BIDI If set, sample loops ``ping pong'' (back and forth). @item SF_LOOP If set, sample loops forward. @item SF_REVERSE If set, sample plays backwards. @end table @item UWORD inflags Same as ``flags'', but describing the format of the sample on disk. @item ULONG length Length of the sample, in @emph{samples}. The length of a sample is 8 bits (1 byte) for a 8 bit sample, and 16 bits (2 bytes) for a 16 bit sample. @item ULONG loopstart Loop starting position, relative to the start of the sample, in samples. @item ULONG loopend Loop ending position, relative to the start of the sample, in samples. @end table @subsection MREADER @tindex MREADER The @code{MREADER} contains the following function pointers: @table @code @item int (*Seek)(struct MREADER*, long offset, int whence) This function should have the same behaviour as @code{fseek}, with offset 0 meaning the start of the object (module, sample) being loaded. @item long (*Tell)(struct MREADER*) This function should have the same behaviour as @code{ftell}, with offset 0 meaning the start of the object being loaded. @item BOOL (*Read)(struct MREADER*, void *dest, size_t length) This function should copy @code{length} bytes of data into @code{dest}, and return zero if an error occured, and any nonzero value otherwise. Note that an end-of-file condition will not be considered as an error in this case. @item int (*Get)(struct MREADER*) This function should have the same behaviour as @code{fgetc}. @item BOOL (*Eof)(struct MREADER*) This function should have the same behaviour as @code{feof}. @end table For an example of how to build an @code{MREADER} object, please refer to the @code{MFILEREADER} object in file @code{mmio/mmio.c} in the library sources. @subsection MWRITER @tindex MWRITER The @code{MWRITER} contains the following function pointers: @table @code @item int (*Seek)(struct MWRITER*, long offset, int whence); This function should have the same behaviour as @code{fseek}, with offset 0 meaning the start of the object being written. @item long (*Tell)(struct MWRITER*); This function should have the same behaviour as @code{ftell}, with offset 0 meaning the start of the object being written. @item BOOL (*Write)(struct MWRITER*, void *src, size_t length); This function should copy @code{length} bytes of data from @code{src}, and return zero if an error occured, and any nonzero value otherwise. @item int (*Put)(struct MWRITER*, int data); This function should have the same behaviour as @code{fputc}. @end table For an example of how to build an @code{MWRITER} object, please refer to the @code{MFILEWRITER} object in file @code{mmio/mmio.c} in the library sources. @c ========================================================== Error reference @node Error Reference, Function Reference, Structure Reference, Library Reference @section Error Reference The following errors are currently defined: @subsection General Errors @table @samp @item MMERR_DYNAMIC_LINKING This error occurs when a specific driver was requested, but the support shared library couldn't be loaded. Currently, the only drivers which can yield this error are the ALSA, EsounD and Ultra drivers. @item MMERR_OPENING_FILE This error occurs when a file can not be opened, either for read access from a @code{xx_Loadxx} function, or for write access from the disk writer drivers. @item MMERR_OUT_OF_MEMORY This error occurs when there is not enough virtual memory available to complete the operation, or there is enough memory but the calling process would exceed its memory limit. MikMod does not do any resource tuning, your program has to use the @code{setrlimit} function to do this if it needs to load very huge samples. @end table @subsection Sample Errors @table @samp @item MMERR_SAMPLE_TOO_BIG This error occurs when the memory allocation of the sample data yields the error @code{MMERR_OUT_OF_MEMORY}. @item MMERR_OUT_OF_HANDLES This error occurs when your program reaches the limit of loaded samples, currently defined as 384, which should be sufficient for most cases. @item MMERR_UNKNOWN_WAVE_TYPE This error occurs when you're trying to load a sample which format is not recognized. @end table @subsection Module Errors @table @samp @item MMERR_ITPACK_INVALID_DATA This error occurs when a compressed module sample is corrupt. @item MMERR_LOADING_HEADER This error occurs when you're trying to load a module which has a corrupted header, or is truncated. @item MMERR_LOADING_PATTERN This error occurs when you're trying to load a module which has corrupted pattern data, or is truncated. @item MMERR_LOADING_SAMPLEINFO This error occurs when you're trying to load a module which has corrupted sample information, or is truncated. @item MMERR_LOADING_TRACK This error occurs when you're trying to load a module which has corrupted track data, or is truncated. @item MMERR_MED_SYNTHSAMPLES This error occurs when you're trying to load a MED module which has synthsounds samples, which are currently not supported.@footnote{You can force libmikmod to load the module (without the synthsounds, of course) by setting the @code{curious} parameter to @code{1} when invoking @code{Player_Loadxx}.} @item MMERR_NOT_A_MODULE This error occurs when you're trying to load a module which format is not recognized. @item MMERR_NOT_A_STREAM This error occurs when you're trying to load a sample with a sample which format is not recognized. @end table @subsection Driver Errors @ifnottex @subsubsection Generic Driver Errors @end ifnottex @iftex Generic driver errors @end iftex @table @samp @item MMERR_16BIT_ONLY This error occurs when the sound device doesn't support non-16 bit linear sound output, which are the requested settings. @item MMERR_8BIT_ONLY This error occurs when the sound device doesn't support non-8 bit linear sound output, which are the requested settings. @item MMERR_DETECTING_DEVICE This error occurs when the driver's sound device has not been detected. @item MMERR_INITIALIZING_MIXER This error occurs when MikMod's internal software mixer could not be initialized properly. @item MMERR_INVALID_DEVICE This error occurs when the driver number (in @code{md_device}) is out of range. @item MMERR_NON_BLOCK This error occurs when the driver is unable to set the audio device in non blocking mode. @item MMERR_OPENING_AUDIO This error occurs when the driver can not open sound device. @item MMERR_STEREO_ONLY This error occurs when the sound device doesn't support mono sound output, which is the requested setting. @item MMERR_ULAW This error occurs when the sound device only supports uLaw output (which implies mono, 8 bit, and 8000 Hz sampling rate), which isn't the requested setting. @end table @ifnottex @subsubsection AudioFile Driver Specific Error @end ifnottex @iftex AudioFile driver specific error @end iftex @table @samp @item MMERR_AF_AUDIO_PORT This error occurs when the AudioFile driver can not find a suitable AudioFile port. @end table @ifnottex @subsubsection AIX Driver Specific Errors @end ifnottex @iftex AIX driver specific errors @end iftex @table @samp @item MMERR_AIX_CONFIG_CONTROL This error occurs when the ``Control'' step of the device configuration has failed. @item MMERR_AIX_CONFIG_INIT This error occurs when the ``Init'' step of the device configuration has failed. @item MMERR_AIX_CONFIG_START This error occurs when the ``Start'' step of the device configuration has failed. @end table @ifnottex @subsubsection Ultra Driver Specific Errors @end ifnottex @iftex Ultra driver specific errors @end iftex @table @samp @item MMERR_GUS_RESET This error occurs when the sound device couldn't be reset. @item MMERR_GUS_SETTINGS This error occurs because the sound device only works in 16 bit linear stereo sound at 44100 Hz, which is not the requested settings. @item MMERR_GUS_TIMER This error occurs when the ultra driver could not setup the playback timer. @end table @ifnottex @subsubsection HP-UX Driver Specific Errors @end ifnottex @iftex HP-UX driver specific errors @end iftex @table @samp @item MMERR_HP_AUDIO_DESC This error occurs when the HP driver can not get the audio hardware description. @item MMERR_HP_AUDIO_OUTPUT This error occurs when the HP driver can not select the audio output. @item MMERR_HP_BUFFERSIZE This error occurs when the HP driver can not set the transmission buffer size. @item MMERR_HP_CHANNELS This error occurs when the HP driver can not set the requested number of channels. @item MMERR_HP_SETSAMPLESIZE This error occurs when the HP driver can not set the requested sample size. @item MMERR_HP_SETSPEED This error occurs when the HP driver can not set the requested sample rate. @end table @ifnottex @subsubsection ALSA Driver Specific Errors @end ifnottex @iftex ALSA driver specific errors @end iftex @table @samp @item MMERR_ALSA_NOCONFIG This error occurs when no ALSA playback configuration is available. @item MMERR_ALSA_SETPARAMS This error occurs when the ALSA driver can not set the requested sample format, sample rate, number of channels, access type, or latency values. @item MMERR_ALSA_SETFORMAT This error occurs when the ALSA driver can not set the requested sample format. @item MMERR_ALSA_SETRATE This error occurs when the ALSA driver does not support the requested sample rate. @item MMERR_ALSA_SETCHANNELS This error occurs when the ALSA driver does not support the requested number of channels. @item MMERR_ALSA_BUFFERSIZE This error occurs when the ALSA driver can not retrieve the buffer or period size. @item MMERR_ALSA_PCM_START This error occurs when the ALSA driver can not start the pcm playback. @item MMERR_ALSA_PCM_WRITE This error occurs when the ALSA driver encounters a write error. @item MMERR_ALSA_PCM_RECOVER This error occurs when the ALSA driver encounters an error recovery failure. @end table @ifnottex @subsubsection Open Sound System Driver Specific Errors @end ifnottex @iftex Open Sound System driver specific errors @end iftex @table @samp @item MMERR_OSS_SETFRAGMENT This error occurs when the OSS driver can not set audio fragment size. @item MMERR_OSS_SETSAMPLESIZE This error occurs when the OSS driver can not set the requested sample size. @item MMERR_OSS_SETSPEED This error occurs when the OSS driver can not set the requested sample rate. @item MMERR_OSS_SETSTEREO This error occurs when the OSS driver can not set the requested number of channels. @end table @ifnottex @subsubsection SGI Driver Specific Errors @end ifnottex @iftex SGI driver specific errors @end iftex @table @samp @item MMERR_SGI_MONO This error occurs when the hardware only supports stereo sound. @item MMERR_SGI_SPEED This error occurs when the hardware does not support the requested sample rate. @item MMERR_SGI_STEREO This error occurs when the hardware only supports mono sound. @item MMERR_SGI_16BIT This error occurs when the hardware only supports 16 bit sound. @item MMERR_SGI_8BIT This error occurs when the hardware only supports 8 bit sound. @end table @ifnottex @subsubsection Sun Driver Specific Error @end ifnottex @iftex Sun driver specific error @end iftex @table @samp @item MMERR_SUN_INIT This error occurs when the sound device initialization failed. @end table @ifnottex @subsubsection OS/2 Driver Specific Errors @end ifnottex @iftex OS/2 driver specific errors @end iftex @table @samp @item MMERR_OS2_MIXSETUP This error occurs when the DART driver can not set the mixing parameters. @item MMERR_OS2_SEMAPHORE This error occurs when the MMPM/2 driver can not create the semaphores needed for playback. @item MMERR_OS2_THREAD This error occurs when the MMPM/2 driver can not create the thread needed for playback. @item MMERR_OS2_TIMER This error occurs when the MMPM/2 driver can not create the timer needed for playback. @end table @ifnottex @subsubsection DirectX Driver Specific Errors @end ifnottex @iftex DirectX Driver Specific Errors @end iftex @table @samp @item MMERR_DS_BUFFER This error occurs when the DirectX driver can not allocate the playback buffers. @item MMERR_DS_EVENT This error occurs when the DirectX driver can not register the playback event. @item MMERR_DS_FORMAT This error occurs when the DirectX driver can not set the playback format. @item MMERR_DS_NOTIFY This error occurs when the DirectX driver can not register the playback callback. @item MMERR_DS_PRIORITY This error occurs when the DirectX driver can not set the playback priority. @item MMERR_DS_THREAD This error occurs when the DirectX driver can not create the playback thread. @item MMERR_DS_UPDATE This error occurs when the DirectX driver can not initialize the playback thread. @end table @ifnottex @subsubsection Windows Multimedia API Driver Specific Errors @end ifnottex @iftex Windows Multimedia API Driver Specific Errors @end iftex @table @samp @item MMERR_WINMM_ALLOCATED This error occurs when the playback resource is already allocated by another application. @item MMERR_WINMM_DEVICEID This error occurs when the Multimedia API Driver is given an invalid audio device identificator. @item MMERR_WINMM_FORMAT This error occurs when the playback output format is not supported by the audio device. @item MMERR_WINMM_HANDLE This error occurs when the Multimedia API Driver is given an invalid handle. @item MMERR_WINMM_UNKNOWN This error should not occur ! If you get this error, please contact the libmikmod development mailing list. @end table @ifnottex @subsubsection MacOS Driver Specific Errors @end ifnottex @iftex MacOS Driver Specific Errors @end iftex @table @samp @item MMERR_MAC_SPEED This error occurs when the playback speed is not supported by the audio device. @item MMERR_MAC_START This error occurs when the MacOS driver can not start playback. @end table @c ========================================================== Function reference @node Function Reference, Library Core Functions, Error Reference, Library Reference @section Function Reference @menu * Library Core Functions:: MikMod_xx functions. * Module Player Functions:: Player_xx functions. * Sample Functions:: Sample_xx functions. * Voice Functions:: Voice_xx functions. @end menu @c ========================================================== MikMod_xx @node Library Core Functions, Module Player Functions, Function Reference, Function Reference @subsection Library Core Functions @ifnottex @subsubsection MikMod_Active @end ifnottex @findex MikMod_Active @code{BOOL MikMod_Active(void)} @table @i @item Description This function returns whether sound output is enabled or not. @item Result @itemx 0 Sound output is disabled. @item 1 Sound output is enabled. @item Notes Calls to @code{MikMod_Update} will be ignored when sound output is disabled. @item See also @code{MikMod_DisableOutput}, @code{MikMod_EnableOutput}. @end table @ifnottex @subsubsection MikMod_DisableOutput @end ifnottex @findex MikMod_DisableOutput @code{void MikMod_DisableOutput(void)} @table @i @item Description This function stops the sound mixing. @item Notes Calls to @code{MikMod_Update} will be ignored when sound output is disabled. @item See also @code{MikMod_Active}, @code{MikMod_EnableOutput}. @end table @ifnottex @subsubsection MikMod_EnableOutput @end ifnottex @findex MikMod_EnableOutput @code{int MikMod_EnableOutput(void)} @table @i @item Description This function starts the sound mixing. @item Result @itemx 0 Sound mixing is ready. @item nonzero An error occurred during the operation. @item Notes Calls to @code{MikMod_Update} will be ignored when sound output is disabled. @item See also @code{MikMod_Active}, @code{MikMod_DisableOutput}. @end table @ifnottex @subsubsection MikMod_Exit @end ifnottex @findex MikMod_Exit @code{void MikMod_Exit(void)} @table @i @item Description This function deinitializes the sound hardware and frees all the memory and resources used by MikMod. @item See also @code{MikMod_Init}, @code{MikMod_Reset}. @end table @ifnottex @subsubsection MikMod_GetVersion @end ifnottex @findex MikMod_GetVersion @code{long MikMod_GetVersion(void)} @table @i @item Description This function returns the version number of the library. @item Result The version number, encoded as follows: @code{(maj<<16)|(min<<8)|(rev)}, where @samp{maj} is the major version number, @samp{min} is the minor version number, and @samp{rev} is the revision number. @end table @ifnottex @subsubsection MikMod_InfoDriver @end ifnottex @findex MikMod_InfoDriver @code{CHAR* MikMod_InfoDriver(void)} @table @i @item Description This function returns a formatted list of the registered drivers in a buffer. @item Result A pointer to a text buffer, or @code{NULL} if no drivers are registered. @item Notes The buffer is created with @code{malloc}; the caller must free it when it is no longer necessary. @item See also @code{MikMod_RegisterDriver}, @code{MikMod_RegisterAllDrivers}. @end table @ifnottex @subsubsection MikMod_InfoLoader @end ifnottex @findex MikMod_InfoLoader @code{CHAR* MikMod_InfoLoader(void)} @table @i @item Description This function returns a formatted list of the registered module loaders in a buffer. @item Result A pointer to a text buffer, or @code{NULL} if no loaders are registered. @item Notes The buffer is created with @code{malloc}; the caller must free it when it is no longer necessary. @item See also @code{MikMod_RegisterLoader}, @code{MikMod_RegisterAllLoaders}. @end table @ifnottex @subsubsection MikMod_Init @end ifnottex @findex MikMod_Init @code{int MikMod_Init(CHAR *parameters)} @table @i @item Description This function performs the library initialization, including the sound driver choice and configuration, and all the necessary memory allocations. @item Parameters @itemx parameters Optional parameters given to the sound driver. These parameters are ignored if the value of @code{md_device} is zero (autodetection). @item Result @itemx 0 Initialization was successful. @item nonzero An error occurred during initialization. @item Notes When the initialization fails, the library uses the nosound sound driver to let other the other MikMod functions work without crashing the application. @item See also @code{MikMod_Exit}, @code{MikMod_InitThreads}, @code{MikMod_Reset}. @end table @ifnottex @subsubsection MikMod_InitThreads @end ifnottex @findex MikMod_InitThreads @code{BOOL MikMod_InitThreads(void)} @table @i @item Description This function returns whether libmikmod is thread-safe. @item Result @itemx 0 The library is not thread-safe. @item 1 The library is thread-safe. @item Notes This function should be called before any call to @code{MikMod_Lock} or @code{MikMod_Unlock} is made. @item See also @code{MikMod_Lock}, @code{MikMod_Unlock}. @end table @ifnottex @subsubsection MikMod_Lock @end ifnottex @findex MikMod_Lock @code{void MikMod_Lock(void)} @table @i @item Description This function obtains exclusive access to libmikmod's variables. @item Notes This function locks an internal mutex. If the mutex is already locked, it will block the calling thread until the mutex is unlocked.@* Every @code{MikMod_Unlock} call should be associated to a @code{MikMod_Lock} call. To be sure this is the case, we advise you to define and use the following macros:@* @code{#define MIKMOD_LOCK MikMod_Lock();@{}@* @code{#define MIKMOD_UNLOCK @}MikMod_Unlock();}@* The function @code{MikMod_InitThreads} must have been invoked before any call to @code{MikMod_Lock} in made.@* @item See also @code{MikMod_InitThreads}, @code{MikMod_Unlock}. @end table @ifnottex @subsubsection MikMod_RegisterAllDrivers @end ifnottex @findex MikMod_RegisterAllDrivers @code{void MikMod_RegisterAllDrivers(void)} @table @i @item Description This function registers all the available drivers. @item See also @code{MikMod_InfoDriver}, @code{MikMod_RegisterDriver}. @end table @ifnottex @subsubsection MikMod_RegisterAllLoaders @end ifnottex @findex MikMod_RegisterAllLoaders @code{void MikMod_RegisterAllLoaders(void)} @table @i @item Description This function registers all the available module loaders. @item See also @code{MikMod_InfoLoader}, @code{MikMod_RegisterLoader}. @end table @ifnottex @subsubsection MikMod_RegisterDriver @end ifnottex @findex MikMod_RegisterDriver @code{void MikMod_RegisterDriver(struct MDRIVER* newdriver)} @table @i @item Description This function adds the specified driver to the internal list of usable drivers. @item Parameters @itemx newdriver A pointer to the @code{MDRIVER} structure identifying the driver. @item Notes It is safe to register the same driver several times, although it will not be duplicated in the list.@* You should register all the drivers you need before calling @code{MikMod_Init}. If you want to register all the available drivers, use @code{MikMod_RegisterAllDrivers} instead. @item See also @code{MikMod_InfoDriver}, @code{MikMod_RegisterAllDrivers}. @end table @ifnottex @subsubsection MikMod_RegisterErrorHandler @end ifnottex @findex MikMod_RegisterErrorHandler @code{MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t newhandler)} @table @i @item Description This function selects the function which should be called in case of error. @item Parameters @itemx newhandler The new error callback function. @item Result The previous error callback function, or @code{NULL} if there was none. @item Notes @code{MikMod_handler_t} is defined as @code{void(*function)(void)}, this means your error function has the following prototype: @code{void MyErrorHandler(void)}@* The error callback function is called when errors are detected, but not always immediately (the library has to resume to a stable state before calling your callback). @end table @ifnottex @subsubsection MikMod_RegisterLoader @end ifnottex @findex MikMod_RegisterLoader @code{void MikMod_RegisterLoader(struct MLOADER* newloader)} @table @i @item Description This function adds the specified module loader to the internal list of usable module loaders. @item Parameters @itemx newloader A pointer to the @code{MLOADER} structure identifying the loader. @item Notes It is safe to register the same loader several times, although it will not be duplicated in the list.@* You should register all the loaders you need before calling @code{Player_Load} or @code{Player_LoadFP}. If you want to register all the available module loaders, use @code{MikMod_RegisterAllLoaders} instead.@* The 15 instrument module loader (@code{load_m15}) should always be registered last. @item See also @code{MikMod_InfoLoader}, @code{MikMod_RegisterAllLoaders}. @end table @ifnottex @subsubsection MikMod_RegisterPlayer @end ifnottex @findex MikMod_RegisterPlayer @code{MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t newplayer)} @table @i @item Description This function selects the function which should be used to process module playback. @item Parameters @itemx newplayer The new playback function @item Result The previous playback function. @item Notes @code{MikMod_player_t} is defined as @code{void(*function)(void)}, this means your player function has the following prototype: @code{void MyPlayer(void)}@* The player function is called every module tick to process module playback. The rate at which the player function is called is controlled by the sound driver, and is computed by the following equation:@* @math{(bpm*50)/125} calls per second, which means every @math{125000/(bpm*50)} @dmn{milliseconds}. The @code{bpm} value is the tempo of the module and can change from its initial value when requested by the module.@* When changing the playback function, you should make sure that you chain to the default MikMod playback function, otherwise you won't get module sound anymore@enddots{} @item Example @smallexample MikMod_player_t oldroutine; void MyPlayer(void) @{ oldroutine(); /* your stuff here */ @dots{} @} main() @{ @dots{} /* Register our player */ oldroutine = MikMod_RegisterPlayer(MyPlayer); @dots{} @} @end smallexample @end table @ifnottex @subsubsection MikMod_Reset @end ifnottex @findex MikMod_Reset @code{int MikMod_Reset(CHAR *parameters)} @table @i @item Description This function resets MikMod and reinitialize the sound hardware. @item Parameters @itemx parameters Optional parameters given to the sound driver. If you set the value of @code{md_device} to zero (autodetect), these parameters are ignored. @item Result @itemx 0 Reinitialization was successful. @item nonzero An error occurred during reinitialization. @item Notes Use this function when you have changed the global configuration variables: @code{md_device} and @code{md_mixfreq}, or one of the @code{md_mode} flags which require sound reinitialization. Sound playback will continue as soon as the driver is ready. @item See also @code{MikMod_Exit}, @code{MikMod_Init}. @end table @ifnottex @subsubsection MikMod_SetNumVoices @end ifnottex @findex MikMod_SetNumVoices @code{int MikMod_SetNumVoices(int musicvoices, int samplevoices)} @table @i @item Description This function sets the number of mixed voices which can be used for music and sound effects playback. @item Parameters @itemx musicvoices The number of voices to reserve for music playback. @item samplevoices The number of voices to reserve for sound effects. @item Result @itemx 0 Initialization was successful. @item nonzero An error occurred during initialization. @item Notes A value of @code{-1} for any of the parameters will retain the current number of reserved voices.@* The maximum number of voices vary from driver to driver (hardware drivers often have a limit of 32 to 64 voices, whereas the software drivers handle 255 voices). If your settings exceed the driver's limit, they will be truncated. @item See also @code{MikMod_Init}, @code{MikMod_Reset}. @end table @ifnottex @subsubsection MikMod_Unlock @end ifnottex @findex MikMod_Unlock @code{void MikMod_Unlock(void)} @table @i @item Description This function relinquishes exclusive access to libmikmod's variables. @item Notes This function unlocks an internal mutex, so that other threads waiting for the lock can be resumed.@* Every @code{MikMod_Unlock} call should be associated to a @code{MikMod_Lock} call. To be sure this is the case, we advise you to define and use the following macros:@* @code{#define MIKMOD_LOCK MikMod_Lock();@{}@* @code{#define MIKMOD_UNLOCK @}MikMod_Unlock();}@* The function @code{MikMod_InitThreads} must have been invoked before any call to @code{MikMod_Unlock} in made.@* @item See also @code{MikMod_InitThreads}, @code{MikMod_Lock}. @end table @ifnottex @subsubsection MikMod_Update @end ifnottex @findex MikMod_Update @code{void MikMod_Update(void)} @table @i @item Description This routine should be called on a regular basis to update the sound. @item Notes The sound output buffer is filled each time this function is called; if you use a large buffer, you don't need to call this routine as frequently as with a smaller buffer, but you get a bigger shift between the sound being played and the reported state of the player, since the player is always a buffer ahead of the playback.@* If you play low quality sound (for example, mono 8 bit 11@dmn{kHz} sound), you only need to call this routine a few times per second. However, for high quality sound (stereo 16 bit 44@dmn{kHz}), this rate increases to a few hundred times per second, but never more, due to the minimal buffer size constraint imposed to the sound drivers.@* If you plan on modifying voice information with the @code{Voice_xx} functions, you should do this before calling @code{MikMod_Update}. @end table @ifnottex @subsubsection MikMod_strerror @end ifnottex @findex MikMod_strerror @code{char* MikMod_strerror(int errnum)} @table @i @item Description This function associates a descriptive message to an error code. @item Parameters @itemx errnum The MikMod error code. @item Result A pointer to a string describing the error. @end table @c ========================================================== Player_xx @node Module Player Functions, Sample Functions, Library Core Functions, Function Reference @subsection Module Player Functions @ifnottex @subsubsection Player_Active @end ifnottex @findex Player_Active @code{BOOL Player_Active(void)} @table @i @item Description This function returns whether the module player is active or not. @item Result @itemx 0 No module is playing. @item nonzero A module is currently playing. @item Notes This function will still report that the player is active if the playing module is paused. @item See also @code{Player_Paused}, @code{Player_TogglePause}, @code{Player_Start}, @code{Player_Stop} @end table @ifnottex @subsubsection Player_Free @end ifnottex @findex Player_Free @code{void Player_Free(MODULE* module)} @table @i @item Description This function stops the module if it is playing and unloads it from memory. @item Parameters @itemx module The module to free. @item See also @code{Player_Load}, @code{Player_LoadFP}. @end table @ifnottex @subsubsection Player_GetChannelVoice @end ifnottex @findex Player_GetChannelVoice @code{int Player_GetChannelVoice(UBYTE channel)} @table @i @item Description This function determines the voice corresponding to the specified module channel. @item Parameters @itemx channel The module channel to use. @item Result The number of the voice corresponding to the module channel. @item Notes If the module channel has NNAs, the number will correspond to the main channel voice. @item See also @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Player_Mute}, @code{Player_ToggleMute}, @code{Player_Unmute}. @end table @ifnottex @subsubsection Player_GetModule @end ifnottex @findex Player_GetModule @code{MODULE* Player_GetModule(void)} @table @i @item Description This function returns the module currently being played. @item Result A pointer to the @code{MODULE} being played, or @code{NULL} if no module is playing. @item See also @code{Player_Stop}, @code{Player_Start}. @end table @ifnottex @subsubsection Player_Load @end ifnottex @findex Player_Load @code{MODULE* Player_Load(CHAR* filename, int maxchan, BOOL curious)} @table @i @item Description This function loads a music module. @item Parameters @itemx filename The name of the module file. @item maxchan The maximum number of channels the song is allowed to request from the mixer. @item curious The curiosity level to use. @item Result A pointer to a @code{MODULE} structure, or @code{NULL} if an error occurs. @item Notes If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur: @itemize @bullet @item pattern positions occurring after the ``end of song'' marker in S3M and IT modules are loaded, and the end of song is set to the last position. @item hidden extra patterns are searched in MOD modules, and if found, played after the last ``official'' pattern. @item MED modules with synthsounds are loaded without causing the @code{MMERR_MED_SYNTHSAMPLES}, and synthsounds are mapped to an empty sample. @end itemize @item See also @code{Player_Free}, @code{Player_LoadFP}, @code{Player_LoadTitle}, @code{Player_LoadTitleFP}, @code{Player_Start}. @end table @ifnottex @subsubsection Player_LoadFP @end ifnottex @findex Player_LoadFP @code{MODULE* Player_LoadFP(FILE* file, int maxchan, BOOL curious)} @table @i @item Description This function loads a music module. @item Parameters @itemx file An open file, at the position where the module starts. @item maxchan The maximum number of channels the song is allowed to request from the mixer. @item curious The curiosity level to use. @item Result A pointer to a @code{MODULE} structure, or @code{NULL} if an error occurs. @item Notes The file is left open, at the same position as before the function call.@* If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur: @itemize @bullet @item pattern positions occurring after the ``end of song'' marker in S3M and IT modules are loaded, and the end of song is set to the last position. @item hidden extra patterns are searched in MOD modules, and if found, played after the last ``official'' pattern. @item MED modules with synthsounds are loaded without causing the @code{MMERR_MED_SYNTHSAMPLES}, and synthsounds are mapped to an empty sample. @end itemize @item See also @code{Player_Free}, @code{Player_Load}, @code{Player_LoadTitle}, @code{Player_LoadTitleFP}, @code{Player_Start}. @end table @ifnottex @subsubsection Player_LoadTitle @end ifnottex @findex Player_LoadTitle @code{MODULE* Player_LoadTitle(CHAR* filename)} @table @i @item Description This function retrieves the title of a module file. @item Parameters @itemx filename The name of the module file. @item Result A pointer to the song title, or @code{NULL} if either the module has no title or an error has occurred. @item Notes The title buffer is created with @code{malloc}; the caller must free it when it is no longer necessary. @item See also @code{Player_Load}, @code{Player_LoadFP}, @code{Player_LoadTitleFP}. @end table @ifnottex @subsubsection Player_LoadTitleFP @end ifnottex @findex Player_LoadTitleFP @code{MODULE* Player_LoadTitleFP(FILE* file)} @table @i @item Description This function retrieves the title of a module file. @item Parameters @itemx file An open file, at the position where the module starts. @item Result A pointer to the song title, or @code{NULL} if either the module has no title or an error has occurred. @item Notes The title buffer is created with @code{malloc}; the caller must free it when it is no longer necessary. @item See also @code{Player_Load}, @code{Player_LoadFP}, @code{Player_LoadTitle}. @end table @ifnottex @subsubsection Player_Mute @end ifnottex @findex Player_Mute @code{void Player_Mute(SLONG operation, ...)} @table @i @item Description This function mutes a single module channel, or a range of module channels. @item Parameters @itemx operation Either the number of a module channel to mute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. @item Notes If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is @code{MUTE_EXCLUSIVE}, they are outside of the range. @item Example @smallexample /* mute channel 10 */ Player_Mute(10); /* mute channels 2 to 5 */ Player_Mute(MUTE_INCLUSIVE, 2, 5); /* mute channels 7 to 9 */ Player_Mute(MUTE_EXCLUSIVE, 6, 10); @end smallexample @item See also @code{Player_Muted}, @code{Player_ToggleMute}, @code{Player_Unmute}. @end table @ifnottex @subsubsection Player_Muted @end ifnottex @findex Player_Muted @code{BOOL Player_Muted(UBYTE channel)} @table @i @item Description This function determines whether a module channel is muted or not. @item Parameters @itemx channel The module channel to test (starting from zero). @item Result @itemx 0 The channel is not muted. @item 1 The channel is muted. @item See also @code{Player_Mute}, @code{Player_ToggleMute}, @code{Player_Unmute}. @end table @ifnottex @subsubsection Player_NextPosition @end ifnottex @findex Player_NextPosition @code{void Player_NextPosition(void)} @table @i @item Description This function jumps to the next position in the module. @item Notes All playing samples and active song voices are cut to avoid hanging notes. @item See also @code{Player_PrevPosition}, @code{Player_SetPosition}. @end table @ifnottex @subsubsection Player_Paused @end ifnottex @findex Player_Paused @code{BOOL Player_Paused(void)} @table @i @item Description This function determines whether the module is paused or not. @item Result @itemx 0 The module is not paused. @item 1 The module is paused. @item See also @code{Player_TogglePause}. @end table @ifnottex @subsubsection Player_PrevPosition @end ifnottex @findex Player_PrevPosition @code{void Player_PrevPosition(void)} @table @i @item Description This function jumps to the previous position in the module. @item Notes All playing samples and active song voices are cut to avoid hanging notes. @item See also @code{Player_NextPosition}, @code{Player_SetPosition}. @end table @ifnottex @subsubsection Player_SetPosition @end ifnottex @findex Player_SetPosition @code{void Player_SetPosition(UWORD position)} @table @i @item Description This function jumps to the specified position in the module. @item Parameters @itemx position The pattern position to jump to. @item Notes All playing samples and active song voices are cut to avoid hanging notes. @item See also @code{Player_NextPosition}, @code{Player_PrevPosition}. @end table @ifnottex @subsubsection Player_SetSpeed @end ifnottex @findex Player_SetSpeed @code{void Player_SetSpeed(UWORD speed)} @table @i @item Description This function sets the module speed. @item Parameters @itemx speed The new module speed, in the range 1-32. @item See also @code{Player_SetTempo}. @end table @ifnottex @subsubsection Player_SetTempo @end ifnottex @findex Player_SetTempo @code{void Player_SetTempo(UWORD tempo)} @table @i @item Description This function sets the module tempo. @item Parameters @itemx tempo The new module tempo, in the range 32-255. @item See also @code{Player_SetSpeed}. @end table @ifnottex @subsubsection Player_SetVolume @end ifnottex @findex Player_SetVolume @code{void Player_SetVolume(SWORD volume)} @table @i @item Description This function sets the module volume. @item Parameters @itemx volume The new overall module playback volume, in the range 0-128. @end table @ifnottex @subsubsection Player_Start @end ifnottex @findex Player_Start @code{void Player_Start(MODULE* module)} @table @i @item Description This function starts the specified module playback. @item Parameters @itemx module The module to play. @item Notes If another module is playing, it will be stopped and the new module will play. @item See also @code{Player_Stop}. @end table @ifnottex @subsubsection Player_Stop @end ifnottex @findex Player_Stop @code{void Player_Stop(void)} @table @i @item Description This function stops the currently playing module. @item See also @code{Player_Start}. @end table @ifnottex @subsubsection Player_ToggleMute @end ifnottex @findex Player_ToggleMute @code{void Player_ToggleMute(SLONG operation, ...)} @table @i @item Description This function changes the muted status of a single module channel, or a range of module channels. @item Parameters @itemx operation Either the number of a module channel to work on (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. @item Notes If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is @code{MUTE_EXCLUSIVE}, they are outside of the range. @item Example @smallexample /* toggle mute on channel 10 */ Player_ToggleMute(10); /* toggle mute on channels 2 to 5 */ Player_ToggleMute(MUTE_INCLUSIVE, 2, 5); /* toggle mute on channels 7 to 9 */ Player_ToggleMute(MUTE_EXCLUSIVE, 6, 10); @end smallexample @item See also @code{Player_Mute}, @code{Player_Muted}, @code{Player_Unmute}. @end table @ifnottex @subsubsection Player_TogglePause @end ifnottex @findex Player_TogglePause @code{void Player_TogglePause(void)} @table @i @item Description This function toggles the playing/paused status of the module. @item Notes Calls to @code{Player_xx} functions still have effect when the module is paused. @item See also @code{Player_Paused}, @code{Player_Start}, @code{Player_Stop}. @end table @ifnottex @subsubsection Player_Unmute @end ifnottex @findex Player_Unmute @code{void Player_Unmute(SLONG operation, ...)} @table @i @item Description This function unmutes a single module channel, or a range of module channels. @item Parameters @itemx operation Either the number of a module channel to unmute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. @item Notes If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is @code{MUTE_EXCLUSIVE}, they are outside of the range. @item Example @smallexample /* unmute channel 10 */ Player_Unmute(10); /* unmute channels 2 to 5 */ Player_Unmute(MUTE_INCLUSIVE, 2, 5); /* unmute channels 7 to 9 */ Player_Unmute(MUTE_EXCLUSIVE, 6, 10); @end smallexample @item See also @code{Player_Mute}, @code{Player_Muted}, @code{Player_ToggleMute}. @end table @c ========================================================== Sample_xx @node Sample Functions, Voice Functions, Module Player Functions, Function Reference @subsection Sample Functions @ifnottex @subsubsection Sample_Free @end ifnottex @findex Sample_Free @code{void Sample_Free(SAMPLE* sample)} @table @i @item Description This function unloads a sample from memory. @item Parameters @itemx sample The sample to free. @item See also @code{Sample_Load}, @code{Sample_LoadFP}. @end table @ifnottex @subsubsection Sample_Load @end ifnottex @findex Sample_Load @code{SAMPLE* Sample_Load(CHAR* filename)} @table @i @item Description This function loads a sample. @item Parameters @itemx filename The sample filename. @item Result A pointer to a @code{SAMPLE} structure, or @code{NULL} if an error has occurred. @item See also @code{Sample_Free}, @code{Sample_LoadFP}. @end table @ifnottex @subsubsection Sample_LoadFP @end ifnottex @findex Sample_LoadFP @code{SAMPLE* Sample_LoadFP(FILE* file)} @table @i @item Description This function loads a sample. @item Parameters @itemx file An open file, at the position where the sample starts. @item Result A pointer to a @code{SAMPLE} structure, or @code{NULL} if an error has occurred. @item Notes The file is left open, at the same position as before the function call. @item See also @code{Sample_Free}, @code{Sample_Load}. @end table @ifnottex @subsubsection Sample_Play @end ifnottex @findex Sample_Play @code{SBYTE Sample_Play(SAMPLE* sample, ULONG start, UBYTE flags)} @table @i @item Description This function plays a sample as a sound effect. @item Parameters @itemx sample The sample to play. @item start The starting position (in samples). @item flags Either zero, for normal sound effects, or @code{SFX_CRITICAL}, for critical sound effects which must not be interrupted. @item Result The voice number corresponding to the voice which will play the sample. @item Notes Each new sound effect is played on a new voice. When all voices are taken, the oldest sample which was not marked as critical is cut and its voice is used for the new sample. Critical samples are not cut unless all the voices are taken with critical samples and you attempt to play yet another critical sample. Use @code{Voice_Stop} to force the end of a critical sample. @item See also @code{MikMod_SetNumVoices}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Voice_Stop}. @end table @c ========================================================== Voice_xx @node Voice Functions, Loader Reference, Sample Functions, Function Reference @subsection Voice Functions @ifnottex @subsubsection Voice_GetFrequency @end ifnottex @findex Voice_GetFrequency @code{ULONG Voice_GetFrequency(SBYTE voice)} @table @i @item Description This function returns the frequency of the sample currently playing on the specified voice. @item Parameters @itemx voice The number of the voice to get frequency. @item Result The current frequency of the sample playing on the specified voice, or zero if no sample is currently playing on the voice. @item See also @code{Voice_SetFrequency}. @end table @ifnottex @subsubsection Voice_GetPanning @end ifnottex @findex Voice_GetPanning @code{ULONG Voice_GetPanning(SBYTE voice)} @table @i @item Description This function returns the panning position of the sample currently playing on the specified voice. @item Parameters @itemx voice The number of the voice to get panning position. @item Result The current panning position of the sample playing on the specified voice, or @code{PAN_CENTER} if no sample is currently playing on the voice. @item See also @code{Voice_SetPanning}. @end table @ifnottex @subsubsection Voice_GetPosition @end ifnottex @findex Voice_GetPosition @code{SLONG Voice_GetPosition(SBYTE voice)} @table @i @item Description This function returns the sample position (in samples) of the sample currently playing on the specified voice. @item Parameters @itemx voice The number of the voice to get sample position (starting from zero). @item Result The current play location of the sample playing on the specified voice, or zero if the position can not be determined or if no sample is currently playing on the voice. @item Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, it returns always @code{-1}. @item See also @code{Sample_Play}, @code{Voice_Play}. @end table @ifnottex @subsubsection Voice_GetVolume @end ifnottex @findex Voice_GetVolume @code{UWORD Voice_GetVolume(SBYTE voice)} @table @i @item Description This function returns the volume of the sample currently playing on the specified voice. @item Parameters @itemx voice The number of the voice to get volume. @item Result The current volume of the sample playing on the specified voice, or zero if no sample is currently playing on the voice. @item See also @code{Voice_RealVolume}, @code{Voice_SetVolume}. @end table @ifnottex @subsubsection Voice_Play @end ifnottex @findex Voice_Play @code{void Voice_Play(SBYTE voice, SAMPLE* sample, ULONG start)} @table @i @item Description Start a new sample in the specified voice. @item Parameters @itemx voice The number of the voice to be processed (starting from zero). @item sample The sample to play. @item start The starting position (in samples). @item Notes The sample will be played at the volume, panning and frequency settings of the voice, regardless or the sample characteristics.@* The sample played this way gets the same ``critical'' status as the sample which was previously played on this voice. @item See also @code{Sample_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}. @end table @ifnottex @subsubsection Voice_RealVolume @end ifnottex @findex Voice_RealVolume @code{ULONG Voice_RealVolume(SBYTE voice)} @table @i @item Description This function returns the actual playing volume of the specified voice. @item Parameters @itemx voice The number of the voice to analyze (starting from zero). @item Result The real volume of the voice when the function was called, in the range 0-65535, not related to the volume constraint specified with @code{Voice_SetVolume}. @item Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, it always returns zero.@* Also note that the real volume computation is not a trivial process and takes some CPU time. @item See also @code{Sample_Play}, @code{Voice_GetVolume}, @code{Voice_Play}, @code{Voice_SetVolume}. @end table @ifnottex @subsubsection Voice_SetFrequency @end ifnottex @findex Voice_SetFrequency @code{void Voice_SetFrequency(SBYTE voice, ULONG frequency)} @table @i @item Description This function sets the frequency (pitch) of the specified voice. @item Parameters @itemx voice The number of the voice to be processed (starting from zero). @item frequency The new frequency of the voice, in hertz. @item See also @code{Sample_Play}, @code{Voice_GetFrequency}, @code{Voice_Play}, @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Voice_Stop}. @end table @ifnottex @subsubsection Voice_SetPanning @end ifnottex @findex Voice_SetPanning @code{void Voice_SetPanning(SBYTE voice, ULONG panning)} @table @i @item Description This function sets the panning position of the specified voice. @item Parameters @itemx voice The number of the voice to be processed (starting from zero). @item panning The new panning position of the voice. @item Notes Panning can vary between 0 (@code{PAN_LEFT}) and 255 (@code{PAN_RIGHT}). Center is 127 (@code{PAN_CENTER}. Surround sound can be enabled by specifying the special value @code{PAN_SURROUND}. @item See also @code{Sample_Play}, @code{Voice_GetPanning}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetVolume}, @code{Voice_Stop}. @end table @ifnottex @subsubsection Voice_SetVolume @end ifnottex @findex Voice_SetVolume @code{void Voice_SetVolume(SBYTE voice, UWORD volume)} @table @i @item Description This function sets the volume of the specified voice. @item Parameters @itemx voice The number of the voice to be processed (starting from zero). @item volume The new volume of the voice, in the range 0-256. @item See also @code{Sample_Play}, @code{Voice_GetVolume}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_Stop}. @end table @ifnottex @subsubsection Voice_Stop @end ifnottex @findex Voice_Stop @code{void Voice_Stop(SBYTE voice)} @table @i @item Description This function stops the playing sample of the specified voice. @item Parameters @itemx voice The number of the voice to be processed (starting from zero). @item Notes After the call to @code{Voice_Stop}, the function @code{Voice_Stopped} will return nonzero (true) for the voice. If you want to silence the voice without stopping the playback, use @code{Voice_SetVolume(voice, 0)} instead. @item See also @code{Sample_Play}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}. @end table @ifnottex @subsubsection Voice_Stopped @end ifnottex @findex Voice_Stopped @code{BOOL Voice_Stopped(SBYTE voice)} @table @i @item Description This function returns whether the voice is active or not. @item Parameters @itemx voice The number of the voice to be checked (starting from zero). @item Result @itemx 0 The voice is stopped or has no sample assigned. @item nonzero The voice is playing a sample. @item Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, its return value is undefined. @item See also @code{Voice_Stop}. @end table @c ========================================================== Loader reference @node Loader Reference, Module Loaders, Voice Functions, Library Reference @section Loader Reference @menu * Module Loaders:: * Sample Loaders:: @end menu @node Module Loaders, Sample Loaders, Loader Reference, Loader Reference @subsection Module Loaders MikMod presents a large choice of module loaders, for the most common formats as well as for some less-known exotic formats. @table @code @item load_669 This loader recognizes ``Composer 669'' and ``Unis 669'' modules. The 669 and ``Extended 669'' formats were among the first PC module formats. They do not have a wide range of effects, but support up to 32 channels.@* ``Composer 669'' was written by Tran of Renaissance, a.k.a.@: Tomasz Pytel and released in 1992. ``Unis 669 Composer'' was written by Jason Nunn and released in 1994. @item load_amf This loader recognizes the ``Advanced Module Format'', which is the internal module format of the ``DOS Sound and Music Interface'' (DSMI) library. This format has the same limitations as the S3M format. The most famous DSMI application was DMP, the Dual Module Player.@* DMP and the DSMI library were written by Otto Chrons. DSMI was first released in 1993. @item load_dsm This loader recognizes the internal DSIK format, which is the internal module format of the ``Digital Sound Interface Kit'' (DSIK) library, the ancester of the SEAL library. This format has the same limitations as the S3M format.@* The DSIK library was written by Carlos Hasan and released in 1994. @item load_far This loader recognizes ``Farandole'' modules. These modules can be up to 16 channels and have Protracker comparable effects.@* The Farandole composer was written by Daniel Potter and released in 1994. @item load_gdm This loader recognizes the ``General DigiMusic'' format, which is the internal format of the ``Bells, Whistles and Sound Boards'' library. This format has the same limitations as the S3M format.@* The BWSB library was written by Edward Schlunder and first released in 1993. @item load_imf This loader recognizes ``Imago Orpheus'' modules. This format is roughly equivalent to the XM format, but with two effects columns instead of a volume column and an effect column.@* Imago Orpheus was written by Lutz Roeder and released in 1994. @item load_it This loader recognizes ``Impulse Tracker'' modules, currently the most powerful format. These modules support up to 64 real channels, and up to 256 virtual channels with the ``New Note Action'' feature. Besides, it has the widest range of effects, and supports 16 bit samples as well as surround sound.@* ``Impulse Tracker'' was written by Jeffrey Lim and released in 1996. @item load_med This loader recognizes ``OctaMED'' modules. These modules are comparable to Protracker modules, but can embed ``synthsounds'', which are midi-like instruments.@* ``MED'' and later ``OctaMED'' were written by Teijo Kinnunen. ``MED'' was released in 1989, and ``OctaMED'' was released in 1992. @item load_m15 This loader recognizes the old 15 instrument modules, created by ``Ultimate Soundtracker'', ``Soundtracker'' and the first versions of ``Protracker''.@* Since this format was one of the first module formats, developed in 1987, it does not have any signature field, which makes it hard to detect reliably, because of its similarities with later module formats. @item load_mod This loader recognizes the standard 31 instrument modules, created by ``Protracker'' or Protracker-compatible programs. The original Protracker format was limited to 4 channels, but other trackers like ``TakeTracker'', ``StarTracker'' or ``Oktalyzer'' afforded more channels.@* Although it is now technically obsolete, this format is still widely used, due to its playback simplicity (on the adequate hardware, the Amiga). @item load_mtm This loader recognizes the ``MultiTracker Module Editor'' modules. The MTM format has up to 32 channels, and protracker comparable effects. It was intended to replace ``Composer 669''. The ``MultiTracker Module Editor'' was written by Starscream of Renaissance, a.k.a.@: Daniel Goldstein and released in late 1993. @item load_okt This loader recognizes the ``Amiga Oktalyzer'' modules. The OKT format has up to 8 channels, and a few protracker compatible effects, as well as other OKT-specific effects, of which only a few are currently supported by libmikmod. ``Oktalyzer'' was written by Armin Sander and released in 1990. @item load_stm This loader recognizes ``ScreamTracker'' modules. ``ScreamTracker'' was the first PC tracker, as well as the first PC module format. Loosely inspired by the ``SoundTracker'' format, it does not have as many effects as Protracker, although it supports 31 instruments and 4 channels.@* ``ScreamTracker'' was written by PSI of Future Crew, a.k.a.@: Sami Tammilehto. @item load_stx This loader recognizes ``STMIK 0.2'' modules. ``STMIK'' (the Scream Tracker Music Interface Kit) was a module playing library distributed by Future Crew to play Scream Tracker module in games and demos. It uses an intermediate format between STM and S3M and comes with a tool converting STM modules to STX.@* ``STMIK'' was written by PSI of Future Crew, a.k.a.@: Sami Tammilehto. @item load_s3m This loader recognizes ``ScreamTracker 3'' modules. This version was a huge improvement over the original ``ScreamTracker''. It supported 32 channels, up to 99 instruments, and a large choice of effects.@* ``ScreamTracker 3'' was written by PSI of Future Crew, a.k.a.@: Sami Tammilehto, and released in 1994. @item load_ult This loader recognizes ``UltraTracker'' modules. They are mostly similar to Protracker modules, but support two effects per channel.@* ``UltraTracker'' was written by MAS of Prophecy, a.k.a.@: Marc Andre Schallehn, and released in 1993. @item load_uni This loader recognizes ``UNIMOD'' modules. This is the internal format used by MikMod and APlayer. Use of this format is discouraged, this loader being provided for completeness. @item load_xm This loader recognizes ``FastTracker 2'' modules. This format was designed from scratch, instead of creating yet another Protracker variation. It was the first format using instruments as well as samples, and envelopes for finer effects.@* FastTracker 2 was written by Fredrik Huss and Magnus Hogdahl, and released in 1994. @end table @node Sample Loaders, Driver Reference, Module Loaders, Loader Reference @subsection Sample Loaders Currently, the only file type than can be loaded as a sample is the RIFF WAVE file. Stereo or compressed WAVE files are not supported yet. @c ========================================================== Driver reference @node Driver Reference, Network Drivers, Sample Loaders, Library Reference @section Driver Reference @menu * Network Drivers:: * Hardware Drivers:: * Disk Writer Drivers:: * Other Drivers:: @end menu @node Network Drivers, Hardware Drivers, Driver Reference, Driver Reference @subsection Network Drivers These drivers send the generated sound over the network to a server program, which sends the sound to the real sound hardware. The server program can be on the same machine than your program, but MikMod does not have access to the hardware. Network drivers only support software mixing. @table @code @item drv_AF This driver works with the ``Digital AudioFile'' library.@* Start the server on the machine you want, set its hostname in the @samp{AUDIOFILE} environment variable, and MikMod is ready to send it sound. @item drv_esd This driver works with the ``Enlightened Sound Daemon''.@* Start the esd daemon on the machine you want, set its hostname in the @samp{ESPEAKER} environment variable, and MikMod is ready to send it sound. @end table @node Hardware Drivers, Disk Writer Drivers, Network Drivers, Driver Reference @subsection Hardware Drivers These drivers access to the sound hardware of the machine they run on. Depending on your Unix flavor, you'll end with one or more drivers from this list: @table @code @item drv_aix This driver is only available under AIX, and access its audio device.@* This driver only supports software mixing. @item drv_alsa This driver is only available under Linux, and requires the ALSA driver to be compiled for your current kernel.@* This driver only supports software mixing, but a future version of the driver might be able to use the hardware capabilities of some sound cards. @item drv_dart This driver is only available under OS/2 version 3 and higher (Warp), and uses the ``Direct Audio Real-Time'' interface.@* This driver only supports software mixing. @item drv_ds This driver is only available under WIN32, and uses the ``DirectSound'' api.@* This driver only supports software mixing. @item drv_hp This driver is only available under HP-UX, and access its audio device.@* This driver only supports software mixing. @item drv_os2 This driver is only available under OS/2 version 3 and higher (Warp), and OS/2 2.x with MMPM/2.@* This driver only supports software mixing. @item drv_oss This driver is available under any Unix with the Open Sound System drivers installed. Linux and FreeBSD also come with the OSS/Lite driver (the non-commercial version of OSS) and can make use of this driver.@* This driver only supports software mixing. @item drv_sam9407 This driver is only available under Linux, and requires the Linux sam9407 driver to be compiled for your current kernel.@* This driver only supports hardware mixing. @item drv_sgi This driver is only available under IRIX, and uses the SGI audio library.@* This driver only supports software mixing. @item drv_sun This driver is only available under Unices which implement SunOS-like audio device interfaces, that is, SunOS, Solaris, NetBSD and OpenBSD.@* This driver only supports software mixing. @item drv_ultra This driver is only available under Linux, and requires the Linux Ultrasound driver (the ancestor of ALSA) to be compiled for your current kernel.@* This driver only supports hardware mixing. @item drv_win This driver is only available under WIN32, and uses the ``multimedia API''.@* This driver only supports software mixing. @end table @node Disk Writer Drivers, Other Drivers, Hardware Drivers, Driver Reference @subsection Disk Writer Drivers These drivers work on any machine, since the generated sound is not sent to hardware, but written in a file. Disk writer drivers only support software mixing. @table @code @item drv_raw This driver outputs the sound data in a file by default named @file{music.raw} in the current directory. The file has no header and only contains the sound output. @item drv_wav This driver outputs the sound data in a RIFF WAVE file by default named @file{music.wav} in the current directory. @end table @node Other Drivers, , Disk Writer Drivers, Driver Reference @subsection Other Drivers These drivers are of little interest, but are handy sometimes. @table @code @item drv_stdout This driver outputs the sound data to the program's standard output. To avoid inconvenience, the data will not be output if the standard output is a terminal, thus you have to pipe it through another command or to redirect it to a file. Using this driver and redirecting to a file is equivalent to using the @code{drv_raw} disk writer.@* This driver only supports software mixing. @item drv_pipe This driver pipes the sound data to a command (which must be given in the driver commandline, via @code{MikMod_Init}).@* This driver only supports software mixing. @item drv_nos This driver doesn't produce sound at all, and will work on any machine.@* Since it does not have to produce sound, it supports both hardware and software mixing, with as many hardware voices as you like. @end table @c ========================================================== Index @node Index, Function Index, Library Reference, Top @ifnottex @chapter Index @menu * Function Index:: * Type and Variable Index:: @end menu @end ifnottex @ifnottex @node Function Index, Type and Variable Index, Index, Index @end ifnottex @unnumbered Function Index @printindex fn @ifnottex @node Type and Variable Index, , Function Index, Index @end ifnottex @unnumbered Type and Variable Index @printindex vr @c ========================================================== Table Of Contents @contents @bye libmikmod-3.1.16/docs/Makefile.in0000644000000000000000000005774512260336527015274 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = docs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/libmikmod-config.1.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = libmikmod-config.1 CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = INFO_DEPS = $(srcdir)/mikmod.info TEXINFO_TEX = $(top_srcdir)/autotools/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/autotools DVIS = mikmod.dvi PDFS = mikmod.pdf PSS = mikmod.ps HTMLS = mikmod.html TEXINFOS = mikmod.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ info_TEXINFOS = mikmod.texi man_MANS = libmikmod-config.1 EXTRA_DIST = mikmod.html mikmod.info libmikmod-config.1.in all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): libmikmod-config.1: $(top_builddir)/config.status $(srcdir)/libmikmod-config.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< .texi.html: rm -rf $(@:.html=.htp) if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/mikmod.info: mikmod.texi mikmod.dvi: mikmod.texi mikmod.pdf: mikmod.texi mikmod.html: mikmod.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf mikmod.aux mikmod.cp mikmod.cps mikmod.fn mikmod.fns mikmod.ky \ mikmod.kys mikmod.log mikmod.pg mikmod.pgs mikmod.tmp \ mikmod.toc mikmod.tp mikmod.vr mikmod.vrs clean-aminfo: -test -z "mikmod.dvi mikmod.pdf mikmod.ps mikmod.html" \ || rm -rf mikmod.dvi mikmod.pdf mikmod.ps mikmod.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @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-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) $(MANS) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; 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-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool dist-info distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am 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-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-man uninstall-man1 \ uninstall-pdf-am uninstall-ps-am # 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: libmikmod-3.1.16/docs/libmikmod-config.1.in0000644000000000000000000000414012222472510017074 0ustar rootroot.TH LIBMIKMOD 1 "Version @VERSION@, 3rd January 2000" .SH NAME libmikmod-config - script to get information about the installed version of libmikmod. .SH SYNOPSIS .B libmikmod-config [\-\-prefix\fI[=DIR]\fP] [\-\-exec\-prefix\fI[=DIR]\fP] [\-\-version] [\-\-libs] [\-\-cflags] [\-\-ldadd] .SH DESCRIPTION .PP \fIlibmikmod-config\fP is a tool that is used to configure to determine the compiler and linker flags that should be used to compile and link programs that use \fIlibmikmod\fP. It is also used internally to the .m4 macros for GNU autoconf that are included with \fIlibmikmod\fP. .SH OPTIONS \fIlibmikmod-config\fP accepts the following options: .TP 8 .B \-\-version Print the currently installed version of \fIlibmikmod\fP on the standard output. .TP 8 .B \-\-libs Print the linker flags that are necessary to link a \fIlibmikmod\fP program. .TP 8 .B \-\-ldadd Print the extra linker flags that are necessary to link a \fIlibmikmod\fP program if it was compiled with the GNU C compiler. .TP 8 .B \-\-cflags Print the compiler flags that are necessary to compile a \fIlibmikmod\fP program. .TP 8 .B \-\-prefix=PREFIX If specified, use PREFIX instead of the installation prefix that \fIlibmikmod\fP was built with when computing the output for the \-\-cflags and \-\-libs options. This option is also used for the exec prefix if \-\-exec\-prefix was not specified. This option must be specified before any \-\-libs or \-\-cflags options. .TP 8 .B \-\-exec\-prefix=PREFIX If specified, use PREFIX instead of the installation exec prefix that \fIlibmikmod\fP was built with when computing the output for the \-\-cflags and \-\-libs options. This option must be specified before any \-\-libs or \-\-cflags options. .SH AUTHORS \fIlibmikmod\fP is the result of the work of many people, including: Jean-Paul Mikkers, Jake Stine, Miodrag Vallat, Steve McIntyre, Peter Amstutz, and many others. A full list of people having worked on libmikmod can be found in the libmikmod source package. This man page was inspired by the gtk-config man page written by Owen Taylor. The k in ``Januark'' is not a typo. It's a genuine Y2K bug. libmikmod-3.1.16/docs/mikmod.html0000644000000000000000000046430612262064600015360 0ustar rootroot MikMod sound library

MikMod sound library


Next: , Previous: (dir), Up: (dir)

MikMod Sound Library

This manual documents the MikMod Sound Library, version 3.1.16.


Next: , Previous: Top, Up: Top

1 Introduction

The MikMod sound library is an excellent way for a programmer to add music and sound effects to an application. It is a powerful and flexible library, with a simple and easy-to-learn API.

Besides, the library is very portable and runs under a lot of Unices, as well as under OS/2, MacOS and Windows. Third party individuals also maintain ports on other systems, including MS-DOS, and BeOS.

MikMod is able to play a wide range of module formats, as well as digital sound files. It can take advantage of particular features of your system, such as sound redirection over the network. And due to its modular nature, the library can be extended to support more sound or module formats, as well as new hardware or other sound output capabilities, as they appear.


Next: , Previous: Introduction, Up: Top

2 Tutorial

This chapter will describe how to quickly incorporate MikMod's power into your programs. It doesn't cover everything, but that's a start and I hope it will help you understand the library philosophy.

If you have a real tutorial to put here, you're welcome ! Please send it to me...


Next: , Previous: Tutorial, Up: Tutorial

2.1 MikMod Concepts

MikMod's sound output is composed of several sound voices which are mixed, either in software or in hardware, depending of your hardware configuration. Simple sounds, like sound effects, use only one voice, whereas sound modules, which are complex arrangements of sound effects, use several voices.

MikMod's functions operate either globally, or at the voice level. Differences in the handling of sound effects and modules are kept minimal, at least for the programmer.

The sound playback is done by a sound driver. MikMod provides several sound drivers: different hardware drivers, and some software drivers to redirect sound in a file, or over the network. You can even add your own driver, register it to make it known by the library, and select it (this is exactly what the module plugin of xmms does).


Next: , Previous: MikMod Concepts, Up: Tutorial

2.2 A Skeleton Program

To use MikMod in your program, there are a few steps required:

  • Include mikmod.h in your program.
  • Register the MikMod drivers you need.
  • Initialize the library with MikMod_Init() before using any other MikMod function.
  • Give up resources with MikMod_Exit() at the end of your program, or before when MikMod is not needed anymore.
  • Link your application with the MikMod sound library.

Here's a program which meets all those conditions:

     /* MikMod Sound Library example program: a skeleton */
     
     #include <mikmod.h>
     
     main()
     {
     	/* register all the drivers */
     	MikMod_RegisterAllDrivers();
     
     	/* initialize the library */
     	MikMod_Init("");
     
     	/* we could play some sound here... */
     
     	/* give up */
     	MikMod_Exit();
     }

This program would be compiled with the following command line: cc -o example example.c `libmikmod-config --cflags` `libmikmod-config --libs`

Although this programs produces no useful result, many things happen when you run it. The call to MikMod_RegisterAllDrivers registers all the drivers embedded in the MikMod library. Then, MikMod_Init chooses the more adequate driver and initializes it. The program is now ready to produce sound. When sound is not needed any more, MikMod_Exit is used to relinquish memory and let other programs have access to the sound hardware.

2.3 Playing Modules

Our program is not really useful if it doesn't produce sound. Let's suppose you've got this good old module, “Beyond music”, in the file beyond music.mod. How about playing it ?

To do this, we'll use the following code:

     /* MikMod Sound Library example program: a simple module player */
     
     #include <unistd.h>
     #include <mikmod.h>
     
     main()
     {
         MODULE *module;
     
         /* register all the drivers */
         MikMod_RegisterAllDrivers();
     
         /* register all the module loaders */
         MikMod_RegisterAllLoaders();
     
         /* initialize the library */
         md_mode |= DMODE_SOFT_MUSIC;
         if (MikMod_Init("")) {
             fprintf(stderr, "Could not initialize sound, reason: %s\n",
                     MikMod_strerror(MikMod_errno));
             return;
         }
     
         /* load module */
         module = Player_Load("beyond music.mod", 64, 0);
         if (module) {
             /* start module */
             Player_Start(module);
     
             while (Player_Active()) {
                 /* we're playing */
                 usleep(10000);
                 MikMod_Update();
             }
     
             Player_Stop();
             Player_Free(module);
         } else
             fprintf(stderr, "Could not load module, reason: %s\n",
                     MikMod_strerror(MikMod_errno));
     
         /* give up */
         MikMod_Exit();
     }

What's new here ? First, we've not only registered MikMod's device driver, but also the module loaders. MikMod comes with a large choice of module loaders, each one for a different module type. Since every loader is called to determine the type of the module when we try to load them, you may want to register only a few of them to save time. In our case, we don't matter, so we happily register every module loader.

Then, there's an extra line before calling MikMod_Init. We change the value of MikMod's variable md_mode to tell the library that we want the module to be processed by the software. If you're the happy owner of a GUS-type card, you could use the specific hardware driver for this card, but in this case you should not set the DMODE_SOFT_MUSIC flag.

We'll ensure that MikMod_Init was successful. Note that, in case of error, MikMod provides the variable MikMod_errno, an equivalent of the C library errno for MikMod errors, and the function MikMod_strerror, an equivalent to strerror.

Now onto serious business ! The module is loaded with the Player_Load function, which takes the name of the module file, and the number of voices afforded to the module. In this case, the module has only 4 channels, so 4 voices, but complex Impulse Tracker modules can have a lot of voices (as they can have as many as 256 virtual channels with so-called “new note actions”). Since empty voices don't cost time to be processed, it is safe to use a big value, such as 64 or 128. The third parameter is the “curiosity” of the loader: if nonzero, the loader will search for hidden parts in the module. However, only a few module formats can embed hidden or non played parts, so we'll use 0 here.

Now that the module is ready to play, let's play it. We inform the player that the current module is module with Player_Start. Playback starts, but we have to update it on a regular basis. So there's a loop on the result of the Player_Active function, which will tell us if the module has finished. To update the sound, we simply call MikMod_Update.

After the module has finished, we tell the player its job is done with Player_Stop, and we free the module with Player_Free.


Next: , Previous: Playing Modules, Up: Tutorial

2.4 Playing Sound Effects

MikMod is not limited to playing modules, it can also play sound effects, that is, module samples. It's a bit more complex than playing a module, because the module player does a lot of things for us, but here we'll get more control over what is actually played by the program. Let's look at an example:

     /* MikMod Sound Library example program: sound effects */
     
     #include <unistd.h>
     #include <mikmod.h>
     
     main()
     {
         int i;
         /* sound effects */
         SAMPLE *sfx1, *sfx2;
         /* voices */
         int v1, v2;
     
         /* register all the drivers */
         MikMod_RegisterAllDrivers();
     
         /* initialize the library */
         md_mode |= DMODE_SOFT_SNDFX;
         if (MikMod_Init("")) {
             fprintf(stderr, "Could not initialize sound, reason: %s\n",
                     MikMod_strerror(MikMod_errno));
             return;
         }
     
         /* load samples */
         sfx1 = Sample_Load("first.wav");
         if (!sfx1) {
             MikMod_Exit();
             fprintf(stderr, "Could not load the first sound, reason: %s\n",
                     MikMod_strerror(MikMod_errno));
             return;
         }
         sfx2 = Sample_Load("second.wav");
         if (!sfx2) {
             Sample_Free(sfx1);
             MikMod_Exit();
             fprintf(stderr, "Could not load the second sound, reason: %s\n",
                     MikMod_strerror(MikMod_errno));
             return;
         }
     
         /* reserve 2 voices for sound effects */
         MikMod_SetNumVoices(-1, 2);
     
         /* get ready to play */
         MikMod_EnableOutput();
     
         /* play first sample */
         v1 = Sample_Play(sfx1, 0, 0);
         for(i = 0; i < 5; i++) {
             MikMod_Update();
             usleep(100000);
         }
     
         /* half a second later, play second sample */
         v2 = Sample_Play(sfx2, 0, 0);
         do {
             MikMod_Update();
             usleep(100000);
         } while (!Voice_Stopped(v2));
     
         MikMod_DisableOutput();
     
         Sample_Free(sfx2);
         Sample_Free(sfx1);
     
         MikMod_Exit();
     }

As in the previous example, we begin by registering the sound drivers and initializing the library. We also ask for software mixing by modifying the variable md_mode.

It's time to load our files, with the Sample_Load function. Don't forget to test the return value — it looks ugly here on such a small example, but it's a good practice...

Since we want to play two samples, we have to use at least two voices for this, so we reserve them with a MikMod_SetNumVoices call. The first parameter sets the number of module voices, and the second parameter the number of sound effect voices. We don't want to set the number of module voices here (it's part of the module player's duty), so we use the value -1 to keep the current value, and we reserve two sound effect voices.

Now we're ready to play, so we call MikMod_EnableOutput to make the driver ready. Sound effects are played by the Sample_Play function. You just have to specify which sample you want to play, the offset from which you want to start, and the playback flags. More on this later. The function returns the number of the voice associated to the sample.

We play the first sample for half a second, then we start to play the second sample. Since we've reserved two channels, both samples play simultaneously. We use the Voice_Stopped function to stop the playback: it returns the current status of the voice argument, which is zero when the sample plays and nonzero when it has finished. So the do loop will stop exactly when the second sample is finished, regardless of the length of the first sample.

To finish, we get rid of the samples with Sample_Free.


Previous: Playing Sound Effects, Up: Tutorial

2.5 More Sound Effects

Sound effects have some attributes that can be affected to control the playback. These are speed, panning, and volume. Given a voice number, you can affect these attributes with the Voice_SetFrequency, Voice_SetPanning and Voice_SetVolume functions.

In the previous example, we'll replace the actual sound code, located between the calls to MikMod_EnableOutput and MikMod_DisableOutput, with the following code:

         Sample_Play(sfx1, 0, 0);
         for(i = 0; i < 5; i++) {
             MikMod_Update();
             usleep(100000);
         }
         v2 = Sample_Play(sfx2, 0, SFX_CRITICAL);
         i = 0;
         do {
             MikMod_Update();
             usleep(100000);
             v1 = Sample_Play(sfx1, 0, 0);
             Voice_SetVolume(v1, 160);
             Voice_SetFrequency(v1, (sfx1->speed * (100 + i)) / 100);
             Voice_SetPanning(v2, (i++ & 1) ? PAN_LEFT : PAN_RIGHT);
         } while (!Voice_Stopped(v2));

The first thing you'll notice, is the SFX_CRITICAL flag used to play the second sample. Since the do loop will add another sample every 100 milliseconds, and we reserved only two voices, the oldest voice will be cut each time this is necessary. Doing this would cut the second sample in the second iteration of the loop. However, since we flagged this sound as “critical”, it won't be cut until it is finished or we stop it with a Voice_Stop call. So the second sample will play fine, whereas the first sample will be stopped every loop iteration.

Then, we choose to play the first sample a bit lower, with Voice_SetVolume. Volume voices range from 0 (silence) to 256. In this case we play the sample at 160. To make the sound look weird, we also change its frequency with Voice_SetFrequency. The computation in the example code makes the frequency more and more high (starting from the sample frequency and then increasing from 1% each iteration).

And to demonstrate the Voice_SetPanning function, we change the panning of the second sample at each iteration from the left to the right. The argument can be one of the standard panning PAN_LEFT, PAN_RIGHT, PAN_CENTER and PAN_SURROUND1, or a numeric value between 0 (PAN_LEFT) and 255 (PAN_RIGHT).


Next: , Previous: Tutorial, Up: Top

3 Using the Library

This chapter describes the various parts of the library and their uses.

3.1 Library Version

If your program is dynamically linked with the MikMod library, you should check which version of the library you're working with. To do this, the library defines a few constants and a function to help you determine if the current library is adequate for your needs or if it has to be upgraded.

When your program includes mikmod.h, the following constants are defined:

  • LIBMIKMOD_VERSION_MAJOR is equal to the major version number of the library.
  • LIBMIKMOD_VERSION_MINOR is equal to the minor version number of the library.
  • LIBMIKMOD_REVISION is equal to the revision number of the library.
  • LIBMIKMOD_VERSION is the sum of LIBMIKMOD_VERSION_MAJOR shifted 16 times, LIBMIKMOD_VERSION_MINOR shifted 8 times, and LIBMIKMOD_REVISION.

So your program can tell with which version of the library it has been compiled this way:

     printf("Compiled with MikMod Sound Library version %ld.%ld.%ld\n",
            LIBMIKMOD_VERSION_MAJOR,
            LIBMIKMOD_VERSION_MINOR,
            LIBMIKMOD_REVISION);

The library defines the function MikMod_GetVersion which returns the value of LIBMIKMOD_VERSION for the library. If this value is greater than or equal to the value of LIBMIKMOD_VERSION for your program, your program will work; otherwise, you'll have to inform the user that he has to upgrade the library:

     {
         long engineversion = MikMod_GetVersion();
     
         if (engineversion < LIBMIKMOD_VERSION) {
             printf("MikMod library version (%ld.%ld.%ld) is too old.\n",
                    (engineversion >> 16) & 255,
                    (engineversion >> 8) & 255,
                    (engineversion) & 255);
             printf("This programs requires at least version %ld.%ld.%ld\n",
                    LIBMIKMOD_VERSION_MAJOR,
                    LIBMIKMOD_VERSION_MINOR,
                    LIBMIKMOD_REVISION);
             puts("Please upgrade your MikMod library.");
             exit(1);
         }
     }

3.2 Type Definitions

MikMod defines several data types to deal with modules and sample data. These types have the same memory size on every platform MikMod has been ported to.

These types are:

  • CHAR is a printable character. For now it is the same as the char type, but in the future it may be wide char (Unicode) on some platforms.
  • SBYTE is a signed 8 bit number (can range from -128 to 127).
  • UBYTE is an unsigned 8 bit number (can range from 0 to 255).
  • SWORD is a signed 16 bit number (can range from -32768 to 32767).
  • UWORD is an unsigned 16 bit number (can range from 0 to 65535).
  • SLONG is a signed 32 bit number (can range from -2.147.483.648 to 2.147.483.647).
  • ULONG is an unsigned 32 bit number (can range from 0 to 4.294.967.296).
  • BOOL is a boolean value. A value of 0 means false, any other value means true.

3.3 Error Handling

Although MikMod does its best to do its work, there are times where it can't. For example, if you're trying to play a corrupted file, well, it can't.

A lot of MikMod functions return pointers or BOOL values. If the pointer is NULL or the BOOL is 0 (false), an error has occurred.

MikMod errors are returned in the variable MikMod_errno. Each possible error has a symbolic error code, beginning with MMERR_. For example, if MikMod can't open a file, MikMod_errno will receive the value MMERR_OPENING_FILE.

You can get an appropriate error message to display from the function MikMod_strerror.

There is a second error variable named MikMod_critical. As its name suggests, it is only set if the error lets the library in an unstable state. This variable can only be set by the functions MikMod_Init, MikMod_SetNumVoices and MikMod_EnableOutput. If one of these functions return an error and MikMod_critical is set, the library is left in the uninitialized state (i.e. it was not initialized, or MikMod_Exit was called).

If you prefer, you can use a callback function to get notified of errors. This function must be prototyped as void MyFunction(void). Then, call MikMod_RegisterHandler with your function as argument to have it notified when an error occurs. There can only be one callback function registered, but MikMod_RegisterHandler will return you the previous handler, so you can chain handlers if you want to.

3.4 Library Initialization and Core Functions

To initialize the library, you must register some sound drivers first. You can either register all the drivers embedded in the library for your platform with MikMod_RegisterAllDrivers, or register only some of them with MikMod_RegisterDriver. If you choose to register the drivers manually, you must be careful in their order, since MikMod_Init will try them in the order you registered them. The MikMod_RegisterAllDrivers function registers the network drivers first (for playing sound over the network), then the hardware drivers, then the disk writers, and in last resort, the nosound driver. Registering the nosound driver first would not be a very good idea...

You can get some printable information regarding the registered drivers with MikMod_InfoDriver; don't forget to call free on the returned string when you don't need it anymore.

After you've registered your drivers, you can initialize the sound playback with MikMod_Init, passing specific information to the driver if necessary. If you set the variable md_device to zero, which is its default value, the driver will be autodetected, that is, the first driver in the list that is available on the system will be used; otherwise only the driver whose order in the list of the registered drivers is equal to md_device will be tried. If your playback settings, in the variables md_mixfreq and md_mode, are not supported by the device, MikMod_Init will fail.

You can then choose the number of voices you need with MikMod_SetNumVoices, and activate the playback with MikMod_EnableOutput.

Don't forget to call MikMod_Update as often as possible to process the sound mixing. If necessary, fork a dedicated process to do this, or if the library is thread-safe on your system, use a dedicated thread.

If you want to change playback settings, most of them can't be changed on the fly. You'll need to stop the playback and reinitialize the driver. Use MikMod_Active to check if there is still sound playing; in this case, call MikMod_DisableOutput to end playback. Then, change your settings and call MikMod_Reset. You're now ready to select your number of voices and restart playback.

When your program ends, don't forget to stop playback and call MikMod_Exit to leave the sound hardware in a coherent state.

On systems that have pthreads, libmikmod is thread-safe2. You can check this in your programs with the MikMod_InitThreads function. If this function returns 1, the library is thread-safe.

The main benefit of thread-safety is that MikMod_Update can be called from a separate thread, which often makes application design easier. However, several libmikmod global variables are accessible from all your threads, so when more than one thread need to access libmikmod variables, you'll have to protect these access with the MikMod_Lock and MikMod_Unlock functions. If libmikmod is not thread-safe, these functions are no-ops.

3.5 Samples and Voice Control

Currently, MikMod only supports uncompressed mono WAV files as samples. You can load a sample by calling Sample_Load with a filename, or by calling Sample_LoadFP with an open FILE* pointer. These functions return a pointer to a SAMPLE structure, or NULL in case of error.

The SAMPLE structure has a few interesting fields:

  • speed contains the default frequency of the sample.
  • volume contains the default volume of the sample, ranging from 0 (silence) to 64.
  • panning contains the default panning position of the sample.

Altering one of those fields will affect all voices currently playing the sample. You can achieve the same result on a single voice with the functions Voice_SetFrequency, Voice_SetVolume and Voice_SetPanning. Since the same sample can be played with different frequency, volume and panning parameters on each voice, you can get voice specific information with Voice_GetFrequency, Voice_GetVolume and Voice_GetPanning.

You can also make your sample loop by setting the fields loopstart and loopend and or'ing flags with SF_LOOP. To compute your loop values, the field length will be useful. However, you must know that all the sample length are expressed in samples, i.e. 8 bits for an 8 bit sample, and 16 bit for a 16 bit sample... Test flags for the value SF_16BITS to know this.

Speaking of flags, if you're curious and want to know the original format of the sample on disk (since libmikmod does some work on the sample data internally), refer to the inflags field.

If the common forward loop isn't enough, you can play with some other flags: SF_BIDI will make your sample loop “ping pong” (back and forth), and SF_REVERSE will make it play backwards.

To play your sample, use the Sample_Play function. This function will return a voice number which enable you to use the Voice_xx functions.

The sample will play until another sample takes over its voice (when you play more samples than you reserved sound effect voices), unless it has been flagged as SFX_CRITICAL. You can force it to stop with Voice_Stop, or you can force another sample to take over this voice with Voice_Play; however Voice_Play doesn't let you flag the new sample as critical.

Non looping samples will free their voice channel as soon as they are finished; you can know the current playback position of your sample with Voice_GetPosition. If it is zero, either the sample has finished playing or it is just beginning; use Voice_Stopped to know.

When you don't need a sample anymore, don't forget to free its memory with Sample_Free.

3.6 Modules and Player Control

As for the sound drivers, you have to register the module loaders you want to use for MikMod to be able to load modules. You can either register all the module loaders with MikMod_RegisterAllLoaders, or only a few of them with MikMod_RegisterLoader. Be careful if you choose this solution, as the 15 instrument MOD loader has to be registered last, since loaders are called in the order they were register to identify modules, and the detection of this format is not fully reliable, so other modules might be mistaken as 15 instrument MOD files.

You can get some printable information regarding the registered loaders with MikMod_InfoLoader; don't forget to call free on the returned string when you don't need it anymore.

Note that, contrary to the sound drivers, you can register module loaders at any time, it doesn't matter.

For playlists, you might be interested in knowing the module title first, and Player_LoadTitle will give you this information. Don't forget to free the returned text when you don't need it anymore.

You can load a module either with Player_Load and the name of the module, or with Player_LoadFP and an open FILE* pointer. These functions also expect a maximal number of voices, and a curiosity flag. Unless you have excellent reasons not to do so, choose a big limit, such as 64 or even 128 for complex Impulse Tracker modules. Both functions return a pointer to an MODULE structure, or NULL if an error occurs.

You'll find some useful information in this structure:

  • numchn contains the number of module “real” channels.
  • numvoices contains the number of voices reserved by the player for the real channels and the virtual channels (NNA).
  • numpas and numpat contain the number of song positions and song patterns.
  • numins and numsmp contain the number of instruments and samples.
  • songname contains the song title.
  • modtype contains the name of the tracker used to create the song.
  • comment contains the song comment, if it has one.
  • sngtime contains the time elapsed in the module, in 2^−10 seconds (not exactly a millisecond).
  • sngspd and bpm contain the song speed and tempo.
  • realchn contains the actual number of active channels.
  • totalchn contains the actual number of active virtual channels, i.e. the sum of realchn and the number of NNA virtual channels.

Now that the module is loaded, you need to tell the module player that you want to play this particular module with Player_Start (the player can only play one module, but you can have several modules in memory). The playback begins. Should you forget which module is playing, Player_GetModule will return it to you.

You can change the current song position with the functions Player_NextPosition, Player_PrevPosition and Player_SetPosition, the speed with Player_SetSpeed and Player_SetTempo, and the volume (ranging from 0 to 128) with Player_SetVolume.

Playback can be paused or resumed with Player_TogglePause. Be sure to check with Player_Paused that it isn't already in the state you want !

Fine player control is achieved by the functions Player_Mute, Player_UnMute and Player_ToggleMute which can silence or resume a set of module channels. The function Player_Muted will return the state of a given channel. And if you want even more control, you can get the voice corresponding to a module channel with Player_GetChannelVoice and act directly on the voice.

Modules play only once, but can loop indefinitely if they are designed to do so. You can change this behavior with the wrap and loop of the MODULE structure; the first one, if set, will make the module restart when it's finished, and the second one, if set, will prevent the module from jumping backwards.

You can test if the module is still playing with Player_Active, and you can stop it at any time with Player_Stop. When the module isn't needed anymore, get rid of it with Player_Free.

3.7 Loading Data from Memory

If you need to load modules or sound effects from other places than plain files, you can use the MREADER and MWRITER objects to achieve this.

The MREADER and MWRITER structures contain a list of function pointers, which emulate the behaviour of a regular FILE * object. In fact, all functions which take filenames or FILE * as arguments are only wrappers to a real function which takes an MREADER or an MWRITER argument.

So, if you need to load a module from memory, or for a multi-file archive, for example, all you need is to build an adequate MREADER object, and use Player_LoadGeneric instead of Player_Load or Player_LoadFP. For samples, use Sample_LoadGeneric instead of Sample_Load or Sample_LoadFP.


Next: , Previous: Using the Library, Up: Top

4 Library Reference

This chapter describes in more detail all the functions and variables provided by the library. See Type Definitions, for the basic type reference.

4.1 Variable Reference

4.1.1 Error Variables

The following variables are set by the library to return error information.

int MikMod_errno
When an error occurs, this variable contains the error code. See Error Reference, for more information.
BOOL MikMod_critical
When an error occurs, this variable informs of the severity of the error. Its value has sense only if the value of MikMod_errno is different from zero. If the value of MikMod_critical is zero, the error wasn't fatal and the library is in a stable state. However, if it is nonzero, then the library can't be used and has reseted itself to the uninitialized state. This often means that the mixing parameters you choose were not supported by the driver, or that it doesn't has enough voices for your needs if you called MikMod_SetNumVoices.

4.1.2 Sound Settings

The following variables control the sound output parameters and their changes take effect immediately.

UBYTE md_musicvolume
Volume of the module. Allowed values range from 0 to 128. The default value is 128.
UBYTE md_pansep
Stereo channels separation. Allowed values range from 0 (no separation, thus mono sound) to 128 (full channel separation). The default value is 128.
UBYTE md_reverb
Amount of sound reverberation. Allowed values range from 0 (no reverberation) to 15 (a rough estimate for chaos...). The default value is 0.
UBYTE md_sndfxvolume
Volume of the sound effects. Allowed values range from 0 to 128. The default value is 128.
UBYTE md_volume
Overall sound volume. Allowed values range from 0 to 128. The default value is 128.

4.1.3 Driver Settings

The following variables control more in-depth sound output parameters. Except for some md_mode flags, their changes do not have any effect until you call MikMod_Init or MikMod_Reset.

UWORD md_device
This variable contains the order, in the list of the registered drivers, of the sound driver which will be used for sound playback. This order is one-based; if this variable is set to zero, the driver is autodetected, which means the list is tested until a driver is present on the system. The default value is 0, thus driver is autodetected.
MDRIVER* md_driver
This variable points to the driver which is being used for sound playback, and is undefined when the library is uninitialized (before MikMod_Init and after MikMod_Exit). This variable is for information only, you should never attempt to change its value. Use md_driver and MikMod_Init (or MikMod_Reset) instead.
UWORD md_mixfreq
Sound playback frequency, in hertz. High values yield high sound quality, but need more computing power than lower values. The default value is 44100 Hz, which is compact disc quality. Other common values are 22100 Hz (radio quality), 11025 Hz (phone quality), and 8000 Hz (mu-law quality).
UWORD md_mode
This variable is a combination of several flags, to select which output mode to select. The following flags have a direct action to the sound output (i.e. changes take effect immediately):
DMODE_INTERP
This flag, if set, enables the interpolated mixers. Interpolated mixing gives better sound but takes a bit more time than standard mixing. If the library is built with the high quality mixer, interpolated mixing is always enabled, regardless of this flag.
DMODE_REVERSE
This flag, if set, exchanges the left and right stereo channels.
DMODE_SURROUND
This flag, if set, enables the surround mixers. Since surround mixing works only for stereo sound, this flag has no effect if the sound playback is in mono.

The following flags aren't taken in account until the sound driver is changed or reset:

DMODE_16BIT
This flag, if set, selects 16 bit sound mode. This mode yields better sound quality, but needs twice more mixing time.
DMODE_HQMIXER
This flag, if set, selects the high-quality software mixer. This mode yields better sound quality, but needs more mixing time. Of course, this flag has no effect if no DMODE_SOFT_xx flag is set.
DMODE_SOFT_MUSIC
This flag, if set, selects software mixing of the module.
DMODE_SOFT_SNDFX
This flag, if set, selects software mixing of the sound effects.
DMODE_STEREO
This flag, if set, selects stereo sound.

The default value of this variable is ‘DMODE_STEREO | DMODE_SURROUND | DMODE_16BITS | DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX’.

4.2 Structure Reference

Only the useful fields are described here; if a structure field is not described, you must assume that it's an internal field which must not be modified.

4.2.1 Drivers

The MDRIVER structure is not meant to be used by anything else than the core of the library, but its first four fields contain useful information for your programs:

CHAR* Name
Name of the driver, usually never more than 20 characters.
CHAR* Description
Description of the driver, usually never more than 50 characters.
UBYTE HardVoiceLimit
Maximum number of hardware voices for this driver, 0 if the driver has no hardware mixing support.
UBYTE SoftVoiceLimit
Maximum number of software voices for this driver, 0 if the driver has no software mixing support.
CHAR* Alias
A short name for the driver, without spaces, usually never more than 10 characters.

4.2.2 Modules

The MODULE structure gathers all the necessary information needed to play a module file, regardless of its initial format.

4.2.2.1 General Module Information

The fields described in this section contain general information about the module and should not be modified.

CHAR* songname
Name of the module.
CHAR* modtype
Type of the module (which tracker format).
CHAR* comment
Either the module comments, or NULL if the module doesn't have comments.
UWORD flags
Several module flags or'ed together.
UF_ARPMEM
If set, arpeggio effects have memory.
UF_BGSLIDES
If set, volume slide effects continue until a new note or a new effect is played.
UF_HIGHBPM
If set, the module is allowed to have its tempo value (bpm) over 255.
UF_INST
If set, the module has instruments and samples; otherwise, the module has only samples.
UF_LINEAR
If set, slide periods are linear; otherwise, they are logarithmic.
UF_NNA
If set, module uses new note actions (NNA) and the numvoices field is valid.
UF_NOWRAP
If set, pattern break on the last pattern does not continue to the first pattern.
UF_S3MSLIDES
If set, module uses old-S3M style volume slides (slides processed every tick); otherwise, it uses the standard style (slides processed every tick except the first).
UF_XMPERIODS
If set, module uses XM-type periods; otherwise, it uses Amiga periods.
UF_FT2QUIRKS
If set, module player will reproduce some FastTracker 2 quirks during playback.
UF_PANNING
If set, module use panning commands.

UBYTE numchn
The number of channels in the module.
UBYTE numvoices
If the module uses NNA, and this variable is not zero, it contains the limit of module voices; otherwise, the limit is set to the maxchan parameter of the Player_Loadxx functions.
UWORD numpos
The number of sound positions in the module.
UWORD numpat
The number of patterns.
UWORD numins
The number of instruments.
UWORD numsmp
The number of samples.
INSTRUMENT* instruments
Points to an array of instrument structures.
SAMPLE* samples
Points to an array of sample structures.
UBYTE realchn
During playback, this variable contains the number of active channels (not counting NNA channels).
UBYTE totalchn
During playback, this variable contains the total number of channels (including NNA channels).
ULONG sngtime
Elapsed song time, in 2^−10 seconds units (not exactly a millisecond). To convert this value to seconds, divide by 1024, not 1000 !
4.2.2.2 Playback Settings

The fields described here control the module playback and can be modified at any time, unless otherwise specified.

UBYTE initspeed
The initial speed of the module (Protracker compatible). Valid range is 1-32.
UBYTE inittempo
The initial tempo of the module (Protracker compatible). Valid range is 32-255.
UBYTE initvolume
The initial overall volume of the module. Valid range is 0-128.
UWORD panning[]
The current channel panning positions. Only the first numchn values are defined.
UBYTE chanvol[]
The current channel volumes. Only the first numchn values are defined.
UWORD bpm
The current tempo of the module. Use Player_SetTempo to change its value.
UBYTE sngspd
The current speed of the module. Use Player_SetSpeed to change its value.
UBYTE volume
The current overall volume of the module, in range 0-128. Use Player_SetVolume to change its value.
BOOL extspd
If zero, Protracker extended speed effect (in-module tempo modification) is not processed. The default value is 1, which causes this effect to be processed. However, some old modules might not play correctly if this effect is not neutralized.
BOOL panflag
If zero, panning effects are not processed. The default value is 1, which cause all panning effects to be processed. However, some old modules might not play correctly if panning is not neutralized.
BOOL wrap
If nonzero, module wraps to its restart position when it is finished, to play continuously. Default value is zero (play only once).
UBYTE reppos
The restart position of the module, when it wraps.
BOOL loop
If nonzero, all in-module loops are processed; otherwise, backward loops which decrease the current position are not processed (i.e. only forward loops, and backward loops in the same pattern, are processed). This ensures that the module never loops endlessly. The default value is 1 (all loops are processed).
BOOL fadeout
If nonzero, volume fades out during when last position of the module is being played. Default value us zero (no fadeout).
UWORD patpos
Current position (row) in the pattern being played. Must not be changed.
SWORD sngpos
Current song position. Do not change this variable directly, use Player_NextPosition, Player_PrevPosition or Player_SetPosition instead.
SWORD relspd
Relative playback speed. The value of this variable is added to the module tempo to define the actual playback speed. The default value is 0, which make modules play at their intended speed.

4.2.3 Module Instruments

Although the INSTRUMENT structure is intended for internal use, you might need to know its name:

CHAR* insname
The instrument text, theoretically its name, but often a message line.

4.2.4 Samples

The SAMPLE structure is used for sound effects and module samples as well. You can play with the following fields:

SWORD panning
Panning value of the sample. Valid values range from PAN_LEFT (0) to PAN_RIGHT (255), or PAN_SURROUND.
ULONG speed
Playing frequency of the sample, it hertz.
UBYTE volume
Sample volume. Valid range is 0-64.
UWORD flags
Several format flags or'ed together describing the format of the sample in memory.

Format flags:

SF_16BITS
If set, sample data is 16 bit wide; otherwise, it is 8 bit wide.
SF_BIG_ENDIAN
If set, sample data is in big–endian (Motorola) format; otherwise, it is in little–endian (Intel) format.
SF_DELTA
If set, sample is stored as delta values (differences between two consecutive samples); otherwise, sample is stored as sample values.
SF_ITPACKED
If set, sample data is packed with Impulse Tracker's compression method; otherwise, sample is not packed.
SF_SIGNED
If set, sample data is made of signed values; otherwise, it is made of unsigned values.
SF_STEREO
If set, sample data is stereo (two channels); otherwise, it is mono.

Playback flags:

SF_BIDI
If set, sample loops “ping pong” (back and forth).
SF_LOOP
If set, sample loops forward.
SF_REVERSE
If set, sample plays backwards.

UWORD inflags
Same as “flags”, but describing the format of the sample on disk.
ULONG length
Length of the sample, in samples. The length of a sample is 8 bits (1 byte) for a 8 bit sample, and 16 bits (2 bytes) for a 16 bit sample.
ULONG loopstart
Loop starting position, relative to the start of the sample, in samples.
ULONG loopend
Loop ending position, relative to the start of the sample, in samples.

4.2.5 MREADER

The MREADER contains the following function pointers:

int (*Seek)(struct MREADER*, long offset, int whence)
This function should have the same behaviour as fseek, with offset 0 meaning the start of the object (module, sample) being loaded.
long (*Tell)(struct MREADER*)
This function should have the same behaviour as ftell, with offset 0 meaning the start of the object being loaded.
BOOL (*Read)(struct MREADER*, void *dest, size_t length)
This function should copy length bytes of data into dest, and return zero if an error occured, and any nonzero value otherwise. Note that an end-of-file condition will not be considered as an error in this case.
int (*Get)(struct MREADER*)
This function should have the same behaviour as fgetc.
BOOL (*Eof)(struct MREADER*)
This function should have the same behaviour as feof.

For an example of how to build an MREADER object, please refer to the MFILEREADER object in file mmio/mmio.c in the library sources.

4.2.6 MWRITER

The MWRITER contains the following function pointers:

int (*Seek)(struct MWRITER*, long offset, int whence);
This function should have the same behaviour as fseek, with offset 0 meaning the start of the object being written.
long (*Tell)(struct MWRITER*);
This function should have the same behaviour as ftell, with offset 0 meaning the start of the object being written.
BOOL (*Write)(struct MWRITER*, void *src, size_t length);
This function should copy length bytes of data from src, and return zero if an error occured, and any nonzero value otherwise.
int (*Put)(struct MWRITER*, int data);
This function should have the same behaviour as fputc.

For an example of how to build an MWRITER object, please refer to the MFILEWRITER object in file mmio/mmio.c in the library sources.

4.3 Error Reference

The following errors are currently defined:

4.3.1 General Errors

MMERR_DYNAMIC_LINKING
This error occurs when a specific driver was requested, but the support shared library couldn't be loaded. Currently, the only drivers which can yield this error are the ALSA, EsounD and Ultra drivers.
MMERR_OPENING_FILE
This error occurs when a file can not be opened, either for read access from a xx_Loadxx function, or for write access from the disk writer drivers.
MMERR_OUT_OF_MEMORY
This error occurs when there is not enough virtual memory available to complete the operation, or there is enough memory but the calling process would exceed its memory limit. MikMod does not do any resource tuning, your program has to use the setrlimit function to do this if it needs to load very huge samples.

4.3.2 Sample Errors

MMERR_SAMPLE_TOO_BIG
This error occurs when the memory allocation of the sample data yields the error MMERR_OUT_OF_MEMORY.
MMERR_OUT_OF_HANDLES
This error occurs when your program reaches the limit of loaded samples, currently defined as 384, which should be sufficient for most cases.
MMERR_UNKNOWN_WAVE_TYPE
This error occurs when you're trying to load a sample which format is not recognized.

4.3.3 Module Errors

MMERR_ITPACK_INVALID_DATA
This error occurs when a compressed module sample is corrupt.
MMERR_LOADING_HEADER
This error occurs when you're trying to load a module which has a corrupted header, or is truncated.
MMERR_LOADING_PATTERN
This error occurs when you're trying to load a module which has corrupted pattern data, or is truncated.
MMERR_LOADING_SAMPLEINFO
This error occurs when you're trying to load a module which has corrupted sample information, or is truncated.
MMERR_LOADING_TRACK
This error occurs when you're trying to load a module which has corrupted track data, or is truncated.
MMERR_MED_SYNTHSAMPLES
This error occurs when you're trying to load a MED module which has synthsounds samples, which are currently not supported.3
MMERR_NOT_A_MODULE
This error occurs when you're trying to load a module which format is not recognized.
MMERR_NOT_A_STREAM
This error occurs when you're trying to load a sample with a sample which format is not recognized.

4.3.4 Driver Errors

4.3.4.1 Generic Driver Errors
MMERR_16BIT_ONLY
This error occurs when the sound device doesn't support non-16 bit linear sound output, which are the requested settings.
MMERR_8BIT_ONLY
This error occurs when the sound device doesn't support non-8 bit linear sound output, which are the requested settings.
MMERR_DETECTING_DEVICE
This error occurs when the driver's sound device has not been detected.
MMERR_INITIALIZING_MIXER
This error occurs when MikMod's internal software mixer could not be initialized properly.
MMERR_INVALID_DEVICE
This error occurs when the driver number (in md_device) is out of range.
MMERR_NON_BLOCK
This error occurs when the driver is unable to set the audio device in non blocking mode.
MMERR_OPENING_AUDIO
This error occurs when the driver can not open sound device.
MMERR_STEREO_ONLY
This error occurs when the sound device doesn't support mono sound output, which is the requested setting.
MMERR_ULAW
This error occurs when the sound device only supports uLaw output (which implies mono, 8 bit, and 8000 Hz sampling rate), which isn't the requested setting.
4.3.4.2 AudioFile Driver Specific Error
MMERR_AF_AUDIO_PORT
This error occurs when the AudioFile driver can not find a suitable AudioFile port.
4.3.4.3 AIX Driver Specific Errors
MMERR_AIX_CONFIG_CONTROL
This error occurs when the “Control” step of the device configuration has failed.
MMERR_AIX_CONFIG_INIT
This error occurs when the “Init” step of the device configuration has failed.
MMERR_AIX_CONFIG_START
This error occurs when the “Start” step of the device configuration has failed.
4.3.4.4 Ultra Driver Specific Errors
MMERR_GUS_RESET
This error occurs when the sound device couldn't be reset.
MMERR_GUS_SETTINGS
This error occurs because the sound device only works in 16 bit linear stereo sound at 44100 Hz, which is not the requested settings.
MMERR_GUS_TIMER
This error occurs when the ultra driver could not setup the playback timer.
4.3.4.5 HP-UX Driver Specific Errors
MMERR_HP_AUDIO_DESC
This error occurs when the HP driver can not get the audio hardware description.
MMERR_HP_AUDIO_OUTPUT
This error occurs when the HP driver can not select the audio output.
MMERR_HP_BUFFERSIZE
This error occurs when the HP driver can not set the transmission buffer size.
MMERR_HP_CHANNELS
This error occurs when the HP driver can not set the requested number of channels.
MMERR_HP_SETSAMPLESIZE
This error occurs when the HP driver can not set the requested sample size.
MMERR_HP_SETSPEED
This error occurs when the HP driver can not set the requested sample rate.
4.3.4.6 ALSA Driver Specific Errors
MMERR_ALSA_NOCONFIG
This error occurs when no ALSA playback configuration is available.
MMERR_ALSA_SETPARAMS
This error occurs when the ALSA driver can not set the requested sample format, sample rate, number of channels, access type, or latency values.
MMERR_ALSA_SETFORMAT
This error occurs when the ALSA driver can not set the requested sample format.
MMERR_ALSA_SETRATE
This error occurs when the ALSA driver does not support the requested sample rate.
MMERR_ALSA_SETCHANNELS
This error occurs when the ALSA driver does not support the requested number of channels.
MMERR_ALSA_BUFFERSIZE
This error occurs when the ALSA driver can not retrieve the buffer or period size.
MMERR_ALSA_PCM_START
This error occurs when the ALSA driver can not start the pcm playback.
MMERR_ALSA_PCM_WRITE
This error occurs when the ALSA driver encounters a write error.
MMERR_ALSA_PCM_RECOVER
This error occurs when the ALSA driver encounters an error recovery failure.
4.3.4.7 Open Sound System Driver Specific Errors
MMERR_OSS_SETFRAGMENT
This error occurs when the OSS driver can not set audio fragment size.
MMERR_OSS_SETSAMPLESIZE
This error occurs when the OSS driver can not set the requested sample size.
MMERR_OSS_SETSPEED
This error occurs when the OSS driver can not set the requested sample rate.
MMERR_OSS_SETSTEREO
This error occurs when the OSS driver can not set the requested number of channels.
4.3.4.8 SGI Driver Specific Errors
MMERR_SGI_MONO
This error occurs when the hardware only supports stereo sound.
MMERR_SGI_SPEED
This error occurs when the hardware does not support the requested sample rate.
MMERR_SGI_STEREO
This error occurs when the hardware only supports mono sound.
MMERR_SGI_16BIT
This error occurs when the hardware only supports 16 bit sound.
MMERR_SGI_8BIT
This error occurs when the hardware only supports 8 bit sound.
4.3.4.9 Sun Driver Specific Error
MMERR_SUN_INIT
This error occurs when the sound device initialization failed.
4.3.4.10 OS/2 Driver Specific Errors
MMERR_OS2_MIXSETUP
This error occurs when the DART driver can not set the mixing parameters.
MMERR_OS2_SEMAPHORE
This error occurs when the MMPM/2 driver can not create the semaphores needed for playback.
MMERR_OS2_THREAD
This error occurs when the MMPM/2 driver can not create the thread needed for playback.
MMERR_OS2_TIMER
This error occurs when the MMPM/2 driver can not create the timer needed for playback.
4.3.4.11 DirectX Driver Specific Errors
MMERR_DS_BUFFER
This error occurs when the DirectX driver can not allocate the playback buffers.
MMERR_DS_EVENT
This error occurs when the DirectX driver can not register the playback event.
MMERR_DS_FORMAT
This error occurs when the DirectX driver can not set the playback format.
MMERR_DS_NOTIFY
This error occurs when the DirectX driver can not register the playback callback.
MMERR_DS_PRIORITY
This error occurs when the DirectX driver can not set the playback priority.
MMERR_DS_THREAD
This error occurs when the DirectX driver can not create the playback thread.
MMERR_DS_UPDATE
This error occurs when the DirectX driver can not initialize the playback thread.
4.3.4.12 Windows Multimedia API Driver Specific Errors
MMERR_WINMM_ALLOCATED
This error occurs when the playback resource is already allocated by another application.
MMERR_WINMM_DEVICEID
This error occurs when the Multimedia API Driver is given an invalid audio device identificator.
MMERR_WINMM_FORMAT
This error occurs when the playback output format is not supported by the audio device.
MMERR_WINMM_HANDLE
This error occurs when the Multimedia API Driver is given an invalid handle.
MMERR_WINMM_UNKNOWN
This error should not occur ! If you get this error, please contact the libmikmod development mailing list.
4.3.4.13 MacOS Driver Specific Errors
MMERR_MAC_SPEED
This error occurs when the playback speed is not supported by the audio device.
MMERR_MAC_START
This error occurs when the MacOS driver can not start playback.

4.4 Function Reference

4.4.1 Library Core Functions

4.4.1.1 MikMod_Active

BOOL MikMod_Active(void)

Description
This function returns whether sound output is enabled or not.
Result
0
Sound output is disabled.
1
Sound output is enabled.
Notes
Calls to MikMod_Update will be ignored when sound output is disabled.
See also
MikMod_DisableOutput, MikMod_EnableOutput.
4.4.1.2 MikMod_DisableOutput

void MikMod_DisableOutput(void)

Description
This function stops the sound mixing.
Notes
Calls to MikMod_Update will be ignored when sound output is disabled.
See also
MikMod_Active, MikMod_EnableOutput.
4.4.1.3 MikMod_EnableOutput

int MikMod_EnableOutput(void)

Description
This function starts the sound mixing.
Result
0
Sound mixing is ready.
nonzero
An error occurred during the operation.
Notes
Calls to MikMod_Update will be ignored when sound output is disabled.
See also
MikMod_Active, MikMod_DisableOutput.
4.4.1.4 MikMod_Exit

void MikMod_Exit(void)

Description
This function deinitializes the sound hardware and frees all the memory and resources used by MikMod.
See also
MikMod_Init, MikMod_Reset.
4.4.1.5 MikMod_GetVersion

long MikMod_GetVersion(void)

Description
This function returns the version number of the library.
Result
The version number, encoded as follows: (maj<<16)|(min<<8)|(rev), where ‘maj’ is the major version number, ‘min’ is the minor version number, and ‘rev’ is the revision number.
4.4.1.6 MikMod_InfoDriver

CHAR* MikMod_InfoDriver(void)

Description
This function returns a formatted list of the registered drivers in a buffer.
Result
A pointer to a text buffer, or NULL if no drivers are registered.
Notes
The buffer is created with malloc; the caller must free it when it is no longer necessary.
See also
MikMod_RegisterDriver, MikMod_RegisterAllDrivers.
4.4.1.7 MikMod_InfoLoader

CHAR* MikMod_InfoLoader(void)

Description
This function returns a formatted list of the registered module loaders in a buffer.
Result
A pointer to a text buffer, or NULL if no loaders are registered.
Notes
The buffer is created with malloc; the caller must free it when it is no longer necessary.
See also
MikMod_RegisterLoader, MikMod_RegisterAllLoaders.
4.4.1.8 MikMod_Init

int MikMod_Init(CHAR *parameters)

Description
This function performs the library initialization, including the sound driver choice and configuration, and all the necessary memory allocations.
Parameters
parameters
Optional parameters given to the sound driver. These parameters are ignored if the value of md_device is zero (autodetection).
Result
0
Initialization was successful.
nonzero
An error occurred during initialization.
Notes
When the initialization fails, the library uses the nosound sound driver to let other the other MikMod functions work without crashing the application.
See also
MikMod_Exit, MikMod_InitThreads, MikMod_Reset.
4.4.1.9 MikMod_InitThreads

BOOL MikMod_InitThreads(void)

Description
This function returns whether libmikmod is thread-safe.
Result
0
The library is not thread-safe.
1
The library is thread-safe.
Notes
This function should be called before any call to MikMod_Lock or MikMod_Unlock is made.
See also
MikMod_Lock, MikMod_Unlock.
4.4.1.10 MikMod_Lock

void MikMod_Lock(void)

Description
This function obtains exclusive access to libmikmod's variables.
Notes
This function locks an internal mutex. If the mutex is already locked, it will block the calling thread until the mutex is unlocked.
Every MikMod_Unlock call should be associated to a MikMod_Lock call. To be sure this is the case, we advise you to define and use the following macros:
#define MIKMOD_LOCK MikMod_Lock();{
#define MIKMOD_UNLOCK }MikMod_Unlock();
The function MikMod_InitThreads must have been invoked before any call to MikMod_Lock in made.

See also
MikMod_InitThreads, MikMod_Unlock.
4.4.1.11 MikMod_RegisterAllDrivers

void MikMod_RegisterAllDrivers(void)

Description
This function registers all the available drivers.
See also
MikMod_InfoDriver, MikMod_RegisterDriver.
4.4.1.12 MikMod_RegisterAllLoaders

void MikMod_RegisterAllLoaders(void)

Description
This function registers all the available module loaders.
See also
MikMod_InfoLoader, MikMod_RegisterLoader.
4.4.1.13 MikMod_RegisterDriver

void MikMod_RegisterDriver(struct MDRIVER* newdriver)

Description
This function adds the specified driver to the internal list of usable drivers.
Parameters
newdriver
A pointer to the MDRIVER structure identifying the driver.
Notes
It is safe to register the same driver several times, although it will not be duplicated in the list.
You should register all the drivers you need before calling MikMod_Init. If you want to register all the available drivers, use MikMod_RegisterAllDrivers instead.
See also
MikMod_InfoDriver, MikMod_RegisterAllDrivers.
4.4.1.14 MikMod_RegisterErrorHandler

MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t newhandler)

Description
This function selects the function which should be called in case of error.
Parameters
newhandler
The new error callback function.
Result
The previous error callback function, or NULL if there was none.
Notes
MikMod_handler_t is defined as void(*function)(void), this means your error function has the following prototype: void MyErrorHandler(void)
The error callback function is called when errors are detected, but not always immediately (the library has to resume to a stable state before calling your callback).
4.4.1.15 MikMod_RegisterLoader

void MikMod_RegisterLoader(struct MLOADER* newloader)

Description
This function adds the specified module loader to the internal list of usable module loaders.
Parameters
newloader
A pointer to the MLOADER structure identifying the loader.
Notes
It is safe to register the same loader several times, although it will not be duplicated in the list.
You should register all the loaders you need before calling Player_Load or Player_LoadFP. If you want to register all the available module loaders, use MikMod_RegisterAllLoaders instead.
The 15 instrument module loader (load_m15) should always be registered last.
See also
MikMod_InfoLoader, MikMod_RegisterAllLoaders.
4.4.1.16 MikMod_RegisterPlayer

MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t newplayer)

Description
This function selects the function which should be used to process module playback.
Parameters
newplayer
The new playback function
Result
The previous playback function.
Notes
MikMod_player_t is defined as void(*function)(void), this means your player function has the following prototype: void MyPlayer(void)
The player function is called every module tick to process module playback. The rate at which the player function is called is controlled by the sound driver, and is computed by the following equation:
(bpm*50)/125 calls per second, which means every 125000/(bpm*50) milliseconds. The bpm value is the tempo of the module and can change from its initial value when requested by the module.
When changing the playback function, you should make sure that you chain to the default MikMod playback function, otherwise you won't get module sound anymore...
Example
              MikMod_player_t oldroutine;
          
              void MyPlayer(void)
              {
                  oldroutine();
                  /* your stuff here */
                  ...
              }
          
              main()
              {
                  ...
                  /* Register our player */
                  oldroutine = MikMod_RegisterPlayer(MyPlayer);
                  ...
              }
4.4.1.17 MikMod_Reset

int MikMod_Reset(CHAR *parameters)

Description
This function resets MikMod and reinitialize the sound hardware.
Parameters
parameters
Optional parameters given to the sound driver. If you set the value of md_device to zero (autodetect), these parameters are ignored.
Result
0
Reinitialization was successful.
nonzero
An error occurred during reinitialization.
Notes
Use this function when you have changed the global configuration variables: md_device and md_mixfreq, or one of the md_mode flags which require sound reinitialization. Sound playback will continue as soon as the driver is ready.
See also
MikMod_Exit, MikMod_Init.
4.4.1.18 MikMod_SetNumVoices

int MikMod_SetNumVoices(int musicvoices, int samplevoices)

Description
This function sets the number of mixed voices which can be used for music and sound effects playback.
Parameters
musicvoices
The number of voices to reserve for music playback.
samplevoices
The number of voices to reserve for sound effects.
Result
0
Initialization was successful.
nonzero
An error occurred during initialization.
Notes
A value of -1 for any of the parameters will retain the current number of reserved voices.
The maximum number of voices vary from driver to driver (hardware drivers often have a limit of 32 to 64 voices, whereas the software drivers handle 255 voices). If your settings exceed the driver's limit, they will be truncated.
See also
MikMod_Init, MikMod_Reset.
4.4.1.19 MikMod_Unlock

void MikMod_Unlock(void)

Description
This function relinquishes exclusive access to libmikmod's variables.
Notes
This function unlocks an internal mutex, so that other threads waiting for the lock can be resumed.
Every MikMod_Unlock call should be associated to a MikMod_Lock call. To be sure this is the case, we advise you to define and use the following macros:
#define MIKMOD_LOCK MikMod_Lock();{
#define MIKMOD_UNLOCK }MikMod_Unlock();
The function MikMod_InitThreads must have been invoked before any call to MikMod_Unlock in made.

See also
MikMod_InitThreads, MikMod_Lock.
4.4.1.20 MikMod_Update

void MikMod_Update(void)

Description
This routine should be called on a regular basis to update the sound.
Notes
The sound output buffer is filled each time this function is called; if you use a large buffer, you don't need to call this routine as frequently as with a smaller buffer, but you get a bigger shift between the sound being played and the reported state of the player, since the player is always a buffer ahead of the playback.
If you play low quality sound (for example, mono 8 bit 11kHz sound), you only need to call this routine a few times per second. However, for high quality sound (stereo 16 bit 44kHz), this rate increases to a few hundred times per second, but never more, due to the minimal buffer size constraint imposed to the sound drivers.
If you plan on modifying voice information with the Voice_xx functions, you should do this before calling MikMod_Update.
4.4.1.21 MikMod_strerror

char* MikMod_strerror(int errnum)

Description
This function associates a descriptive message to an error code.
Parameters
errnum
The MikMod error code.
Result
A pointer to a string describing the error.

4.4.2 Module Player Functions

4.4.2.1 Player_Active

BOOL Player_Active(void)

Description
This function returns whether the module player is active or not.
Result
0
No module is playing.
nonzero
A module is currently playing.
Notes
This function will still report that the player is active if the playing module is paused.
See also
Player_Paused, Player_TogglePause, Player_Start, Player_Stop
4.4.2.2 Player_Free

void Player_Free(MODULE* module)

Description
This function stops the module if it is playing and unloads it from memory.
Parameters
module
The module to free.
See also
Player_Load, Player_LoadFP.
4.4.2.3 Player_GetChannelVoice

int Player_GetChannelVoice(UBYTE channel)

Description
This function determines the voice corresponding to the specified module channel.
Parameters
channel
The module channel to use.
Result
The number of the voice corresponding to the module channel.
Notes
If the module channel has NNAs, the number will correspond to the main channel voice.
See also
Voice_SetPanning, Voice_SetVolume, Player_Mute, Player_ToggleMute, Player_Unmute.
4.4.2.4 Player_GetModule

MODULE* Player_GetModule(void)

Description
This function returns the module currently being played.
Result
A pointer to the MODULE being played, or NULL if no module is playing.
See also
Player_Stop, Player_Start.
4.4.2.5 Player_Load

MODULE* Player_Load(CHAR* filename, int maxchan, BOOL curious)

Description
This function loads a music module.
Parameters
filename
The name of the module file.
maxchan
The maximum number of channels the song is allowed to request from the mixer.
curious
The curiosity level to use.
Result
A pointer to a MODULE structure, or NULL if an error occurs.
Notes
If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur:
  • pattern positions occurring after the “end of song” marker in S3M and IT modules are loaded, and the end of song is set to the last position.
  • hidden extra patterns are searched in MOD modules, and if found, played after the last “official” pattern.
  • MED modules with synthsounds are loaded without causing the MMERR_MED_SYNTHSAMPLES, and synthsounds are mapped to an empty sample.

See also
Player_Free, Player_LoadFP, Player_LoadTitle, Player_LoadTitleFP, Player_Start.
4.4.2.6 Player_LoadFP

MODULE* Player_LoadFP(FILE* file, int maxchan, BOOL curious)

Description
This function loads a music module.
Parameters
file
An open file, at the position where the module starts.
maxchan
The maximum number of channels the song is allowed to request from the mixer.
curious
The curiosity level to use.
Result
A pointer to a MODULE structure, or NULL if an error occurs.
Notes
The file is left open, at the same position as before the function call.
If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur:
  • pattern positions occurring after the “end of song” marker in S3M and IT modules are loaded, and the end of song is set to the last position.
  • hidden extra patterns are searched in MOD modules, and if found, played after the last “official” pattern.
  • MED modules with synthsounds are loaded without causing the MMERR_MED_SYNTHSAMPLES, and synthsounds are mapped to an empty sample.

See also
Player_Free, Player_Load, Player_LoadTitle, Player_LoadTitleFP, Player_Start.
4.4.2.7 Player_LoadTitle

MODULE* Player_LoadTitle(CHAR* filename)

Description
This function retrieves the title of a module file.
Parameters
filename
The name of the module file.
Result
A pointer to the song title, or NULL if either the module has no title or an error has occurred.
Notes
The title buffer is created with malloc; the caller must free it when it is no longer necessary.
See also
Player_Load, Player_LoadFP, Player_LoadTitleFP.
4.4.2.8 Player_LoadTitleFP

MODULE* Player_LoadTitleFP(FILE* file)

Description
This function retrieves the title of a module file.
Parameters
file
An open file, at the position where the module starts.
Result
A pointer to the song title, or NULL if either the module has no title or an error has occurred.
Notes
The title buffer is created with malloc; the caller must free it when it is no longer necessary.
See also
Player_Load, Player_LoadFP, Player_LoadTitle.
4.4.2.9 Player_Mute

void Player_Mute(SLONG operation, ...)

Description
This function mutes a single module channel, or a range of module channels.
Parameters
operation
Either the number of a module channel to mute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels.
Notes
If the operation is MUTE_INCLUSIVE, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is MUTE_EXCLUSIVE, they are outside of the range.
Example
              /* mute channel 10 */
              Player_Mute(10);
              /* mute channels 2 to 5 */
              Player_Mute(MUTE_INCLUSIVE, 2, 5);
              /* mute channels 7 to 9 */
              Player_Mute(MUTE_EXCLUSIVE, 6, 10);

See also
Player_Muted, Player_ToggleMute, Player_Unmute.
4.4.2.10 Player_Muted

BOOL Player_Muted(UBYTE channel)

Description
This function determines whether a module channel is muted or not.
Parameters
channel
The module channel to test (starting from zero).
Result
0
The channel is not muted.
1
The channel is muted.
See also
Player_Mute, Player_ToggleMute, Player_Unmute.
4.4.2.11 Player_NextPosition

void Player_NextPosition(void)

Description
This function jumps to the next position in the module.
Notes
All playing samples and active song voices are cut to avoid hanging notes.
See also
Player_PrevPosition, Player_SetPosition.
4.4.2.12 Player_Paused

BOOL Player_Paused(void)

Description
This function determines whether the module is paused or not.
Result
0
The module is not paused.
1
The module is paused.
See also
Player_TogglePause.
4.4.2.13 Player_PrevPosition

void Player_PrevPosition(void)

Description
This function jumps to the previous position in the module.
Notes
All playing samples and active song voices are cut to avoid hanging notes.
See also
Player_NextPosition, Player_SetPosition.
4.4.2.14 Player_SetPosition

void Player_SetPosition(UWORD position)

Description
This function jumps to the specified position in the module.
Parameters
position
The pattern position to jump to.
Notes
All playing samples and active song voices are cut to avoid hanging notes.
See also
Player_NextPosition, Player_PrevPosition.
4.4.2.15 Player_SetSpeed

void Player_SetSpeed(UWORD speed)

Description
This function sets the module speed.
Parameters
speed
The new module speed, in the range 1-32.
See also
Player_SetTempo.
4.4.2.16 Player_SetTempo

void Player_SetTempo(UWORD tempo)

Description
This function sets the module tempo.
Parameters
tempo
The new module tempo, in the range 32-255.
See also
Player_SetSpeed.
4.4.2.17 Player_SetVolume

void Player_SetVolume(SWORD volume)

Description
This function sets the module volume.
Parameters
volume
The new overall module playback volume, in the range 0-128.
4.4.2.18 Player_Start

void Player_Start(MODULE* module)

Description
This function starts the specified module playback.
Parameters
module
The module to play.
Notes
If another module is playing, it will be stopped and the new module will play.
See also
Player_Stop.
4.4.2.19 Player_Stop

void Player_Stop(void)

Description
This function stops the currently playing module.
See also
Player_Start.
4.4.2.20 Player_ToggleMute

void Player_ToggleMute(SLONG operation, ...)

Description
This function changes the muted status of a single module channel, or a range of module channels.
Parameters
operation
Either the number of a module channel to work on (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels.
Notes
If the operation is MUTE_INCLUSIVE, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is MUTE_EXCLUSIVE, they are outside of the range.
Example
              /* toggle mute on channel 10 */
              Player_ToggleMute(10);
              /* toggle mute on channels 2 to 5 */
              Player_ToggleMute(MUTE_INCLUSIVE, 2, 5);
              /* toggle mute on channels 7 to 9 */
              Player_ToggleMute(MUTE_EXCLUSIVE, 6, 10);

See also
Player_Mute, Player_Muted, Player_Unmute.
4.4.2.21 Player_TogglePause

void Player_TogglePause(void)

Description
This function toggles the playing/paused status of the module.
Notes
Calls to Player_xx functions still have effect when the module is paused.
See also
Player_Paused, Player_Start, Player_Stop.
4.4.2.22 Player_Unmute

void Player_Unmute(SLONG operation, ...)

Description
This function unmutes a single module channel, or a range of module channels.
Parameters
operation
Either the number of a module channel to unmute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels.
Notes
If the operation is MUTE_INCLUSIVE, the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is MUTE_EXCLUSIVE, they are outside of the range.
Example
              /* unmute channel 10 */
              Player_Unmute(10);
              /* unmute channels 2 to 5 */
              Player_Unmute(MUTE_INCLUSIVE, 2, 5);
              /* unmute channels 7 to 9 */
              Player_Unmute(MUTE_EXCLUSIVE, 6, 10);

See also
Player_Mute, Player_Muted, Player_ToggleMute.

4.4.3 Sample Functions

4.4.3.1 Sample_Free

void Sample_Free(SAMPLE* sample)

Description
This function unloads a sample from memory.
Parameters
sample
The sample to free.
See also
Sample_Load, Sample_LoadFP.
4.4.3.2 Sample_Load

SAMPLE* Sample_Load(CHAR* filename)

Description
This function loads a sample.
Parameters
filename
The sample filename.
Result
A pointer to a SAMPLE structure, or NULL if an error has occurred.
See also
Sample_Free, Sample_LoadFP.
4.4.3.3 Sample_LoadFP

SAMPLE* Sample_LoadFP(FILE* file)

Description
This function loads a sample.
Parameters
file
An open file, at the position where the sample starts.
Result
A pointer to a SAMPLE structure, or NULL if an error has occurred.
Notes
The file is left open, at the same position as before the function call.
See also
Sample_Free, Sample_Load.
4.4.3.4 Sample_Play

SBYTE Sample_Play(SAMPLE* sample, ULONG start, UBYTE flags)

Description
This function plays a sample as a sound effect.
Parameters
sample
The sample to play.
start
The starting position (in samples).
flags
Either zero, for normal sound effects, or SFX_CRITICAL, for critical sound effects which must not be interrupted.
Result
The voice number corresponding to the voice which will play the sample.
Notes
Each new sound effect is played on a new voice. When all voices are taken, the oldest sample which was not marked as critical is cut and its voice is used for the new sample. Critical samples are not cut unless all the voices are taken with critical samples and you attempt to play yet another critical sample. Use Voice_Stop to force the end of a critical sample.
See also
MikMod_SetNumVoices, Voice_Play, Voice_SetFrequency, Voice_SetPanning, Voice_SetVolume, Voice_Stop.

4.4.4 Voice Functions

4.4.4.1 Voice_GetFrequency

ULONG Voice_GetFrequency(SBYTE voice)

Description
This function returns the frequency of the sample currently playing on the specified voice.
Parameters
voice
The number of the voice to get frequency.
Result
The current frequency of the sample playing on the specified voice, or zero if no sample is currently playing on the voice.
See also
Voice_SetFrequency.
4.4.4.2 Voice_GetPanning

ULONG Voice_GetPanning(SBYTE voice)

Description
This function returns the panning position of the sample currently playing on the specified voice.
Parameters
voice
The number of the voice to get panning position.
Result
The current panning position of the sample playing on the specified voice, or PAN_CENTER if no sample is currently playing on the voice.
See also
Voice_SetPanning.
4.4.4.3 Voice_GetPosition

SLONG Voice_GetPosition(SBYTE voice)

Description
This function returns the sample position (in samples) of the sample currently playing on the specified voice.
Parameters
voice
The number of the voice to get sample position (starting from zero).
Result
The current play location of the sample playing on the specified voice, or zero if the position can not be determined or if no sample is currently playing on the voice.
Notes
This function may not work with some drivers (especially for hardware mixed voices). In this case, it returns always -1.
See also
Sample_Play, Voice_Play.
4.4.4.4 Voice_GetVolume

UWORD Voice_GetVolume(SBYTE voice)

Description
This function returns the volume of the sample currently playing on the specified voice.
Parameters
voice
The number of the voice to get volume.
Result
The current volume of the sample playing on the specified voice, or zero if no sample is currently playing on the voice.
See also
Voice_RealVolume, Voice_SetVolume.
4.4.4.5 Voice_Play

void Voice_Play(SBYTE voice, SAMPLE* sample, ULONG start)

Description
Start a new sample in the specified voice.
Parameters
voice
The number of the voice to be processed (starting from zero).
sample
The sample to play.
start
The starting position (in samples).
Notes
The sample will be played at the volume, panning and frequency settings of the voice, regardless or the sample characteristics.
The sample played this way gets the same “critical” status as the sample which was previously played on this voice.
See also
Sample_Play, Voice_SetFrequency, Voice_SetPanning, Voice_SetVolume.
4.4.4.6 Voice_RealVolume

ULONG Voice_RealVolume(SBYTE voice)

Description
This function returns the actual playing volume of the specified voice.
Parameters
voice
The number of the voice to analyze (starting from zero).
Result
The real volume of the voice when the function was called, in the range 0-65535, not related to the volume constraint specified with Voice_SetVolume.
Notes
This function may not work with some drivers (especially for hardware mixed voices). In this case, it always returns zero.
Also note that the real volume computation is not a trivial process and takes some CPU time.
See also
Sample_Play, Voice_GetVolume, Voice_Play, Voice_SetVolume.
4.4.4.7 Voice_SetFrequency

void Voice_SetFrequency(SBYTE voice, ULONG frequency)

Description
This function sets the frequency (pitch) of the specified voice.
Parameters
voice
The number of the voice to be processed (starting from zero).
frequency
The new frequency of the voice, in hertz.
See also
Sample_Play, Voice_GetFrequency, Voice_Play, Voice_SetPanning, Voice_SetVolume, Voice_Stop.
4.4.4.8 Voice_SetPanning

void Voice_SetPanning(SBYTE voice, ULONG panning)

Description
This function sets the panning position of the specified voice.
Parameters
voice
The number of the voice to be processed (starting from zero).
panning
The new panning position of the voice.
Notes
Panning can vary between 0 (PAN_LEFT) and 255 (PAN_RIGHT). Center is 127 (PAN_CENTER. Surround sound can be enabled by specifying the special value PAN_SURROUND.
See also
Sample_Play, Voice_GetPanning, Voice_Play, Voice_SetFrequency, Voice_SetVolume, Voice_Stop.
4.4.4.9 Voice_SetVolume

void Voice_SetVolume(SBYTE voice, UWORD volume)

Description
This function sets the volume of the specified voice.
Parameters
voice
The number of the voice to be processed (starting from zero).
volume
The new volume of the voice, in the range 0-256.
See also
Sample_Play, Voice_GetVolume, Voice_Play, Voice_SetFrequency, Voice_SetPanning, Voice_Stop.
4.4.4.10 Voice_Stop

void Voice_Stop(SBYTE voice)

Description
This function stops the playing sample of the specified voice.
Parameters
voice
The number of the voice to be processed (starting from zero).
Notes
After the call to Voice_Stop, the function Voice_Stopped will return nonzero (true) for the voice. If you want to silence the voice without stopping the playback, use Voice_SetVolume(voice, 0) instead.
See also
Sample_Play, Voice_Play, Voice_SetFrequency, Voice_SetPanning, Voice_SetVolume.
4.4.4.11 Voice_Stopped

BOOL Voice_Stopped(SBYTE voice)

Description
This function returns whether the voice is active or not.
Parameters
voice
The number of the voice to be checked (starting from zero).
Result
0
The voice is stopped or has no sample assigned.
nonzero
The voice is playing a sample.
Notes
This function may not work with some drivers (especially for hardware mixed voices). In this case, its return value is undefined.
See also
Voice_Stop.

4.5 Loader Reference

4.5.1 Module Loaders

MikMod presents a large choice of module loaders, for the most common formats as well as for some less-known exotic formats.

load_669
This loader recognizes “Composer 669” and “Unis 669” modules. The 669 and “Extended 669” formats were among the first PC module formats. They do not have a wide range of effects, but support up to 32 channels.
“Composer 669” was written by Tran of Renaissance, a.k.a. Tomasz Pytel and released in 1992. “Unis 669 Composer” was written by Jason Nunn and released in 1994.
load_amf
This loader recognizes the “Advanced Module Format”, which is the internal module format of the “DOS Sound and Music Interface” (DSMI) library. This format has the same limitations as the S3M format. The most famous DSMI application was DMP, the Dual Module Player.
DMP and the DSMI library were written by Otto Chrons. DSMI was first released in 1993.
load_dsm
This loader recognizes the internal DSIK format, which is the internal module format of the “Digital Sound Interface Kit” (DSIK) library, the ancester of the SEAL library. This format has the same limitations as the S3M format.
The DSIK library was written by Carlos Hasan and released in 1994.
load_far
This loader recognizes “Farandole” modules. These modules can be up to 16 channels and have Protracker comparable effects.
The Farandole composer was written by Daniel Potter and released in 1994.
load_gdm
This loader recognizes the “General DigiMusic” format, which is the internal format of the “Bells, Whistles and Sound Boards” library. This format has the same limitations as the S3M format.
The BWSB library was written by Edward Schlunder and first released in 1993.
load_imf
This loader recognizes “Imago Orpheus” modules. This format is roughly equivalent to the XM format, but with two effects columns instead of a volume column and an effect column.
Imago Orpheus was written by Lutz Roeder and released in 1994.
load_it
This loader recognizes “Impulse Tracker” modules, currently the most powerful format. These modules support up to 64 real channels, and up to 256 virtual channels with the “New Note Action” feature. Besides, it has the widest range of effects, and supports 16 bit samples as well as surround sound.
“Impulse Tracker” was written by Jeffrey Lim and released in 1996.
load_med
This loader recognizes “OctaMED” modules. These modules are comparable to Protracker modules, but can embed “synthsounds”, which are midi-like instruments.
“MED” and later “OctaMED” were written by Teijo Kinnunen. “MED” was released in 1989, and “OctaMED” was released in 1992.
load_m15
This loader recognizes the old 15 instrument modules, created by “Ultimate Soundtracker”, “Soundtracker” and the first versions of “Protracker”.
Since this format was one of the first module formats, developed in 1987, it does not have any signature field, which makes it hard to detect reliably, because of its similarities with later module formats.
load_mod
This loader recognizes the standard 31 instrument modules, created by “Protracker” or Protracker-compatible programs. The original Protracker format was limited to 4 channels, but other trackers like “TakeTracker”, “StarTracker” or “Oktalyzer” afforded more channels.
Although it is now technically obsolete, this format is still widely used, due to its playback simplicity (on the adequate hardware, the Amiga).
load_mtm
This loader recognizes the “MultiTracker Module Editor” modules. The MTM format has up to 32 channels, and protracker comparable effects. It was intended to replace “Composer 669”. The “MultiTracker Module Editor” was written by Starscream of Renaissance, a.k.a. Daniel Goldstein and released in late 1993.
load_okt
This loader recognizes the “Amiga Oktalyzer” modules. The OKT format has up to 8 channels, and a few protracker compatible effects, as well as other OKT-specific effects, of which only a few are currently supported by libmikmod. “Oktalyzer” was written by Armin Sander and released in 1990.
load_stm
This loader recognizes “ScreamTracker” modules. “ScreamTracker” was the first PC tracker, as well as the first PC module format. Loosely inspired by the “SoundTracker” format, it does not have as many effects as Protracker, although it supports 31 instruments and 4 channels.
“ScreamTracker” was written by PSI of Future Crew, a.k.a. Sami Tammilehto.
load_stx
This loader recognizes “STMIK 0.2” modules. “STMIK” (the Scream Tracker Music Interface Kit) was a module playing library distributed by Future Crew to play Scream Tracker module in games and demos. It uses an intermediate format between STM and S3M and comes with a tool converting STM modules to STX.
“STMIK” was written by PSI of Future Crew, a.k.a. Sami Tammilehto.
load_s3m
This loader recognizes “ScreamTracker 3” modules. This version was a huge improvement over the original “ScreamTracker”. It supported 32 channels, up to 99 instruments, and a large choice of effects.
“ScreamTracker 3” was written by PSI of Future Crew, a.k.a. Sami Tammilehto, and released in 1994.
load_ult
This loader recognizes “UltraTracker” modules. They are mostly similar to Protracker modules, but support two effects per channel.
“UltraTracker” was written by MAS of Prophecy, a.k.a. Marc Andre Schallehn, and released in 1993.
load_uni
This loader recognizes “UNIMOD” modules. This is the internal format used by MikMod and APlayer. Use of this format is discouraged, this loader being provided for completeness.
load_xm
This loader recognizes “FastTracker 2” modules. This format was designed from scratch, instead of creating yet another Protracker variation. It was the first format using instruments as well as samples, and envelopes for finer effects.
FastTracker 2 was written by Fredrik Huss and Magnus Hogdahl, and released in 1994.

4.5.2 Sample Loaders

Currently, the only file type than can be loaded as a sample is the RIFF WAVE file. Stereo or compressed WAVE files are not supported yet.

4.6 Driver Reference

4.6.1 Network Drivers

These drivers send the generated sound over the network to a server program, which sends the sound to the real sound hardware. The server program can be on the same machine than your program, but MikMod does not have access to the hardware. Network drivers only support software mixing.

drv_AF
This driver works with the “Digital AudioFile” library.
Start the server on the machine you want, set its hostname in the ‘AUDIOFILE’ environment variable, and MikMod is ready to send it sound.
drv_esd
This driver works with the “Enlightened Sound Daemon”.
Start the esd daemon on the machine you want, set its hostname in the ‘ESPEAKER’ environment variable, and MikMod is ready to send it sound.

4.6.2 Hardware Drivers

These drivers access to the sound hardware of the machine they run on. Depending on your Unix flavor, you'll end with one or more drivers from this list:

drv_aix
This driver is only available under AIX, and access its audio device.
This driver only supports software mixing.
drv_alsa
This driver is only available under Linux, and requires the ALSA driver to be compiled for your current kernel.
This driver only supports software mixing, but a future version of the driver might be able to use the hardware capabilities of some sound cards.
drv_dart
This driver is only available under OS/2 version 3 and higher (Warp), and uses the “Direct Audio Real-Time” interface.
This driver only supports software mixing.
drv_ds
This driver is only available under WIN32, and uses the “DirectSound” api.
This driver only supports software mixing.
drv_hp
This driver is only available under HP-UX, and access its audio device.
This driver only supports software mixing.
drv_os2
This driver is only available under OS/2 version 3 and higher (Warp), and OS/2 2.x with MMPM/2.
This driver only supports software mixing.
drv_oss
This driver is available under any Unix with the Open Sound System drivers installed. Linux and FreeBSD also come with the OSS/Lite driver (the non-commercial version of OSS) and can make use of this driver.
This driver only supports software mixing.
drv_sam9407
This driver is only available under Linux, and requires the Linux sam9407 driver to be compiled for your current kernel.
This driver only supports hardware mixing.
drv_sgi
This driver is only available under IRIX, and uses the SGI audio library.
This driver only supports software mixing.
drv_sun
This driver is only available under Unices which implement SunOS-like audio device interfaces, that is, SunOS, Solaris, NetBSD and OpenBSD.
This driver only supports software mixing.
drv_ultra
This driver is only available under Linux, and requires the Linux Ultrasound driver (the ancestor of ALSA) to be compiled for your current kernel.
This driver only supports hardware mixing.
drv_win
This driver is only available under WIN32, and uses the “multimedia API”.
This driver only supports software mixing.

4.6.3 Disk Writer Drivers

These drivers work on any machine, since the generated sound is not sent to hardware, but written in a file. Disk writer drivers only support software mixing.

drv_raw
This driver outputs the sound data in a file by default named music.raw in the current directory. The file has no header and only contains the sound output.
drv_wav
This driver outputs the sound data in a RIFF WAVE file by default named music.wav in the current directory.

4.6.4 Other Drivers

These drivers are of little interest, but are handy sometimes.

drv_stdout
This driver outputs the sound data to the program's standard output. To avoid inconvenience, the data will not be output if the standard output is a terminal, thus you have to pipe it through another command or to redirect it to a file. Using this driver and redirecting to a file is equivalent to using the drv_raw disk writer.
This driver only supports software mixing.
drv_pipe
This driver pipes the sound data to a command (which must be given in the driver commandline, via MikMod_Init).
This driver only supports software mixing.
drv_nos
This driver doesn't produce sound at all, and will work on any machine.
Since it does not have to produce sound, it supports both hardware and software mixing, with as many hardware voices as you like.


Next: , Previous: Library Reference, Up: Top

5 Index


Next: , Previous: Index, Up: Index

Function Index


Previous: Function Index, Up: Index

Type and Variable Index

Table of Contents


Footnotes

[1] PAN_SURROUND will be mapped to PAN_CENTER if the library is initialized without surround sound, that is, if the variable md_mode doesn't have the bit DMODE_SURROUND set.

[2] Unless you explicitely choose to create a non thread-safe version of libmikmod at compile-time.

[3] You can force libmikmod to load the module (without the synthsounds, of course) by setting the curious parameter to 1 when invoking Player_Loadxx.


libmikmod-3.1.16/docs/mikmod.info0000644000000000000000000034053012262064566015352 0ustar rootrootThis is mikmod.info, produced by makeinfo version 4.13 from mikmod.texi. Copyright (C) 1998-2014 Miodrag Vallat and others -- see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * MikMod: (mikmod). MikMod Sound Library. END-INFO-DIR-ENTRY  File: mikmod.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) MikMod Sound Library ******************** This manual documents the MikMod Sound Library, version 3.1.16. * Menu: * Introduction:: What is MikMod ? * Tutorial:: Your first steps with MikMod. * Using the Library:: A thematic presentation of the library. * Library Reference:: Detailed description of the functions and variables. * Index::  File: mikmod.info, Node: Introduction, Next: Tutorial, Prev: Top, Up: Top 1 Introduction ************** The MikMod sound library is an excellent way for a programmer to add music and sound effects to an application. It is a powerful and flexible library, with a simple and easy-to-learn API. Besides, the library is very portable and runs under a lot of Unices, as well as under OS/2, MacOS and Windows. Third party individuals also maintain ports on other systems, including MS-DOS, and BeOS. MikMod is able to play a wide range of module formats, as well as digital sound files. It can take advantage of particular features of your system, such as sound redirection over the network. And due to its modular nature, the library can be extended to support more sound or module formats, as well as new hardware or other sound output capabilities, as they appear.  File: mikmod.info, Node: Tutorial, Next: Using the Library, Prev: Introduction, Up: Top 2 Tutorial ********** This chapter will describe how to quickly incorporate MikMod's power into your programs. It doesn't cover everything, but that's a start and I hope it will help you understand the library philosophy. If you have a real tutorial to put here, you're welcome ! Please send it to me... * Menu: * MikMod Concepts:: A few things you'll need to know. * A Skeleton Program:: The shortest MikMod program. * Playing Modules:: How to create a simple module player. * Playing Sound Effects:: How to play simple sound effects. * More Sound Effects:: How to play more complex sound effects.  File: mikmod.info, Node: MikMod Concepts, Next: A Skeleton Program, Prev: Tutorial, Up: Tutorial 2.1 MikMod Concepts =================== MikMod's sound output is composed of several sound _voices_ which are mixed, either in software or in hardware, depending of your hardware configuration. Simple sounds, like sound effects, use only one voice, whereas sound modules, which are complex arrangements of sound effects, use several voices. MikMod's functions operate either globally, or at the voice level. Differences in the handling of sound effects and modules are kept minimal, at least for the programmer. The sound playback is done by a _sound driver_. MikMod provides several sound drivers: different hardware drivers, and some software drivers to redirect sound in a file, or over the network. You can even add your own driver, register it to make it known by the library, and select it (this is exactly what the module plugin of xmms does).  File: mikmod.info, Node: A Skeleton Program, Next: Playing Modules, Prev: MikMod Concepts, Up: Tutorial 2.2 A Skeleton Program ====================== To use MikMod in your program, there are a few steps required: * Include `mikmod.h' in your program. * Register the MikMod drivers you need. * Initialize the library with MikMod_Init() before using any other MikMod function. * Give up resources with MikMod_Exit() at the end of your program, or before when MikMod is not needed anymore. * Link your application with the MikMod sound library. Here's a program which meets all those conditions: /* MikMod Sound Library example program: a skeleton */ #include main() { /* register all the drivers */ MikMod_RegisterAllDrivers(); /* initialize the library */ MikMod_Init(""); /* we could play some sound here... */ /* give up */ MikMod_Exit(); } This program would be compiled with the following command line: `cc -o example example.c `libmikmod-config --cflags` `libmikmod-config --libs`' Although this programs produces no useful result, many things happen when you run it. The call to `MikMod_RegisterAllDrivers' registers all the drivers embedded in the MikMod library. Then, `MikMod_Init' chooses the more adequate driver and initializes it. The program is now ready to produce sound. When sound is not needed any more, `MikMod_Exit' is used to relinquish memory and let other programs have access to the sound hardware.  File: mikmod.info, Node: Playing Modules, Next: Playing Sound Effects, Prev: A Skeleton Program, Up: Tutorial 2.3 Playing Modules =================== Our program is not really useful if it doesn't produce sound. Let's suppose you've got this good old module, "Beyond music", in the file `beyond music.mod'. How about playing it ? To do this, we'll use the following code: /* MikMod Sound Library example program: a simple module player */ #include #include main() { MODULE *module; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* register all the module loaders */ MikMod_RegisterAllLoaders(); /* initialize the library */ md_mode |= DMODE_SOFT_MUSIC; if (MikMod_Init("")) { fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; } /* load module */ module = Player_Load("beyond music.mod", 64, 0); if (module) { /* start module */ Player_Start(module); while (Player_Active()) { /* we're playing */ usleep(10000); MikMod_Update(); } Player_Stop(); Player_Free(module); } else fprintf(stderr, "Could not load module, reason: %s\n", MikMod_strerror(MikMod_errno)); /* give up */ MikMod_Exit(); } What's new here ? First, we've not only registered MikMod's device driver, but also the module loaders. MikMod comes with a large choice of module loaders, each one for a different module type. Since _every_ loader is called to determine the type of the module when we try to load them, you may want to register only a few of them to save time. In our case, we don't matter, so we happily register every module loader. Then, there's an extra line before calling `MikMod_Init'. We change the value of MikMod's variable `md_mode' to tell the library that we want the module to be processed by the software. If you're the happy owner of a GUS-type card, you could use the specific hardware driver for this card, but in this case you should not set the `DMODE_SOFT_MUSIC' flag. We'll ensure that `MikMod_Init' was successful. Note that, in case of error, MikMod provides the variable `MikMod_errno', an equivalent of the C library `errno' for MikMod errors, and the function `MikMod_strerror', an equivalent to `strerror'. Now onto serious business ! The module is loaded with the `Player_Load' function, which takes the name of the module file, and the number of voices afforded to the module. In this case, the module has only 4 channels, so 4 voices, but complex Impulse Tracker modules can have a lot of voices (as they can have as many as 256 virtual channels with so-called "new note actions"). Since empty voices don't cost time to be processed, it is safe to use a big value, such as 64 or 128. The third parameter is the "curiosity" of the loader: if nonzero, the loader will search for hidden parts in the module. However, only a few module formats can embed hidden or non played parts, so we'll use 0 here. Now that the module is ready to play, let's play it. We inform the player that the current module is `module' with `Player_Start'. Playback starts, but we have to update it on a regular basis. So there's a loop on the result of the `Player_Active' function, which will tell us if the module has finished. To update the sound, we simply call `MikMod_Update'. After the module has finished, we tell the player its job is done with `Player_Stop', and we free the module with `Player_Free'.  File: mikmod.info, Node: Playing Sound Effects, Next: More Sound Effects, Prev: Playing Modules, Up: Tutorial 2.4 Playing Sound Effects ========================= MikMod is not limited to playing modules, it can also play sound effects, that is, module samples. It's a bit more complex than playing a module, because the module player does a lot of things for us, but here we'll get more control over what is actually played by the program. Let's look at an example: /* MikMod Sound Library example program: sound effects */ #include #include main() { int i; /* sound effects */ SAMPLE *sfx1, *sfx2; /* voices */ int v1, v2; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* initialize the library */ md_mode |= DMODE_SOFT_SNDFX; if (MikMod_Init("")) { fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; } /* load samples */ sfx1 = Sample_Load("first.wav"); if (!sfx1) { MikMod_Exit(); fprintf(stderr, "Could not load the first sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; } sfx2 = Sample_Load("second.wav"); if (!sfx2) { Sample_Free(sfx1); MikMod_Exit(); fprintf(stderr, "Could not load the second sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return; } /* reserve 2 voices for sound effects */ MikMod_SetNumVoices(-1, 2); /* get ready to play */ MikMod_EnableOutput(); /* play first sample */ v1 = Sample_Play(sfx1, 0, 0); for(i = 0; i < 5; i++) { MikMod_Update(); usleep(100000); } /* half a second later, play second sample */ v2 = Sample_Play(sfx2, 0, 0); do { MikMod_Update(); usleep(100000); } while (!Voice_Stopped(v2)); MikMod_DisableOutput(); Sample_Free(sfx2); Sample_Free(sfx1); MikMod_Exit(); } As in the previous example, we begin by registering the sound drivers and initializing the library. We also ask for software mixing by modifying the variable `md_mode'. It's time to load our files, with the `Sample_Load' function. Don't forget to test the return value -- it looks ugly here on such a small example, but it's a good practice... Since we want to play two samples, we have to use at least two voices for this, so we reserve them with a `MikMod_SetNumVoices' call. The first parameter sets the number of module voices, and the second parameter the number of sound effect voices. We don't want to set the number of module voices here (it's part of the module player's duty), so we use the value `-1' to keep the current value, and we reserve two sound effect voices. Now we're ready to play, so we call `MikMod_EnableOutput' to make the driver ready. Sound effects are played by the `Sample_Play' function. You just have to specify which sample you want to play, the offset from which you want to start, and the playback flags. More on this later. The function returns the number of the voice associated to the sample. We play the first sample for half a second, then we start to play the second sample. Since we've reserved two channels, both samples play simultaneously. We use the `Voice_Stopped' function to stop the playback: it returns the current status of the voice argument, which is zero when the sample plays and nonzero when it has finished. So the `do' loop will stop exactly when the second sample is finished, regardless of the length of the first sample. To finish, we get rid of the samples with `Sample_Free'.  File: mikmod.info, Node: More Sound Effects, Prev: Playing Sound Effects, Up: Tutorial 2.5 More Sound Effects ====================== Sound effects have some attributes that can be affected to control the playback. These are speed, panning, and volume. Given a voice number, you can affect these attributes with the `Voice_SetFrequency', `Voice_SetPanning' and `Voice_SetVolume' functions. In the previous example, we'll replace the actual sound code, located between the calls to `MikMod_EnableOutput' and `MikMod_DisableOutput', with the following code: Sample_Play(sfx1, 0, 0); for(i = 0; i < 5; i++) { MikMod_Update(); usleep(100000); } v2 = Sample_Play(sfx2, 0, SFX_CRITICAL); i = 0; do { MikMod_Update(); usleep(100000); v1 = Sample_Play(sfx1, 0, 0); Voice_SetVolume(v1, 160); Voice_SetFrequency(v1, (sfx1->speed * (100 + i)) / 100); Voice_SetPanning(v2, (i++ & 1) ? PAN_LEFT : PAN_RIGHT); } while (!Voice_Stopped(v2)); The first thing you'll notice, is the `SFX_CRITICAL' flag used to play the second sample. Since the `do' loop will add another sample every 100 milliseconds, and we reserved only two voices, the oldest voice will be cut each time this is necessary. Doing this would cut the second sample in the second iteration of the loop. However, since we flagged this sound as "critical", it won't be cut until it is finished or we stop it with a `Voice_Stop' call. So the second sample will play fine, whereas the first sample will be stopped every loop iteration. Then, we choose to play the first sample a bit lower, with `Voice_SetVolume'. Volume voices range from 0 (silence) to 256. In this case we play the sample at 160. To make the sound look weird, we also change its frequency with `Voice_SetFrequency'. The computation in the example code makes the frequency more and more high (starting from the sample frequency and then increasing from 1% each iteration). And to demonstrate the `Voice_SetPanning' function, we change the panning of the second sample at each iteration from the left to the right. The argument can be one of the standard panning `PAN_LEFT', `PAN_RIGHT', `PAN_CENTER' and `PAN_SURROUND'(1), or a numeric value between 0 (`PAN_LEFT') and 255 (`PAN_RIGHT'). ---------- Footnotes ---------- (1) `PAN_SURROUND' will be mapped to `PAN_CENTER' if the library is initialized without surround sound, that is, if the variable `md_mode' doesn't have the bit `DMODE_SURROUND' set.  File: mikmod.info, Node: Using the Library, Next: Library Reference, Prev: Tutorial, Up: Top 3 Using the Library ******************* This chapter describes the various parts of the library and their uses. * Menu: * Library Version:: * Type Definitions:: * Error Handling:: * Library Initialization:: * Samples and Voice Control:: * Modules and Player Control:: * Loading Data from Memory::  File: mikmod.info, Node: Library Version, Next: Type Definitions, Prev: Using the Library, Up: Using the Library 3.1 Library Version =================== If your program is dynamically linked with the MikMod library, you should check which version of the library you're working with. To do this, the library defines a few constants and a function to help you determine if the current library is adequate for your needs or if it has to be upgraded. When your program includes `mikmod.h', the following constants are defined: * `LIBMIKMOD_VERSION_MAJOR' is equal to the major version number of the library. * `LIBMIKMOD_VERSION_MINOR' is equal to the minor version number of the library. * `LIBMIKMOD_REVISION' is equal to the revision number of the library. * `LIBMIKMOD_VERSION' is the sum of `LIBMIKMOD_VERSION_MAJOR' shifted 16 times, `LIBMIKMOD_VERSION_MINOR' shifted 8 times, and `LIBMIKMOD_REVISION'. So your program can tell with which version of the library it has been compiled this way: printf("Compiled with MikMod Sound Library version %ld.%ld.%ld\n", LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION); The library defines the function `MikMod_GetVersion' which returns the value of LIBMIKMOD_VERSION for the library. If this value is greater than or equal to the value of LIBMIKMOD_VERSION for your program, your program will work; otherwise, you'll have to inform the user that he has to upgrade the library: { long engineversion = MikMod_GetVersion(); if (engineversion < LIBMIKMOD_VERSION) { printf("MikMod library version (%ld.%ld.%ld) is too old.\n", (engineversion >> 16) & 255, (engineversion >> 8) & 255, (engineversion) & 255); printf("This programs requires at least version %ld.%ld.%ld\n", LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION); puts("Please upgrade your MikMod library."); exit(1); } }  File: mikmod.info, Node: Type Definitions, Next: Error Handling, Prev: Library Version, Up: Using the Library 3.2 Type Definitions ==================== MikMod defines several data types to deal with modules and sample data. These types have the same memory size on every platform MikMod has been ported to. These types are: * `CHAR' is a printable character. For now it is the same as the `char' type, but in the future it may be wide char (Unicode) on some platforms. * `SBYTE' is a signed 8 bit number (can range from -128 to 127). * `UBYTE' is an unsigned 8 bit number (can range from 0 to 255). * `SWORD' is a signed 16 bit number (can range from -32768 to 32767). * `UWORD' is an unsigned 16 bit number (can range from 0 to 65535). * `SLONG' is a signed 32 bit number (can range from -2.147.483.648 to 2.147.483.647). * `ULONG' is an unsigned 32 bit number (can range from 0 to 4.294.967.296). * `BOOL' is a boolean value. A value of 0 means false, any other value means true.  File: mikmod.info, Node: Error Handling, Next: Library Initialization, Prev: Type Definitions, Up: Using the Library 3.3 Error Handling ================== Although MikMod does its best to do its work, there are times where it can't. For example, if you're trying to play a corrupted file, well, it can't. A lot of MikMod functions return pointers or `BOOL' values. If the pointer is `NULL' or the `BOOL' is 0 (false), an error has occurred. MikMod errors are returned in the variable `MikMod_errno'. Each possible error has a symbolic error code, beginning with `MMERR_'. For example, if MikMod can't open a file, `MikMod_errno' will receive the value `MMERR_OPENING_FILE'. You can get an appropriate error message to display from the function `MikMod_strerror'. There is a second error variable named `MikMod_critical'. As its name suggests, it is only set if the error lets the library in an unstable state. This variable can only be set by the functions `MikMod_Init', `MikMod_SetNumVoices' and `MikMod_EnableOutput'. If one of these functions return an error and `MikMod_critical' is set, the library is left in the uninitialized state (i.e. it was not initialized, or `MikMod_Exit' was called). If you prefer, you can use a callback function to get notified of errors. This function must be prototyped as `void MyFunction(void)'. Then, call `MikMod_RegisterHandler' with your function as argument to have it notified when an error occurs. There can only be one callback function registered, but `MikMod_RegisterHandler' will return you the previous handler, so you can chain handlers if you want to.  File: mikmod.info, Node: Library Initialization, Next: Samples and Voice Control, Prev: Error Handling, Up: Using the Library 3.4 Library Initialization and Core Functions ============================================= To initialize the library, you must register some sound drivers first. You can either register all the drivers embedded in the library for your platform with `MikMod_RegisterAllDrivers', or register only some of them with `MikMod_RegisterDriver'. If you choose to register the drivers manually, you must be careful in their order, since `MikMod_Init' will try them in the order you registered them. The `MikMod_RegisterAllDrivers' function registers the network drivers first (for playing sound over the network), then the hardware drivers, then the disk writers, and in last resort, the nosound driver. Registering the nosound driver first would not be a very good idea... You can get some printable information regarding the registered drivers with `MikMod_InfoDriver'; don't forget to call `free' on the returned string when you don't need it anymore. After you've registered your drivers, you can initialize the sound playback with `MikMod_Init', passing specific information to the driver if necessary. If you set the variable `md_device' to zero, which is its default value, the driver will be autodetected, that is, the first driver in the list that is available on the system will be used; otherwise only the driver whose order in the list of the registered drivers is equal to `md_device' will be tried. If your playback settings, in the variables `md_mixfreq' and `md_mode', are not supported by the device, `MikMod_Init' will fail. You can then choose the number of voices you need with `MikMod_SetNumVoices', and activate the playback with `MikMod_EnableOutput'. Don't forget to call `MikMod_Update' as often as possible to process the sound mixing. If necessary, fork a dedicated process to do this, or if the library is thread-safe on your system, use a dedicated thread. If you want to change playback settings, most of them can't be changed on the fly. You'll need to stop the playback and reinitialize the driver. Use `MikMod_Active' to check if there is still sound playing; in this case, call `MikMod_DisableOutput' to end playback. Then, change your settings and call `MikMod_Reset'. You're now ready to select your number of voices and restart playback. When your program ends, don't forget to stop playback and call `MikMod_Exit' to leave the sound hardware in a coherent state. On systems that have pthreads, libmikmod is thread-safe(1). You can check this in your programs with the `MikMod_InitThreads' function. If this function returns 1, the library is thread-safe. The main benefit of thread-safety is that `MikMod_Update' can be called from a separate thread, which often makes application design easier. However, several libmikmod global variables are accessible from all your threads, so when more than one thread need to access libmikmod variables, you'll have to protect these access with the `MikMod_Lock' and `MikMod_Unlock' functions. If libmikmod is not thread-safe, these functions are no-ops. ---------- Footnotes ---------- (1) Unless you explicitely choose to create a non thread-safe version of libmikmod at compile-time.  File: mikmod.info, Node: Samples and Voice Control, Next: Modules and Player Control, Prev: Library Initialization, Up: Using the Library 3.5 Samples and Voice Control ============================= Currently, MikMod only supports uncompressed mono WAV files as samples. You can load a sample by calling `Sample_Load' with a filename, or by calling `Sample_LoadFP' with an open `FILE*' pointer. These functions return a pointer to a `SAMPLE' structure, or `NULL' in case of error. The `SAMPLE' structure has a few interesting fields: - `speed' contains the default frequency of the sample. - `volume' contains the default volume of the sample, ranging from 0 (silence) to 64. - `panning' contains the default panning position of the sample. Altering one of those fields will affect all voices currently playing the sample. You can achieve the same result on a single voice with the functions `Voice_SetFrequency', `Voice_SetVolume' and `Voice_SetPanning'. Since the same sample can be played with different frequency, volume and panning parameters on each voice, you can get voice specific information with `Voice_GetFrequency', `Voice_GetVolume' and `Voice_GetPanning'. You can also make your sample loop by setting the fields `loopstart' and `loopend' and or'ing `flags' with `SF_LOOP'. To compute your loop values, the field `length' will be useful. However, you must know that all the sample length are expressed in samples, i.e. 8 bits for an 8 bit sample, and 16 bit for a 16 bit sample... Test `flags' for the value `SF_16BITS' to know this. Speaking of flags, if you're curious and want to know the original format of the sample on disk (since libmikmod does some work on the sample data internally), refer to the `inflags' field. If the common forward loop isn't enough, you can play with some other flags: `SF_BIDI' will make your sample loop "ping pong" (back and forth), and `SF_REVERSE' will make it play backwards. To play your sample, use the `Sample_Play' function. This function will return a voice number which enable you to use the `Voice_xx' functions. The sample will play until another sample takes over its voice (when you play more samples than you reserved sound effect voices), unless it has been flagged as `SFX_CRITICAL'. You can force it to stop with `Voice_Stop', or you can force another sample to take over this voice with `Voice_Play'; however `Voice_Play' doesn't let you flag the new sample as critical. Non looping samples will free their voice channel as soon as they are finished; you can know the current playback position of your sample with `Voice_GetPosition'. If it is zero, either the sample has finished playing or it is just beginning; use `Voice_Stopped' to know. When you don't need a sample anymore, don't forget to free its memory with `Sample_Free'.  File: mikmod.info, Node: Modules and Player Control, Next: Loading Data from Memory, Prev: Samples and Voice Control, Up: Using the Library 3.6 Modules and Player Control ============================== As for the sound drivers, you have to register the module loaders you want to use for MikMod to be able to load modules. You can either register all the module loaders with `MikMod_RegisterAllLoaders', or only a few of them with `MikMod_RegisterLoader'. Be careful if you choose this solution, as the 15 instrument MOD loader has to be registered last, since loaders are called in the order they were register to identify modules, and the detection of this format is not fully reliable, so other modules might be mistaken as 15 instrument MOD files. You can get some printable information regarding the registered loaders with `MikMod_InfoLoader'; don't forget to call `free' on the returned string when you don't need it anymore. Note that, contrary to the sound drivers, you can register module loaders at any time, it doesn't matter. For playlists, you might be interested in knowing the module title first, and `Player_LoadTitle' will give you this information. Don't forget to `free' the returned text when you don't need it anymore. You can load a module either with `Player_Load' and the name of the module, or with `Player_LoadFP' and an open `FILE*' pointer. These functions also expect a maximal number of voices, and a curiosity flag. Unless you have excellent reasons not to do so, choose a big limit, such as 64 or even 128 for complex Impulse Tracker modules. Both functions return a pointer to an `MODULE' structure, or `NULL' if an error occurs. You'll find some useful information in this structure: - `numchn' contains the number of module "real" channels. - `numvoices' contains the number of voices reserved by the player for the real channels and the virtual channels (NNA). - `numpas' and `numpat' contain the number of song positions and song patterns. - `numins' and `numsmp' contain the number of instruments and samples. - `songname' contains the song title. - `modtype' contains the name of the tracker used to create the song. - `comment' contains the song comment, if it has one. - `sngtime' contains the time elapsed in the module, in 2^-10 seconds (not exactly a millisecond). - `sngspd' and `bpm' contain the song speed and tempo. - `realchn' contains the actual number of active channels. - `totalchn' contains the actual number of active virtual channels, i.e. the sum of `realchn' and the number of NNA virtual channels. Now that the module is loaded, you need to tell the module player that you want to play this particular module with `Player_Start' (the player can only play one module, but you can have several modules in memory). The playback begins. Should you forget which module is playing, `Player_GetModule' will return it to you. You can change the current song position with the functions `Player_NextPosition', `Player_PrevPosition' and `Player_SetPosition', the speed with `Player_SetSpeed' and `Player_SetTempo', and the volume (ranging from 0 to 128) with `Player_SetVolume'. Playback can be paused or resumed with `Player_TogglePause'. Be sure to check with `Player_Paused' that it isn't already in the state you want ! Fine player control is achieved by the functions `Player_Mute', `Player_UnMute' and `Player_ToggleMute' which can silence or resume a set of module channels. The function `Player_Muted' will return the state of a given channel. And if you want even more control, you can get the voice corresponding to a module channel with `Player_GetChannelVoice' and act directly on the voice. Modules play only once, but can loop indefinitely if they are designed to do so. You can change this behavior with the `wrap' and `loop' of the `MODULE' structure; the first one, if set, will make the module restart when it's finished, and the second one, if set, will prevent the module from jumping backwards. You can test if the module is still playing with `Player_Active', and you can stop it at any time with `Player_Stop'. When the module isn't needed anymore, get rid of it with `Player_Free'.  File: mikmod.info, Node: Loading Data from Memory, Prev: Modules and Player Control, Up: Using the Library 3.7 Loading Data from Memory ============================ If you need to load modules or sound effects from other places than plain files, you can use the `MREADER' and `MWRITER' objects to achieve this. The `MREADER' and `MWRITER' structures contain a list of function pointers, which emulate the behaviour of a regular `FILE *' object. In fact, all functions which take filenames or `FILE *' as arguments are only wrappers to a real function which takes an `MREADER' or an `MWRITER' argument. So, if you need to load a module from memory, or for a multi-file archive, for example, all you need is to build an adequate `MREADER' object, and use `Player_LoadGeneric' instead of `Player_Load' or `Player_LoadFP'. For samples, use `Sample_LoadGeneric' instead of `Sample_Load' or `Sample_LoadFP'.  File: mikmod.info, Node: Library Reference, Next: Index, Prev: Using the Library, Up: Top 4 Library Reference ******************* This chapter describes in more detail all the functions and variables provided by the library. *Note Type Definitions::, for the basic type reference. * Menu: * Variable Reference:: * Structure Reference:: * Error Reference:: * Function Reference:: * Loader Reference:: * Driver Reference::  File: mikmod.info, Node: Variable Reference, Next: Structure Reference, Prev: Library Reference, Up: Library Reference 4.1 Variable Reference ====================== 4.1.1 Error Variables --------------------- The following variables are set by the library to return error information. `int MikMod_errno' When an error occurs, this variable contains the error code. *Note Error Reference::, for more information. `BOOL MikMod_critical' When an error occurs, this variable informs of the severity of the error. Its value has sense only if the value of `MikMod_errno' is different from zero. If the value of `MikMod_critical' is zero, the error wasn't fatal and the library is in a stable state. However, if it is nonzero, then the library can't be used and has reseted itself to the uninitialized state. This often means that the mixing parameters you choose were not supported by the driver, or that it doesn't has enough voices for your needs if you called `MikMod_SetNumVoices'. 4.1.2 Sound Settings -------------------- The following variables control the sound output parameters and their changes take effect immediately. `UBYTE md_musicvolume' Volume of the module. Allowed values range from 0 to 128. The default value is 128. `UBYTE md_pansep' Stereo channels separation. Allowed values range from 0 (no separation, thus mono sound) to 128 (full channel separation). The default value is 128. `UBYTE md_reverb' Amount of sound reverberation. Allowed values range from 0 (no reverberation) to 15 (a rough estimate for chaos...). The default value is 0. `UBYTE md_sndfxvolume' Volume of the sound effects. Allowed values range from 0 to 128. The default value is 128. `UBYTE md_volume' Overall sound volume. Allowed values range from 0 to 128. The default value is 128. 4.1.3 Driver Settings --------------------- The following variables control more in-depth sound output parameters. Except for some `md_mode' flags, their changes do not have any effect until you call `MikMod_Init' or `MikMod_Reset'. `UWORD md_device' This variable contains the order, in the list of the registered drivers, of the sound driver which will be used for sound playback. This order is one-based; if this variable is set to zero, the driver is autodetected, which means the list is tested until a driver is present on the system. The default value is 0, thus driver is autodetected. `MDRIVER* md_driver' This variable points to the driver which is being used for sound playback, and is undefined when the library is uninitialized (before `MikMod_Init' and after `MikMod_Exit'). This variable is for information only, you should never attempt to change its value. Use `md_driver' and `MikMod_Init' (or `MikMod_Reset') instead. `UWORD md_mixfreq' Sound playback frequency, in hertz. High values yield high sound quality, but need more computing power than lower values. The default value is 44100 Hz, which is compact disc quality. Other common values are 22100 Hz (radio quality), 11025 Hz (phone quality), and 8000 Hz (mu-law quality). `UWORD md_mode' This variable is a combination of several flags, to select which output mode to select. The following flags have a direct action to the sound output (i.e. changes take effect immediately): `DMODE_INTERP' This flag, if set, enables the interpolated mixers. Interpolated mixing gives better sound but takes a bit more time than standard mixing. If the library is built with the high quality mixer, interpolated mixing is always enabled, regardless of this flag. `DMODE_REVERSE' This flag, if set, exchanges the left and right stereo channels. `DMODE_SURROUND' This flag, if set, enables the surround mixers. Since surround mixing works only for stereo sound, this flag has no effect if the sound playback is in mono. The following flags aren't taken in account until the sound driver is changed or reset: `DMODE_16BIT' This flag, if set, selects 16 bit sound mode. This mode yields better sound quality, but needs twice more mixing time. `DMODE_HQMIXER' This flag, if set, selects the high-quality software mixer. This mode yields better sound quality, but needs more mixing time. Of course, this flag has no effect if no `DMODE_SOFT_xx' flag is set. `DMODE_SOFT_MUSIC' This flag, if set, selects software mixing of the module. `DMODE_SOFT_SNDFX' This flag, if set, selects software mixing of the sound effects. `DMODE_STEREO' This flag, if set, selects stereo sound. The default value of this variable is `DMODE_STEREO | DMODE_SURROUND | DMODE_16BITS | DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX'.  File: mikmod.info, Node: Structure Reference, Next: Error Reference, Prev: Variable Reference, Up: Library Reference 4.2 Structure Reference ======================= Only the useful fields are described here; if a structure field is not described, you must assume that it's an internal field which must not be modified. 4.2.1 Drivers ------------- The `MDRIVER' structure is not meant to be used by anything else than the core of the library, but its first four fields contain useful information for your programs: `CHAR* Name' Name of the driver, usually never more than 20 characters. `CHAR* Description' Description of the driver, usually never more than 50 characters. `UBYTE HardVoiceLimit' Maximum number of hardware voices for this driver, 0 if the driver has no hardware mixing support. `UBYTE SoftVoiceLimit' Maximum number of software voices for this driver, 0 if the driver has no software mixing support. `CHAR* Alias' A short name for the driver, without spaces, usually never more than 10 characters. 4.2.2 Modules ------------- The `MODULE' structure gathers all the necessary information needed to play a module file, regardless of its initial format. 4.2.2.1 General Module Information .................................. The fields described in this section contain general information about the module and should not be modified. `CHAR* songname' Name of the module. `CHAR* modtype' Type of the module (which tracker format). `CHAR* comment' Either the module comments, or NULL if the module doesn't have comments. `UWORD flags' Several module flags or'ed together. `UF_ARPMEM' If set, arpeggio effects have memory. `UF_BGSLIDES' If set, volume slide effects continue until a new note or a new effect is played. `UF_HIGHBPM' If set, the module is allowed to have its tempo value (bpm) over 255. `UF_INST' If set, the module has instruments and samples; otherwise, the module has only samples. `UF_LINEAR' If set, slide periods are linear; otherwise, they are logarithmic. `UF_NNA' If set, module uses new note actions (NNA) and the `numvoices' field is valid. `UF_NOWRAP' If set, pattern break on the last pattern does not continue to the first pattern. `UF_S3MSLIDES' If set, module uses old-S3M style volume slides (slides processed every tick); otherwise, it uses the standard style (slides processed every tick except the first). `UF_XMPERIODS' If set, module uses XM-type periods; otherwise, it uses Amiga periods. `UF_FT2QUIRKS' If set, module player will reproduce some FastTracker 2 quirks during playback. `UF_PANNING' If set, module use panning commands. `UBYTE numchn' The number of channels in the module. `UBYTE numvoices' If the module uses NNA, and this variable is not zero, it contains the limit of module voices; otherwise, the limit is set to the `maxchan' parameter of the `Player_Loadxx' functions. `UWORD numpos' The number of sound positions in the module. `UWORD numpat' The number of patterns. `UWORD numins' The number of instruments. `UWORD numsmp' The number of samples. `INSTRUMENT* instruments' Points to an array of instrument structures. `SAMPLE* samples' Points to an array of sample structures. `UBYTE realchn' During playback, this variable contains the number of active channels (not counting NNA channels). `UBYTE totalchn' During playback, this variable contains the total number of channels (including NNA channels). `ULONG sngtime' Elapsed song time, in 2^-10 seconds units (not exactly a millisecond). To convert this value to seconds, divide by 1024, not 1000 ! 4.2.2.2 Playback Settings ......................... The fields described here control the module playback and can be modified at any time, unless otherwise specified. `UBYTE initspeed' The initial speed of the module (Protracker compatible). Valid range is 1-32. `UBYTE inittempo' The initial tempo of the module (Protracker compatible). Valid range is 32-255. `UBYTE initvolume' The initial overall volume of the module. Valid range is 0-128. `UWORD panning[]' The current channel panning positions. Only the first `numchn' values are defined. `UBYTE chanvol[]' The current channel volumes. Only the first `numchn' values are defined. `UWORD bpm' The current tempo of the module. Use `Player_SetTempo' to change its value. `UBYTE sngspd' The current speed of the module. Use `Player_SetSpeed' to change its value. `UBYTE volume' The current overall volume of the module, in range 0-128. Use `Player_SetVolume' to change its value. `BOOL extspd' If zero, Protracker extended speed effect (in-module tempo modification) is not processed. The default value is 1, which causes this effect to be processed. However, some old modules might not play correctly if this effect is not neutralized. `BOOL panflag' If zero, panning effects are not processed. The default value is 1, which cause all panning effects to be processed. However, some old modules might not play correctly if panning is not neutralized. `BOOL wrap' If nonzero, module wraps to its restart position when it is finished, to play continuously. Default value is zero (play only once). `UBYTE reppos' The restart position of the module, when it wraps. `BOOL loop' If nonzero, all in-module loops are processed; otherwise, backward loops which decrease the current position are not processed (i.e. only forward loops, and backward loops in the same pattern, are processed). This ensures that the module never loops endlessly. The default value is 1 (all loops are processed). `BOOL fadeout' If nonzero, volume fades out during when last position of the module is being played. Default value us zero (no fadeout). `UWORD patpos' Current position (row) in the pattern being played. Must not be changed. `SWORD sngpos' Current song position. Do not change this variable directly, use `Player_NextPosition', `Player_PrevPosition' or `Player_SetPosition' instead. `SWORD relspd' Relative playback speed. The value of this variable is added to the module tempo to define the actual playback speed. The default value is 0, which make modules play at their intended speed. 4.2.3 Module Instruments ------------------------ Although the `INSTRUMENT' structure is intended for internal use, you might need to know its name: `CHAR* insname' The instrument text, theoretically its name, but often a message line. 4.2.4 Samples ------------- The `SAMPLE' structure is used for sound effects and module samples as well. You can play with the following fields: `SWORD panning' Panning value of the sample. Valid values range from PAN_LEFT (0) to PAN_RIGHT (255), or PAN_SURROUND. `ULONG speed' Playing frequency of the sample, it hertz. `UBYTE volume' Sample volume. Valid range is 0-64. `UWORD flags' Several format flags or'ed together describing the format of the sample in memory. Format flags: `SF_16BITS' If set, sample data is 16 bit wide; otherwise, it is 8 bit wide. `SF_BIG_ENDIAN' If set, sample data is in big-endian (Motorola) format; otherwise, it is in little-endian (Intel) format. `SF_DELTA' If set, sample is stored as delta values (differences between two consecutive samples); otherwise, sample is stored as sample values. `SF_ITPACKED' If set, sample data is packed with Impulse Tracker's compression method; otherwise, sample is not packed. `SF_SIGNED' If set, sample data is made of signed values; otherwise, it is made of unsigned values. `SF_STEREO' If set, sample data is stereo (two channels); otherwise, it is mono. Playback flags: `SF_BIDI' If set, sample loops "ping pong" (back and forth). `SF_LOOP' If set, sample loops forward. `SF_REVERSE' If set, sample plays backwards. `UWORD inflags' Same as "flags", but describing the format of the sample on disk. `ULONG length' Length of the sample, in _samples_. The length of a sample is 8 bits (1 byte) for a 8 bit sample, and 16 bits (2 bytes) for a 16 bit sample. `ULONG loopstart' Loop starting position, relative to the start of the sample, in samples. `ULONG loopend' Loop ending position, relative to the start of the sample, in samples. 4.2.5 MREADER ------------- The `MREADER' contains the following function pointers: `int (*Seek)(struct MREADER*, long offset, int whence)' This function should have the same behaviour as `fseek', with offset 0 meaning the start of the object (module, sample) being loaded. `long (*Tell)(struct MREADER*)' This function should have the same behaviour as `ftell', with offset 0 meaning the start of the object being loaded. `BOOL (*Read)(struct MREADER*, void *dest, size_t length)' This function should copy `length' bytes of data into `dest', and return zero if an error occured, and any nonzero value otherwise. Note that an end-of-file condition will not be considered as an error in this case. `int (*Get)(struct MREADER*)' This function should have the same behaviour as `fgetc'. `BOOL (*Eof)(struct MREADER*)' This function should have the same behaviour as `feof'. For an example of how to build an `MREADER' object, please refer to the `MFILEREADER' object in file `mmio/mmio.c' in the library sources. 4.2.6 MWRITER ------------- The `MWRITER' contains the following function pointers: `int (*Seek)(struct MWRITER*, long offset, int whence);' This function should have the same behaviour as `fseek', with offset 0 meaning the start of the object being written. `long (*Tell)(struct MWRITER*);' This function should have the same behaviour as `ftell', with offset 0 meaning the start of the object being written. `BOOL (*Write)(struct MWRITER*, void *src, size_t length);' This function should copy `length' bytes of data from `src', and return zero if an error occured, and any nonzero value otherwise. `int (*Put)(struct MWRITER*, int data);' This function should have the same behaviour as `fputc'. For an example of how to build an `MWRITER' object, please refer to the `MFILEWRITER' object in file `mmio/mmio.c' in the library sources.  File: mikmod.info, Node: Error Reference, Next: Function Reference, Prev: Structure Reference, Up: Library Reference 4.3 Error Reference =================== The following errors are currently defined: 4.3.1 General Errors -------------------- `MMERR_DYNAMIC_LINKING' This error occurs when a specific driver was requested, but the support shared library couldn't be loaded. Currently, the only drivers which can yield this error are the ALSA, EsounD and Ultra drivers. `MMERR_OPENING_FILE' This error occurs when a file can not be opened, either for read access from a `xx_Loadxx' function, or for write access from the disk writer drivers. `MMERR_OUT_OF_MEMORY' This error occurs when there is not enough virtual memory available to complete the operation, or there is enough memory but the calling process would exceed its memory limit. MikMod does not do any resource tuning, your program has to use the `setrlimit' function to do this if it needs to load very huge samples. 4.3.2 Sample Errors ------------------- `MMERR_SAMPLE_TOO_BIG' This error occurs when the memory allocation of the sample data yields the error `MMERR_OUT_OF_MEMORY'. `MMERR_OUT_OF_HANDLES' This error occurs when your program reaches the limit of loaded samples, currently defined as 384, which should be sufficient for most cases. `MMERR_UNKNOWN_WAVE_TYPE' This error occurs when you're trying to load a sample which format is not recognized. 4.3.3 Module Errors ------------------- `MMERR_ITPACK_INVALID_DATA' This error occurs when a compressed module sample is corrupt. `MMERR_LOADING_HEADER' This error occurs when you're trying to load a module which has a corrupted header, or is truncated. `MMERR_LOADING_PATTERN' This error occurs when you're trying to load a module which has corrupted pattern data, or is truncated. `MMERR_LOADING_SAMPLEINFO' This error occurs when you're trying to load a module which has corrupted sample information, or is truncated. `MMERR_LOADING_TRACK' This error occurs when you're trying to load a module which has corrupted track data, or is truncated. `MMERR_MED_SYNTHSAMPLES' This error occurs when you're trying to load a MED module which has synthsounds samples, which are currently not supported.(1) `MMERR_NOT_A_MODULE' This error occurs when you're trying to load a module which format is not recognized. `MMERR_NOT_A_STREAM' This error occurs when you're trying to load a sample with a sample which format is not recognized. 4.3.4 Driver Errors ------------------- 4.3.4.1 Generic Driver Errors ............................. `MMERR_16BIT_ONLY' This error occurs when the sound device doesn't support non-16 bit linear sound output, which are the requested settings. `MMERR_8BIT_ONLY' This error occurs when the sound device doesn't support non-8 bit linear sound output, which are the requested settings. `MMERR_DETECTING_DEVICE' This error occurs when the driver's sound device has not been detected. `MMERR_INITIALIZING_MIXER' This error occurs when MikMod's internal software mixer could not be initialized properly. `MMERR_INVALID_DEVICE' This error occurs when the driver number (in `md_device') is out of range. `MMERR_NON_BLOCK' This error occurs when the driver is unable to set the audio device in non blocking mode. `MMERR_OPENING_AUDIO' This error occurs when the driver can not open sound device. `MMERR_STEREO_ONLY' This error occurs when the sound device doesn't support mono sound output, which is the requested setting. `MMERR_ULAW' This error occurs when the sound device only supports uLaw output (which implies mono, 8 bit, and 8000 Hz sampling rate), which isn't the requested setting. 4.3.4.2 AudioFile Driver Specific Error ....................................... `MMERR_AF_AUDIO_PORT' This error occurs when the AudioFile driver can not find a suitable AudioFile port. 4.3.4.3 AIX Driver Specific Errors .................................. `MMERR_AIX_CONFIG_CONTROL' This error occurs when the "Control" step of the device configuration has failed. `MMERR_AIX_CONFIG_INIT' This error occurs when the "Init" step of the device configuration has failed. `MMERR_AIX_CONFIG_START' This error occurs when the "Start" step of the device configuration has failed. 4.3.4.4 Ultra Driver Specific Errors .................................... `MMERR_GUS_RESET' This error occurs when the sound device couldn't be reset. `MMERR_GUS_SETTINGS' This error occurs because the sound device only works in 16 bit linear stereo sound at 44100 Hz, which is not the requested settings. `MMERR_GUS_TIMER' This error occurs when the ultra driver could not setup the playback timer. 4.3.4.5 HP-UX Driver Specific Errors .................................... `MMERR_HP_AUDIO_DESC' This error occurs when the HP driver can not get the audio hardware description. `MMERR_HP_AUDIO_OUTPUT' This error occurs when the HP driver can not select the audio output. `MMERR_HP_BUFFERSIZE' This error occurs when the HP driver can not set the transmission buffer size. `MMERR_HP_CHANNELS' This error occurs when the HP driver can not set the requested number of channels. `MMERR_HP_SETSAMPLESIZE' This error occurs when the HP driver can not set the requested sample size. `MMERR_HP_SETSPEED' This error occurs when the HP driver can not set the requested sample rate. 4.3.4.6 ALSA Driver Specific Errors ................................... `MMERR_ALSA_NOCONFIG' This error occurs when no ALSA playback configuration is available. `MMERR_ALSA_SETPARAMS' This error occurs when the ALSA driver can not set the requested sample format, sample rate, number of channels, access type, or latency values. `MMERR_ALSA_SETFORMAT' This error occurs when the ALSA driver can not set the requested sample format. `MMERR_ALSA_SETRATE' This error occurs when the ALSA driver does not support the requested sample rate. `MMERR_ALSA_SETCHANNELS' This error occurs when the ALSA driver does not support the requested number of channels. `MMERR_ALSA_BUFFERSIZE' This error occurs when the ALSA driver can not retrieve the buffer or period size. `MMERR_ALSA_PCM_START' This error occurs when the ALSA driver can not start the pcm playback. `MMERR_ALSA_PCM_WRITE' This error occurs when the ALSA driver encounters a write error. `MMERR_ALSA_PCM_RECOVER' This error occurs when the ALSA driver encounters an error recovery failure. 4.3.4.7 Open Sound System Driver Specific Errors ................................................ `MMERR_OSS_SETFRAGMENT' This error occurs when the OSS driver can not set audio fragment size. `MMERR_OSS_SETSAMPLESIZE' This error occurs when the OSS driver can not set the requested sample size. `MMERR_OSS_SETSPEED' This error occurs when the OSS driver can not set the requested sample rate. `MMERR_OSS_SETSTEREO' This error occurs when the OSS driver can not set the requested number of channels. 4.3.4.8 SGI Driver Specific Errors .................................. `MMERR_SGI_MONO' This error occurs when the hardware only supports stereo sound. `MMERR_SGI_SPEED' This error occurs when the hardware does not support the requested sample rate. `MMERR_SGI_STEREO' This error occurs when the hardware only supports mono sound. `MMERR_SGI_16BIT' This error occurs when the hardware only supports 16 bit sound. `MMERR_SGI_8BIT' This error occurs when the hardware only supports 8 bit sound. 4.3.4.9 Sun Driver Specific Error ................................. `MMERR_SUN_INIT' This error occurs when the sound device initialization failed. 4.3.4.10 OS/2 Driver Specific Errors .................................... `MMERR_OS2_MIXSETUP' This error occurs when the DART driver can not set the mixing parameters. `MMERR_OS2_SEMAPHORE' This error occurs when the MMPM/2 driver can not create the semaphores needed for playback. `MMERR_OS2_THREAD' This error occurs when the MMPM/2 driver can not create the thread needed for playback. `MMERR_OS2_TIMER' This error occurs when the MMPM/2 driver can not create the timer needed for playback. 4.3.4.11 DirectX Driver Specific Errors ....................................... `MMERR_DS_BUFFER' This error occurs when the DirectX driver can not allocate the playback buffers. `MMERR_DS_EVENT' This error occurs when the DirectX driver can not register the playback event. `MMERR_DS_FORMAT' This error occurs when the DirectX driver can not set the playback format. `MMERR_DS_NOTIFY' This error occurs when the DirectX driver can not register the playback callback. `MMERR_DS_PRIORITY' This error occurs when the DirectX driver can not set the playback priority. `MMERR_DS_THREAD' This error occurs when the DirectX driver can not create the playback thread. `MMERR_DS_UPDATE' This error occurs when the DirectX driver can not initialize the playback thread. 4.3.4.12 Windows Multimedia API Driver Specific Errors ...................................................... `MMERR_WINMM_ALLOCATED' This error occurs when the playback resource is already allocated by another application. `MMERR_WINMM_DEVICEID' This error occurs when the Multimedia API Driver is given an invalid audio device identificator. `MMERR_WINMM_FORMAT' This error occurs when the playback output format is not supported by the audio device. `MMERR_WINMM_HANDLE' This error occurs when the Multimedia API Driver is given an invalid handle. `MMERR_WINMM_UNKNOWN' This error should not occur ! If you get this error, please contact the libmikmod development mailing list. 4.3.4.13 MacOS Driver Specific Errors ..................................... `MMERR_MAC_SPEED' This error occurs when the playback speed is not supported by the audio device. `MMERR_MAC_START' This error occurs when the MacOS driver can not start playback. ---------- Footnotes ---------- (1) You can force libmikmod to load the module (without the synthsounds, of course) by setting the `curious' parameter to `1' when invoking `Player_Loadxx'.  File: mikmod.info, Node: Function Reference, Next: Library Core Functions, Prev: Error Reference, Up: Library Reference 4.4 Function Reference ====================== * Menu: * Library Core Functions:: MikMod_xx functions. * Module Player Functions:: Player_xx functions. * Sample Functions:: Sample_xx functions. * Voice Functions:: Voice_xx functions.  File: mikmod.info, Node: Library Core Functions, Next: Module Player Functions, Prev: Function Reference, Up: Function Reference 4.4.1 Library Core Functions ---------------------------- 4.4.1.1 MikMod_Active ..................... `BOOL MikMod_Active(void)' Description This function returns whether sound output is enabled or not. Result 0 Sound output is disabled. 1 Sound output is enabled. Notes Calls to `MikMod_Update' will be ignored when sound output is disabled. See also `MikMod_DisableOutput', `MikMod_EnableOutput'. 4.4.1.2 MikMod_DisableOutput ............................ `void MikMod_DisableOutput(void)' Description This function stops the sound mixing. Notes Calls to `MikMod_Update' will be ignored when sound output is disabled. See also `MikMod_Active', `MikMod_EnableOutput'. 4.4.1.3 MikMod_EnableOutput ........................... `int MikMod_EnableOutput(void)' Description This function starts the sound mixing. Result 0 Sound mixing is ready. nonzero An error occurred during the operation. Notes Calls to `MikMod_Update' will be ignored when sound output is disabled. See also `MikMod_Active', `MikMod_DisableOutput'. 4.4.1.4 MikMod_Exit ................... `void MikMod_Exit(void)' Description This function deinitializes the sound hardware and frees all the memory and resources used by MikMod. See also `MikMod_Init', `MikMod_Reset'. 4.4.1.5 MikMod_GetVersion ......................... `long MikMod_GetVersion(void)' Description This function returns the version number of the library. Result The version number, encoded as follows: `(maj<<16)|(min<<8)|(rev)', where `maj' is the major version number, `min' is the minor version number, and `rev' is the revision number. 4.4.1.6 MikMod_InfoDriver ......................... `CHAR* MikMod_InfoDriver(void)' Description This function returns a formatted list of the registered drivers in a buffer. Result A pointer to a text buffer, or `NULL' if no drivers are registered. Notes The buffer is created with `malloc'; the caller must free it when it is no longer necessary. See also `MikMod_RegisterDriver', `MikMod_RegisterAllDrivers'. 4.4.1.7 MikMod_InfoLoader ......................... `CHAR* MikMod_InfoLoader(void)' Description This function returns a formatted list of the registered module loaders in a buffer. Result A pointer to a text buffer, or `NULL' if no loaders are registered. Notes The buffer is created with `malloc'; the caller must free it when it is no longer necessary. See also `MikMod_RegisterLoader', `MikMod_RegisterAllLoaders'. 4.4.1.8 MikMod_Init ................... `int MikMod_Init(CHAR *parameters)' Description This function performs the library initialization, including the sound driver choice and configuration, and all the necessary memory allocations. Parameters parameters Optional parameters given to the sound driver. These parameters are ignored if the value of `md_device' is zero (autodetection). Result 0 Initialization was successful. nonzero An error occurred during initialization. Notes When the initialization fails, the library uses the nosound sound driver to let other the other MikMod functions work without crashing the application. See also `MikMod_Exit', `MikMod_InitThreads', `MikMod_Reset'. 4.4.1.9 MikMod_InitThreads .......................... `BOOL MikMod_InitThreads(void)' Description This function returns whether libmikmod is thread-safe. Result 0 The library is not thread-safe. 1 The library is thread-safe. Notes This function should be called before any call to `MikMod_Lock' or `MikMod_Unlock' is made. See also `MikMod_Lock', `MikMod_Unlock'. 4.4.1.10 MikMod_Lock .................... `void MikMod_Lock(void)' Description This function obtains exclusive access to libmikmod's variables. Notes This function locks an internal mutex. If the mutex is already locked, it will block the calling thread until the mutex is unlocked. Every `MikMod_Unlock' call should be associated to a `MikMod_Lock' call. To be sure this is the case, we advise you to define and use the following macros: `#define MIKMOD_LOCK MikMod_Lock();{' `#define MIKMOD_UNLOCK }MikMod_Unlock();' The function `MikMod_InitThreads' must have been invoked before any call to `MikMod_Lock' in made. See also `MikMod_InitThreads', `MikMod_Unlock'. 4.4.1.11 MikMod_RegisterAllDrivers .................................. `void MikMod_RegisterAllDrivers(void)' Description This function registers all the available drivers. See also `MikMod_InfoDriver', `MikMod_RegisterDriver'. 4.4.1.12 MikMod_RegisterAllLoaders .................................. `void MikMod_RegisterAllLoaders(void)' Description This function registers all the available module loaders. See also `MikMod_InfoLoader', `MikMod_RegisterLoader'. 4.4.1.13 MikMod_RegisterDriver .............................. `void MikMod_RegisterDriver(struct MDRIVER* newdriver)' Description This function adds the specified driver to the internal list of usable drivers. Parameters newdriver A pointer to the `MDRIVER' structure identifying the driver. Notes It is safe to register the same driver several times, although it will not be duplicated in the list. You should register all the drivers you need before calling `MikMod_Init'. If you want to register all the available drivers, use `MikMod_RegisterAllDrivers' instead. See also `MikMod_InfoDriver', `MikMod_RegisterAllDrivers'. 4.4.1.14 MikMod_RegisterErrorHandler .................................... `MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t newhandler)' Description This function selects the function which should be called in case of error. Parameters newhandler The new error callback function. Result The previous error callback function, or `NULL' if there was none. Notes `MikMod_handler_t' is defined as `void(*function)(void)', this means your error function has the following prototype: `void MyErrorHandler(void)' The error callback function is called when errors are detected, but not always immediately (the library has to resume to a stable state before calling your callback). 4.4.1.15 MikMod_RegisterLoader .............................. `void MikMod_RegisterLoader(struct MLOADER* newloader)' Description This function adds the specified module loader to the internal list of usable module loaders. Parameters newloader A pointer to the `MLOADER' structure identifying the loader. Notes It is safe to register the same loader several times, although it will not be duplicated in the list. You should register all the loaders you need before calling `Player_Load' or `Player_LoadFP'. If you want to register all the available module loaders, use `MikMod_RegisterAllLoaders' instead. The 15 instrument module loader (`load_m15') should always be registered last. See also `MikMod_InfoLoader', `MikMod_RegisterAllLoaders'. 4.4.1.16 MikMod_RegisterPlayer .............................. `MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t newplayer)' Description This function selects the function which should be used to process module playback. Parameters newplayer The new playback function Result The previous playback function. Notes `MikMod_player_t' is defined as `void(*function)(void)', this means your player function has the following prototype: `void MyPlayer(void)' The player function is called every module tick to process module playback. The rate at which the player function is called is controlled by the sound driver, and is computed by the following equation: (bpm*50)/125 calls per second, which means every 125000/(bpm*50) milliseconds. The `bpm' value is the tempo of the module and can change from its initial value when requested by the module. When changing the playback function, you should make sure that you chain to the default MikMod playback function, otherwise you won't get module sound anymore... Example MikMod_player_t oldroutine; void MyPlayer(void) { oldroutine(); /* your stuff here */ ... } main() { ... /* Register our player */ oldroutine = MikMod_RegisterPlayer(MyPlayer); ... } 4.4.1.17 MikMod_Reset ..................... `int MikMod_Reset(CHAR *parameters)' Description This function resets MikMod and reinitialize the sound hardware. Parameters parameters Optional parameters given to the sound driver. If you set the value of `md_device' to zero (autodetect), these parameters are ignored. Result 0 Reinitialization was successful. nonzero An error occurred during reinitialization. Notes Use this function when you have changed the global configuration variables: `md_device' and `md_mixfreq', or one of the `md_mode' flags which require sound reinitialization. Sound playback will continue as soon as the driver is ready. See also `MikMod_Exit', `MikMod_Init'. 4.4.1.18 MikMod_SetNumVoices ............................ `int MikMod_SetNumVoices(int musicvoices, int samplevoices)' Description This function sets the number of mixed voices which can be used for music and sound effects playback. Parameters musicvoices The number of voices to reserve for music playback. samplevoices The number of voices to reserve for sound effects. Result 0 Initialization was successful. nonzero An error occurred during initialization. Notes A value of `-1' for any of the parameters will retain the current number of reserved voices. The maximum number of voices vary from driver to driver (hardware drivers often have a limit of 32 to 64 voices, whereas the software drivers handle 255 voices). If your settings exceed the driver's limit, they will be truncated. See also `MikMod_Init', `MikMod_Reset'. 4.4.1.19 MikMod_Unlock ...................... `void MikMod_Unlock(void)' Description This function relinquishes exclusive access to libmikmod's variables. Notes This function unlocks an internal mutex, so that other threads waiting for the lock can be resumed. Every `MikMod_Unlock' call should be associated to a `MikMod_Lock' call. To be sure this is the case, we advise you to define and use the following macros: `#define MIKMOD_LOCK MikMod_Lock();{' `#define MIKMOD_UNLOCK }MikMod_Unlock();' The function `MikMod_InitThreads' must have been invoked before any call to `MikMod_Unlock' in made. See also `MikMod_InitThreads', `MikMod_Lock'. 4.4.1.20 MikMod_Update ...................... `void MikMod_Update(void)' Description This routine should be called on a regular basis to update the sound. Notes The sound output buffer is filled each time this function is called; if you use a large buffer, you don't need to call this routine as frequently as with a smaller buffer, but you get a bigger shift between the sound being played and the reported state of the player, since the player is always a buffer ahead of the playback. If you play low quality sound (for example, mono 8 bit 11kHz sound), you only need to call this routine a few times per second. However, for high quality sound (stereo 16 bit 44kHz), this rate increases to a few hundred times per second, but never more, due to the minimal buffer size constraint imposed to the sound drivers. If you plan on modifying voice information with the `Voice_xx' functions, you should do this before calling `MikMod_Update'. 4.4.1.21 MikMod_strerror ........................ `char* MikMod_strerror(int errnum)' Description This function associates a descriptive message to an error code. Parameters errnum The MikMod error code. Result A pointer to a string describing the error.  File: mikmod.info, Node: Module Player Functions, Next: Sample Functions, Prev: Library Core Functions, Up: Function Reference 4.4.2 Module Player Functions ----------------------------- 4.4.2.1 Player_Active ..................... `BOOL Player_Active(void)' Description This function returns whether the module player is active or not. Result 0 No module is playing. nonzero A module is currently playing. Notes This function will still report that the player is active if the playing module is paused. See also `Player_Paused', `Player_TogglePause', `Player_Start', `Player_Stop' 4.4.2.2 Player_Free ................... `void Player_Free(MODULE* module)' Description This function stops the module if it is playing and unloads it from memory. Parameters module The module to free. See also `Player_Load', `Player_LoadFP'. 4.4.2.3 Player_GetChannelVoice .............................. `int Player_GetChannelVoice(UBYTE channel)' Description This function determines the voice corresponding to the specified module channel. Parameters channel The module channel to use. Result The number of the voice corresponding to the module channel. Notes If the module channel has NNAs, the number will correspond to the main channel voice. See also `Voice_SetPanning', `Voice_SetVolume', `Player_Mute', `Player_ToggleMute', `Player_Unmute'. 4.4.2.4 Player_GetModule ........................ `MODULE* Player_GetModule(void)' Description This function returns the module currently being played. Result A pointer to the `MODULE' being played, or `NULL' if no module is playing. See also `Player_Stop', `Player_Start'. 4.4.2.5 Player_Load ................... `MODULE* Player_Load(CHAR* filename, int maxchan, BOOL curious)' Description This function loads a music module. Parameters filename The name of the module file. maxchan The maximum number of channels the song is allowed to request from the mixer. curious The curiosity level to use. Result A pointer to a `MODULE' structure, or `NULL' if an error occurs. Notes If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur: * pattern positions occurring after the "end of song" marker in S3M and IT modules are loaded, and the end of song is set to the last position. * hidden extra patterns are searched in MOD modules, and if found, played after the last "official" pattern. * MED modules with synthsounds are loaded without causing the `MMERR_MED_SYNTHSAMPLES', and synthsounds are mapped to an empty sample. See also `Player_Free', `Player_LoadFP', `Player_LoadTitle', `Player_LoadTitleFP', `Player_Start'. 4.4.2.6 Player_LoadFP ..................... `MODULE* Player_LoadFP(FILE* file, int maxchan, BOOL curious)' Description This function loads a music module. Parameters file An open file, at the position where the module starts. maxchan The maximum number of channels the song is allowed to request from the mixer. curious The curiosity level to use. Result A pointer to a `MODULE' structure, or `NULL' if an error occurs. Notes The file is left open, at the same position as before the function call. If the curiosity level is set to zero, the module will be loaded normally. However, if it is nonzero, the following things occur: * pattern positions occurring after the "end of song" marker in S3M and IT modules are loaded, and the end of song is set to the last position. * hidden extra patterns are searched in MOD modules, and if found, played after the last "official" pattern. * MED modules with synthsounds are loaded without causing the `MMERR_MED_SYNTHSAMPLES', and synthsounds are mapped to an empty sample. See also `Player_Free', `Player_Load', `Player_LoadTitle', `Player_LoadTitleFP', `Player_Start'. 4.4.2.7 Player_LoadTitle ........................ `MODULE* Player_LoadTitle(CHAR* filename)' Description This function retrieves the title of a module file. Parameters filename The name of the module file. Result A pointer to the song title, or `NULL' if either the module has no title or an error has occurred. Notes The title buffer is created with `malloc'; the caller must free it when it is no longer necessary. See also `Player_Load', `Player_LoadFP', `Player_LoadTitleFP'. 4.4.2.8 Player_LoadTitleFP .......................... `MODULE* Player_LoadTitleFP(FILE* file)' Description This function retrieves the title of a module file. Parameters file An open file, at the position where the module starts. Result A pointer to the song title, or `NULL' if either the module has no title or an error has occurred. Notes The title buffer is created with `malloc'; the caller must free it when it is no longer necessary. See also `Player_Load', `Player_LoadFP', `Player_LoadTitle'. 4.4.2.9 Player_Mute ................... `void Player_Mute(SLONG operation, ...)' Description This function mutes a single module channel, or a range of module channels. Parameters operation Either the number of a module channel to mute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. Notes If the operation is `MUTE_INCLUSIVE', the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is `MUTE_EXCLUSIVE', they are outside of the range. Example /* mute channel 10 */ Player_Mute(10); /* mute channels 2 to 5 */ Player_Mute(MUTE_INCLUSIVE, 2, 5); /* mute channels 7 to 9 */ Player_Mute(MUTE_EXCLUSIVE, 6, 10); See also `Player_Muted', `Player_ToggleMute', `Player_Unmute'. 4.4.2.10 Player_Muted ..................... `BOOL Player_Muted(UBYTE channel)' Description This function determines whether a module channel is muted or not. Parameters channel The module channel to test (starting from zero). Result 0 The channel is not muted. 1 The channel is muted. See also `Player_Mute', `Player_ToggleMute', `Player_Unmute'. 4.4.2.11 Player_NextPosition ............................ `void Player_NextPosition(void)' Description This function jumps to the next position in the module. Notes All playing samples and active song voices are cut to avoid hanging notes. See also `Player_PrevPosition', `Player_SetPosition'. 4.4.2.12 Player_Paused ...................... `BOOL Player_Paused(void)' Description This function determines whether the module is paused or not. Result 0 The module is not paused. 1 The module is paused. See also `Player_TogglePause'. 4.4.2.13 Player_PrevPosition ............................ `void Player_PrevPosition(void)' Description This function jumps to the previous position in the module. Notes All playing samples and active song voices are cut to avoid hanging notes. See also `Player_NextPosition', `Player_SetPosition'. 4.4.2.14 Player_SetPosition ........................... `void Player_SetPosition(UWORD position)' Description This function jumps to the specified position in the module. Parameters position The pattern position to jump to. Notes All playing samples and active song voices are cut to avoid hanging notes. See also `Player_NextPosition', `Player_PrevPosition'. 4.4.2.15 Player_SetSpeed ........................ `void Player_SetSpeed(UWORD speed)' Description This function sets the module speed. Parameters speed The new module speed, in the range 1-32. See also `Player_SetTempo'. 4.4.2.16 Player_SetTempo ........................ `void Player_SetTempo(UWORD tempo)' Description This function sets the module tempo. Parameters tempo The new module tempo, in the range 32-255. See also `Player_SetSpeed'. 4.4.2.17 Player_SetVolume ......................... `void Player_SetVolume(SWORD volume)' Description This function sets the module volume. Parameters volume The new overall module playback volume, in the range 0-128. 4.4.2.18 Player_Start ..................... `void Player_Start(MODULE* module)' Description This function starts the specified module playback. Parameters module The module to play. Notes If another module is playing, it will be stopped and the new module will play. See also `Player_Stop'. 4.4.2.19 Player_Stop .................... `void Player_Stop(void)' Description This function stops the currently playing module. See also `Player_Start'. 4.4.2.20 Player_ToggleMute .......................... `void Player_ToggleMute(SLONG operation, ...)' Description This function changes the muted status of a single module channel, or a range of module channels. Parameters operation Either the number of a module channel to work on (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. Notes If the operation is `MUTE_INCLUSIVE', the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is `MUTE_EXCLUSIVE', they are outside of the range. Example /* toggle mute on channel 10 */ Player_ToggleMute(10); /* toggle mute on channels 2 to 5 */ Player_ToggleMute(MUTE_INCLUSIVE, 2, 5); /* toggle mute on channels 7 to 9 */ Player_ToggleMute(MUTE_EXCLUSIVE, 6, 10); See also `Player_Mute', `Player_Muted', `Player_Unmute'. 4.4.2.21 Player_TogglePause ........................... `void Player_TogglePause(void)' Description This function toggles the playing/paused status of the module. Notes Calls to `Player_xx' functions still have effect when the module is paused. See also `Player_Paused', `Player_Start', `Player_Stop'. 4.4.2.22 Player_Unmute ...................... `void Player_Unmute(SLONG operation, ...)' Description This function unmutes a single module channel, or a range of module channels. Parameters operation Either the number of a module channel to unmute (starting from zero), or an operation code. In the latter case, two extra parameters are needed to determine the range of channels. Notes If the operation is `MUTE_INCLUSIVE', the two channel numbers delimit the range and are part of the range ; otherwise, if the operation is `MUTE_EXCLUSIVE', they are outside of the range. Example /* unmute channel 10 */ Player_Unmute(10); /* unmute channels 2 to 5 */ Player_Unmute(MUTE_INCLUSIVE, 2, 5); /* unmute channels 7 to 9 */ Player_Unmute(MUTE_EXCLUSIVE, 6, 10); See also `Player_Mute', `Player_Muted', `Player_ToggleMute'.  File: mikmod.info, Node: Sample Functions, Next: Voice Functions, Prev: Module Player Functions, Up: Function Reference 4.4.3 Sample Functions ---------------------- 4.4.3.1 Sample_Free ................... `void Sample_Free(SAMPLE* sample)' Description This function unloads a sample from memory. Parameters sample The sample to free. See also `Sample_Load', `Sample_LoadFP'. 4.4.3.2 Sample_Load ................... `SAMPLE* Sample_Load(CHAR* filename)' Description This function loads a sample. Parameters filename The sample filename. Result A pointer to a `SAMPLE' structure, or `NULL' if an error has occurred. See also `Sample_Free', `Sample_LoadFP'. 4.4.3.3 Sample_LoadFP ..................... `SAMPLE* Sample_LoadFP(FILE* file)' Description This function loads a sample. Parameters file An open file, at the position where the sample starts. Result A pointer to a `SAMPLE' structure, or `NULL' if an error has occurred. Notes The file is left open, at the same position as before the function call. See also `Sample_Free', `Sample_Load'. 4.4.3.4 Sample_Play ................... `SBYTE Sample_Play(SAMPLE* sample, ULONG start, UBYTE flags)' Description This function plays a sample as a sound effect. Parameters sample The sample to play. start The starting position (in samples). flags Either zero, for normal sound effects, or `SFX_CRITICAL', for critical sound effects which must not be interrupted. Result The voice number corresponding to the voice which will play the sample. Notes Each new sound effect is played on a new voice. When all voices are taken, the oldest sample which was not marked as critical is cut and its voice is used for the new sample. Critical samples are not cut unless all the voices are taken with critical samples and you attempt to play yet another critical sample. Use `Voice_Stop' to force the end of a critical sample. See also `MikMod_SetNumVoices', `Voice_Play', `Voice_SetFrequency', `Voice_SetPanning', `Voice_SetVolume', `Voice_Stop'.  File: mikmod.info, Node: Voice Functions, Next: Loader Reference, Prev: Sample Functions, Up: Function Reference 4.4.4 Voice Functions --------------------- 4.4.4.1 Voice_GetFrequency .......................... `ULONG Voice_GetFrequency(SBYTE voice)' Description This function returns the frequency of the sample currently playing on the specified voice. Parameters voice The number of the voice to get frequency. Result The current frequency of the sample playing on the specified voice, or zero if no sample is currently playing on the voice. See also `Voice_SetFrequency'. 4.4.4.2 Voice_GetPanning ........................ `ULONG Voice_GetPanning(SBYTE voice)' Description This function returns the panning position of the sample currently playing on the specified voice. Parameters voice The number of the voice to get panning position. Result The current panning position of the sample playing on the specified voice, or `PAN_CENTER' if no sample is currently playing on the voice. See also `Voice_SetPanning'. 4.4.4.3 Voice_GetPosition ......................... `SLONG Voice_GetPosition(SBYTE voice)' Description This function returns the sample position (in samples) of the sample currently playing on the specified voice. Parameters voice The number of the voice to get sample position (starting from zero). Result The current play location of the sample playing on the specified voice, or zero if the position can not be determined or if no sample is currently playing on the voice. Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, it returns always `-1'. See also `Sample_Play', `Voice_Play'. 4.4.4.4 Voice_GetVolume ....................... `UWORD Voice_GetVolume(SBYTE voice)' Description This function returns the volume of the sample currently playing on the specified voice. Parameters voice The number of the voice to get volume. Result The current volume of the sample playing on the specified voice, or zero if no sample is currently playing on the voice. See also `Voice_RealVolume', `Voice_SetVolume'. 4.4.4.5 Voice_Play .................. `void Voice_Play(SBYTE voice, SAMPLE* sample, ULONG start)' Description Start a new sample in the specified voice. Parameters voice The number of the voice to be processed (starting from zero). sample The sample to play. start The starting position (in samples). Notes The sample will be played at the volume, panning and frequency settings of the voice, regardless or the sample characteristics. The sample played this way gets the same "critical" status as the sample which was previously played on this voice. See also `Sample_Play', `Voice_SetFrequency', `Voice_SetPanning', `Voice_SetVolume'. 4.4.4.6 Voice_RealVolume ........................ `ULONG Voice_RealVolume(SBYTE voice)' Description This function returns the actual playing volume of the specified voice. Parameters voice The number of the voice to analyze (starting from zero). Result The real volume of the voice when the function was called, in the range 0-65535, not related to the volume constraint specified with `Voice_SetVolume'. Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, it always returns zero. Also note that the real volume computation is not a trivial process and takes some CPU time. See also `Sample_Play', `Voice_GetVolume', `Voice_Play', `Voice_SetVolume'. 4.4.4.7 Voice_SetFrequency .......................... `void Voice_SetFrequency(SBYTE voice, ULONG frequency)' Description This function sets the frequency (pitch) of the specified voice. Parameters voice The number of the voice to be processed (starting from zero). frequency The new frequency of the voice, in hertz. See also `Sample_Play', `Voice_GetFrequency', `Voice_Play', `Voice_SetPanning', `Voice_SetVolume', `Voice_Stop'. 4.4.4.8 Voice_SetPanning ........................ `void Voice_SetPanning(SBYTE voice, ULONG panning)' Description This function sets the panning position of the specified voice. Parameters voice The number of the voice to be processed (starting from zero). panning The new panning position of the voice. Notes Panning can vary between 0 (`PAN_LEFT') and 255 (`PAN_RIGHT'). Center is 127 (`PAN_CENTER'. Surround sound can be enabled by specifying the special value `PAN_SURROUND'. See also `Sample_Play', `Voice_GetPanning', `Voice_Play', `Voice_SetFrequency', `Voice_SetVolume', `Voice_Stop'. 4.4.4.9 Voice_SetVolume ....................... `void Voice_SetVolume(SBYTE voice, UWORD volume)' Description This function sets the volume of the specified voice. Parameters voice The number of the voice to be processed (starting from zero). volume The new volume of the voice, in the range 0-256. See also `Sample_Play', `Voice_GetVolume', `Voice_Play', `Voice_SetFrequency', `Voice_SetPanning', `Voice_Stop'. 4.4.4.10 Voice_Stop ................... `void Voice_Stop(SBYTE voice)' Description This function stops the playing sample of the specified voice. Parameters voice The number of the voice to be processed (starting from zero). Notes After the call to `Voice_Stop', the function `Voice_Stopped' will return nonzero (true) for the voice. If you want to silence the voice without stopping the playback, use `Voice_SetVolume(voice, 0)' instead. See also `Sample_Play', `Voice_Play', `Voice_SetFrequency', `Voice_SetPanning', `Voice_SetVolume'. 4.4.4.11 Voice_Stopped ...................... `BOOL Voice_Stopped(SBYTE voice)' Description This function returns whether the voice is active or not. Parameters voice The number of the voice to be checked (starting from zero). Result 0 The voice is stopped or has no sample assigned. nonzero The voice is playing a sample. Notes This function may not work with some drivers (especially for hardware mixed voices). In this case, its return value is undefined. See also `Voice_Stop'.  File: mikmod.info, Node: Loader Reference, Next: Module Loaders, Prev: Voice Functions, Up: Library Reference 4.5 Loader Reference ==================== * Menu: * Module Loaders:: * Sample Loaders::  File: mikmod.info, Node: Module Loaders, Next: Sample Loaders, Prev: Loader Reference, Up: Loader Reference 4.5.1 Module Loaders -------------------- MikMod presents a large choice of module loaders, for the most common formats as well as for some less-known exotic formats. `load_669' This loader recognizes "Composer 669" and "Unis 669" modules. The 669 and "Extended 669" formats were among the first PC module formats. They do not have a wide range of effects, but support up to 32 channels. "Composer 669" was written by Tran of Renaissance, a.k.a. Tomasz Pytel and released in 1992. "Unis 669 Composer" was written by Jason Nunn and released in 1994. `load_amf' This loader recognizes the "Advanced Module Format", which is the internal module format of the "DOS Sound and Music Interface" (DSMI) library. This format has the same limitations as the S3M format. The most famous DSMI application was DMP, the Dual Module Player. DMP and the DSMI library were written by Otto Chrons. DSMI was first released in 1993. `load_dsm' This loader recognizes the internal DSIK format, which is the internal module format of the "Digital Sound Interface Kit" (DSIK) library, the ancester of the SEAL library. This format has the same limitations as the S3M format. The DSIK library was written by Carlos Hasan and released in 1994. `load_far' This loader recognizes "Farandole" modules. These modules can be up to 16 channels and have Protracker comparable effects. The Farandole composer was written by Daniel Potter and released in 1994. `load_gdm' This loader recognizes the "General DigiMusic" format, which is the internal format of the "Bells, Whistles and Sound Boards" library. This format has the same limitations as the S3M format. The BWSB library was written by Edward Schlunder and first released in 1993. `load_imf' This loader recognizes "Imago Orpheus" modules. This format is roughly equivalent to the XM format, but with two effects columns instead of a volume column and an effect column. Imago Orpheus was written by Lutz Roeder and released in 1994. `load_it' This loader recognizes "Impulse Tracker" modules, currently the most powerful format. These modules support up to 64 real channels, and up to 256 virtual channels with the "New Note Action" feature. Besides, it has the widest range of effects, and supports 16 bit samples as well as surround sound. "Impulse Tracker" was written by Jeffrey Lim and released in 1996. `load_med' This loader recognizes "OctaMED" modules. These modules are comparable to Protracker modules, but can embed "synthsounds", which are midi-like instruments. "MED" and later "OctaMED" were written by Teijo Kinnunen. "MED" was released in 1989, and "OctaMED" was released in 1992. `load_m15' This loader recognizes the old 15 instrument modules, created by "Ultimate Soundtracker", "Soundtracker" and the first versions of "Protracker". Since this format was one of the first module formats, developed in 1987, it does not have any signature field, which makes it hard to detect reliably, because of its similarities with later module formats. `load_mod' This loader recognizes the standard 31 instrument modules, created by "Protracker" or Protracker-compatible programs. The original Protracker format was limited to 4 channels, but other trackers like "TakeTracker", "StarTracker" or "Oktalyzer" afforded more channels. Although it is now technically obsolete, this format is still widely used, due to its playback simplicity (on the adequate hardware, the Amiga). `load_mtm' This loader recognizes the "MultiTracker Module Editor" modules. The MTM format has up to 32 channels, and protracker comparable effects. It was intended to replace "Composer 669". The "MultiTracker Module Editor" was written by Starscream of Renaissance, a.k.a. Daniel Goldstein and released in late 1993. `load_okt' This loader recognizes the "Amiga Oktalyzer" modules. The OKT format has up to 8 channels, and a few protracker compatible effects, as well as other OKT-specific effects, of which only a few are currently supported by libmikmod. "Oktalyzer" was written by Armin Sander and released in 1990. `load_stm' This loader recognizes "ScreamTracker" modules. "ScreamTracker" was the first PC tracker, as well as the first PC module format. Loosely inspired by the "SoundTracker" format, it does not have as many effects as Protracker, although it supports 31 instruments and 4 channels. "ScreamTracker" was written by PSI of Future Crew, a.k.a. Sami Tammilehto. `load_stx' This loader recognizes "STMIK 0.2" modules. "STMIK" (the Scream Tracker Music Interface Kit) was a module playing library distributed by Future Crew to play Scream Tracker module in games and demos. It uses an intermediate format between STM and S3M and comes with a tool converting STM modules to STX. "STMIK" was written by PSI of Future Crew, a.k.a. Sami Tammilehto. `load_s3m' This loader recognizes "ScreamTracker 3" modules. This version was a huge improvement over the original "ScreamTracker". It supported 32 channels, up to 99 instruments, and a large choice of effects. "ScreamTracker 3" was written by PSI of Future Crew, a.k.a. Sami Tammilehto, and released in 1994. `load_ult' This loader recognizes "UltraTracker" modules. They are mostly similar to Protracker modules, but support two effects per channel. "UltraTracker" was written by MAS of Prophecy, a.k.a. Marc Andre Schallehn, and released in 1993. `load_uni' This loader recognizes "UNIMOD" modules. This is the internal format used by MikMod and APlayer. Use of this format is discouraged, this loader being provided for completeness. `load_xm' This loader recognizes "FastTracker 2" modules. This format was designed from scratch, instead of creating yet another Protracker variation. It was the first format using instruments as well as samples, and envelopes for finer effects. FastTracker 2 was written by Fredrik Huss and Magnus Hogdahl, and released in 1994.  File: mikmod.info, Node: Sample Loaders, Next: Driver Reference, Prev: Module Loaders, Up: Loader Reference 4.5.2 Sample Loaders -------------------- Currently, the only file type than can be loaded as a sample is the RIFF WAVE file. Stereo or compressed WAVE files are not supported yet.  File: mikmod.info, Node: Driver Reference, Next: Network Drivers, Prev: Sample Loaders, Up: Library Reference 4.6 Driver Reference ==================== * Menu: * Network Drivers:: * Hardware Drivers:: * Disk Writer Drivers:: * Other Drivers::  File: mikmod.info, Node: Network Drivers, Next: Hardware Drivers, Prev: Driver Reference, Up: Driver Reference 4.6.1 Network Drivers --------------------- These drivers send the generated sound over the network to a server program, which sends the sound to the real sound hardware. The server program can be on the same machine than your program, but MikMod does not have access to the hardware. Network drivers only support software mixing. `drv_AF' This driver works with the "Digital AudioFile" library. Start the server on the machine you want, set its hostname in the `AUDIOFILE' environment variable, and MikMod is ready to send it sound. `drv_esd' This driver works with the "Enlightened Sound Daemon". Start the esd daemon on the machine you want, set its hostname in the `ESPEAKER' environment variable, and MikMod is ready to send it sound.  File: mikmod.info, Node: Hardware Drivers, Next: Disk Writer Drivers, Prev: Network Drivers, Up: Driver Reference 4.6.2 Hardware Drivers ---------------------- These drivers access to the sound hardware of the machine they run on. Depending on your Unix flavor, you'll end with one or more drivers from this list: `drv_aix' This driver is only available under AIX, and access its audio device. This driver only supports software mixing. `drv_alsa' This driver is only available under Linux, and requires the ALSA driver to be compiled for your current kernel. This driver only supports software mixing, but a future version of the driver might be able to use the hardware capabilities of some sound cards. `drv_dart' This driver is only available under OS/2 version 3 and higher (Warp), and uses the "Direct Audio Real-Time" interface. This driver only supports software mixing. `drv_ds' This driver is only available under WIN32, and uses the "DirectSound" api. This driver only supports software mixing. `drv_hp' This driver is only available under HP-UX, and access its audio device. This driver only supports software mixing. `drv_os2' This driver is only available under OS/2 version 3 and higher (Warp), and OS/2 2.x with MMPM/2. This driver only supports software mixing. `drv_oss' This driver is available under any Unix with the Open Sound System drivers installed. Linux and FreeBSD also come with the OSS/Lite driver (the non-commercial version of OSS) and can make use of this driver. This driver only supports software mixing. `drv_sam9407' This driver is only available under Linux, and requires the Linux sam9407 driver to be compiled for your current kernel. This driver only supports hardware mixing. `drv_sgi' This driver is only available under IRIX, and uses the SGI audio library. This driver only supports software mixing. `drv_sun' This driver is only available under Unices which implement SunOS-like audio device interfaces, that is, SunOS, Solaris, NetBSD and OpenBSD. This driver only supports software mixing. `drv_ultra' This driver is only available under Linux, and requires the Linux Ultrasound driver (the ancestor of ALSA) to be compiled for your current kernel. This driver only supports hardware mixing. `drv_win' This driver is only available under WIN32, and uses the "multimedia API". This driver only supports software mixing.  File: mikmod.info, Node: Disk Writer Drivers, Next: Other Drivers, Prev: Hardware Drivers, Up: Driver Reference 4.6.3 Disk Writer Drivers ------------------------- These drivers work on any machine, since the generated sound is not sent to hardware, but written in a file. Disk writer drivers only support software mixing. `drv_raw' This driver outputs the sound data in a file by default named `music.raw' in the current directory. The file has no header and only contains the sound output. `drv_wav' This driver outputs the sound data in a RIFF WAVE file by default named `music.wav' in the current directory.  File: mikmod.info, Node: Other Drivers, Prev: Disk Writer Drivers, Up: Driver Reference 4.6.4 Other Drivers ------------------- These drivers are of little interest, but are handy sometimes. `drv_stdout' This driver outputs the sound data to the program's standard output. To avoid inconvenience, the data will not be output if the standard output is a terminal, thus you have to pipe it through another command or to redirect it to a file. Using this driver and redirecting to a file is equivalent to using the `drv_raw' disk writer. This driver only supports software mixing. `drv_pipe' This driver pipes the sound data to a command (which must be given in the driver commandline, via `MikMod_Init'). This driver only supports software mixing. `drv_nos' This driver doesn't produce sound at all, and will work on any machine. Since it does not have to produce sound, it supports both hardware and software mixing, with as many hardware voices as you like.  File: mikmod.info, Node: Index, Next: Function Index, Prev: Library Reference, Up: Top 5 Index ******* * Menu: * Function Index:: * Type and Variable Index::  File: mikmod.info, Node: Function Index, Next: Type and Variable Index, Prev: Index, Up: Index Function Index ************** [index] * Menu: * MikMod_Active: Library Core Functions. (line 9) * MikMod_DisableOutput: Library Core Functions. (line 30) * MikMod_EnableOutput: Library Core Functions. (line 44) * MikMod_Exit: Library Core Functions. (line 65) * MikMod_GetVersion: Library Core Functions. (line 76) * MikMod_InfoDriver: Library Core Functions. (line 88) * MikMod_InfoLoader: Library Core Functions. (line 106) * MikMod_Init: Library Core Functions. (line 124) * MikMod_InitThreads: Library Core Functions. (line 153) * MikMod_Lock: Library Core Functions. (line 174) * MikMod_RegisterAllDrivers: Library Core Functions. (line 195) * MikMod_RegisterAllLoaders: Library Core Functions. (line 205) * MikMod_RegisterDriver: Library Core Functions. (line 215) * MikMod_RegisterErrorHandler: Library Core Functions. (line 237) * MikMod_RegisterLoader: Library Core Functions. (line 261) * MikMod_RegisterPlayer: Library Core Functions. (line 285) * MikMod_Reset: Library Core Functions. (line 333) * MikMod_SetNumVoices: Library Core Functions. (line 362) * MikMod_strerror: Library Core Functions. (line 439) * MikMod_Unlock: Library Core Functions. (line 395) * MikMod_Update: Library Core Functions. (line 416) * Player_Active: Module Player Functions. (line 9) * Player_Free: Module Player Functions. (line 31) * Player_GetChannelVoice: Module Player Functions. (line 46) * Player_GetModule: Module Player Functions. (line 69) * Player_Load: Module Player Functions. (line 83) * Player_LoadFP: Module Player Functions. (line 122) * Player_LoadTitle: Module Player Functions. (line 163) * Player_LoadTitleFP: Module Player Functions. (line 185) * Player_Mute: Module Player Functions. (line 207) * Player_Muted: Module Player Functions. (line 237) * Player_NextPosition: Module Player Functions. (line 258) * Player_Paused: Module Player Functions. (line 272) * Player_PrevPosition: Module Player Functions. (line 289) * Player_SetPosition: Module Player Functions. (line 303) * Player_SetSpeed: Module Player Functions. (line 321) * Player_SetTempo: Module Player Functions. (line 335) * Player_SetVolume: Module Player Functions. (line 349) * Player_Start: Module Player Functions. (line 360) * Player_Stop: Module Player Functions. (line 378) * Player_ToggleMute: Module Player Functions. (line 388) * Player_TogglePause: Module Player Functions. (line 418) * Player_Unmute: Module Player Functions. (line 432) * Sample_Free: Sample Functions. (line 9) * Sample_Load: Sample Functions. (line 23) * Sample_LoadFP: Sample Functions. (line 41) * Sample_Play: Sample Functions. (line 63) * Voice_GetFrequency: Voice Functions. (line 9) * Voice_GetPanning: Voice Functions. (line 28) * Voice_GetPosition: Voice Functions. (line 48) * Voice_GetVolume: Voice Functions. (line 73) * Voice_Play: Voice Functions. (line 92) * Voice_RealVolume: Voice Functions. (line 119) * Voice_SetFrequency: Voice Functions. (line 145) * Voice_SetPanning: Voice Functions. (line 163) * Voice_SetVolume: Voice Functions. (line 186) * Voice_Stop: Voice Functions. (line 204) * Voice_Stopped: Voice Functions. (line 225)  File: mikmod.info, Node: Type and Variable Index, Prev: Function Index, Up: Index Type and Variable Index *********************** [index] * Menu: * INSTRUMENT: Structure Reference. (line 224) * md_device: Variable Reference. (line 62) * md_driver: Variable Reference. (line 68) * md_mixfreq: Variable Reference. (line 76) * md_mode: Variable Reference. (line 83) * md_musicvolume: Variable Reference. (line 33) * md_pansep: Variable Reference. (line 35) * md_reverb: Variable Reference. (line 40) * md_sndfxvolume: Variable Reference. (line 45) * md_volume: Variable Reference. (line 49) * MDRIVER: Structure Reference. (line 13) * MikMod_critical: Variable Reference. (line 14) * MikMod_errno: Variable Reference. (line 12) * MODULE: Structure Reference. (line 37) * MREADER: Structure Reference. (line 306) * MWRITER: Structure Reference. (line 335) * SAMPLE: Structure Reference. (line 234)  Tag Table: Node: Top998 Node: Introduction1450 Node: Tutorial2329 Node: MikMod Concepts3059 Node: A Skeleton Program4024 Node: Playing Modules5582 Node: Playing Sound Effects9384 Node: More Sound Effects13354 Ref: More Sound Effects-Footnote-115782 Node: Using the Library15968 Node: Library Version16369 Node: Type Definitions18544 Node: Error Handling19595 Node: Library Initialization21231 Ref: Library Initialization-Footnote-124459 Node: Samples and Voice Control24563 Node: Modules and Player Control27425 Node: Loading Data from Memory31703 Node: Library Reference32621 Node: Variable Reference33053 Node: Structure Reference38103 Node: Error Reference49032 Ref: Error Reference-Footnote-159542 Node: Function Reference59703 Node: Library Core Functions60098 Node: Module Player Functions72668 Node: Sample Functions84057 Node: Voice Functions86229 Node: Loader Reference92621 Node: Module Loaders92829 Node: Sample Loaders99302 Node: Driver Reference99600 Node: Network Drivers99853 Node: Hardware Drivers100755 Node: Disk Writer Drivers103353 Node: Other Drivers104001 Node: Index105041 Node: Function Index105209 Node: Type and Variable Index112415  End Tag Table libmikmod-3.1.16/docs/Makefile.am0000644000000000000000000000016110003535130015217 0ustar rootrootinfo_TEXINFOS=mikmod.texi man_MANS=libmikmod-config.1 EXTRA_DIST=mikmod.html mikmod.info libmikmod-config.1.in libmikmod-3.1.16/docs/mikmod.pdf0000644000000000000000000101350412262065326015162 0ustar rootroot%PDF-1.4 %ÐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ãd4›½*´.‰<øï·_•èÌf’W¯_wÕ«îrðãc;Šòê`GæUŠOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ãd4›½*´.‰<Ì¿ß~U¢Îf’W¯_u½ªîvðãc;ZäÕÁŽÌ«Ÿ¶­®MfGñÏ}í I•]/¶ìÞ­ÍmÞ¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ÕÿEK{*ʇuÄpg6;µÞ$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­ž÷ŽE™7·¢â žÒ"/²îÑ7»¸¦‘¼ýj;{Y—ÇÊ‹"1þt‹m×|‘£o¼irÛåI É‘c¶×º>[TÒ›ÏEnn#×ÛûþbÅø¹‘ûÒî«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gŽÏR©ð133wÄ xAÄbêí;¬ÒaGL6K& 0+‡}&ö"?‘á°(Ò¦Òa/ ¡cì,•!£½¥‰î-fö3¤Ù*IÃx {aªùð”sIC%ÒðhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Õ^C<ÐHàDN8ð÷õÌŠV{Hôüæç=üúØS`¾Jñ m}u%ŒÒßE Y]^/`»w¦¶oâÃÕå:1L·ÙÖVÝ‹omy¾èUÿ­àTÙ ÖÃþŽv¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”žX[“ÖôÚã{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîFŽ^‚ñÎp•=‰!9òÌþÚ4gÀêBË¥0pôùÞÞ‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—žX NˆHæžÐÔ3$¤Çž˜{<Ý0Š*¢5cÕ~ÿP÷õʯÂùÝ5WÂ42^!ž0^#žrq‰xƘœE„3xÎü ñ ªz“)cÒgl1BÌîÒ°õ•?ŸXqû!òŠNA‡¨Wš»A*dý1ùÔ)iȧΰÅç“Оó â9ç’†NVf¤¡–kô¯VäaŠžUJü†ôì?%Íš5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›þ1âj· ¾gÈÈ endstream endobj 6 0 obj << /Length 334 /Filter /FlateDecode >> stream xÚ‘ÍOƒ@Åïü{„ãγ7cüHŒ=¨Ä‹z …6¤¥DÒüïª=cH`–Ì{¿Ç•– UÐÊA(¼Zu‰ß5 Ow Î{yþ¹’Çÿa– 5wfô»*“‹[ÇÊh°ìY•똉-‚ó^•µzMívÑg9aZËÝqúÜ÷óøÐ.‡jøÌÞËûä¦L>¾Ѥà5ž²ÄxNC£ÖÉã„fV¨!è€M¡ï‚bò`Š -lãÓÕ±kö™ ‡êÐö{Á¥MÝþ(æ.0²Ta 0Î&ͪé¢z9š5Ã$1GÍX@…51GN@ÂÈ,X‡§&æ†j3}ÿK(­v»*Ãô0Ò¥Zdù³äM³žÁž,gey\êÚ¾¾ìÚm××Лߡ´äˆO ±Å_KGM€Hç¥#„@§Ò¿°}Ž÷ endstream endobj 5 0 obj << /Type /Page /Contents 6 0 R /Resources 4 0 R /MediaBox [0 0 612 792] /Parent 10 0 R >> endobj 4 0 obj << /Font << /F75 7 0 R /F55 8 0 R /F96 9 0 R >> /ProcSet [ /PDF /Text ] >> endobj 13 0 obj << /Length 935 /Filter /FlateDecode >> stream xÚ}Umoâ8þίÈG#mR¿¥€î­Ú.§¾ ·ªnïCH X rÌV•öÇߌǰt¯:!á™ñcÏ‹Ÿ™ˆ„ÃO$žŒ”Ê&zœTûV·MHX< DÄi%aý_HšK™¤·Ýƒ«û‰ –…äÓëºNRqAÌ!âb‡(9ÎYc×®t卵Œ‡A Ôw¾ßð¯tæðÃ{Gµ;¦*[œ©mï]}> endobj 11 0 obj << /Font << /F55 8 0 R /F64 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 17 0 obj << /Length 903 /Filter /FlateDecode >> stream xÚUKoÛ0 ¾÷Wä(µgYvï¶7: è°dØaÛAµ•D¨_å¶ù÷#E:M·| Dñõñe¹Há“‹2]¬”JÊ|½¨Ú‹4hÝ~A‹¯Ÿ.$ÛÅ`ŸY¾Ý^¼úX ™&eZÊÅvwj[/~ˆw=xã¢X)%äë(ÎóB\uQ¶ÞõQ ²ž*oû×…”BF¿¶Ÿ/>lOY‹,ûÏòÐò¯úVPß*Éd‘s}ËužH•S}2Š‹e†)Iœ+‚BþÄ ÈÖIZ²ûö`À£Èĵ½»f8¤û©ãecovGÚØ¥º£½y¬LÓê©p­£l%Øg×;Zhƒë÷N·­aµï9fÍ[Œ0¶b·îYQ qH•ÈBó3•ÊTŠË8`VÈP$îõ04¶ÒØ”(”+qåɲ‡&1€X‰k(ŒÛMÍ«&HU˜G{Û:˜Û³Vâ4˵x°þÀNä2Úv˜ÍOqŒ±ïãÆh×½êÍ—«$èe7"‡Ã%_Òá[3ÚÚŒ1WyÌ%qA¤ ÷ˆå=B2¤•æZôÎë€ BY¸pSÇ>Ðkd(œ’_Ó{Ú÷;’ß:[ŠÐìGkv} áÄ'Í9:ÏÚÎ<â ]M¿Ça(~6.OÙátòÃäI]éAßÚÆzkβ¾P=D:ò¬1`xM“ùüB¤X endstream endobj 16 0 obj << /Type /Page /Contents 17 0 R /Resources 15 0 R /MediaBox [0 0 612 792] /Parent 10 0 R >> endobj 18 0 obj << /D [16 0 R /XYZ 90 720 null] >> endobj 19 0 obj << /D [16 0 R /XYZ 90 720 null] >> endobj 15 0 obj << /Font << /F55 8 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj << /Length 1969 /Filter /FlateDecode >> stream xÚ­XYoäÆ~ׯ˜8â;\6o*AÇvœ ¼€ãÕK` 5l ÃË(’³"pÿµ5`®Ÿºq¢øÔ}iÔW9ǽŸ:³i@x2UÅ«BÇÞ<ìᤣ™T¶ÈþÄ›±åߟ'CRÎÕ LslûÎ%NÛ磜}kÎo[VÜÊåmE&ÞÒ[¸³ò_pÓNò­ëÛSŸ×ƒ‹f¢]*pU$v½)ø"=4·DÉœ#Ýò~¾HZv/cišÓ+ ¦™ó0ɱÌGÒÄåLƼ— ò¦`ÚÞ—m7û ¶F„ˆ3‘AW¯ÀðËÄ›©)trYØ\ê-»*óÐçý '_WšªÚ®Dõ_öià°/TyÂÁØ _òÈg㏠!Ü‹/˜’3W¯)a5.I»–Ù:rJÝëW’o{ŬŽm­™á7\*ßU:„4h²¸Í¸¾!pðP¬À ƒúü#æq!„nÆ>fôÁš y­R[ ®âzx»?@QÂÉèÜÈù²mŽº‡ˆÊ\åKµ_%kÄÎÐN¨5.Ûi$W„A☽r^‚͒у¶œrX£B’pèÖE"+“®•ñãÔMRЉtyßB}E ²yKq@‹À@xŸJ®Å’5Ê1*xUmžuç9Ú@–õL‡JÃÔÊòÝ@…’u,khǹ4YU4þÒIú-ó¾X8”ƒ—„€‡DS@q1+9~m(§g™—2åØ6?z*œÇ©9¢÷i NbH× éH™3 ˜OUûWáF%‹9UàS>2;‚ÞS€>¼­‰+sDÎW†¬ã|jöؤ”þÄM‰'Ò(wgk–Ô-P+Ê;4ÿSþã/Œ¿ˆ?«0 4öâYΰN«6©óê•0 1N–mÏßÈjÂmî\µî?…{böÃYWXváõËCÎm–©ÔÀá·àŒ…êx@¯¾ð:ß‚{®ç)‹ö ¬ÖÞ¼‡@nÀK”¹QÙ#.–ÛE+{n¯¦Ð¢Ö ×9xiP•o(  ùÝqý t!á/¿°‰ÀóVLz—ö|•ƒ²ñô%¨ Á±Ñ ©«£LA·–—½.L9b% Œ¤”HÊy‹@U1Lø”óH¼7Pr ¢7ªÑ‹fm'Ç€ ÃÙ’Zv x˜7¼Ðì6ÙåEÁ‹ÕŒ;ž¨„g1UÌ2°ëdž÷à3u`ø¥ ¿u~¶ƒÁêë¹iñ^+óG>X /){å¬-eCç2tÅŽ]?z‘7ò\ ;#å§ŸóãXÉäóTÚB“¢ÜM¨`eF©¦hUøÏu-â f×ܦ6ç ïz¢ û ž!Þ÷0P€úcÛ0å;.ëO ™7ú¥½ìËZ ßPÕUHðx5›oç­Ÿd†{ÔOüBÜ v®ƒÒùŽ•ŒÃµ’) P$($ lÙ£|7Žf0xÓ«©Ûÿ!üñš?TPÒ3mÎu[¸å–ä0rS5O<·¿Àî–-‡,s³4%kü þ5Ö|¿TÅ:¿lxG:Ç%b\ÖÖŶfrۡٛƌ0Š›ê+ÝVÇ£7´ã“J^£?ÏÏL?çdì‚¢‡æ?y»>BÁºa²{"ÎzŸ·«vïnþºõHöSc#IŠÓ`Qk+Œµ‘'$tDm“_z3¤oc¡ë•ljͲ°ÃÈG¼›Âü[÷F¿Æ½ßû UäLþ†P2øý‘†e]‹«O»6ÎÜ0Ív>¶Sÿrmƒ½‘¨ÐþâëçµoQš­@oé.´¦×~¤[…vàîy·@I ! =00r¯<T¬ÜÌ.›Ö‡¸%õдãR º°…¹éÿïòøÖ4ç‹J”¹+ïºÊéù Ýc.¥º÷ö•¸Øq5ÛÏuö‚ý˜'·C Äî¡JX?"ß+(žm{×ü2£¾¥õ<|Vö™]¶ƒ(ïŸÂÐì}·¬ˆ”XöëÏ¡Qù¦àõ;Zpù­ýn «òK 7¢æïrþζÇáîó×¶›ûp£'ÃêoíÈó{‹ï¸àíêÜ4sænÌ@ÿÚ"Z“–‰…4Dႈ _‡k]W“;åï俨ª¯øŒÕéw[ÚûÍ /.®ÖNýÔÅ?ûì?^ö$²íTIìà wð<Ë«9´8 ¸®»ª+OžÀh^!Ð-ücÿDllÉ endstream endobj 21 0 obj << /Type /Page /Contents 22 0 R /Resources 20 0 R /MediaBox [0 0 612 792] /Parent 10 0 R >> endobj 23 0 obj << /D [21 0 R /XYZ 90 720 null] >> endobj 24 0 obj << /D [21 0 R /XYZ 90 720 null] >> endobj 25 0 obj << /D [21 0 R /XYZ 90 598.464 null] >> endobj 27 0 obj << /D [21 0 R /XYZ 90 425.828 null] >> endobj 20 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F58 26 0 R /F64 14 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1453 /Filter /FlateDecode >> stream xÚWëoÛ6ÿž¿ÂÈ0D."U”(Kjö@i×!A‹ÆÅ>¬CªH´M”–R=šzÿ}w¼“-;jÑ A ãñŽ÷úÝ‘þÄ$õ'qz©L&ùúÈ·Üz9!âÍ‹#Ár.ºÉ'ó£‡Ï£h"|/õS1™/†GÍ‹ÉïÎÓUvÛªzê†a覮”‘3Ÿ&ÒéÚªÖ™_F3'œþ1ÿõè|¾5Á7z…’÷Ýš Ý"ñ’É,‘ž%yv©?\VÅõùgݾó#þÅúgº"ôDDbÿ ï0JHÀ‚+b/ŒIÎWº™º‘ðÛºZÖÙšwÓ qªÎ´¼™º°V´È«õ­6Š·ît»"ª]±À¢2¦Âît¹ÜêÀÉÂÉÊ©pXÓèR=bG÷âåÌ‹ 1Yóœ áVø•Žúœ­o²a»áLxqpôKx¬øÞ蛵þ°® 7¯Ê…^Ò9®›/L¶lÞE ¬ºÀ™‘„ Å“ûù|lÚUÕ-!%a’BJ0»Hqvw+›Ñ¢Ë³Êо]£!ºVMgÚSÀŸ:kȨl¶'—KV´ÞRJbÜ­zjCuä㺒’¶u|3ÝzSh•e”Iìä™1DµÕX™ Óm•™oÔR7Ð;yVëOªnÆ3—x2{Ýš•2ÇvBr 8 #a Ö¸dX‚åtÙ+Ì!A‚-±­õ–Ji`¼©³z3MBó ÌCy:· iýè ð—¥nÇBA¤þ6ÒÝ^‘åªÁÚËtÆq±®jEþd…úØe-ówñÓ:+Ùm Vaé?UÃ¥M/ÁÞ4°¥EÂ¥ ä®×q•A„Äž%f­²bC|¨~¯´-qšª+ >û7‹¹-—Téh G·L(EÅ‚Í-žq#Ͷ?R8€£ÙžÙYÉÙFóÀzª@*±± §V0}>vºYÑz­À Ñ6¹(lTKœ T¹ëc\­²i;TVΡ£›}c¶¼HPflØÑ½ØVY]ØÁ›ÕÊ£è⧠Ās`ŽeHòPi˜¤³Ày£ÕdÓ0p6vä†qä ¾QtFö &6õDÀwÞ«ÎÞwb‡´íø¦- € c6´¹UÀ× þ¶´W`ì1fE8MyíÈ;/ÇmEš=˜¤”Î…jOØrÓñpƒv!Ï´“OS2€¼eà ‘s»äžë{>ÌUÆ€]2€AàÄÎ;(ÎE–Ê^ W]£ócÂiƒ¶¾H¼ó…4L¿so¦=>oÔ†N‡{f'{pûŒÕ*I½Hn'ΉÍRàüÒ7,ÚËhV§X·ÆÂ ¼%ñ4ïýÌÃ1yÁÁ6Ç!X‘W1­§tmZ„ªch§£²È~æZúà€r9çxüÊ{š<|èW©å‰¾¢Ù‚äOl»èßvÁ~D«Œ>Þ @–»­°É6ØÜH?xØC'˜y¡ßé27]Áò?t%ÜU…·úiäÝu JωèðØu¦Ëþ 7rÔ_–¢ƒ×Íå«go/ÎÙc ålÏÀAþúÛ•Ó…‹zÔ"Qð=}‚‘©{ÿr¿÷ý? Ëa*¸ùþ«3¤ôMÎìnÌ/ÌOã–×Å5øÊòÿHßgPóë«WÏç×—o¯^>=ÓÄñÙ ùƒ.Ñg‹+2(|º‡ˆÅm­Ëv:@U×§¤pü”êöoÇôÓõ´¯GÖT%·Ç÷ κòØ^¾y‰HFóÝ´5جêA°.«Þ{ŠÛ;¡VmW—gý{l™ü^ùRÅ÷ò… $¸>¯mƒ_#Flºû¡kì‡î1§f&™øâO«a%ÉÚWKwKÓfuû­Á°çW¨³onáw+ÝŸ‡Ò¬ý8o¡SûÖ8ðºþ v˜þm endstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 612 792] /Parent 10 0 R >> endobj 32 0 obj << /D [30 0 R /XYZ 90 720 null] >> endobj 33 0 obj << /D [30 0 R /XYZ 90 543.534 null] >> endobj 29 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 36 0 obj << /Length 2723 /Filter /FlateDecode >> stream xÚY[ܶ~÷¯Ø(¬ <ŠHÝÓ‡"uìt‹:1ºkä¡. î gGµFšŠÒÚ[ ÿ½çF¤•“ì>ˆ:¤Î9<×uÁ¿º*£«<ŽÃ2)®v§gQ»û+üãÇgJÖmaáv²ò/·Ï¾}“¦W* ˨TW·‡)«ÛýÕ?ƒWGsîm·ÙÆqèï6Û$IƒÛM‘Cßv•©a&JÒ,H6ÿºýÛ³×·£°Tëß©®|ªV6UKy˜êì*+’PÅ ëöí7ø6 >Ûåá¹6UsÏ/ß|‹:Œ­ŠC•òGƒ«­=ˆÒHEðõ§Ù2ÅëÞVŸÞ¶ûïÏ{Ó[\~Y¹Õ›¯ÿŸg¢³0Ž„øÔ±ÝÇ›¾=ÏY,„ɺ7%Q§v?Ôök½<Ú£­¥5k:Î]Õôdéú½íº—üÑóWíPïyÜ´=êÖ‰ÅËÚÎ×6ßñËݰ~óü%‰LÒ°PŪÙ\߸¶CÑB‚÷¦Å=Mö•a®ó¹Í¼Wï«qêp^õç\âë/U¿æ¦ba5˜YÆ<.( Þ¶J‚þ—£é_8ˆu¥ƒÆ~ÆA-Žþ¼Åuð¦ê6*€e*èÁXI¬ƒÏ]öÅ=x1ÙµMýȤÎÞW’Êîy†v°ÙÂ7{/uoªpØw3ìDÊÝÐóŒ©]Ë[U $O2ÛjÄïuîdÞàSü¬$OÛÎ…›m%Sé¼~מ¬ãáçª?òÈȧ¦»¶;Ô騲šðÞÖÄAÄ¡ò‰ ¬áå£FÚn͹ 6Îò`_}ˆT kðÛž‰3AHèqòñLT »K¡TÝTÍΊӋYEI£0É3H‚ìƒíׂC—a©ý*Þ K«?w¦®Ñ“¤A+úZpï©j¼bÇ5 ™„fã5LöéÎØ½EÆe6·Íç#˜cç©„{ØZ~r^åhOà…¸È‚Gü¢˜~2¤Ö„—;çdç #¶üÆáŒ#Ã& Í.âæ z˜j[ÈSy\7+Õº¤õìŒÃŠÇÉe·@Þ·Í‹žÉ'Ó÷”"Hw-?/k“:Ù¹"¥ãxºx³¸_ÛÉä<²€À~IÁ1Õ¤XÜ‚@ªN Üqg1…5ÛžÀõKßÖ8y˜‚¨F6.ŽÀyï+£Pe©A©w×MÕ¯ÅkE¯,ýb°m•Á/›",+Áégš{‘LÁ‰h㦄ŽnDò´:Q½ãÚ ¥[-Š+3PpWÛµÄJñ¨Úiÿ]ÛC¢©-ÈBŒè ·u#%*©®î:ƒ^cªé™ì½>ޝÄÇ}q3§Mа;Ÿ£ÈùÜñÊuSpÎL8‚qÚC‘ÄB;˳-t˜e‹ì½Æ,IKŸ‰„`â,’Z®>/áµ%¾ E,¾Êç†?¾¿Ù’d*.y Ìv¦ÛcFd)ÊÉ9ãaùŽû?'ò¤HE;,ºÉމGàäwÅë/mi­pc=§ÔéT(!ÿ¼2@¤†ƒªyºÊIÒ]jÝQTŽ¥¥R–[É})ž+1§Sˆ¥¢ð±ôÃÛŸxýñæç7·ß¾¿¹~µ}eê|,ù`ƒÔÜ‹#Ah¨z2§,c´@Éõƒ3IÊÀ6n ¤F’+Ze§ùïÍhŠà˜¿v“‡¡Æf^&ÁOm?-7/ÉȨ›'©WÓ0š¬òyÝKšN®Cå³ÇLÀ^í "p•ÇAö›Ù¯¢Ï—Ÿ(„,h„?ì¾–ßœíªvpür78è—NÞþ€8Qc·Å÷‚‹w.=Z à êÕ{¦1~ÕÁÖÊC^„q1îOÎaGÈ´“`V1 .Ãæ_V>V‚lyçiê’Kôæ•LTµ”’«Ë"hÌÉ2‰ºné»2fXg°(Óé,Ž2Ž¥ÙzòèpÚÈ úL+˜sÉð a»(aZ·Û 9µ å& œ€HºnüàÊ­ÕÁkºðÝ:»0‚ÄkDÄmŒ'q”°Çv€SNÔN,íÚÉÂb²!HÝgà$s®í~¹>‡ rA^3·Xº;>‘|Úxce³=‹~;³†OsDÔc€zÜ£ßÇùÌìøŽgU#c°Ð#vœ¤91Î'ŒóÀ/>1˜yœSuš±ü‡ 6ÙõÝÌÄ3ÚZ–rRàȵÛñô‚*áÙPüŠ;ê+q®C1ïžã9‘{¦äŒE³ötîÇÃD<ß4L{¸Ã]ëd„gµüÙ݈a€8_t~ÑA%ßV˜œjRO³ÒoPo~ÜU÷kû±/¡¥ +ÙM@–c”%¾„)]  tÌe‰á[Õ ²:›Òº÷ˆ­r €‡æÞ Pð\Å6{Î <´Ÿ>ðî­Ì‚êÀĦmþk»öåJPò‡ª¸Wáäþ¹B€‚TgMçÏà8ÃP &ŽÕ~OGJƒò½ãùJH#ÛEAH¢à¯RÒ1Z/w±ö·ø•áUù}‹*pŒûJA¨‡JðŒ„ˆtÒQs˜÷À ăsM¹DpÒ „¤íÍΊþ\I8É9@øÏv‹àZSK2-'YÌoE2Ž\|vÖìeqËÏQá"ÁÞ®«-_He¸°—,`N=x¡ˆ£ñ”GÄm¹P‚|À¸xªëÓË$oþ¡›Ü¾ä“ aMµc6®!ˆ"Ì’`ñåâ*Â*ÂD­˜ªÔ* u–-öMþüm‰É ‰õNÌpg(É?¡òpvë}Lø‚[º\­èe± –¢J4†ñU’‘<^Aª0•f¶¤ÀW~t¾ÁÝ“-MÇä;ã*¼£KË8¸i™6^0` ”ÏkvD{æWf.N'öÖ u/“‡‘Ï:‚sI/Œû=Tü‡UxÊt¹‚‡â2}Ї0[ô¬PqMÒEáÏö0"ôO¬s4Cè¡X¾ÂC‡‚QS¹£Ýc9Ò%·õVøM]3cèÚ±¶]Ò™zMUyŒrõ6#MÂTe Tο¬+ “4Yàãr-Ò“«çïr)å=ëåu”æãà²ó—Ëû._2ã4+…"¦ê…Ù¿Û;¡aO·³ÄâY«ùëFÉ“„„x\ËÇxv(Ñ`Ùp<̳ù…ÒôöîÐYëï ìW®é¾V3”*Cu9¼M~mùuCžÎS,ù1ÔHþµ ÐÄ x˜¢ªC:xGPÕl`oüK^sÞ@¨É%ìkºÉÞõnM4ö> endobj 37 0 obj << /D [35 0 R /XYZ 90 720 null] >> endobj 38 0 obj << /D [35 0 R /XYZ 90 124.998 null] >> endobj 34 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F58 26 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 41 0 obj << /Length 815 /Filter /FlateDecode >> stream xÚÕVÛn›@}ÏWPWU 2ppz‘ÒØ®ZÙI[U¥¦²6f±WÖZ'éåß»7bœ ç¢ö¡²,f–Ù33çÌžáòŸgt]ãÀ÷n³lÇ•«tn(ãìÃŽ§ãlh×"ßOvöahx®Óu»ž1IêP“Øøf/à’!jÙ¾ï›àвƒ 4'V˜%#Ôßqƒ°c†Ö÷ɧþä6YÀ#«‘—Õ‰ÇóUäi"3%L$×®É8Ÿj-!TeÑæFÔ5/J¦Â–g"ËöLª ±veÈD»iª6Í‘†ÎD©ÎH.B%:”weéŒW ¨wc] œ±¦éò–)á72e¬Ö.„£ï³trzlÏw¼P5½¤dNaæsˆØ®÷Nƒes8r©\™›ËsuE×0[¦èP@rb;ubAäD† :Žï•eÏ⊄æ_ŽH¬ì1)smñ…ôF9Y9º¼Cåë-(IÐŒÊÙÛ¯:“I=•ô%Îgik¤7eŽ ;‹w,4Çfø2#õØ:nq~î†.ÿ{MX?å"œhƒkœ3…_7í«Hz¸Ëú®ñÑèó°¯#ŠäÚk¯m°5ÏŠàjƾSïª]­›ä¥hÎ9+<(Æ^bò¤S¼Bt[J5 Ó3 t”¦=µ§"|k~œcÆøº“8­Xcâ,žrÅuø¯·êÚöúÓñé`2Ÿô_éĉ êò?ò:„Ûj‰’åœÈÚdt7A’%ål'bRD©&¼uLÊTCNXs›r`Ú•° ¹>/¯ŠsþtË[m™7È‹šè.å) ­µÀýœTÕ«¾í ]8E¬¤¹hêìwÓªK ÔÍòÐot1Üê¾–g,÷L‡D²`Z0ç ®Z“RŸèšV/Þc´ÑŒô¯•¨÷±Ÿ£áºóÛ!•åÿOŠÞl§@ü?IðutžEH2¯EmTèA%ÿŽªÕç+éý{)›Î潇yèJ·î¿2ä§ÐÞWM;)³/N4fWopÛ’øîûнΠendstream endobj 40 0 obj << /Type /Page /Contents 41 0 R /Resources 39 0 R /MediaBox [0 0 612 792] /Parent 43 0 R >> endobj 42 0 obj << /D [40 0 R /XYZ 90 720 null] >> endobj 39 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 2032 /Filter /FlateDecode >> stream xÚXYÜÆ~ׯØ<-ÇÖPìæm'Il1,'Ènlq p‡=3ÌrØ+­ìü÷ÔÕâuõøÚ–o¾nЇÚümèÏCÿsð_}é–ëĽ9»¯ÚNÄwÅé\›H{R<ùþÜÑú7‡³Ph·§^òLྠEè$ÅGím‹{ªÅÁ—üîïù;îçŸãq<ø…Õ-¼‰ý, ÝâýÐìúÊ6è­¼¯lsÛ³0ð¥¹Ê½éúIšjM?´D|‘œGËzAV¯ÃÞø•}Qõì3ûØñx8ÔâÍ£qþ¶DðÃ88JÜóTÔ5ï˜r"cè¨ÛNŒ‘‰ÖõJž:·˜a“£nÂ-îu>wî]Õì(orŒÐÌ›hˆÖ9=sÐ|øà³¸chË4W€“YųdΡ´àÚ§™wäÐ £Yµ)ÐGQŒ2'€@ íx̉†§+›x]Üèjz·¦3­Ó( RŒˆS°H«á(?†ðzgúï‡Ó¬ÝJØ*®ã1ÈwàvpPx 0{Z¾|ê‹¶8jûpØ™¾õd‚<4œÐÌ n­ÝK8ýÓT/ÂÙÌ€ÕK*N6ÅÀ«Ljª:Ç*Ì™Z³5zR&sÈ-+@ú 2# EI…f× ¤¬æpŒèŠ“¥ä3äP K0ÁZÑ£ˆŠ#´±'pVuÃ Ô ¿'D+É'2 2'½x, 5}œ• ,Ò//ŒŒ1È[·rr9P¤c„ÍgC*‰F8=æ&И.kwŸÕˆ˜Ñj%p£ÄÏÇܪÕ(ç•L §>ŠP¯ÏÌ5#V„Ñ„—‚c\uÃÙ5€é’/uŒeªÃjWÈan ¾á.åQê+•.‘í{Ëç"D™[ôå‚$Þ¿£[ ðF¢€`D63B9» iîë4¹„ù{æ „i>·5 9£È\’ØS73¿µ$\½ƒÔóe·vÇ6Œâ)å:R/‚Äp´¬u= ÒW+vàÇÓgüjÅNý\ç+;¸ù ß±v`qÿþ€ZV RÅò·;s諾( ½ø]ßšùq/3ĽNÂDqú¡HŒ°Â ŠúD_FE˜dö°Æ¢=i`´oí‰÷Lª8I™HÒ‘Ôõ€!"‚ó%Q“,§ÇCAýÃ#sA¸8H\ÀÁkKP¥î=à‹’)zÈùäTyé|£Z8Êö~ªm:w†¬& Æ©yíÁõ«´„ƒó ’³°cG ÂÜ¢ëswèTÊ{±—·ÒĤ|×±Z$3x·xÑTWqàAZD&øé‹T!« i Q^)},œ×ð¬kmheOøOíGÕËè¨5­Zú°« CЭËóæL©KGE†ôš ª15w-¯*p5ä™3nÇ;fj§R**šCÝ7ô¶¬¤uІœ>ÔÅ‘ëxÆ€Nш‹Çòê“ÒmXþÞ2E)øœ"¾#Š “y_ÀCžmÔ´g¡´üÝŦe%Ëȳ”)ªçÆÎ‰‡E{Nrærž\ÓE’RB¦÷žR¢µ> endobj 47 0 obj << /D [45 0 R /XYZ 90 720 null] >> endobj 44 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 50 0 obj << /Length 2373 /Filter /FlateDecode >> stream xÚ­koܸñ{~Ŷ@{ÚÆË#)ê•ô\ìär¸ ×WºyQé_Z]$÷sæÜe<êöœÍ‘õ™ïûGTß‘çhF“ìv ~g¨JÁ¤Gd?ÌQ #æ)¯Û°i‹¤ÉÊ¢fFA+œØ—èÉgÂFÇ+T¹'¬Ám1"ÀˆÂÉʶ&¸þ5Þís}†3Ϲ3.þMŽ.èqؾ—èRqÒ´&êa\Û˜aRH;ZyiÜ/‰ÉÕÃÆAƒÎqgÜK²™Äy^“Xû‘R†X™³½Ë 5uÚy}z]¦×E|“ë·m³o›Yã É”§¾ÊR–ôyV‰¶{©Á³Lê4 #e¥ЦÌAK¨ t'JHk©~2ÇÏJòˆ…®7±õ•±àõ»<¾ÿÈ=^o~p¤'=‡w_€‹§3)bSV¸%#´¿Yì§ôµÐ¿ÒÇë #5šüfhJ‰ NãÔêêý>ûãÇ,X̶εÞ#Šàø3 ®&„ û?s$>Ë‰Ç ‘ ¹zñ¯ëç—¯Ö¯ž?ûñ$cGZ™ÁIË“ŠøÿéáPZñilþƒÔƒÛ?w›…šƒãü:ÙÚ±±ú{½×üü˰òÑä±u)-gÓ/dß C±U¨4½˜,C½áqšÚhp 5ÑNJЈUZ×Ô U÷45Ϋ<éì€TFòÕ ~yÔO!U7WÐæTDî–E~Oç4Xo rIjñ9 ¹;q¶¾éªMsXåF4l©FQœ[3œ’œ8²M’Ö¢kê%·4k²% ŽV¬ûN®c?tì¡õ™"ž‘×Ä?~S½ƒ[|[µ]8ѶIÅüÀýªwËÈ?|1À™‡}¸à‘/´,˜ÁÞ7,´#¡}ƒÖU ÷DI—£$ cz“Ôa Šƒ• ß}lãK¶²Ë^ã²Kõ0ÈõÆÒ¡'³ÑR…žÅÓ< ÛDãÉÕ-¤**¬±rî¨À¤,ºÁf =ãE 8K\¡•ì54c±C³7è¯3†R Eø»P!œïŽi™Ê1p¾Ñ;ÑÈ=¿x³¾¸œ­÷REð¥Éc‚Wï//ß¾sNØjá³(pCC0d .‹¼ˆðŬJ˜ÂÞa„†y4 –ÓÇ>?ê*Kº”%˜àÞÁmyéAË–·ú  ÀvaúaÍ»®Âã³Ês™ïú_oV[Úà›l6 §ÎòðUK=Üìj|ëžâéߨ#øÃÜ7ÍûO?óE pðpæFáâÎ`í m!|qõèŸô?¶_BùÁ"r䂉¡N„,ò¡“D4ƃíòè”[È>Ô±Hõ5ÉvlpMBSEÔHùP@öö9;%@÷89:€Kå@êн'‡ræ êÍ6–èÖ—g7UlšA˜˜†¿´÷qžý»ãKsiúw˜ÔmUÙKÎpxFÏÛæ_ô¦†`U NÞ½3áÅÎ…k•áBu ÀwÈa>7ÎIËÙPvéõ®Lõ±¤©¹_™I«ÐZÒ…ÎÁÿoDÔ·é°Ù<>ÁÞEÏ_¿=¿øCÜGA¯ëZ7½{þÀ²ÂB endstream endobj 49 0 obj << /Type /Page /Contents 50 0 R /Resources 48 0 R /MediaBox [0 0 612 792] /Parent 43 0 R >> endobj 51 0 obj << /D [49 0 R /XYZ 90 720 null] >> endobj 52 0 obj << /D [49 0 R /XYZ 90 720 null] >> endobj 48 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R /F4 53 0 R /F31 54 0 R /F2 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 1693 /Filter /FlateDecode >> stream xÚÕXÛnÜ6}÷W,´Ñ^V¼è–´š6 œÆIk»îCÊŠëU­•]¼5Šü{g8¤VÚÈhâ´…a‹ÃËpÎpxfh>óá‡ÏIÉÏ–›ßôÖ3jœ<=àvÞ&.3Ÿ|óS̸Ï?á³³ÕPÕY6{åý°N¯Z]ÏRJO>˜/” ¼ßš¼¼ ®v­©ñ<W§õÍ|!B+/ž¿9{vðä¬ß;âÄ™Y•W¥‰"ИRïJo©±Dx`-÷lµi‰6@8 ÁÙ°á#Œˆ¢U‡ëŒ†6Ÿ5]M[ëâŠZ( ™†8ßä¥&1_â[xË®®5™A£¦;6dú}—¶vͪ²7gSØ]jÙùnl7-oit6öUÔaï ÝDh¦3s_ð®$JÍÂg2”¤ç÷µ.?6Dí‚Û˜P.‹®¸½*áðªp%˜ˆ$ØgômòËM•±õÔ­R‹yìf޼¨À#EQ¡ Ûž;—UÙìØÌJkí‡Â${@[…j¸\_ÅüÄbµ$ ¢I‚…`©µëùÑã㣟_þøöüÉÉéÑËo¿öòd —hn¥cG<çb|*=½mR$%ïwºã + ÚnƒíQÖC¦8¬'å±i¨˜dhÄL¸À¹³Ž^ü{NÈËÊÆÙ~¹Ãü‘ůöñË!9~ ~q7ü'OÎГÐýE"üèµ¾Îÿ›Ã†„%cþe`íaOcUP $C¬a”Øh†iT«©c¸‡¼ÓƒD,ûðjÖùªÅ\Š[ñБo4$•‰mR@I5Ñ0éÝ=¸ûÝñlb{Ä´y_¯LX‘ÄŸWÉË®!ò†Úø1PZÀTh¡œb¹)—¯j’zòFa  ȼº(¨ ²ôšúvµ Ûˆù±v ÖÄ*ŽaH —µqmŸå°ó~M>ÂQÏÚ®^V›«¼@×SL%iLÁSüsó`2R%‹Á9£œuUçe»zíþ½zµ,.la1UÙÞÓª+m³¯ÁQ¸v´ƒÂWEÆìïk¨šË{&œfPþ¢!£Ô{KðN¥é[Bíp¢û84!8‹kÿpœÝÎð\”ðwç¢x2¬¦pÌöC)´lwÕïØçAÂ’¸zòåÛ§º=¿½bæ>“¸[3ˆ+ܶÖmW— mÝ:Cá]õ]ÑY ¿àˆ…¼ˆB‡ÑØ¥ä$÷zzß?‹8ž•Τ&Tàaôê?Ë`\ÍT4Ûš™›™´K1;=øuêÇJU\؇žãÆ… b[¾Aƒ:HÐëø¾èÒ"¨øpÀASç›ôÂ6jpݵNé=eÔâ­Å–ÛÈ%ÔVöŽí«è¨úÇ)DÂ(d2Î&\ÄL $øBpñE.  ÀuÒ‡XŠö](â„\(âxÈ] YîBI<(JqÉŽ×@Øæ†Î°e_!»¹üRoóÆð˜Ñ9=÷Ý’µ¡œkÜY“§"²wj.{ç%»qUëezŠÖ.O§® ·c¶0—½[‹O?w'¹OÄ,ßñ¿Œ­BÀ”xt¨E…53™./à¥2â¶ï†œ8¸ÇÈ =Ç ‰Iß–øÊÁU8iBç·–P÷ù õÑÐÀÖdìÖyº¸•œqê û=ðîà·­*jT0ãVþv5Ñ$ GèËÃú¯é#‚`’ÜÿAS|wES+w'µ˜@5ð)ý›WÙûb¥($¯µ•0^×uÚ´ÿ·„¸çW]Ûü‚ 4áè¯ 7†Jö xìÞè2 5ë?ó5ó£È¦i#{TòÁ±íßM£9M endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 612 792] /Parent 43 0 R >> endobj 59 0 obj << /D [57 0 R /XYZ 90 720 null] >> endobj 60 0 obj << /D [57 0 R /XYZ 90 720 null] >> endobj 61 0 obj << /D [57 0 R /XYZ 90 622.955 null] >> endobj 56 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R /F64 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 64 0 obj << /Length 2869 /Filter /FlateDecode >> stream xÚµZëoÔHÿÎ_‘oë‘2>÷ïý–Àr äÂV·'df<3;òƒlö¯ßª®j»mûÇË0<Ÿ©8»Ý¹GÝnÏþëýrÈY­•RžúyµÖ:ôÞ·Eµ§©îÓàªøØdÍÃj-#‘h/]ýïöŸÏ.o‡»C)I$îü‚ʨԾґd*£DûBi¢Rùrµ#éÝ®”ðî€$é!aqè½X  ï÷@èªèŠºj‘¸9ç ‘úB2ãoŠOojà&ñ¶À´ÔÞ67ä-=¶ùç,æMVâDèm³.£¥\çí]mO±ûï‹î@sG¾§/íî¬âKÛìxWæü*\à¯Ö±H¼ÛCÞæ‹—c†å‹9d¸ƒˆEUéQgp:OócÊ3³ÅŸ¼^W´jYå weÖíêæHOAáÄ!kéµ0“ìóŠ_5ë¦ËysWû†fPnª5úaÄZe.Ͷœd¸ŒHñø¬É&E Ž"סŸ¦éô(P]ÌJܽBú˜AÀÆþëÅÍ’iÈÐOâÔî*Z$Czþ KÂkŠ ì²¨,\Ü ÄY“mÀ{|RÕËU2mhCUãŽ{z(::Ëm4„Ò¹­¥-¸´Àˆ Á¢“ \ýuN&¶sŽ? ´ÞÒRÍhÙõ]ߘËÏÖ*ý@*64Á‚éHYÇÌh‹>Òéôp_ly´Á-H¤yú=ƒ÷U±a;O …k‚`”µ5Uk}­¿¨|Öè7hÿÝóßn/—„¦¤qÕeDN[ì+kÌ ³L‚Ð^…òíø?‹Ááw“1kMVí™·]S³W‰õZ2F±,s­Á} r}×ïŸÈ5‡„¾BÆmh]ä_yÆ)žÄ?ú‰@{Ë¿òd>’õ$­ÿçúæÅÿ¥u}Gµ+G3ÅãÔQýYÿ;ÕÏ„ðuD«ðGˆàÝÕõÛW'E ¡}%¿£ö¥/tìëDù‘žY»ô5kˆ¿Éž(Љ5üiSh_¦À\û`(2~„ ž___-¦ÍÈuxÂæPêªËÜ æó*Œ¼¬ìsÌþZ{³iÎo»‰Ááu>}—•-&euŒ9£Ö‘›ÅÆ·ã5x±ae ×:K‚ <ÅzÀÏŠðó%ºtÓ€„§ |þ°h‰pÿëù¢ìu¿? $ÂÆ"pb[ˆ‹ŽlmG¤«Ýíξû•ŽŸ¨¤!â’&§•̺âh¿?ØÕЀ΢_0¼Ÿ:ƒÊ•ÁBþ‡ÜçmáÍŽ¤ü`èèj,œnÆr¨ ò 1M†˜§nšþn€¾XN”Vƹ¼,ÏiÍFQ&ôB¾ ]em¶K¶¦L¾ë1`oP L Dž—¨›‚óÂÀVÞR7‹€S¾N£ÇxŽç`¯­O•äë>”$sXí¢ï¢HÆ<õöýÕ#H¨›±p]8s­|‰©êŸR)F8ãÄ©Îݨ© 65û0—KŠ#ÈfÓ7M¾%¯…ð£@LqÍ´2 ÖÒØ¸H±9oA0¿FÎ8M ß¦bYR/ܨÃA¶æÎí¸ ê–AD‰ËÁ@¹¿¼ËŒª º‘5Û¶…)’Âih¤` ÆeŠeV`´N"©ËbC•´=†CqŽöÛØ²/ªÊøèPx/™SørÔæ›7—77"DÓH9ÌÆ"ȡȆ "ñ ð¸-̺ ‰hXs!Vq€fm”X²U ÉTH_SU,]ê´‘`“ŸWT±OZ;d+˜e–¤þ¢ M¤vý¯Ë·¯ß¾úðòõÕbm/I:Št)¨Nå4ÄýfäÚƒh”‘ öyG;‘ÝÝ5õØs—Ó!'´ÙÞÌG”^`r[´cÆ 8¢Š§újƒý¢%¾•„<*♃´]C/0„8œñ¬A…xÎÄÃo)µ©$¥˜’&…Àc›ojì áØÆN¼ÙÌTÙ|I_©òSÎèÞ4EWl²ò$݉ëÛBz-Ó×1õ’Æ~¿‡lÞ¢õœÊˆölíÇI<5Úº*Më0Q³QlÒ-N6``5 ken@»ZŽýǘz0™ñ/€TÛ›Uw•I ¢.ø$ÊMV†¸oc_©ºæ"gÙŒ`²#ܱ€¬5-æ2‡Û×o)ÚJÓáâÍ‹±!š8%÷.ïÞöÇ×Å&_ì€ ÃAÿ;p' ÊŠå<¸]þqÂÁvÕ ½ÉÍ ¾2ߥ¦¬Ô×bÖE;Ð"²Èšîš|—7DÔlÅø%zÓ¡É•f¡,?èøD3C7O¦ /8{à¦Àk`<×L!* u©à19°™äŽU|Ò›RÆm€ãä§®;®0¿¥…lÜ8ùv?×Cù7/™ Ô<Λné¢?CŠJ„ëtÙÉ+´ÒPy-Ý þDs¿Õ"7a¾˜á <¬GlA@ ³\1?™˜0«3˜TŽ¢”Ôd>0›5ûþ˜S-@+¦À’jþUVŒåÊ«S|¾?äöÔŠflâ”.榊D ¹Wj²3³ËÄÝlXç°µêg†®!ÂSò4n¨“ÀtÝýPBØß  ¸`ƒPÝLqÇ£SÁU¡@¿û\Ôý­•o ™ÃÝî=·yrõá4®['}þ¢²ß†Ì«\ñ8u<¼JñcÐ9Øõb'#˜÷04õ0®0ìcØÅÈÿ@]Œ×6ðeldqHÙpðKÝð·Â—«;Z›Ç~$¼5àl€ú[ñÙ"X°)¶¢ßéxîsB> endobj 65 0 obj << /D [63 0 R /XYZ 90 720 null] >> endobj 66 0 obj << /D [63 0 R /XYZ 90 720 null] >> endobj 67 0 obj << /D [63 0 R /XYZ 90 485.705 null] >> endobj 68 0 obj << /D [63 0 R /XYZ 90 204.205 null] >> endobj 62 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F64 14 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 71 0 obj << /Length 3199 /Filter /FlateDecode >> stream xÚ•Z[Û6~ϯð[åÅX+RÔ­û”m“Ý“¶ÛLZ,ÚbÁ±ä±[r$9“é¯ßs£,iè6E€˜7‘çúsÈQ«þ©U­²8 “¯¶Çv+nüø¯JÖm`áf²òŸw/þþ:IV* ‹¨P«»Ýt«»rõKðÕÞž†ª[oâ8â/×c’à]_7<4ì+nÜÖ÷ížÖ¤¹ T´þíîÛ¯îÆÃ­?“J\ù'dªÈÀ¬YÁQ¡Š ÓúßuíèÉ£`knùkH:Ð뇎EíÇýš4 ‚† zZëŒu³%<’ßTn‡ZF,iìiÃSy&‘)¦åØvUHóŠ-d£’°É—;2e]dîÜ/Xo<6U«.r\“ÚŽ{eÔ¡ž3Ôó P™ ùø=™.­›Öµ=Ô¿Wja= 8Ÿö4šìrƒ> ”Øž½Úè$èO@Èe[ÿ)³åAp2(ç!8†öD¿È6.® íø·©¶Uß#@€†ëM¦Šà™9ËÑ讳-?®“$°]MŽê“Š8Žðst1`¹ÊçöQVë­×¦ãÜí@Nö{Õµ¨çØ€ÝÖ¤ =ÏÔ=ƒ|Á¾¹]V;{> ¼€i>Àì¹’-F¤œŠˆö®Ái枥Î{F: _VCµªòÆ!®Ë­Q[]?ˆE,YŸª&NAŸüË‚†Æ¬[‰œA‹zþ%3e®êC&“ÄÉeþ <èÈmf [#cØ9÷U `erðø®{¬ûq·ÃÓb¿ ÑÈT43ðÇ}KŸ&̲$¾ I|Á/êf/ÓÂ.Üɬ›šz=ög`NûÉoõál‘ŸD¡…x Qéį[Z’†&ƒ€H ¸H èêªGÉ£…5šhúr¦Ö JD PÞîyÄ”Œ0&À¯ðo4 “„¤s‡K0ºM—õÞÐga¬ó ‡Çúˆ>Ó(4ÑÈ¢mJ¯¼¢0SÓýÚÒ+/…غà2`»Š9hÚA8<Ÿ¶Ún ‡±{BWn#«,Æ(“Øø€áÆ 0i¥jº×À5MÃ4^(]s~Ãi‚ÌÍ‘ pk‘»þsîÂQƒZEÀèÀ@F» ‚³ÏGü_Œ¨ãhíøKa«{îK_s ýƒÀ£sÔbEo«á»óñ'ÞÖ# rÎU6 4*qÆøA‘͵`·CÍ–8T l{*<ý«8ZPûªAÓþþ<œÎÃgP+ºÒ:"ãYñµä(: v˜_I›Âü^Ë­Š$x^PõîT"«z²–ÔóÞ-d0 7ÝØƒÛY G7ÌL¦!BÀD·ª¬·–ºsp„¢¬/[éï)ŽáfmÇC˜4à'8ŒÅEÆÁ—?ì*[nz»«x9#œ˜ "ô8"Ý̇(òÜ»XëBøH;GZ<àj6‰é‹N³‹/éb:ç©O¿0ÃlÌÇqÜ“ú¥s˜†BâØö²M+§ c}”}-Y#ÎDÎËø¼’Hq“´M$¢ß ›È/ \ ¢ºÇ È3‡ [uunâý`»Á»2”÷Lù™¾É¦´A`ô¡³Gî€)ó‡,ÑUû0:†"؃¿âœæJ^ˆL°É®**n!;]FÓOWÓŸ,Ïfn{*©°xvõjª<ž[؈.ÀÛHnzžm›q?æ¶äU§Çr<—KŽušÏù¢ÔQ;§ÆlŽÖì§L#œ™æèÛÅD":T½Ì 4ÌO_ù=>Ž¿²¥Þ¶Û÷Þ0~t ç×ï’(þŒËrÑî»æp司®ô”]Âí5¥Ô*¨ß»U(Ä!vÔ˜ï.å9ôÍ<V+,Æã$\uâˆ]í¦=õ!“›%1±I5’KWw: Mœ2Õq˜È§:xk'6Ý,‘Ð ŸÖ_bÂݯÀÁb°¯®=ø„æT„J»žsçBçÁUvhÍ$ï1ŒEZnçÐFå¦%Ûq#à³=ž éé«ÒÙ~#þðóZ)¼„ÿJCˆâ‚š+YÜ–™CÍ€ˆ žŽg0Å8k­-}žmÑõ•lÁmw÷ƒmD<¼“o¼Ñª£‹5²ŒÁtmé5Ý,LŠËýΰ爀Hkì‘2{SMë¥ÆOŠ2H‹öÐòú/ÜÃrc<ä4ÎQ Ó,y¯‘ÛýÆ_W…ªù{ýÍí«¿y= /„F¯’;yQ#O3ª'è~VESGÀ.jn[þ‹Â=²€ÞiLTpéB‹|´Æ ª£ñ²ííË7?ܾòû˜_.åú¡;oá|R‘.PEžÍ¢&·~ß½»½õ¾¥daœ«j‘º‘'–yùd*´:U×µÝÕZàδ°µÑæsx~Æ/Ÿ¾·®VŒªǤšÕÇÕx̯E»®eÿ%•šéQ›´€!ž§G¿FQäµð ò¢‹F>ù:ÔÙþÛVkk¥’Õ-Þ]ð>ú\5Û§¹ /uùSèeÂd”SOUðy<|lç㟼)-˜_—,ގЗhKšlw‹§vfBbNõ¸ õ]>‘{J¢¾LÚBVš¨ùíMjü²Hbbð¯Ëâd›æmóÊ%ž–ðA nOîÈugí²þ©–/L ÜDà¤hžy˜¦ö^ÀÐùÁ3/8)£>á•<-Á3}îÉs ´,LÄ”7áÖ Oo°¿ÅWZ;¹â5ü Gö¦Pã}œç2NM²{“å_ãìëÊÕ©‰âÀ6ì[ñRÑ$Xl·îsþÁ÷߃,¹à®–LÞ°qAt_6¨“0Ÿžð¹àõèžÞ 0§ÏÒò÷#Æ? )"¬+!7Á? ùå·hUÂ0da\ä«GZt El<¬Þ¾øÿáÈ´È.€ª4[åpÒ³"[¯r|Z7´*Œ² KìÜad–|…nôäé¢{õ küÀ¡¢ìƤâô±×#™=l°…´q1ËC ™²YÜiãŒ{Šdc7ü~‰+Ÿ]4ànƒœ©xüf¨ì(ÇÿàáSð endstream endobj 70 0 obj << /Type /Page /Contents 71 0 R /Resources 69 0 R /MediaBox [0 0 612 792] /Parent 43 0 R >> endobj 72 0 obj << /D [70 0 R /XYZ 90 720 null] >> endobj 73 0 obj << /D [70 0 R /XYZ 90 269.835 null] >> endobj 69 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F4 53 0 R /F75 7 0 R /F64 14 0 R /F2 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 76 0 obj << /Length 3066 /Filter /FlateDecode >> stream xÚ•Z[Ûº~ϯXô%^ VE‘º<åzºEr$Û´EOhmÚVW–\I>Éö×wn”(¯Ô“"@L)rf8—oÈUW!üSWyx•jä&»ÚŸ„Dm÷WÜøôó%óÖ0qíÍ|yûäoãøJ…Aæêêvç/u»½úÇêÕ¡8õ¶½^k­Wú§ëµ1ñê/]Yï™Ô,7Þ•wmÑ>\¯£8ÉÌJ©ëÞþùÉ›Ûaó8Š~Kœù˜Íä‚MØ%PÚ0›_šrc¿~¶ý—¦:-îýH2DÆÀôAQoeÒdÝ( r¹IꋺF‘ç—Mtì¾®×ðýêsYo@/&ËYAØèŠãØ:UØÎÃÕ¦¨™xšKWB=UÅu”­ð?»å ßÊþ€ \­£0RØ}­t bÞx[þ*m[[ã7=,–„«]kÿ}¶õæá:Ó«g¸A¼ú ÇYI4A“È(Ø…ƒï¸ßÔük‹Í5°yà¯:’µ‰ßæÌƒ$6ö¶¦§4»Ý ~A¾ ²n6$[(B)–ª¬wM{,ú÷G+sJ¸<· Œ%Û϶;È?sp*ÔA˜»ožÍ­šI’WÎŒ“8ˆ²|zjPobªŠãŒm‘o®C”Ñ!X4vÎ]ϽûZ¾¤^(„^?¡“9ô¬Ú"Ïl…h¿ŸZÛu}±[¢/…ɪC~ð[‚xë„«2°pJFÇ«Œ¿¸+ûŽ[Ã&ÁÍÙ#ºNDÓá¦sƒ9ÃUã„£3RUr1 ¥F?êñ'!Ø0™ˆ4þ˜T£1¡ŸwÛÌØ½I‡à4p%‘!B³KÈìf¬ ¢Ôxî ’—7·Ÿ"ƒÎ†©}#¾ [‡zj>žhœÀQ•Û¸~n.‚ægÉCÅ=§¿¬kÇ¿à1ÈMéM¯J¡JÜ|Ц‚ý͹-›sÇΧ±˜/2Ìí™Ò7ü;òGÔ-“C*÷e]TLæÄ7eG¦fÃÙÒg5«bÍÓĶìîÙ ã°cTB&_ÞËû#G1ñmÃD¬¶kŽ2ùÉÛÊJ”ŠÉ•Øh®ó éoa¨è‹ÁuP¶Ùª^y^µvGà×kF ÃÇ€À`É ×2s¢ qËFp³Ckq›æxdÔAL:(Ú-*V…Vè–$ ¢=EçÓ`LusÞ£‚PN{1K»Ä æQrµDõ°Nü´L[üiV9ia:ñéåÍë›ÖÇk£B `oÌ'Ø`k˜û¹‡~ ~"ïÁÞ‰•Sïÿ £`{wÁô™BN‚ Œ¿b&Ê—²>ÄØ ŠROÄOo¾¼ùôùÍœ”‰ RMÓÑcñÊ^rP @!É'ÑÙ?½ºcØ{Ï>Ýnç¢IÊ9:ÍüEÒÌÏÎiæ…yÀö”‘º`üʘ ³AxúöëǪ˜E¶I¨h~w®7 CÀ·´VÜË pOr6´ZÛŸ[¢¦”\€4"w.@¢$HS3QÕgJÇ’ô¥hüv(]Í€][w•ÔŒžWö ².¤´œÓغ‰ã)€þþ}Då0Ó\*BoáÌ$žÆ[*×̰-d>QDÎÔ;s±UV<­¨Å]/¿ïÅì:îRôL Ø**î¢ç|;Øš{ƒº°3ÚöŽMk—Óó‚ *CµRa–yêÇ€Ûþæ N¤t͹–¦¥ârÓso°†NÜ6ÊáØjØA¶(eâ¡ÂPÜBÆÍ1œa–Øï‰L˜™­ ºõçîYÒDôjnHê 3 ëaÿ?¶mž¹6 ’©&lé€ÛpEj<¾%4bcT7OrºnXY†0€^ý‹«^­]¾…âožitFÅ&y Nvö%ͼK2—¢Ý9»b@’GS3ÿ+¥-m´+—¸³mØ ¡Y[’ÙBFúA¥ÖÌkˆ‘ Ùz_B¤KEœH<™Á;ŒædŠCG Ÿ?0qÉN.‘3#+‘k*¿Åmfô„Ç£¢žu1¸ 0ô–9.ƒLТ lÁ¯Þ£Ïìøi,¥?4 Ê]k¼ö€q²) ½ †nß6Õ7xÓÌy—ˆ.à+ªÎMjäR(’ã±¹mK ¿XïÆ#üçáC1&¦PžßÖ]…ìËŽž &;¸óLé Fª¦ØÒ½²ñoŒ±3TÌtíoA˜?ž¿Jy_Þ¿KÙŒ¿Ãßw`Gp§7Œ¬pËã²C  Q~¼K…q.Ù 186´[ë$¦å)Nãêë-šŠèn?;KyqN²m¿~’½^TÕ;YeîNÛh} ¢À Jõ[±¿B´¨Õ#a‡ÉFvLw%½Zy`åÄÔn£ ™ÁYþ¢ÐG é ãK®&Ì‚ìâ.gyiw¦Ê$¢ ü3t8åIzã:*r0Z]S1àS¥¥8ñ¥î~ €ByíºëÛóqx?AÚû¯¹ÁÇíðDÿã'tœMp4½°Óªèz<9L^ˆB^Üé}©c2%d*PAUÑ#´ËšÙ½`VÓn*ÉåØâ›ÓV¦ŒfJ³Yi+¢–»žç™kG\æR§Ë~3ï3[Û[©!QlGF‰ö±ån±°íh€[eð\‘EB³µU þéÔ€Û')ZוUjâ¨B)÷2 ;œu ‹…|Ç>ûÞtaìØ ñb¦¦ð°„ìÆˆ‘Êó68S¥ÊÝêéÔÊXqGPǧ]0 ®h·  +&«|£1¬Àà&:qÙåDwÜ,;ò#$IÉeèDɽ—v=ßþ“»$lγ1%Tþ ïn)Ñ&A6âƳʽe(¹¼ Í$x³Ý ¸Å Á­f†F\’(º±Ùh­R(‚GÖ~3¨zÂhâÜU–¯…~iø‘&¢W zÉV›†Í -P[2Þ¸y"’äh¤Ms´N&à<›K”Ÿ™’hš‚qx4¥7ü­Ý]n^^S=›Áûâ-â!PÀŠa÷em¼%O‘¼äo,w’³†³Á ¾‡«Ô{)W|¹œáå²y·<Ÿ‚¤_ƒäb2‘¨©Ò P‚#eïšèæ-Çi-ÞFN½ QÛÎy£#ÝÒs¾d ë%og÷¥C[Øó^½\€E²4èùɬ^‹‡jÄÉa$/&ÿÞAaªÀég—'´Èw5dÉ~—øÂÊç™ÕF /^ú\ÈÐC9€ŽP¼ pMò_¼"òr endstream endobj 75 0 obj << /Type /Page /Contents 76 0 R /Resources 74 0 R /MediaBox [0 0 612 792] /Parent 79 0 R >> endobj 77 0 obj << /D [75 0 R /XYZ 90 720 null] >> endobj 78 0 obj << /D [75 0 R /XYZ 90 311.298 null] >> endobj 74 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 82 0 obj << /Length 2854 /Filter /FlateDecode >> stream xÚµÙŽã¸ñ}¾ÂÉËÈA[EQ¢6O3›Å.z&LÏA&Ô6ÛVV‡¡£¿O‹ÔaS}ÌnÐ@‹,RźX—ÌVü±U¬Îý4’«mù&ÐÐf¿¢Áß|Ã̾ lÜLv¾¿~óçB¬Xà§AÊV×·ST×»Õ¿¼ïÙ±SÍzÃ9÷øwëM ïK›W{uEƒËü¦ÉšÇõ&±Œ<®ÿ}ý󛮇ÃE¾JÜù ™,ˆ`5ZÁQ>ãÑúϵä^Ý=1ó¶YEƒ¢Îv4ÊèQÖ@dâíúB@åÀECã{#åp`<;0a¾à ¨º*²GÕüçqÓîyqì§ãæ¬2°`Pe¥Õ·'Kš:©©»@ˆôjMZ°HHœû“« ã>g~¸r‘˜$ð›‘& £ŠžõQ“¡*׉qàÇ©}õÃO—?üÉu‰¥Ün#|u^­áåƒ)…‘w}P­¢#oûjÛåuÕJ榑z0Äl;³D2{Èˬ ‰ÆÛ—øÿ†v7H%NÚÈH‡5ZìœywkMÔVÁ¡Ì» é‹“ÁðÐÛöM¾‘è=y‡¯<Ò†¯ÙY‰"ïKU¨¶¥…G·§É![ƒ½é£AÔÃV…"YÐ! œ ð€¬Õ"ÀmUÝÑ «é¹3϶¾0¤!†™LݪÙ7ù^K ˜³^äeÞáë÷Úžà O¦gÑS<‘^ÑŒ…’·v}[—Hø8(4 ÿ©<öÓtE¡w½ÇÐdúÈ_Q$Ê °6›Á쵘Q¦q⽯;CÜÄ:pÚ¨®oªÆ’ÉšB##GŽVî0ëDøL†Ö`?þí¯_.pvâ§é`ÿm×ô[ F_WÀ]7Î+ç¸?}¹¼tac_D±Ý•ßÔjêUƒFR^Hf[0ÎÖ7–.°XÀ ñ“DΜâÛ¢ d`²Ù7¨¿Önõ­ºíÍŽ¼Í– Û¬¯Ï[Únx^£P[ß3q4óK©„霚¯A8Ý«ðc),ãU_n•SôÒîÙÖ¤Ú,¯ Qs0ü¸¼iç–6̃¾BiTVü‘öѽȪJ$Þ3îÀé"Éà_üT¼–½;ò9…ð£%&g!ÄÉáQ‚™kCx޶¹Ó×nG;n¬'›â='(馻%eâìDPd†ÄÁÌçdÖâ:« »¼Ñö£ÑÀ|†Æª>}zæV€*) }¥ŽYû´}!ÉD!óCÎu/6ÔÌÍN$Cs$ѸJE UdG­œàÝ›í›MàT„Á°%¤óY¼¸ÇxëÃÔ%[q'Kóz äž|²“ëM¥^«€î!C‚Ή5©Ù¶+‰²ŒB,'óàSæE‘žùJ´ÇÝïàoŽ¥3' |É^àGƒlM¹d¯˜qw`¿ª­ßù|¨ûbG¯MhL°FÚ«Žî¹é«8ú/'Šƒ,Ád¥Zn@B^í/\ŠL?ŽO;?ªîc­q9t þ¥Å2y¾ÃÅñ‹º^F5xA}+—ɃR&JÅ >"J6ìì#â_0¤ZûSP…MÛÑj)T¿H“iUg®g¨S4>»ŸÖÕ@í“ýj;%0Z.¸2+G~U׆0IÀ#“k~ß¶#«jº¢æ¡ý^®ñ*ÚBÝ6¢a¹¥„ˆÖ‘Àc3|e¶JZ?[Ayßûò8¤ƒ6×"Ï×ìÚå;8Ú5ßdeØ Ð’Æ£ŠI³JœVàÂrbKðá&M"z"ù”~tV¥¿Ã&Ó=%rGËÕV‘¢wgÞŽ}³°U:ÐÓvÚ?jt4ÌLºñ%ŸÿŽ„Æ£é‘PŸ˜- ~29K¡;÷½Šù$ëŒeèýC[ÛÐÃÂ#ç? ˜ÉqöolÇŠ1ì‚ʉp©Éw´/¯FÑ=͈@hN\þC£^~ùöPÿ¡†„ endstream endobj 81 0 obj << /Type /Page /Contents 82 0 R /Resources 80 0 R /MediaBox [0 0 612 792] /Parent 79 0 R >> endobj 83 0 obj << /D [81 0 R /XYZ 90 720 null] >> endobj 80 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F64 14 0 R /F16 84 0 R >> /ProcSet [ /PDF /Text ] >> endobj 87 0 obj << /Length 1018 /Filter /FlateDecode >> stream xÚVMsÛ6½ûWèfB”ø$‘[›Øwœ™Œ£NI'SÅ”"U~8õ¿ï Q´MO5:X,°ûÞ>,ÄVüØÊd«\jd±*÷Y°v÷+Ü~¼`Ñ/ÇtæùÛúâ—+¥V,£&3lµÞÎZoV_Éû= ®KR!ï’TJEþè«æMÃÎá঺ël÷˜¤\éB&’¿Ö¿_\®§àŠó3³ôž/ÒÌ!MI…Ô<¦ Q(Ó4OR¥9¹IRFZ›0²ÁsE>ØÁâhÛµ{}rû²…Ÿ31C\oa3ä1áiG?)HãÜÍC‹ßºµ\Ûƒ\7cíz\k;\éÛ±‰ÛÜ·Œ W=®Ä¼¼/ÚáðPÛÒE‡ag›ÉZ5h„3$y 3Îç RÚè3ö΃ ¨e Aùª!t=‡Î šø§O·—¿~¸¼]âHßöçíõúœÓÚ;¨¤"?\éKò:kñkKsW¹‡„çÄEXõ4ÀLãT†˜¦,jc½ –s*µ8¬>¬bg‚ÕúèØÝXcê,rR¶Ç7`Á`ñSWý€£v‹ßíØ”CÕF·hÖ*Üíº QŸ»ªôDíüT·÷“±¶ƒ‹tIàɰ(vRH˜“»pªÛY¿ë¡jÇÎÛYÈÁ¯[œvîŽìÅ•]D{u}s‰{³DPp¿Õhò®²óJ( ݹn0ìÖ–Àä©kÌèÈJ.3ø~:Ø¿=?^ŸÆî]†v—UF?Á¸“™¡ÙÄ®.â*¨ÉͤÌÄv÷ãÞa½&“ÏÌ@hj@ýˆ“Ÿ=`y¡¬èè/CØ€³5N¢ð3D_ô~WDŒÖ,¡ŒÑBòó®…89ú÷ú©<§¹ÔgÜŽTæ'O9ç ï9<FJ¼æÂ ×—ö-–¹òòÔù©#r}lÙ~؃elÙÞbñ:w:7°-{ß½W >ð¸Å8³wÃA>ããŽõP¥(±¤‹­ë!T!ž1íuÿÚý¡>š½ ã@gtœ:=Ÿž"U=~C«„ïÝXÕq)¼ÍnÜ?c¼ü/®ª2PPy^åµ.^é×á52>"<Á=¾AÏæŠ5‰âsm]÷ýŠòÑ5®é.„f™†ØS3®š~p6†®´%…¢Z¨§΢-…ъʂʹ½ØÚ(ÏÌBúWŸ—ŽÌ%•jb×·²Ì«¤(#(Nà;7—æ5Ò M¥œ^­/aËÿ“¦¨ÊÙ Ò|ÐeÒ$ÜWÅŸEAA† úìÁxF®©š5ôe¡h¹è<ãŸÌÿ)ȼ' endstream endobj 86 0 obj << /Type /Page /Contents 87 0 R /Resources 85 0 R /MediaBox [0 0 612 792] /Parent 79 0 R >> endobj 88 0 obj << /D [86 0 R /XYZ 90 720 null] >> endobj 89 0 obj << /D [86 0 R /XYZ 90 720 null] >> endobj 85 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 94 0 obj << /Length 2036 /Filter /FlateDecode >> stream xÚ­XÛŽÜÆ}×WÌ[8@H³o¼äÍŠ7‰9¤µ‚@6 î°g‡0‡ð²–üõ©êªæ’®wå ,›ÕÝÕu9U}8bߨåñ.U*Êu¶;œ_ÅNÚÝïhðþﯯ aa8[ùúöÕ73f'â(s±»=ÎUÝ–»OÁ_OÅe°Ý>TJú/ûPk¼­îº¢ûBÂ÷öh;Ûì>”&Ie ôþ§Û¾º¹Î5R¾Ð@\yea ¦‘F³…I¦#¡4Y¨÷¡IdðvŠíÚ‹À™–š™i`ÐÚS…4‘Œ©¹=U=xêà°—YàÝ–© JÛºê^²Àò¢ª¡¹sÛY’”v(ªšÆE]ÓôpâÙãØ†ªmz’MIò‡½I‚¢«Š»Ú«¾t-ZðP•¶¤Õw{™_VkNB¦ƒýC‡„Š„a‡>X»ÎƒˆóHåz—h¥™t¹ˆ ÌEqÿ„tIYJæÙñûÙ‚ ­asœÿ„IèàÓ-ºúåB±¥Éïì±ÐMåÂõÓŸIx)îy:_{%³ìÊ«§æW?ãÃZ©óm9¶Yïr’»¢¯4Öé ó0Œ‡ˆg)H<)9[$“(U\wpÂõÇ}®<@6QÚ¤ ƨN"%ŤÆ+ºÁé:g;Àg®·¢> ê¥|}Xï}];€þê*Ê­¹'?WXFQÑÁ<‡¡·GË…hÂzÞS†ÖGnQCC¯–͇UY8ˆŽªI®­ÏSÎ\ÕðÙßW¿|ß–?ƒ¦¦ÝòÚ€Ë\G´óß' §k5‹ÏÉ µ.Í‡ÃØõ€ íüÁ6‚s ƒÑó)w¸÷; S4=I\pý¤Wa‰CG‰öa’™­RÖIűÞ ½2ɾº”ýþp¦`£ ÖÇ,KÍ »îæ"çMèÓÍcÊ&ÜRMëYMKqUÔ©€á`G™HŸ+j^ΖoõJéfQSG ÆB‘ñ±jìòëwïÞ.°wÇPŠú¸‰ÞãMÉ ê o&õxSjQ}$!û{ÒÒIHxAo±~Ž,äšt§i/ehS-ƒ7C¿¸mÈj:¼9r§¢§Ao›ÞÉÀ€¦æê®Ž$™jµÎ߈¶H2cÊ݉Ïr*#„WWlOYÁÝ¢†® ÉŽcמiú7Ûµr¼9r+:Y·Ô"’pÆ"[sËÓü Ëacë•ῇŠjV/måh‚59ùŽÃ_Ñ£¢oþ4Ðû±@»:¶ƒißc·…pç©P`0𯅧„Eš _4°E¥" þÑ"Gq6XÆ"Tg.ÛZch—Ã+<›¶apÕ@°—¾!‚ÉF|9Î1\pçïV”=’$¡“×À$$&YÀ‘Àk·¨$“z[iÞ]9IÊ!ÁØÀŽ iHQW¿Ñ–lòÙè”)#njš ζhz¯ªX9)Mƒsõ¹‚ërƒ®]Š®8ƒinŽs¨Ep²éå€Á=ѭк‚1Û5+XÒ´ úñBì£íÈQM7nì1ƒ²«3¥àÚqHr+ ÖUñ³l™üº@‚qÝðÂ6íxòUFTŠú¢Ë*ï÷ÜÆÚ²Ÿ75óæ¡Nj[nÕ–Œåª°>Øá_ãù#¼ÉkDœ¹æÏ»¢-…I‹4, ¥ŒR£É”$2õ¡©¦ðrÈéïr(=çPÆq(WM5S9þdäÄ<‘ç ][ÓNÊÌôlÈÚq¸Œ‰02ü¡°±êHÆ8ͽåECñËžé*¬´®E0kÃFEUç³-+¨hç™ ^¾~xýŸÛJë¹üù<Y~hëñl_ÄÀ>â1´)08:˱ÆÊÔ‰¾(*Ø,›zuOïF€†|À(fÝ-=…ÌœJùQiÅX+[Åà/§d‹?°«3ò°ŒÔZ‰½¼Œ7|€œ[´:M¸]Mcëž$ €ALŽ]D(£¥é2Bðî# 8B ŒIðclâ¦]kÇN’a¿CµãS8·nrD0¨ü%ÐNÑ¢žpñKßf>yjáE|kóWŠžeiÍ/ôÿž—Î>Øîîeyùö n2ÙÚ8ôâ“뇿1ùf›¥…¹Nî NA‰r(Q8¤Dá(¦‡OÔÓ'¹làwʈ¡¸¡¦‚DÝc›·ýPIæØN ž›L &ºœ/é=#ROæ {ã0ÿ¦¼J]üÇ×7åñó‹ZØè=FPï1¾÷€`jÃÂ÷Í¡GŸòt£ ™x‘9ÜäKÌLM„1=\üáÉM(Oý"&x?ÃÄÿXÿšh½ct¹Ÿ¿щ™  .çK²Ñ®ÂóØ£A—õh_…Ç\‡Çëüš½bäåš(¢ß!…RúîrTÌ~O!"Š+"¢%¦¦ÈQÃÒ^†½õxo·XBDP¤£ðêBêþ$qÆuŽ(à_’7Ÿ‰©áZ^JÅŒJÛ W÷ü¬µÃÝÞ–›XÑ >Ϲ PLqŸ°Š¿c&rÍL¤tÄŸÄn%~YºßF=])øL¦_GñÅ× ½qãÅ_eqï#¥„9¤”›„˜ŸÑfE*ßÀwÀ–_I1-†pm}¸ªšÞJ!ÿf’ \¶„ä{‹¿”mMT² ®ø“É^¦ endstream endobj 93 0 obj << /Type /Page /Contents 94 0 R /Resources 92 0 R /MediaBox [0 0 612 792] /Parent 79 0 R /Annots [ 90 0 R 91 0 R 98 0 R ] >> endobj 90 0 obj << /Type /Annot /Border [0 0 0] /Rect [109.394 643.055 288.394 653.964] /Subtype /Link /A << /S /GoTo /D (Type\040Definitions) >> >> endobj 91 0 obj << /Type /Annot /Border [0 0 0] /Rect [469.004 541.847 522 551.544] /Subtype /Link /A << /S /GoTo /D (Error\040Reference) >> >> endobj 98 0 obj << /Type /Annot /Border [0 0 0] /Rect [90 528.09 271.964 538.999] /Subtype /Link /A << /S /GoTo /D (Error\040Reference) >> >> endobj 95 0 obj << /D [93 0 R /XYZ 90 720 null] >> endobj 96 0 obj << /D [93 0 R /XYZ 90 720 null] >> endobj 97 0 obj << /D [93 0 R /XYZ 90 632.257 null] >> endobj 92 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 102 0 obj << /Length 2181 /Filter /FlateDecode >> stream xÚ¥YYsä¶~ß_1oæ¸v¼í7[rV)ËJFR’ªØµ¦† j9¤ÌcuüúôrH ¶×»¥‡F£ûë”\ ø“«L¬’ ð³0]íŽoQ›û¶#-ß7ÎïnÞüí‡(ZIág"“«›ýTÔM±úŸ÷ý!èt³ÞAà…߬7ay?š»&ož™¸Õ{Ýèj§×ʼnòd´þåæoÎoÆs#¥>QAä|­a¼Ð0NC_!kxûŸ«í«r,Þú£U@åÍ¢ÄWø2â7ÓÂ}¢Øû¸Ž"/oL~Wj¦ìêj­R¯ËME<‰×ìRݺy ã4ñLµX,MÛY¶ýb©Ñ÷°¦*x¡hÌGLñ÷¦ºç¹…~8@ôC ýô}ÄN6‚u7.±P蟅 +Ši <tÅ#û¡es%NNMe:“—æeØú³ˆ„UôÓ.W¨Xù*]Ø æÃe]¼¿A.ËÇ`ùLÌx:&ßw£§æ~Tæg©œ{Ërþô;‡(?ËFà ÒÇcÒÁË2\z(à »  yg(0€PWåó: =t‚§ Gêž×ÚCÝ—+}Ló¢èycU›Ý† il‡ÁrÈ«{ÍsÓÙd6F™Í|·­ÓRI?‰Ôpï?Ž€ÈOd2õƒË³ /ü ž•‰œ]ÔNBÈÊP-„n5¦Y—ÔÔOT2u¥µMµaƒQà«(¤­ü“ÓÆ¼PÍӾѿ}ZÒ¸¶…¯•©(ª‡&d„M”QqƵƒnºt(äÉwæþÀÔÑÕ-ÏŸ.퇑iHQàýÖC´vtôbϸë;WÊ­4…54CGŒeíêãCßQ: 9ä:ø8ÔqdƒL.&<)_¯Ÿô†+¥±àz+c½@ñ\f©^à%ø C)„#£½{Á %á,™Æ1Çj“òùkQy…iwL^Jï ’_3î;RTÇñÜâ1&Í¥P)¾{á#ÕM^˜ÚeÝÉ©ˆÓ·Œ))…Џ²‘ ¡”‡t(<ìˆG ¨§«¢\κ· ]ËSÛuôîD‚õa)J¸D|b÷äv«±Ë6ï"£9£åUØAÔçMár6Ü û”/0täðR€ÁØÎá„;¬†út>šî0Ý¢”0U˜L3&±‘)Ñ# kíÜ’—~ƒ0‹ªŒJîêÁå# á"i;}]¡‹ ›(á! W—Û”€Ë¾Ñ(obú ³×yìá¼=‡GÂõ¹ ÏIè‡Q¸Äsæ§ièx¢ŸT²)›^•@´X†‘~z:´5!Ûnd7À ÔûnÈøÀTð¸ÁZoŸf(è5/ I¡Òeû¥¶¸¾Ýn¯n:s#¾LåÂ*òc)Á­²©5$[C‘ M>û»å‰Å!¬÷Mcû•MB8 ¼kCßoý—„ ;roR7ZžRç£Èv÷@M D d{<ÀM Ÿ9¹%VvË$Û CiÏC{¯-ñy ËõXs4Œ“p¡&C©®êßu2?É!‰.Êfѱ\á:´4ÕW‡UÙü[1¾ÛÕýø5ì„>(ˆdÈÀñØ{ŠdþâEY-³œÞ1ø!°t~ƒè¾¤0Éø»‹g] °Ù ´*'ЪLp9J…­Â Ô X^cÍÉ8ŸŸ-ãé¤Û@ðªxr¤Á)µôvéŽj×Gsbm8û| RÙAÜ`g?dÂζ\qæi™«Ï—&wÿº¼øïùöóéÜ Ù4“ i»‚1“Š©²¡‹‚>‰6³ÚE»ê=uÁ\qËK™…z99öäBGOÅr^ýUÌ_i8aãìµT±pÙú±Chd‚ ìŽð®ö¼¼HÃëÞ: ²¬ŽìtNW@¤t……hÒž UU;èðC-*ÅÕ7œÎN}1ùØ2hqú¢^´XSqìKPý³jjpy{}ñ½K‰Lúq/$¾ˆÝ¯–?¯Ý#âè ©t)Š­IDÕûEa§&³¦ø.ú’£ ÿûð¶8sR endstream endobj 101 0 obj << /Type /Page /Contents 102 0 R /Resources 100 0 R /MediaBox [0 0 612 792] /Parent 79 0 R >> endobj 103 0 obj << /D [101 0 R /XYZ 90 720 null] >> endobj 100 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 106 0 obj << /Length 1562 /Filter /FlateDecode >> stream xÚ­XYoÛF~÷¯Ð[¨Âb¹¼™>%‘’¸ðÈrТ-Òµ¸’ˆòxÄÐß™Y™RèXIŠáîìììÌ7§,Fü£ÄEžg'~$ΕÂ} öœåFžv ~µ™¸(”$ÐhÛVôÝÇn ŠRCÖ­éÞ² %RTÞð pRiVLZVF¬nä>åܵbÏ:§Ü };ö܃ԽïØ1™)[è‹ÚømUuõ¾òqœãnY•X­Ì8FLJP¼¬ªºmV•FJM²94Yä¶®Öµ,š—CŽ¡, Ù{oÞ¿šÿD·®e1˜¶\VMÓŒ½Vã›VãY)†Æa}nÔïdžïˆ­T|HgEeÚá4×atÄËZ.¡Ø7ö!õ¾gÍTgðVcõu£8úþ_ã ³Ù>ß ~Ⱦ»×¿/f$ཬÓU¶T—Y‘µ'ùíJ~ΨzXЫä üÏå”÷ƒD›Ž_P0}Àx”5•L¼¥ÍÄ—Úë Dnj ¸:@ÊO„åk¶2œê˜‘6’%”ÕPae}öƒÀŒµ3åÌüãA·ÝêrPÕíw{ ÖÉÀŠ!dï d *?qyŒ‹zcž@›p~#;C›aú:Ä¡¡M¸€iFEóFü¸Ëè¢z‡èré}v²ddãoA¶—’¯òL6§ú oDVƒÞÝ€!ð Rbh‘T{"Sûb“ŸÑ#4¦Ÿê4M¬‡¬ÝTTŽAäV¼|ÒKàˆ8âŽö ï«Sd ‡¾Kd„`œ vÿ~Jö\Æç¸ïò?„ˆg§žAßQ¦Š*mwÛÓF¡…Žãmƒ¯ic&¾À9ê[pûO„ ØnñV,«¢På‰ýk–aªýÙÀüˆ`½}©§ï†' 3^ß]^rÒ­ž“A5å þe´ÑåÀÔn°>>g›¿ý»âºL endstream endobj 105 0 obj << /Type /Page /Contents 106 0 R /Resources 104 0 R /MediaBox [0 0 612 792] /Parent 79 0 R >> endobj 107 0 obj << /D [105 0 R /XYZ 90 720 null] >> endobj 108 0 obj << /D [105 0 R /XYZ 90 592.241 null] >> endobj 104 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 111 0 obj << /Length 1499 /Filter /FlateDecode >> stream xÚµXms›Fþî_¡oA3w¨?Ùí¨±W–'é4ô,%Ƽ¨ŠíþúîÞ2 Ô$U;ž1ÇÞÞíÛ³/ȸðç bw2æÄ<̳#WSÕr@‹éÅ‘gøl`´œ§³£΃`à¹NìÆÞ`vß¼j¶üfý´ëJª¡Í³øC›óÀºLî”PÏDœÊ{©d>—CÛF¡oyáð÷ÙÏGg³­ÜÀ÷¿QAäÜÕpÔÑpqÇcœ4¼ýð~ú†T¹OŲDá]«‚Ð l9^@‡nä—¡YR‰r++@ýÐZlRI„O®àmúâB½’ ZVÅRV+©”JÛ^äpÏ£kÿ0Â[ 3ÇeÀHÊž>™^_]õjé9jÖWZö£º2¾'MJY½&]…Zkíår™D’ ?“óʰh.Ø LDÉdV@#f‘%¶ñÑwZszqs9~svÓgψµm±ánÖ šâÇQmŠX:,EºÉ¤ÙÚž•=+YhJÜ´ æEŽGªD?6æØÆSzôÈå£Y•a,TÇ‹”m”HŒSש@‡>k$-rãÛñÅÛÓë«=Øõî'}'tÙ.,¸ç_r?¶¦DÒàŽ¬¸Qãih>EšhÀ£Æ€œ»p² Í6lp'©Ì¹Jfk}«aý2 FpÙÆ\ÿÉ Ü»u…¹ “®Ï©~ìzðÛ8žÜÌú¼Ç]W[ïÙžËcòUÌÁW/ôW9CþŠ;Å +QÒ"ÉËJ8stIeˆ"G·ÅŒÀ*²5âUß\ÃÍ!· ¬I)’ÐV;<ŒÛލƒe*#Ạåé3ew‰Bdyä.Ç“³“éZ‡ÊTg©Î m„T‰±Æ˜ ”ÙO“\ ul «Ýƒ>{mêìJ>wÏK¡’j•%óƒ,ŸLNúÌfÜa#Þ„ †NC…ó:­B· Ιµ)eILº| ‰ ®Ä¼Jм¤Ì n²w5t8«ÑÕ܇¶øÍ7Ù—"™ËÞ&gû£À4jUX(c\¦¦wQáâu®&‡Õ¬ÉûÓ“ëCŵk]@¨`ØÈ‰|§¤x eaH:Cq‘в¢UãÄ„BƒáÀ=ˆ-šM"ÔMBßVÔ·ê|í)Jè=¥%±­rùì†]ýC¿ŒœÐ;•Jàp§kræ6ªx–°m`É<è§ $›Sºâ™¸¼VÃÅwÃ%±"\_Þ=k­¨0Iö¢Ïiõh…é ãE•ÌñýAŒa[åÅ4dõÆúÚm!E„ZÔoºá¦f³©žZC¹A«øUõ°õ(Æòi.וÙ!XÔÓ m8(þ¯®Ï¦ã÷oŽ?ãÛÂËGéu[’põñÊ&§™‘¨;å+1Ú‘á&2­ûN²d)Z—Ø}^~¹ù Ïü_nÇÓwÿÒ_BãGu ÷¡S·’Å:³œ"Úc’¦tPɵªO(æˆ}s°,ô¨ LçCøui†CµVèssŸO|nõPi±Qm÷™ 3_6FLÈÖ;¼.´ræõÉd2ž\ì2ýž!ÓÿZÏïΖHÛ”õ ò|k˼È2HfDWUÛó yµmº=ýuvFg¡ñÍWùW>í̱ÙÊH§bŠe¸¸«ñ5ŒƩ¨*SÓ “|;„˜¯¥¼ô«¿‘¶öûÛöη)MF8.öÌ‚aâõÎ$‘˜MhóLO‰¸«Ö;º1ââ/© =Öx:Õ‘T÷J‘ÔSËV‘4É’Þ/"íÉØïÌ®@ î‚¦cé÷ýVÁV@Nº[/õ˜O-t£Ž÷I´-Õÿ”ÍfL#ã¯P­rÂÊ endstream endobj 110 0 obj << /Type /Page /Contents 111 0 R /Resources 109 0 R /MediaBox [0 0 612 792] /Parent 113 0 R >> endobj 112 0 obj << /D [110 0 R /XYZ 90 720 null] >> endobj 109 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 116 0 obj << /Length 1645 /Filter /FlateDecode >> stream xÚ­XÛrÛ6}÷W¨oT&dðÞ·¤qÓtÛcËét’L‡&a‹^4$hÇùúîbAŠRÈXv:z °»‹³ ñƒ_Älº®{Ñ"-˜–6· j\¼=âfž íÑÌ׫£_ÿðýgNÌb¾XÝŒU­²ÅGë÷u²Q²YÚ®ëZÞoKÛó|ë$¿n’æ„òF6²JåÒ~ ‹GËÏ«¿ŽŽWþ¾ˆ3¿·0س0ˆ<‡»Yxõ÷ÙÅ2¥êʼjq÷}·üÐ 6wîÓªÕZš5KZ]¹‘u „ȹe®oè ZUÓ•²ÂiªuÌ;vÙfÈq…?eZ[n1?Ƕ6)7…<ئw§—«‹«÷ǧ«{¾©ö0óÎÑž:7X ÏR5)K*ómšÇhxGCIªºfÉɽƒ=¹|õþüäøÅ ýO8@Û˜6Z«ÐnmÿáGpõúŸÕ1éhdR¤ëê0àßtM^ÝÂŒ¹µ)ȼë$Åï——KÛw™¥ÖyKî–~^äÉ5Ú‹’´&¼#Z¢ÖfHl-²ðÆãúß$Uù÷º°½NªJF×'泪Vè \å»Óº£µõèöéé+Âu¬4ðg@¨ju†»Š(Ú…0ÔŠ84â€ÐGá„ EÅ{(â4"iKH6 (  ZÍ€8‚æUZtZ8£͵´¹¸¶¿2OÄîäìô­ áêVå¥<,üŽ‹dÓÊ ¬Âjk £üABçyp½I$H!‡n„ú8 E  v?&…ŸcS[N¶Ú£™œ½€Z+þ¬¥]:p¿Ê•éõñ§­“_!`‹ê$4¡Ì‹"'„–í±ÐZ-# Rš¨6´(Î e›1ww¡ A)FŠNöÁh€•)LG”µ/)سü.ÏÌÄë¹p&¼—†ñkE ŽØèÖ/Q¹ŒFÇ*À&’Mž#ð< 8 ‹dé Šo—[_@]è[—Rá=œdJ 8ÐÛgV‡<¶Ü“E¾´$Èd›6¹‰ì eÌPÐhEšº ñ Ì)k½$ë #Ðw0ñŽÑ5¤¤ÊŒ2dd”˜ÝHª…€¨6ÍLMT¿Ö€«÷Öá9¾Nä\WAº0‡XƒÍ=‡ÉHÚ*5Ú'/›%¤ƒr#Áª§e{\—# 6@ÂG߯ Hõ³w D^€ó¦VM£aÍu¹IT$Ö‡>Tq–‘¡›g&%Õ­ nn»âŒŒŽ(Ynê' üx vPö°¦¾&NßÄ’Øh Ž&0À…ßc ØTÉœ`ÀžÎ°ÒðñŸ Ä]]t2ì"¡F' '%EÑÓ"£5?SÇíáqƒ³û'Îl.¢g”·ÈFÀ*??åȔҮi†jP ¶y‘F³éPD´O]µègÖY¥™Þ5õ 6ðÞ6­šòCøÂa‘÷W[uùLíàN¹ý<*§€ç[Ú!iÌV™Äͪ–°]/pàU4")ø !ò$àô:\h©¡(ØgB$ÄS.1HdiÂk-ÞñâžãYãMa…Ú5V¸ßcXA‡Ò¹ »Þ”³(±ÇðóÉøù4`0âsc®Z9e'T1Øî·ª¢D ïàW¦ŠfЋËÞ©¤PT±][ÓÊ~˜¡«Â4Á„•ëZ_Ò{O`òeÓÐòJNd?È[a_÷ -Þ$]¡¨3'u©R ŸXAdݯs:Ó%éZi¦˜‡+´Fnúô&Á¹CÂI‹þ¬Qõ½=õú”¦ÑgèÖ¥F X¡È¨±Åqø+Ç`—ß® ­`—^i° €S/­á>™Wtóúª5BÞRg|~î V²ƒÀ(òo&Ãàÿ;lV“ endstream endobj 115 0 obj << /Type /Page /Contents 116 0 R /Resources 114 0 R /MediaBox [0 0 612 792] /Parent 113 0 R >> endobj 117 0 obj << /D [115 0 R /XYZ 90 720 null] >> endobj 114 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F16 84 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 120 0 obj << /Length 2024 /Filter /FlateDecode >> stream xÚ­X_sÛ6÷§Ð#uc± Tï)‰Ý$7Ží“•ÞtÚÎ ,B'©¤UçÓß.¤H…®•»ÏXÄ»Ø]üöÀ&ü±É<˜$QäÏy:Yí.KÕ› },Þ_0·n g½•o—?ü$Ä„þ<˜³ÉrݵÌ&¿zï¶r_+=EQäñ§3Î…w“?j©Ÿ‰¸Pk¥U¹RÓY(â$ôØ|úûò×Ën_†g*ˆ+¿Õ0>Ñ0N¹Ï"N¾½»»!Mö²\rƒ»Ÿš%?žÌXä3A\×À3ï«ÒÕ%~&È^æåÖ0ï·€EjU"I­ˆ§¬j¢ìuF§ÞJ£2 ê'Þr«h6SkÙ5ñäF9ÑÒ¦Ž/„†Ô±Äéd²^†ÁN¦VZIƒØbò$ W4§¥‹nœ9E1¬®¸ØF©]4Pšhˆ§ÜW€Å8F,a$=ߺÒ6ùXÍqíQsD?ú®ÌJ“Î=³[æX Ìæ°U^l‚#wЦö²†ÊVâ&óÔÙäúôY¥€HŸ C•¦ÑÊ´’eMœ¸Çˆs‡ÇmÓØ“Ͷš098}«2ƒìj£—SôŠc4‹ ŒÅH³c ì,r{p€1A # ³Õ·od¬e¦ª¦~%´Y/DDÒ‘“*X4¶èˆÔŠ4´%[ZÊ6š ŸHÛÀ†…4nÉ F-»ÛR¬ ÌX×Á„+™¸Á·ˆë"^æNæêä@Žy•{sv›W¹=¬pnè¼ö]Ùô_w‹«¶ß©_ϦÎåïú¡l™OÜ䊂¨‘U9H¯]ØõÑJQt (uÌEŸSŸTrÇGƒn¹•åæü²þpô‚)7ÿD„-j.\eéüг€'ÞUE“Voü ŠªÒ¸¶9At%Uçò±psYîš(Âq‘" Ô˜àVz¦¶‚ÜòYé[ÎÚ¹·êÏú¾=»ËãÔO¤•w9¶gìÇq|²ã½VO%–±Ðç‚·\• zFqt"ùAý¥¾,ˆAáN¼4µ’/€!Š…/¢“¨èáA«Âì³³zŒ…*dS2F¨FÇ‹Q}I¼/4aÊ‚:I"ÊÈ8ÓKÂ8Ä\ƒ¿„ · ‡ ¤Ð ¶,k[ÅÌqU-·[zÒ{Ž”—Zív±Ð»î~;ÑØMbÎQn~ë>äªndAßmܶE•¨£9\ ûwô³ m.…ßà’ºê<{·apa_ì-ã•RiNŠÍ=²î’Q®»ü„á E{ \d¨ITίÌs8Jb34ô’JÈ}áÐÀýÐ NãÐû„¬èGÖÖˆDx•ªS9 #Í8hˆm¯¦oŠz[54<m{ðM ¦ “èºÇÛ‡åâó§ëÛåh\3Ÿ'¬]‹êÀÚJò­ßñwè @‹5œÒ¥=x 4ÔFÎóØ„4Dîßê`XªV”Ed²/% JR,œû">I¶ö>d³>´\?Ž™î ?H]¿ûðfñ·öT r—Õ»æ(ïNTk¡©ò²CM¥U¯ +j¯žµë™p7·ì±q¬Õºnï Ò]- C’W‹¼lCì;Æ ar·G¿¢å8lÂÐOX›‡7Ÿîo®Ç¤E©ÎÇÝ+Dcûtü"¤À‡©šÒÑÔÉ3HKoƒ[²ÂI„îý±·ÙÊÐc†tŒôÄPö„{¿`]´xƒ¹•,Ý“JïW€÷ ÃÓ>äõö¤%YWEA¯]#‚IO™9wý–ŠžUÎÂݽ½y¸w7³^"Ä!–üµz¢Éƺm. þŒEžÑdWG qi×eÀÔZW;"Þ#Ï›Ûöíî匋 “N˜H}¥µ»øõ÷`’Á$dYÈ“ƒ]¹›D~˜`y.&ÿ{ähi­(6É֛럖¤v‰õ‡¨$êS@B\ýúú¢¶,a~È£ ã´ùŸ´e Š˜[QwÚ.>¾ÿ°<6µ¡¨ð¥{0p•ãEí”ûA˜þ?´ SÈî1j÷ðy±@èÜ}¾½ïq؜؆ÿÍÝí{×óî1!ŸRP]d¬µú£Qåêù…çéåð½d«týõÜæ¼÷àóD÷¹³4¥”Ø^¤°Øõì\†µS/fl¯G1Ò¿ü³˜ûí™þh>Ù endstream endobj 119 0 obj << /Type /Page /Contents 120 0 R /Resources 118 0 R /MediaBox [0 0 612 792] /Parent 113 0 R >> endobj 121 0 obj << /D [119 0 R /XYZ 90 720 null] >> endobj 118 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 124 0 obj << /Length 1568 /Filter /FlateDecode >> stream xÚ½XÛnÛF}÷Wy X,w¹¼(yrbÅPêØ¤´M‘RâJbMq’Šôç;³;¼I4jÇm ZîõÌ™3³³fþ±ÁØ®kE8XíÎÝ›o¦1»:c4oG­™og?½÷¼sì±3fƒÅº½Õ"üf½ÛFûRæÃ‘뺖x= áY×É2òï¦s&×2—ÙJGÜónqgøûâÃÙdQŸëqþH€8ó¡„Ð…Í\a~þõvvi ¬ÓhSàáÇVyíF̵™gÍå·!-™G)À™µVù.*Mû‹Ã<ÜH¨ü¥Œ±éX¥ÚÈr‹dà@,‹Už,“lc¾aät+µ¦¥Õ`íö)µ“Ìüîän„¨ƒ‘ (]Ë®Ç|ÛñÈ/ïq„BÓ óëznh}2ö¢¤C£k;.L4l¼ÿÊü·Óż—;f{«¦¾ÔÀbîuÁN×H!Ësl‰ÚTì£22­¤0£Ì7ßË„,¸ObùÆŒ)dù>)ä9­)»kÞ¥†¥yú‰Ö¿^}Ü\N/nú„-<Ñe`ÄÆvŠüИÌ2<AÃŒþØØ=(ü^&›¿d'Qfú¿8žóQ•*Wimfz¶¦ÐoÓÔVÁrÌ™>¾Ó¤,SÙ¥µã9Ó ã¡”)+ÌY§¼úçõrr½¸è£TxvÈÂ.¥¡x¼cò)AÍ¥ÇxÍ¥|m™’0D±f,–)]߆žoEéAÒt´6N ^\“¶hÅcœ†4ÜëÜ ˜™Ñ¦[õEêJe…\Êä­t°H(:Œéš92`¶ö“#jk°/ªúZósž¥øéâÓÅ»Ÿ'—}ÎñÝ#­‡¶pO•.ÐFíÁ[ž^£rȵ g­™;MOlúî“rkZÓÝþÒ,Y`fËÛóó—´ËJíö¹,ŠDe}^ØAvVÚñ£ìãD¢™ö’+(>\+S0jPA}ÉóéÕM?ÅOIª~TÖJ&uRõ)ÈáwÅ4¦ª•É&Ór‚6HÇ3ÒAz‚°KOà˜œá‹îv§©EQª?dõî@ä¿$Ìùb2›ÜþQåTM&¬B=°¨S+qe™Lë`nk 5Õ{Q8b…ÿ$åSáß—•ä5ªÞûÜÊv9íM¼Ž­šÄsĘ85gn‹3a¥T@Çžûµ×^×=:^tÄ©ló¢á°m‹kEY\ß(å)$2¸³§käúööÓe`Ôy>Êãg¢œM~™Ìæ“êQgYnŽû-ïI9„¼"½‚oâðäˆ1Ïæ]kZ%t’=¦ˆ&xóhGP¢–4Hº/ˆìå‚¢]0ã\]ë²½UÇV¹…»+*X⤸ë7î4¼>_ßÞ\Qé#³ \92íÚ̹|l0Á¯Á ƒIÛç`aev Û;2îØ|Ì+S-Ðw¶ëÛu!dãûʵÕAiЍÁ´uºßÐ ZB¾IÊÂ|`823¼Ôj)%•xÐÌS5 8ãnõEy2$uU¹­e|+´[å|ÑäNkéà¢*.µÏi‡žæ˜ô²êe±\Fyù¨‡àµ)ÔžNÅ…Ç©­HJ¨8Èâ\¦Q«ÎC«cÉêÓûäÜT ࢴssdm³‹´ªú±ϲ™ì»Á®’q'¦7ÂØlÈ¢€»e/wí ús„°¹íÁSÀçÖG¼<·ûÕ4´•ûôØÀÍ>ý€Á1?;eè,sûží¿xWÑÝ#qµDmZÊUËK;z“ê¬iDß¼´‰‡úfLÞ¦üÀ?£ý + : endstream endobj 123 0 obj << /Type /Page /Contents 124 0 R /Resources 122 0 R /MediaBox [0 0 612 792] /Parent 113 0 R >> endobj 125 0 obj << /D [123 0 R /XYZ 90 720 null] >> endobj 122 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F58 26 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 128 0 obj << /Length 1769 /Filter /FlateDecode >> stream xÚÝYmoÛF þž_áo“‹ú*éNoݧ´uƒlIZ¸Ša2E:ÇZ)“ä8é¯y¤dÙUZ§ëP´(tÉ#’UgdÃ?gÙ£@J©p”\Øæiu9¢ÅìèÀa¹ Nz’ÏæO^zÞȱEdGÎh¾è«š§£?¬çËøºÑÕx"¥´ÔÓñD)Ï:É.ª¸º£‡3½Ð•.=ž¸ž¸–ëŒÿœÿr0wv=×ÝÓA”üØCÇC?T‘Š<ÌËâ’çwr]\6Ë=Rîlå<”ýœ‡œsМÒmR^c.ï†踑½°M y0d]†ÂS­ØBè®ÑlÝ„®iÜÄ´Ê ”hÊ!“‘-œVÆb...ûp‰<+.ø@•nVŸõƒ®J¶¹`¤„ŽPÉ~uÄ ­ÖUUV´, ’dUé (Ï&¸â&`æ¦( 2‚77c€Rœ¯4+”Uë¬Öb< ÑgeÃ;Í2n:ed»H'åbHW¹6®ÚÛéLÊ"Í8‹”u¥dpQ@.Kƃ—Dà:K¡Ÿ1¶âš„bVÁÇÅeV´e‘±P£Ûû>+šætó{Ö6€å€±.ÀpfÓ·äG} ž4°»ä5·®Ma³8·.yë Ò~׺.u“ÜÛº:±áˆAAè~²SLËÅ5].>_À‚*SÚp ˆFÉó\Ú{9Æ‚EÉÀUÒ³ôm|ukºÁö‚×e‰®é¦)éz±ÊðÀ¸„—‡:\ˆPv‡Ã=ä³R 赂flx86ÆÇÂŽ­|Û§ lÈ^…T¢ï ÍÓ!¤#d´ñáåñÉô~?&Ò„m;ÛYoÇäP£Gí4k {ÓWv­ûR€@küê*+Ÿà1ˆvßï£}Ó569p)ð€éÀà’èš«"URؘy<—È %Š$©TÂ>ŵNñogÇóá8`{ð·Ìi>[@šr»Étz¿:%êvZ§QqVp?„¹ç´•²(óœÐÖ±„~­IëÚMÉsNWõÓÁ¾ÑÄn~»—¾Ñúý`[ ƒ´üaCËňˆ G¿±^"­E]??¨|kÊXC>ßw¿˜2Êÿƒ2®«¬it±ïøÜ—ôsÎ÷Éá÷ÃúŒî ó·ð¶Þ£n{¼¿®~XgCœÿAUëFý”ã]›r\ÆÞÇø=ÁŒ}0ÀøÑ†¯Äø3Uy5d.„ßaˆÁ)hó°§Nl—Ø8ªné¾!ÝÇ™#¨¤ÍŒ=¡áˆ láCylŬǃwh¿!:EÚÑf5ó´£ý&c Dû’ íÿþüzÕìî òƒ[ÂCÙaoÆ-jx½Ú›P#7 }…<*å·á†Ÿ È Õ7¤æòx¡»Å ï÷áûæ… ¹ïîðÂPH'jy¡$V85nJáxøÍŸñw»{˜b$7Ü0Eª€ŽÆáûø±…º¿¢ŽÀuWíÏéU&p69wTcü >b¸6S[ÕA8tˆ#]è*ÎÉÿ)vܵEೂ¿†Òæº$žNg³ó¿Ÿž???9>ûõøìh°£‚Z7èõLÓÀvïam“t½^“ä=ä–´ŠI¢&¬“ ã“Ð^ZeÔPXÍobVQéV8>€¯Rç*p±jvÉêš©µ™ìhiW-¶Ó¡Ï&yûy×õpòÁ,~jè®ûX‚7íg¾‰rBëù •ö²*œ;0=È|¡,rÖº9XMÖË,Á7—l{.î2mf°Ç?'̨†ÑA±p¾Ã^WI‡'oyL¡ŠŠ[CJZ¿åM“hÏ-î¢Ož=!õêõô  tŽhO6¢~N*Þ š¼îK.KÃ-ÍÏèÄ„ET°Šé­ʬMHqQ˜/_°`ŠÊ:aÉ—Àìp(Óî‚Lûà8e ´#6l¸ ˆÎNŠnoÏO:··ƒã×æÒ vârþZÎAîàO4dœÏÖ©Zúô5Íê÷½wXÑnÂñ-þ—Td< endstream endobj 127 0 obj << /Type /Page /Contents 128 0 R /Resources 126 0 R /MediaBox [0 0 612 792] /Parent 113 0 R >> endobj 129 0 obj << /D [127 0 R /XYZ 90 720 null] >> endobj 99 0 obj << /D [127 0 R /XYZ 90 242.272 null] >> endobj 126 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 132 0 obj << /Length 1839 /Filter /FlateDecode >> stream xÚÕXKsÛ6¾ûWèVjÆB à£7%V7–äÊL2ž$£Òmr,‰*vÜ_ß],H‰2Û&±sÈhF\,ÀâÛà=~¼Ø=OH¿·XÙš›ßôˆ˜½>âFn‚ƒ=Éáѯ¯”êq›vÀ{áõþTá²÷Ñz™DÛ2Îû!„%ë¤TÖYz•Gù1gñuœÇ›EÜ8ÊõËqúŸÃßFa³®rœ¯T%ÿ_C×—Œ Iþ‰«»/$˜-`F-0f³ùô]8Ÿ¾šGãéìÒ iÍËmŸùÜ«Gý‚2 dŽôz.WÔ&i{¶çyÐ8N`eðñ­Å¢ÊMß}o¨«LbÖ7YI}ñ&«nbÞ¥yYE+j¬ãu†£PÔw<뮯\+JWÑÕÊLVfÔ½ÈÖÛU\ÆZaÛ¨ÊIWX¬Ä…•mµ‚q•i¶9F¦g¡òØi4D5Äo­Ò KÀQš[ht.­«ªl†±ˆV«tsCmnðˆ 3ß}šYµZšé¿,âxÙ¥qZêAƒ€à¾µJ×iÉÐùlkœÞŽiö%u.©›qÛšŒhƒk?P#‹¬Ê1‰”ÕtF4$´Š9 ÂnòhMrIT´t5àâްª"&ÁèpFe3×qkÇ*â2×ûérB¥˜í6¢×Õfæ2³g¤ç2«WÓÆ*½6ß’¾À¶ áZÇU-‰ºëk?x V‚­êÆl ˆÐ• Fªy 膪 ¸+˜@|:ƒ j %^ \ǺÐcaOY# Œ¢kƒˆ`Ñí}Sð^ Ççg£y8Î_œ¾îŒ^.™’ê0za)ØEËÁ(|¥£Ã·¯ÝZ·Z,Á(‚±K;¹ÜóId‚¿ãÏZ`pDd'Ê®éK£@²0È s•qÒxµ,v¢±@ù¥!ÇežòŸ–àAÄXPcä1Ïó¾'§¾NNÎFÏa±ËªH¶l"š¬ŠÔ^´Bk­ÐÈãh)3‰Í(JR@PÜÑÔ׆/‰6îù@p VtY;\»\™p²¹ÜÐ$ÒŠ b _uŸ¤¤5‹ÄäA ¯(u™Ž &r)ÎïY%1¯3sø®³¢¤Qab ô˜û]¶{7y;™~˜Ì? ßC`]ž:Í'8óv©Ë˜Ïó ·3ª¼Æ|H¶Cʫ͇”1ß/xîH[%„·ô¢›‰QÚB*¢OKz6ÄÕG\± H­£’hR†ëàӄ‹ìf“þ/»S¡zçå¹±> ñ\°–ÕJx§áùðåÛùéäýðìôd~2 ‡ö‘°)ŸØÇ÷™Ëywx‰]xIËä/À*€Ÿ¢L6Q&uü@‰2[”Á âpŠ-k·¤³˜ ¢±Ò©™p‘åyµ-Ÿê³gÓáÉéäõüÍhx2š=K¾qý k@(ßà áú-‡Å68,•;®G‡,ðÌ! TDŸÀðÑS6^‹Í$*ZC TÝÅQC²ÊMZ©­X¶Ì¡\ˆJãÓÏóù0 G³I'ÎŽÍÏ9ÀÙU̳ÎÄ w‰A&Ù$y ]ã¬éŒ¾&+HÊ ’ΞqBš¯I¹ØÔ #ñŸèn£®:Æóñ >6a’ï{óšÊ›ÓÉ«iwö˜Tâ0Èæûâ§Åº•%6”ºÍÅäÛ÷¿ ñpéõn?ÖeéŒsKà6ž-~ÎãÑÉüâr¾!×î® Å‚ 8,.8“NеØA-¡ Ôâj±µ0P‹jAPã4&¢…¹hcŽÍ’¹ÎÙ`ŸâJÁ¤³P„›æfY쟊Åq}ÀîÎF!O?ʘ‘qYjÃÖóé ¾·S¯§vS#ƒ·¤YU> endobj 133 0 obj << /D [131 0 R /XYZ 90 720 null] >> endobj 130 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R /F4 53 0 R /F2 55 0 R /F31 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 136 0 obj << /Length 1431 /Filter /FlateDecode >> stream xÚÍXmsÛ6 þž_áë—Èw³&J¤^ö-MœL›c÷\µë¶î2Åfb]mÉ“¥fí¯@P²$«YSçv»ÜÅÂàà!6°à‡ kà9Žp°ØœXJ›ßH˜_0í7ÇQÃóetòý¥f™°At× -¿ç«x[È|8rÇà? Gœ c’Üæqþ‰”sy's™.äpd ׳ Ûþýt2Žêï¶ý• ¢çA†d蘤¨3t}n2‡S†ÜtL> ×6.òäãÐa†Êׯ8ϳ|‡Ùt· 80Ït‡b\ÉTæÉ‚6´Ä(¶oÀ†˜¡w.ëHji` ½òOÝmF‡dðS××ãùü†¹/Ãèf6üÚ—MÀ ·Zqª¾6`Z® _æ˜L%Z%;@™[”‰|øÆbQæÚö°’)IÅJ’°ËÊtIâR~LZ½¤µr—žÚ±Ün•.˵&ÍÒsI¾M´r¤2Λ±+d0YFÙfe±-‹ïÀ‡À qWø'7â\’^¥ˆB.ÿ*å®KrØÉ¢HÒûI`(–ÂÝ Ü'ï?†»/@ô»¸3ÓqüöV4ð¾]ï³ð`ÓÀƒDÀƒPî5ð îŽåvÈŒ&ö Dì} zSC_GoBÿ?BþbÏ£pzÒÛð|ÜWfC‚ S™Üú*P"¥Š(zPÔàËw¤§B´6ICíÁêSG—Fuipí*Öö4+H¸¥ZU!—² @ëñ$|Âi…g“ð7„è:|7ž÷"4À…ÓAÈ·Mßwúr÷¹íEÅà pR̦¶#ŒëäÃ5y-OµO’b¿ë§ñš4»ì®@ÝþÒä›äo©¿g‘•ë%‰7·Â­Š™ „cƨ+’ÏR×b›g42_úŽq<Îoå‹ÇºqSpÞÁXfàñ'taùUí§› ,7ø[ä ï-aþ=;³më$7Ëݵ= ö#*WÉ(x¢~ Ev§) Nï¥Úq,ÓòÅ7Íüt6½y9™ÿümlÛ™{u#sÏk72Úd”ÈèSÜ9(Œg”i|»–Ú9#°\guŒ ²L´½¢'%Ðq_ïÞ®urøÝ€: Óž*y,‘Î^§Ègo.ÂYoÿZ¾é3¯Û¿Ü´¹×ƒì3´ï"N[$ Q¶* ­ä‡äz,¯£ñ|<ûò Ê3·Ë’Ü6½ Ÿ%ÅÛ,)œ QA öÇ…h(·NråØºB¡f“¥ÙAêŒ><½;vU²9¯øÍäì—^.ñLÛ³;Ȱ–Ý,WãGS‹´¦šZ<^ÔÜ 1ájVôÐáÒ蟀ê0å$¦ãˆ\”$#îì;i6Ûu"1Žàª2pMâ¾0|ÒÀ=K+ ÅP F˲ÈþãgúÜÅgíy\H¤Yµ”7+ˆÖ„š—Ñ®AØñ°Ú….v…Ûztœ•ÀS—ÉZv,z¢wzÕ½(]¼·_Š£épNáºõ”f9»$6ºy5›GßHIíäuß ØH^õ J4 °µдXЧáþSqO3÷jAŽécW&:°ŽzXšº)Nøî‘²ÀŸ‹¤®GëayTAÂw7ç³éex…Ñ|6yŽË¤½§I[ØOM“h¢¨Þûü<£ dž­_k±ÕqîÈW/²÷O#P.²á¹/a¦’L‡W—r´ÞÅP—å±\×@ oáý/«‡÷\Ñ ¾#ÏTD*„[ñ Ý…ܶ/eÚ“7ž'=ð R¿Y8Â3±V`ãt<#P¯£³/Œúö†CÄ^qþ¼Áw6›ª9ÑÕ¾Yyü8×bú_lüOØ?öœÈ endstream endobj 135 0 obj << /Type /Page /Contents 136 0 R /Resources 134 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 137 0 obj << /D [135 0 R /XYZ 90 720 null] >> endobj 134 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 141 0 obj << /Length 1268 /Filter /FlateDecode >> stream xÚÕ˜mo£F€¿çWøÛaéLYXÞúÍ——*N,KU_”¼‰Ñað-(÷ë;Ã,.P®i+í)R<žfwžYÌFü±‘oŒ\ËÒ}îâí‘Qkåýˆ„ÅÙSv0œ´,?…G?œÚöˆºoølÞµ]…ëѯÚñ&Ú•BŽ'–eiüÇñ„s[»Lne$ŸH¹wBŠ,ã‰i;®©™|ü{øÓQîçµMó_.-Ÿ_¡ãqYœVøÎFNÛÈÒ <Ö³Y°XÜœ­–7‹`„ʼãÓ³Aôš> Éhb1ݲ¼Ñ„Y:³i$Ü$E-¤Ìk*\Ë!pW‹ãJ¤x܈Œ¬Ê ¡È«lM£kñÄJçUºÎ>”ôíyš’¢¥N+±]Ýux°È— !‡WgË¡¸™Ïø½¸¹§Û¦ ›uâö¼}Ü æõr›¸A¡ÖGU!HCñƒÐÄâ>~t‘¥O$=ŽáÑ\~V®’Œ>™ƒŸ>¸fZR’œ¢œ‰HÒ×ÒSäõÒîª÷Ð--* >çÌ0Huþõ# ›$ÆÙ7dÒìp–—Mä°%_*Ó)Ÿ°?e’݇ؤðÄÿ$3«´”‘ÊL™< ˆæ¸×ÙÙÁ1èj×s±K#|ìé6Ž®öY '[!nêŽÝÐQ+>ŸOV?“iwb˜d§2)ùÍ`ŸßLW'×7'ÁòxøLxºÇÜr›ë&w‘s<²L“–мÝ;-ò6`CAòù¼GžÕº8ÊHPìmí^¨MPäm-ªÖINºM$×õ!Ф\‹"–Én2t4Ê$ÏÞš·{’׫p¾¬«Ì4tÓ5{,[wá óòüýÂ&y÷ø÷_Ù›Š¸¬"Ú¨9«rW•`óiuz,–¿¯Ì²w&ÓÇRbBGY±ÅœLŠ2Fµ© N¥Õx+’¯â´ŽÏ§WWÁå`—ò]Ýr¬~—2u×·$wÌÞäŽÕ=hBÀp¨9(#3m3C}Í êÈšjj`¨iµ‡ÚŸ¯¶ø_5Æf)wC'’ZP”e"-Àºþr:›_ßL@:‹ßïý.Ó¹éÿ?PÒ¶0íKÕH­æmw©8h "²yœ¼.¿X2*ÅPWV¸¦—Ëéû7eœõæêúøúêôâì}Ëe–Óg8ï^g¼æ:çÆ}_@U ᮬ•Çú™‡± Mµit›¾9)k,–óéb:¾Àt ÷¸øºïò¡Ú÷e…ÅnQ…*Š QUó ÅUšß©&‚@5¯â¢ì=Ý®‰h@‰8Pþîr¹Êý|åu¾*õ`EŨ¨tejÕPõLÇ¢P[TÖÛªÒXçÊE ÓdñÂ6:Z”Âʵƒ§×‹Ù4|å²ïi El1 ƒW½²¶a™®ÓÀ2ÝÞ­ ­êpQE°PÕ†…#kz\(¿52ÔÕŽr*—J£œ9mvµå7Ùµªò›ÉýÓUê¥]ß´=@›uë(*@°¢˜í&ÛPêã5=N͉L"=ˆm‡mˆàe¨ ¥š`iõ+)Ô¨ÉXp~æzÿü‹O§]9.bÆ/é[÷ÒqšŽCÔóA¥Z¨:½FèÒôîè`&–2ÍKfÇMë>+ªLÊ„V²ü¥¹xá}µÂ0Z endstream endobj 140 0 obj << /Type /Page /Contents 141 0 R /Resources 139 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 142 0 obj << /D [140 0 R /XYZ 90 720 null] >> endobj 139 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 145 0 obj << /Length 1086 /Filter /FlateDecode >> stream xÚÅX[sÚ8~ϯðÛšTË–o}£©›e'ŒíîîìeXÅÁ³`³²IšþúÕ±d ®CBÊ0N¤£sùtnk†ø`Í74ײO<-]]Í*¿Ó$]]`Å7ŒÃÎwÉÅ›¶­aù†µd¾+*É´?õË]׌†–eéäí`Hˆ­_ç·œòG¹±9ã¬HÙ`hÚŽkê¦=ø;ùå"H¶zmÓüNóÛ:AØ"ÒÂ@›`rv™,dXBbÆAÍF×ñh6½ gq2ŠufO0ÆÙÄný<Â"ù®­ ±…°-w’E^Ißçeƒ ÑKᾫ§é`ˆõÍë¼’ë VHæzÁ$¦ÈÍŒç÷ÓÓ[€SZÈBH(kIW5åuGÄZhóôt%9ÖK Roi ßÿ"eº‹mhÈl-.V¿Eã$8+üÚ`‰˜+7¬ˆU¨ÜzàyÍv´ž (¸œüD½˜6ò}¿‰‹1ý³BRttY:gi9ÚÔY•Èsš/7œ)¬ˆ‰[¢åÚªLdصÅBW¦ÈǪf«­QÂþ{PÐÚU©ƒiþ—IºcP%µ‰pò QÚügÝÍ$Žgq|ˆFWapÓŸÙpå®Ù¹ÇF®až4³…-ÛÒ‹mV3•Ót“奺NïVB¨P§6«ü3û:xcŠGáô:ˆÇô'´…‘k:Ýèu4ÎÙ!Úæì¿ «@K-´0 TVtµ^²C ÙG6 ‚÷½xâL7Ù‰‡ló¹¾9/NœÖ'Ã) ¢`Ò”‡<ìv;A&qû "MÙh ²”NB *%n!}ºA ¶wÑ‚ÿ´€hТA«{^V³L1ƒˆÍ þÞÊÊÕš3oì7öR¢iº ZlYõUOUÏ⫱Ä}ÿFÉ«VG¡tNnz¯Æ3öpçfDs0þþ”?à ʳ¨f”«•²XªnSmÖÒí’×JºÀŸ³Ra½å¥Á Î?™Ážh׆×ñ^TAËòzã۸ĸ—bOÅ¥ ÷G¹ïI÷a+“ÇX%Ú)è]<öä{Á œ2…wãPYzŠ„n0{2›}Œ«Û%,Žs–Y•ÅNÀ8³—vKð;ïÆÉq1ócÝÇŽ”t+<ÏëgŽ÷ß,øÇ¢à¡·oеXt f”9v[’‰òâëŠì=Ú7³ñ͹ ­Ú™] ì>OÕr^äuN—ùgZçeñå=À²CÏøyEñuf~sŽƒÇÇéQÓÙ Q|Á9Šѓ㧴UcŸòâN½ä)§+·—Oý¦ÌÂÑôçI9˜íõ?²E Èýþ'Tÿ#Ê? ÂpB„b*|ä‹öä\F>ÀÑdoÇUZ³VššÒ@¸¢ëEÉYÕ×ý Æ2¦ÆÜy{›½?ÀoSÿþQ×1 endstream endobj 144 0 obj << /Type /Page /Contents 145 0 R /Resources 143 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 146 0 obj << /D [144 0 R /XYZ 90 720 null] >> endobj 143 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 149 0 obj << /Length 1402 /Filter /FlateDecode >> stream xÚÍXßsâ6~Ï_AŸjfŠÏ’Ò7.½B.í´Ô±• 9ƒcr“þõÝÕJÆvörá¡ÃËjµZKß~Ú]ÁzüXoèôB×µ‡^ÔK6gŽÒ=–?1m7ÃAÍòýêìÝ…ï÷˜c!ë­ê®Viï7ë|ïJQô®ëZÞýçùÖ¥¼/ââ™”Kñ ±MDÀý äú¬~>›¬ªïúœåÑò¿wDžÍ\vø'~ Œ‚º‘k;.xT³Ùd¹¼[\ó»Õ‡åd4ÖöM§ÌÜÀ¬øMz7´ è ˜k3ŸfVk¹ÇcG–(Š\ÁZ9œ<²’äPìIñe-¶dU®©f³«Ù;NÊ´O}Ž.hœÄ[2Úæ¥Ö".õJí}6Õ–B¤"UÛtôíð!×ÁÚe1~äù>Nú<´>Ût(?´ñH‘íÃÑ^ àÄ.ü"Ĩ³aß]ø…à ?›øBã9úð ªð¹Œ ??XVáÊÊE)7fÅ·Ãçq;ð[Že!’òZ76›ë˜¥}]ïÔ E"w˜—r‚ìÉ+ó€ðžöê¿*,ãë»÷7ßV Ü_qAÅ%* ÕÙqP ŽU`PPA!Î2íUŧáª8i+Šý[ù @M>Mæ«Nœ›E¬…÷퀱.ú²ãõgDß°¢/«èËÌõáHÖâ/3÷&¶}f) ƒ\ˆG¹/‰v4´v`‚8…§qR"—[œ*O€ÕÅb9­N@*äz•,½Z 0ÉÒ5™Î­_(¯•-]“-=“-]k/ʆ¯I%‚¦ánoâl^}áæ‹Õôâ×S`± ›Ø€Â$B¦Â4°1aBÅ$kLª;êÀHyȲAWb4f'€ïj9],§«N‡¡ín @HºáÐý“kWȼ¥šéG®u‚+ør»òÊrË«´îr¿Un¹Ië(ÑÁæo¦uH\§u4O¨Ø1ªzTzA­Ý]©¯aCs n®Æ£ÕäðH'®ét,€0§  aÚ hé¤àÐK¨‚ ·²”q&ÿÒ.Ê5!Ç;ÉE5¤-ˆô­Ü¦9.ø¢/Åìa¿“ʘH;ºš¶ú“—{{L íÉë¢s;Ïfw£ËËÅ9„¨“ÌŒ;6y+Ho‡ïNšG:G­.&i:G!  ÇùGÕ‹BìóC‘ïq†p?ÓZHˆ}f»–”lî•7m¡] õ´I;Žw»LÂ*™oßÊsBr<ù4=ŸL»„8ù§&þІ^«ØŽb#y¢‚€DI‰BVãD+œ¨Ó ÇÆÿ£4}‰Æ[Z'UŸòÔW-¡Lõä!•yWíIÅ“Ltú–©îq_!2tÇÊûÖâD¿Üú0Ö ÛÕ ¾ÓITï˜MPlÕ«²‰g²‰g^ –ª•‡rw(I¦&†dó•YPØvtóBu÷T’ªïtàKÀ+x êÓàøa4_NÞŽã7ù¯NRû¨ñÕ¦ @žFužâä:Þ¦™8Í}¾™œ/nçÝ EvÄÂöuölî…UžÇÇ[à[ûu~ÈRRSå ‚t4þhÁ¹5} á36?ƒG¡•M÷? xˆd"Þ Ò'¹‚©Œ“j‰ '™¼ßÈÏ¢~úÂÝVÀgùn#È A¿‰e&·y쿼Àgq²¸î °Gõ-„ú†i¢–3t™;Å|6:¿»¾šLÆ'y‚ó㜷Ÿà¼z‚sónv»Z˜Þ뺎iÇÆ¹~Šƒr0š)§LÊ@ïú3Ü$ kIÿæû#º3Æ endstream endobj 148 0 obj << /Type /Page /Contents 149 0 R /Resources 147 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 150 0 obj << /D [148 0 R /XYZ 90 720 null] >> endobj 147 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 153 0 obj << /Length 1183 /Filter /FlateDecode >> stream xÚíXßo¤6~Ï_Á[A:\Œ1†S^r¹Ü©U¶‘6Û¾´UJÀÉúŽÅ+Ã&—SÿøŽ±!°e³›^ÚS¥S¤¬ñüú¾™Á`'€?ì¤ÃAi”8ùê(hïª[Ç,æï°•óAÐH¾Y}ÿŽR( Rì,n†ª…ó«{ºÌÖ WžOq£×žEÔ=×*SææœßpÅ«œ{~Hcº!ó~_üxt¶èíÒ0<ÐA-¹ßÃ8‰&‘ñðm „â¡A­Àlv6Ÿ_ÍNN¯.'ó…éL(,“nÃwZÄñ F„$Ž ÂÔe(vÀZà"y>C÷—wSåÚ£ÄzM/È…Ö cDu^¬„¢sÏÇ®FülÁU§Rq³š©§ Åœì`{sqqns#>Îdqu[ïøo î¤(à[-ɶ–QLŒ–·¼Î•X·±Màj²Òˆ·¼yÌ $\AP\ØltxÕ#”€¡Eª–›ª0K¹iÖ‹UO‰*».y'`÷T²ASqXÀ†±Ì= >Ô›²iùŒ˜ì Ï’örÊ9bÖ‰ºõîPgðÚ³É8ÔÜO²áõ>“§YYÚ\7rŠbQ€â˜õuoxõóºÈ>¥›%ÀúNú^”¥Ñ} õœ¸¶pÅm/¶ »þ’lc#BÙ8—¼…öÓÄÍÊz2Àa6lxo© ãÅD”Ú¢nÛ«)½ñDÞΪ=zƒ%¸ß…¦ôBC tëq¨º¾G¥?Ša_ð!ž4êT†/ÜêF®ë­æ={Õö@èŸDuûÜÿ6¹ÍL˜ ýZ¤&! È-Šªqzhéy”&/Nix—xiN¿Ø°Z mvÌ0ųâÁK"÷Po*Y}†) .É}¦Oª'^àúb(6ª÷ªÏ™\›âQ™Nî·êÿßUÿsgå®òO ñž™vöIü§£,ÂÁ îõUÁE%‘•º¶?ë"çV®Yš·]½¶pëå2SŽ>cdÊ>̺G7Šw›3M&£ÅJ­øJêA·cØ¬Šƒ•sËñMݾk+õùf½–¥¿;þSzýÙ™ÊpLök[Õœ×|ZW‚X¸gœà£ JÇ,(e×~¬‰÷¼ù…«ÐýºÓdÇA©o’öl[÷*}c³Òÿmû±G#y3ꯑ[ÚÏ Ïhüã1ôT‡]´V’P;È„¾‚')…CLn¹Ø¶IÍt¸ äD–¥Ô;îë×S †F,;ã²UöáøÇµ?ÛkQ'ý¥âw@Ç]‰0hwV¶ÎAÇVÜ~© )GG3xçgÜé‡&­1Œ|üñ³¶ûëß+½Xeú£€ûAÏP}=‚]ßè³ÊÚ¬2“Õ0eÓžá(A8¥½o¢Úé[¸×7Q=åû;Øa›^§E¦ýƒJ¦i?R­Cü3è0ŒW—¨·¸ EW3dŠ’¨û¨ö?l ž endstream endobj 152 0 obj << /Type /Page /Contents 153 0 R /Resources 151 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 154 0 obj << /D [152 0 R /XYZ 90 720 null] >> endobj 155 0 obj << /D [152 0 R /XYZ 90 657.523 null] >> endobj 156 0 obj << /D [152 0 R /XYZ 90 632.056 null] >> endobj 151 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R /F58 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 159 0 obj << /Length 1376 /Filter /FlateDecode >> stream xÚíXKÛ6¾ï¯ðQbV”¨W{Jšô')¶zhŠ@‘h›XY4(ióøõáP–ì•»n¶é!(|Ãyq曡ù̇Ÿeþ, C–‰tVì®|»j63\ÿxÅÝ#ʧ««o~ˆ¢÷Yæg|¶ZY­ÊÙÞ÷Û|ßJ3_„aè‰oç !"o©Þ™Ü|¤Åk¹–FÖ…œ/‚(N/Hç®~¹z¾:È‚àB‘ò®†ñXCî Ø³8Œ‡Â©ùÓ“ëG¤Ï uóB—o®×ú™Q·Ò¼ñ#ÿV«¾5†é˜á‚ÃϘÈÃg²)ŒÚ·J×îÌ‘›¢„Åp d<"úÕV5$ÝÕ…=3á™9÷À3Ük;™º¡åÜÑj³ËÛV–4­TÓÒ¾^ÓJ»•40r›àè’J0m¤ž4N¬ªé›Óþ»îÏCiؤÅNýŒ…IHú_Ï#P´éªö¬¹>Q>!9{¸îÔÓ >.B„×ê‘ ¾üÐöú€ù¨úBšÇ´¯“v|Ã"`z/_/—SJ1‹ÄA-åï¬ì…Eéáp–y68`µ02§ë†Å÷ªÝNÚdÌÓžå.¯*]L  ã°§û¸&Ü… Ê‚s½üÞRg£ fk#r+ï·²¯¤NãŒü óJ×i¯ ¼‡L„Ü%'ñµ,dÓ ,¤¡woØ9Ÿþ&mÜ‘ˆ¼jô”?ÆþuÙ}í.2|Ê7<ðY‚èñã˜Åñ9ÎOªŠ˜O^9`yÊû³lŠû"äK’èX¦‘j©óò‹#C•‡P…3#ÛÎNrG1N  „®Øh£Ó@á|§-@”]å*k¢c¯ê^ ”¬àÅØ|¥Ø…®êë¾hü__|QÚ!øZº„ûWáKÕí x©a a¢ôÑ>7ùN‚Íe8=¤ãÉŒ%™MîdÈD°†v«„1׿⪠€Nå•ú”#ÈïˆG°^T]©ê q‡3¯Ñ]]ÒÚЄMÁX[[­ éÒ·vm^¡kH.±éL/ÏÂN¿ qïiK €ã!<-ÍNî4Òkks6çÖ]7—Æð¯¹Á vW6eÈÞîŸRÝ_h^ÙËÌÑš(ö†° ùÆ5g5M-úâ—ò?±~SJš ®fx=!"Uã(óU³ð< ¸„ÚÔëÒØ´càum¶ðnçx°êÐB•›Ê;ðäCoåÛRÞâ-O9%çYÿDø$CzL¼k]­<¼ú k›Eü &ñ4`Ü%é™fþÄfÿ¾€)=diü}Ÿ»:Ôt㺫.}]Ôº›Q+}o‰v¥1ÚfÝEg†çOgFdž¦êHåK#ÿ¢Šø;•–´¯L0P§‚µu®ª39åm PƒD]#›^µvx‚“Ã0€xÇ4vÏwFÓ·’Sת¥9‰æÑš…keGÏÔftÁÚÜÐA,íºsH_˜¼ÙZ¬\>ÿ &[»8`Y–Ý[#“và«-´2åtqôCæÿs®×€GÓZ¦, ⿯µAæ³Ô?©µO_½ZÞ)¶Nñÿò©pñ¿І ‘¿S7»£ ë¹µÖˆE“¯åç5ù§%Ê¿¬±%µúÿ®ÄAŸZ·Ÿ­˜èÏxa'oÛ£,·GYì5ØUI;ïìÝHšØ~»$"·½“ÛÌíSéã@I£v2ƒƒÈg‰'ù±ÔÅÍ™ôüng^UPFÅ)*P3â+Òõ(^×ÕiazZŒwÐ%³þË¿¡´zû endstream endobj 158 0 obj << /Type /Page /Contents 159 0 R /Resources 157 0 R /MediaBox [0 0 612 792] /Parent 138 0 R >> endobj 160 0 obj << /D [158 0 R /XYZ 90 720 null] >> endobj 157 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F58 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 163 0 obj << /Length 1496 /Filter /FlateDecode >> stream xÚÕX[oÛ6~ϯ0°‡ÉC̉©K÷Ô5Ù–5i‡Ì0¬C!KtL„–IN ûï;ä¡dÉQb·E× bŠ:<<—ïÜD'>üÑIâO¢ 'ÙúÈ·»ÕÕ—?QG7ÂYòûùÑ·?1¡>Iü„NæË>«y>ùÃ{±JoYMgAxüÙtƹðÎÕ¢J«{ܼ”KYÉ"“ÓaÄ<–Lÿœÿ|t:ïîŒ( ¡|(a¼#asBŽþ*§‚zp{ b/Õuin‡CaÿˆH7Øêú¢Ìß—Ùµ#X ZÂã1N! Ã]Vo ý³ˆ.xKNÆÎh’( Í‚$‰@ÒÛRåhßž¸o}á›ðK«xÈŠƒáøÓ‰¬³JÝ4ª,Æ$´–™Ñ€PAñÀ|¥j¼z¹)2{ž¸W.¦ÔkRUÔø,ßgzS«Û)‹­ùá@šP¯v šµZ¬Õõž€6ÿÚ½½ ᥕJZÖdT!'Q'Dé^•¬UĨ T€'m$ˆ¼l ÿ®EêÞ©Â(X/R;k³±iä{2…,ðΖ¸ß¬äãÐrÔ•LóûÞ•±¹2ö®­©òcˆ"?öTƒwJk£~@ÓhO{3Ø>KµVÅU»kîÃõµPéÜ¡¨ÞoŠIP>2Æ¡âý Q?‚ဒÑã"&Zr£‹‰^îÕ«r£s\/¬òÒºvÆPi#…—y9&å‚Ð(>4æC‡¬/¸\ø‘7ŸÆ|s°E ‘1Î,`”$À`£zSÉÖ%­…ÛXê<‘¥µ<ÆwwýÐÉoUí¼{oöËM?†¸—Ë·>åÅsl¤EëóZîÀcYjð+0¹ë@²N³ª¬ŸÙjˆ»¯r¹T…ãxqöòâõÉ»ó×/^"çld2ÑwáeŒÍ›W[FPÒñóŽ¿›Ÿ,*üml¥iAÄbB5s,£„ú!¬;Ì`ÈÔ ^¶JM„tÉvBe˜?,Aéi@·,+w0µ”÷øÐ¢ß7Ž-#œ‰öÃ9 ºd¨Š¹ϲ”qÂà šP~Z]Ýk䀸ÉÞ}X‰ ž.±Œ™ß©$J쥼R5€çZŸTêVVõ—-¸Æ:õP,GƒxéG{ŠÀ¡—*mŠ)¾Ï+S›!cUû‹«øTŸ/K4Ù˜ÆID‚èªZw<Θ2Ÿ°ˆíñ=DC"¢Ã}^B üÏ}¿6G±²çíh5(Ö²ýw0¦ü ˜xœñgÀÐà¡nªMÖ¸JxryöÛé%ôÜ(ä]ÞR~ÄXßæõNßWß`õÉ”édÞO ¦säåN“bŠYd›a`šºfR+[ áu¹l;r¼Çó`hý’V[éZZˆtM÷uüÏQ Ô¶ìzù‡êÀ!¦Dð-Òœ_G.ä‰XW™ ]˧rézïå½ëºz~ØZç‘3GÁGÌ:gàžPÛhšß:]J\µÍoåplž| ×nÕ g3’ÕÒã}{NÙ¤"kh^E]Œn ]¿Z¹Û¤²ÃŒÝ)J'XÛÉ?qòÍV™ëèuÃìf7:ü>Û!óÞØ`Ö=]Íh`…ÎfÑC)nÜ-[N…”Žkö±iãÐýãÄÑp5!–0Â’±~s´?càãd›¢f1Œ0]âd!°Ú ún"` ·°‰lp§)ñw«½y²ÚÛ×F{»ãª…ØV ³~§Îe ŽcjÂ ÇØ#9yÛ6é> endobj 164 0 obj << /D [162 0 R /XYZ 90 720 null] >> endobj 161 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 168 0 obj << /Length 2054 /Filter /FlateDecode >> stream xÚµkܶñ»Å}«6È*"%êá œÆi]œSãzAÄ¡]qoë±ÕÃ×Eÿ|f8#‰Úã9[4/9qÞ/ž¸ àŸ¸É‚›$ ý,Joöõ‹À@»‡ZÜýí…`¼- n-Ìoï_|õ½R7"ð³ 7÷ûªûâæï¯Çü4èn³ ÃЋ^n¶Q¤¼Ûr×åÝ™€wú ;Ýìõf+UœH/ 6¿ÞÿãÅëû™®’òJó)‡é‡qù"ŒˆÃ»žîÇj@²—ò¨ÄájƒyÔÄò©ÓŸÊvìqyºëZpŸWÕ.ßodê}$ÈalöCÙ6_. ‘Ø&"²ÐWÑLç‡oo]¼È°Ô„UˆÂpõÑíH8ï Þ´öùš•¶2¡`½™/•`¢í {s¶Þ–߶ŇcÞ•î>85–)?²™Kä&ȼB¿DÔè‚¶¹“T,|1Ë÷©-‹÷ ¾˜T>.âB¾LÄtj]D ¢‰Zç .EàQYíØÑî¶x*'ö£t/¬›Ù¾+´;æìÃ䇶ªZ¼÷±lèì´ðýЙxç8yâé—n/HÁmmñéÒ·ç×èa'¥ÿž¶|ÍJòÜX̾ Ë _ˆ%ìŒÊϘ ÖGÝX1FÞñí…ô~€ ,AlÔ~œz»q ã¦åE^=¢6r¤}6žR¯.ëZe>èêL)Å6jÆM5åÜ+àbhé·ƒ`®õ–ÓO?ä» 8ãÓ9ò·;2Ρ퀢Câfö›]âÖV%ÚÅw™wI?F8å+ShÝ釲‡„yÛæ»ºq?3½½ýç«ï^ƒw_ ÑÕ„)œÁ."ð†hMõ;Ýï»òdlý\γå»7ñEvà./ —›&ôzôðÔÓûãý¡uk ÅX12Mv€èà+Z:š¯*T(è¢É+þ TC«ö@¿cÕ.Z‘D“žzwJd‘1Júþ]ÞaaÈkðéÎ飠ûÍP â.ÿ½òŠË‡á¬åã$ÒÎùÜå>©°K9‹`ú‰L&Dòž±c%”…&ªåá<§¨9}‘ŠÜ©ôÓ$\+É.ÏJým–†&¡DiäõùAĘ~;vz†0ˆ5#c´îõ'Lº3^øe­{È5JbfŽíøpdŠLù±¬פ ¼›cÝÌÅxªÊ=$̲YìbÔ…^è»âç PhG$ ¼ø¨ ZÛò!-XP1¹&m8ÏЦќMÍn R1'(‡¿È ꘜ«é»*?CÅÆ´â²Wœú:&Fvw)º#?N.j£uñ÷ï\W'‘©¹¬ù›m Ê|ƒÍK/Ââ†ÚòO‚˜˜€ßE¸3 4ÇÆ$W’Ogee2‚9_ç°¢ÁY"!!y8#mËÛNq‘_UÕ-ÛÌÕ„D±ŸŠ9Ë>É r™ítè¨Ï"ó„¢_ü¦ƒ*Ö «[K€)*p•ÂÙTĉ/ù!ÂO>Ô@Å•8”͵)(æêÉ“q}Q¹ lGŸ6“¥4På,Ž.4ðcð¹UBù—6Ý8|«Àª¾½²#}ÓZ²ˆ³%Mü0—¦ÐÕzúq|yéµÖC¦bqp—KÉ4óÓø¢ø3™EÐàì(¼ÐºNl¨A§ ãO¯ÿ™²ë?ìz]A¿ÇG”Ížà<KÓù“)-fjqÜ@02ØTø=u­Éw{mú4&SÐD#ƒ6ŒoNíØZîIÕW‰¦A03ÀSÃÄuþßsê繸VQÿËœ8ûª+&%øch‰*Mì1·î1‡ŒÂ?`N”Öœ«€çD•¦Óœˆ<¬ú~pXhƒdº I±øßÔÍ9'E«‰€IqcZGðåiXDƒÑ¤˜Ò¤˜>3)J ž¨Ô5*.ùâ³CâtÃÓ*…â‰@³¢:¤á§áר—!þ™¶v ÀPN~gv-ÓꨬA”÷Ö‡ó°ÄNrÓ—ái˜W0ìwfžÃU>Ð/¥ SÜîââRL„-bâθƒP³˜ ,òö-u*]»œíè>› ¤¼vl W£Ù•¬±/Éz0à“s”ì-û¶>s#º3JXù‘óÅAÿ{ÌQ„—.5-}D»øÛ!µ;ÕŒ­ÜÚ¿åýé}„ÎÐ üPÍ‘¥‚Å×…2\1Þ7Τ}ØLOHè ý4ÆèqyüœÒÑ®×`“” žm×<ã€Æï-?Ÿ7œ:‘*ò“ ½žÅÏ)W^£Üø*劧ʅæ\e¦…_Á0ø”¤|·*R&N\ãeê§KF™y¼x€Ðé,/T¦ß®Fóø“ð{Q®‰ ]ó¤K{œÙW« Xì󆯄yóÀ‡®­¹¾ЪQåÐO3[9”8b<Ø|¿aÁA‘¢{;¾Ò‹øŠ¬d4=W8³ÏOt) 3Ç‚ßF Ö¹ 0Û/ÄÂLD MDp¶´ÞÒ«ó›©Ï†éÍõù@÷/ÃÔÂGÉl ­‹m_îùˆi ½)à$9‚5ï 5Áúu[x-¾E?‚ÃÑváPÍÜ)Sxašk?Às“fÃsmæßM±…À¢ŸÐ»¶ƒyýŸ¼>U0¥~C,šèR¾”™¡©„|¦KWRymUtí8”þzâ:ŠL »"#âsÙHøQÌ_üwú›ÇowÞ endstream endobj 167 0 obj << /Type /Page /Contents 168 0 R /Resources 166 0 R /MediaBox [0 0 612 792] /Parent 165 0 R >> endobj 169 0 obj << /D [167 0 R /XYZ 90 720 null] >> endobj 166 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F63 170 0 R /F64 14 0 R /F31 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 173 0 obj << /Length 1498 /Filter /FlateDecode >> stream xÚÍ]oÛ6ð=¿Âo“‹Z5õ­{èºnK±tEšíe F¢m¢²”QRwØßï(Ë®²¸Ã0 A òîx¼ï;ZÌ–ð'fùr–†¡ŸG٬؞--Ô¬g´¸üîL0Ý#ʯ¯Îž}Ç3±ôóe.fW«1««rö‹÷r#o:eæ‹0 ½èù|E±÷ƒ¾6Òìx©VʨºPóE'ià…bþÛÕë³WWýqœ( R~"a(f™Ÿ'I„"ò—q6K²ÈaDR6Uiš¾Óµúu/á_|‰2Ïè%DõìÉ.ˆ½]ÓZµ]¿ZÑrJÐêɳƒ³‚û¾oÁ ‘ùY"ÿt'°dÀÀ­ÔµgŠã8ÅÎÝutÀɩֺµNÁÝ ÌM%wx¤Ã±•ˆè+ú\èMùÞq}kÙ à»a}dÏ“mᕌà "в(s ¾¶”ºî(”IZÕ¡/¿q‰˜È{r#Ü*¯uæÖÙkŒ<Š˜5 ñj £o:ÝÔ|æ ÚãÔOà@苘\mtK¬úº°ç¬f.<0›ð@´v$-}æ•5/ŒÒµî´¬ôGEn£ˆOÛôŽj#My7‡ãÒ(R#o¤Ï[iæ±ð؃OF ÜXü1ÕãŠÿh$+Èp8º77îo­oQRUÓ¶kˆÌª…V a¥aZãÏiž{ç+¢Ù!´é‰ ÌȬˆ…ðnçqìɪçm³šŠŸDJSŠ•ï)œT"d©n5T¥ íÃ*‚¾ø¨LC¸“=ƒXtªÀPO Ò¶ìÒ±‰% #ôºnŒ*§]šÇƒK9ú/ÑUªí«nÊ˽Ç\îcMºp =Š+–¬í‹Bµíª¯N ³º©Á"(XóØý/øFeLcè>²]QôÌ@ ²7º^’VâG…bC½i:Õ>&ÎOèž(ÌÀS˜È¸Ú'2îî6ŠW)Å#l6-FK×Y¯QâȘuÕ\ÛD s¯h Æ‹ªÃº7r E³ÑòºRíó©P^+DòÃñCБSËÌ¿@øI2c«ïWFýþ€Å‚4t´Û¸ Ý—Âûƒ]¬èÛmlñ›¸3 ý8‰Çw6å¤4ë$w„`±X®[â~·ÑdjڂĽ6,•›áApçeǧ¡óIä½ÛYhŠèæÝµ´—|àôÐUE+ðâ¡)"ºç–\â[¬øή8WôpTïˆÀõ£d¹›g¡wj|¿S¶Àér·j›)‹cÛå«{ÝMÙ<9x‚Sâ'É1«óú1VþdWiì‡8º‹Èq[§º7ýöç‚›ø’ñ‘·í[]ÜZøS.¡îh+·7•ºugNhüÁç6þqßòq¹Àµ{\qص™~‹n¿¶:?ÈS›2H¹‡e—68¬´Å;n É71#Úô­;¾j˜õÖÞ –¢-Wã~1š/`!´/î6²}&œ–3rpÚ;÷Q#;uÎâô92eJS?8l‚ïØ†¶ 7.ÇZe\ÑFĪᓖ!Yë)ïÌ9ÄßÿI¹)'ŸêÎÆ§óqÖþƒYã3' ñ“Æ è5y„>qck=0¶â¹T¸“ 1Å[$~6´oëjä'm_Ú Ìá˽c:쩯!‰Q> endobj 174 0 obj << /D [172 0 R /XYZ 90 720 null] >> endobj 171 0 obj << /Font << /F55 8 0 R /F31 54 0 R /F56 28 0 R /F58 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 177 0 obj << /Length 1938 /Filter /FlateDecode >> stream xÚÅÙ’ÛDð=_±U< Sk¡‘F‹ãøy‹“ó͘Ôyqò‹÷¸T—nË(Š<ùÕb)eì½4«Vµ·|£7ºÕõZ/–aœ¤¡…‹ßÎxôô|ÿn†d1ïr˜q˜dÒ‘$Ò‹Xxðzgžªlƒ¯Ã¥d|)Ný^pÎÌÅYS¼{^›ŽQ'H¢ñtŽRâ'É1©7ÚêyZ™Ÿ†é€íÏÑ[ŠLøÌqá‹…ºjLAêå'ÞÖU³¾ø5ˆ<‚ÁIJ)1 š“L+&ZO´]·æ²3M=Ç£SÍRD¾ˆ]8/¥Ç7}½v÷`'½váô,¼ÊÀª~ßKgúf]õÖ\-ÂÌÙ.«õÚa[&Ö5ô_™ÕÎ\ì`¸Åç|zµˆcOµF­*mýYá˜Ó‘h¯š¸O¨`"Žcq`×× EEl¬aê]Àž1㘂¨UEúNßœâ>òlCð®T­š®t〭V…£x×ø†2©·Ø4{4BÃ;xË€7§¥µb[¬à(%Mƒa´íwºð'DˆÆS²ëŒïEÂOBqäÌäisJM3?{o^« UKÏ–M_´^9–5m”µ,‚Qf çx8Ç‘±/Ò숥—÷0”$~–„c†üÅ2Rï|‘IϽï5…ºYF¡ðs ?ѳí[vÙŽ=_zC iXóVŸÒÙõØÉ‹+cÙ ·oú±·K¯Ð¿BÖ:P5Gvoõä QÍÈ5ùœíÔºmìWsº:ò–Ï ½15“<{þâìõ“w/_?~A¤GšÄ$‚ äëßgüeŽÊÛW:ÜÉGŽÔœu‚ã¬â¼"8Dá\výøàb£L}Α4óŽXï}†ÔvôX©0êöi 졺¦-E¸Ch.Z1Áƒ å‹ÊaÞÒfðþ =›ÖÓЗ§&:xHˆù ‰©(ô|FQì'P: Ã4þçõð£ZŽF¬Ý[Ó‡†nèçyþñÊŠØ—"œ¦ü»•ñ²€äò_Wƶé;Ž“Q„ƒCtI£ª4 UT1½í+ÅÕJYc§y£¿¤ú‰Ä#Ø>Ù¦¯‹¹H"i™a˜Ä À#ã2‡MwÙwtºê!›ETÞ2J’€Ž¨V®š–´ëÌŽ)srüq¨`ƒ—¡ÌBQv}Šþ5ºqâ™ ]î0Â8ñÓüÿ3Òzws3W+eî燹(`5>;0O3ô£i˜ÙrÔ"ÍPÎ÷UEµ›Ü; ¨sSR“X$7×Ív•Ò—qô‰f+†fKFÓÖa]ªö‹I·¢Û¶i1žLÝñðß¶u¿û>JðŒ™ÒŒi'=V1ëGèæ óV; yÆÎ¸:©éaØ qn§ÌIb.ý ̽qCí«îSïCq±Þa—åo8¬`ðžT¥k×è{è|…ž=œìƒ€9†qEàD3Å㦂 %>Àgýzž$ôÎ\O 4 õ•KW±÷#TÑC ”ÌbïÙ"‡Î™có¾™^¾~ûúõKb ¨ÝêöÝ7põê“ÃDðw}ùß×:l!ÛšùºÔüEiü=bHˆ¤@›i€oÈ/jÝM¾Î n^7Ýßó¡ãô|ʱ^5³œXú"pø„ü'¨“Û~ endstream endobj 176 0 obj << /Type /Page /Contents 177 0 R /Resources 175 0 R /MediaBox [0 0 612 792] /Parent 165 0 R >> endobj 178 0 obj << /D [176 0 R /XYZ 90 720 null] >> endobj 179 0 obj << /D [176 0 R /XYZ 90 172.211 null] >> endobj 175 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 182 0 obj << /Length 1428 /Filter /FlateDecode >> stream xÚÅXmoœ8þž_±ÙÓÂa0`ú-i“öNyS²©tºž*Êz$À{¼¤Mý=†ÂfÙ(w§HY3çåñ2³áÌB{¸®R6‹³#[I‹ûn>­g‚¢ÙÑS–jQJuÇU"r|úž¤)ŽÊª|£,E…‚ê!jG¡òŸŠÈp ψ`G5¡åë/Ã.QÐwBÁŽÀz“¸ñîbÕ%_MuÌ-—Q’€3¢´lâåïrÒu=ñâëµZeÌ£µ¨GõÅžoù~0\Šûû”+Ø1Tb»–̓ao«4è3+p‚½xþ3<±Q^7]›Y¡3pç£HV˜¤Zÿ¬àü‹íÙWîÎOÁœÎ„ "ˆÉh”…R£8D༌‹d£’rWcôr éä²+3XlôfÚhí­Q9©ºµèR¢\ï¶ÎS­´ZóÚº™Þ0Ïp£ÆÞ¼Ôû½Ž}D¦ëç9*€Ñ0¯lÞ[Ö»öY 4o AšjØk æü3š‡îÁ9(¡Î®÷מ5›ñ­ äm’W½´ýÈ+8eòœ§ŸE« ¾;ùcyª9§þƒvXÐI`ù´’ ‘%9W³ ³XN(2•Æ¢<pn”’£Cä+•²R­ƒ÷Jäq'_lBÓ”´—+RKxØ·9Æ¹àŒ©„ûBbk0íÝ×§5˜¤“çP¥%ŸjæÊò²N«ÉvärÙ:“~ú¦Ürbè6E¬¤ó(µ1\Êæ6\¬ W×týÞöœCo˜¶±™†ð€†à70š†—ƒž«¥ q5X£¼MCKœ¼¼<.sÓs;ª“Ù: û9M†Âì»B› z¦8F%ù-v\¾iËâ`‚óm²“à|Ûr¼–¹G|½åÕ5,,C7â×X¾ë½Èu0tò ô³Hël”å™C¶sÀŸuÅ_AÅcPصì ËÝjº±Ü C}—g;p'Ñ< ,Bú¡í4!]¦¿hÚ[¶/ÓXÊêä徤˜䋪†Q‘ëîwòì^@Öi»“^û½z{æÓW]© ƒ÷2Ú#®‘ø0by´EÂÀŒ­çV¶m¯¦Œ–û;\àÊ¢]жl·-®Ë»óó±åÌj«4Ѥ‹÷mèXc8îf‡¹Ðn“·i¥šü Z©‰×ƒ]±löÓg¬ÆdÃ&Ëëý§ã}X')Ï¡ X薹鿲è‡<ÿµøäêê¼½'¢.ÿŸâ”½=T¥®ÉH[ªN²2‰ûçr6•üv‘lÌÐ]Ó›©Œå°ÞwÝAø©æêM²„2[ê'™>õA°«Mi©üíœá%Jª¬²ô%J‚‘Ã(M…|å;Ò€~EàoÁÿ®yY¡æZr«Ðvhf:;K~ðbª3tZN‹Ò/á‚4¢¿æ¤?ƒ¤ý;Ù”^5üW;+v8¥ åë²*긪‹¦ÌÇ©Ùï3çuÔéåE!šV[í.W—;È\Bï_ÈdCìx޾<Á`Oy )Q'žòQÝâà·ä•~WàïO^p‹ã³-\ÿÖìŠåH—Š^IÝÔ ð¹(2¨€§9srLJã“ù…倯‹±Toœˆ,¶Ç~¾‹ÁÕc-$·¥¾½¡<À°ºþ]ó½õº’± endstream endobj 181 0 obj << /Type /Page /Contents 182 0 R /Resources 180 0 R /MediaBox [0 0 612 792] /Parent 165 0 R >> endobj 183 0 obj << /D [181 0 R /XYZ 90 720 null] >> endobj 180 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 186 0 obj << /Length 1610 /Filter /FlateDecode >> stream xÚíYÝoÛ6Ï_aìIjM”¨¯î©ÉÚ!iƒÄ}Ö¡Peª&‹E/ÍþúÝñH[råÄI»—¡(PS'òø»ï;…MøÇ&y0I£ÈÏy6)W'¡ªOZ\ýrÂì¾lœõv>ŸŸütÇøy³É¼ê³š/&¿{/–ÅZ 5EQäñ§Óç±w^T…º%╨„m)¦³0NÒЋøôù¯'§óí½q w~0á}„,Nü˜Ç“$ã>‹8Á|°o݇…~”€v­ ²´€; ½5àÍ<ÙÕº–í”y‘¥!—åF©ºýD´¢"ÀR/-ÞÃÝ¢]àódEÄN¶Ÿ~ åªPN“;XÛk¯£ ËÔ~=Gä€qÆ"ŸÅuE8›Ft¤çBáÍ÷+‹…X<¡gb;,¼2¸€€¸hUwô¦Ú’ƒÃÀ¾è쫆|RïÐ3«ß‹ý<-–õb!ŒNbO|ÖªÀ%w&êèÉ ‹NªDu.Å‚(µ={ñö%ìk 5¦NÅÜ«+Ú\ÉMkÔ&Þº)¦°çÖi10#ˆÎìãÚA kRÖEóƒÕ¡ÿÖºº89Ë÷¼)7µ^â*Cÿe óZK/;”Õî2zÄÅÖwv§åFÓCYl:ãòø€®¤+b™Ï£t ìâôêêƒÑÝ̽¨¸þíÍüÕõ³‹ËóÓë1Ysæ'QâX>±Þî\¸»mÑB;yz±A”­ÉKÅ¢ïÎ6Vkço-·bµn„µOœ í“~@f H‚8×b3nK`ÚtrL+ ó£Œ9 .›âV¨gJˆ1q“ÌŸïÄáǘŸ|ß9ØíìrŒcÊ}Gã8¯u#Z%þ ¦ãXYùÁÝÒÏ¢ô¹çH–ûµ.”Õjæ§áÖ/ýQ¾Œ¡¢¡!¼;?ý‘¼e ê÷Aœ½¶ï¸WÕ°ÎY·Ú¹ßçrY´–üüíÛsÚ Õ£–›8°qWãPà¸b+íKÑ•ª^›j4"`œúÉ BÌ—µ†jÓ–æe(oËÆŠ1á]u—G¦Æ¹™7öÒÊËBa@+‰®ËšÒø¸KnÖBÏl|J¾ö‘»Â¦÷êÚ°dÒÍR¸º¸ÝÖË’¶ü¡×t÷Šh=Âõ> æxÏÜ_“~WH0 Ø<ÀÿI:E;±ã/U²¢mEÓE;fT©‘KMFÄeÑ4ÜØZEG$ý*ñ×F`QÂRÒâ°9|ß@«ú³PÇ*ÃzòQÊ@U›ý` *­†Ôˆ¿ îf˜¡78Öé®Lî6¾×­ŽRSé "η­N1– çd|›˜(+ŒÝ¥ýôÝiµ)õF¹Ì Õh}íg¡;óæÝùùçúZ»«®\!$ðB)i›‘]‹zÀ§CP Kã¡%ßH-Ž·£bsµË3¨ô^Ôºj­÷Bê졘…¸¶ülpTÒUóíñ~FŸÂU`ªjü1‡~]áèa{s\ìœÐ~$õœQ$ü5m°9+é÷¡$&ÙŽÝ Ÿ á¦n,+‚½ÃvV!xk+Õ ÂövšE[¡¥J½Wƒ‚b˜À¨'câ8Ë×z¨þV¶Ý #­¤Ñ 1¯]Ÿ¯—°ìöýåéXcšA-zT[ú}œú>N}§¾S§rÆSH;NÝ3øp?Kò‘å[òúª! ˜¦ÿÓÊÈ€cÔ‹WÏ®zcT ÝÁ4±»‡#åæ«Ú,©w{I_›Ò~q`¼ ^éØŽúØ •tt»ÖÚ~köð4ô0¸뽃ÑÞ;°‰$pb°­¡Õ4æ© ?Ð?3aלßÑ@‡,4ÐÀ^@RÞ¢ Û{Õ ['K[š¾4ÀF«ŒÞIËÀäAdjºq“¨Y’CZØó¿eñEï¥ÄâXߪs–8˜¸ü¸ãFfÜ„§º£ßR‰BSJ¨Âé8N|¶ËºØ¼Êrtâ~”l¿úü \ãÔίxœs÷Ûšž*Là„ËR`vo‡‡¸•V·yàÇê¶ÏqD+JÑuø·Óg7Nn‹Pg‹P_Õ÷•û¿è%~’¤û ÇÅ𾲑åwç÷0‡)4 ßG?”¹ìŽú·· endstream endobj 185 0 obj << /Type /Page /Contents 186 0 R /Resources 184 0 R /MediaBox [0 0 612 792] /Parent 165 0 R >> endobj 187 0 obj << /D [185 0 R /XYZ 90 720 null] >> endobj 184 0 obj << /Font << /F55 8 0 R /F64 14 0 R /F56 28 0 R /F58 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 190 0 obj << /Length 1518 /Filter /FlateDecode >> stream xÚÅXßoÛ6~Ï_áG¹ˆYR"õc}j;·Èà¦Aë Ö¡Pe:Ö K†$'ÍþúÝñHŲկi ~Eï¾ûx¼;ZŒ8üÄ(á£(X"ãQ¶>ãf¶¾ÑàÃÛ3aå& 8Ù‘|5?{þF©‘à,á‰Í—»ªæ‹Ñ_ÞëUºiu=žAàÉ_Æ)•7Ë¿Ôi}O“ôR׺Ìôxâ«0ò½@ÿžÿv6wv•ï %Æ{ÃX2HBø«n²:ß´yU¢Ý}‡TÄÂÑDL(’Ÿ¯ò†/·ef–Á›ôê±ðÀáµ8ÊÍðvìÇž¶âíJÛAÞšUKšJé±®€„Ø[l +ú‰ Yhfõü˜Xd1 “„ ]¥õX /]k ¼ÁEÀ a$Aú¾é''©—%Y¯6Ž.wÁœò´ÝóŠd«&w”ÞÝ v–Ä;±›6­ÛæX? ƒºÙí£N€zÞÁÊKÜ ŠD˜m+|:X0ÑTåý„»ƒNòÄ«jk%ܵ"dÀB™8C—׳Ù?d¾ˆœT¾$õ:›Y—¤@ävn•6$UV;Àè[e¤¥UZ×È ‡aÛI“eÛºÖ‹c9¿¬ZÝæÍÐQC–ø]M}w=Ÿ~¾¸|=»þxñûtÈlÌ™ˆÅCF3¡³«öhŽÌ9ˆŒË®K+h¾ ÂÈaäû b¡‹|%`Ç!eÙ´•6bb¯ ¤%f&îÓÞ\শ4e؇'<Êó0v›C(])<)wyC-Hlûßõ â€Rü8L©§¢Ïéô§pŠÀð=9Hp¸—ÈKÌ?Û¶É{aÖÁcmú5]o\ÅÄ(fIJÓpÅà\~`!<6†®_yksîq”¹Ô€/‚ÓóÙóîp&CÑ+S®~Ž9áÅä7Í4ôæÓ3>Õ¬öcýÜê³Ouˆè8@QPòT@] X á¹#´CtXH» :A_ƒh†›˜E~ôäæf^Ý@­E­ƒÍH´ÛFÝà\—ëo(4SðHw“„L~Ÿ¯WïßϺ›îËõ«?çS[Öi¯ii¢Ó^sÝ5—jOÓ]õì½Æ59ßoFHL<4I‹Ý>o>í鮾.-s¼¨v%Ä¡7—H|ê¦%?ú-‡!Ï´8r-ÇÝt÷½áGûqÛí+°»Çþ±ÐÄϲ͟I#'º$ƒ„OË ò± ÂYÌÕ#÷£Kh2¯ì?3¢(ðÿ܆þì±]oì±ï —€Ò§Iݓڛ^«"/÷íÔ“6³/ ³›"Åh½·‡ZzéPÜ®´d§àç-Æ»ûc«rIÀÌVèD†þt+]÷”mÛ>!ÆžùóÐn%þTÞÐ…‘ÞKt¹Jÿ݈~| endstream endobj 189 0 obj << /Type /Page /Contents 190 0 R /Resources 188 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 191 0 obj << /D [189 0 R /XYZ 90 720 null] >> endobj 188 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F31 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 195 0 obj << /Length 828 /Filter /FlateDecode >> stream xÚíXYo›@~÷¯à¤°eY–£oMÓVª¢Ä²iûÐTµ76°ˆÃiþ}÷ŒÁõA+©TY²a˜ã›ÙoÆcCÃa/hDŽ "/4fùÈÒjaȋɧTz6S´;š§ñèÍGŒ è€È‰ _w]Åsã»ù~™” ©,!dzo-Ûó°yžþª’êN 'äšT¤˜Ëv±¸&ò­ñçчø>.vݹæßà „~èˆ<‰pJ, MáÐL²šòèÌÈïáø,‚0gÉ©~Ž+²Ó:mRZ(“^% ‚Úêd›[ø~°áwJšýnp"m¶yµ]6Œ@èa©yzyy. ®ñ'mMæWvV4åŸPùêUˆ«¥§|ùÒשgUZî‚(ŠeC Š/ÓZƾn‹™0cwž9·Dá¡É’§QJ·KÒ,5gØ•TÎ)#H`ÎÛL ´ÏR$"¯i%Ÿ´[ÓQØ"à;7Ç_·Yà Xa%r(Ÿ:;ttnD†øÂ{|HáXº@âRE†Oü°€m„˜.tz,a¡‡Aàù}–qZöÛé¸åí ãm›—ªÊ í1•3ÙÒV‚ ­îhÉÜbâs‚Ci{AÖ/(ò.ˤ,±X€»´XHu’—™n¸¤P…NX’+‹ÁU¸j*õ‘)¤4Ý›TJeÖ6ý2ˆ@+þ¦ÎÏ3—I±Hµ§‚?6'/Èïæ_λ¨Þ‰Ã™þåÛåäLÑi-@|üPâÃ'1¿æÃ\žÌÒ+zd~Ô.''H’öR÷¸T(ùã='¶u –IÃÜ;‘ë¼oX)Tôß¾æ¾}ಶ«s}áàpëNK"7«NßÖJöM[“¦ÞÝjŠ1¥ëÂÐÖ«KÉý6ܹíì|&;zí[#=QÛN±±)VIÁôêÚÈšÓciËÎ<&yI·ebvØÜ`ãü·1KDÙ`V£dÇØƒžYžÑ¡Ãc³á“öç¡ÔâNJ1m6 ÕrÙOU|ìY¨ÉójϸúJ³6'œUÓ5«VZøJ–übãþ»àÍAI endstream endobj 194 0 obj << /Type /Page /Contents 195 0 R /Resources 193 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 196 0 obj << /D [194 0 R /XYZ 90 720 null] >> endobj 193 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 199 0 obj << /Length 1382 /Filter /FlateDecode >> stream xÚÅXmoÛ6þž_ár+¤D½­ß–zE†$ g°…"щP[$¹‰÷ëwÇ#]I–_’e„4y<Ÿ{îx1øã£ˆ×µ#Ž’å S£ÕÈ:Ÿ?žp-7ÁIKòçÙÉÙ/ž7âÌŽXÄG³y[Õ,ýa?Æe#«ñÄu]Kü4žáY—Ù}Wkü,ç²’y"ÇÇóÇrƒñŸ³_O¦³Í¾žãi Jn[ö,ôCasW…7q5ö¸/%ØYãÖ jÂ]›{$ð½X¬–'ú‡õÛa%5{”tž\>aGXÅØ ­ïøOVñbA³ËŽZéj!IªskÀZßÇ J#IµRm}J’YNÙ©Šó­…M¸ÚÚF¿mãD8¶CÚ‰̑²”tÜ,⵬¾Þ6qÕ|a»úôáîrúŽ´. ´†¹ÖÜrÂÀ,´fíï²Nª¬l²"߉Ë nYM¦ÌWy¢Ö©½k´¨î¸.z2ɾ0.d:ˆ©k•=@íAóµ--ã÷PA[ [€ÚéX>lY×Úóheh­Ç¡kkáuÑÈúÐÖsÚ(Î @®2¾3‚ñ ìÆŒ,8¥‘¬!‰§Ì°öž`×NhŠRû!5¥G §ÿ¡ÔxiŠÃç׼•ˆ?ªòB+^ÔÅåÛXlø]”C°ù®μVô„;£§(1xpâ¸h‰^-‡‚¥(û±’¬*H«èÚf±î2\½åßσ.íÀ ¸sÛ Ýn˜ yµj0e±ÛËO×u&.!#Zšà¶mÿ'n=7©lôˆY[Ooâe‰3`xºI~ÍJËsjc=Î3!¼u™˜ r¹Ð—FQuVÓ•1ØŠùŽxM0FIe},G^©ŒH"’Ú «¦Å4Ó™L† H2 4NPZBژ亩Ot`Ò* jŸð°EõM«É©E6©ëˆâFæU±$Uɪ@.!ÜPÙ(¸a8ÎAÖi“È}'² 8àDpf]èquJÇeP4ª€Â~×X 8³<ÙK äsSÅ$VÆ•Á^Mŕ֕K™"ǰß@áQP7EÙe–2c¨Ü0liY¿ùæžF!ÛÐÁdV%‹Ð·# ¢Vtu7›~½¸>¿¼»½øm:´mÈlr#膾Ù×ëÁˆñ0VYŠ7ß1Pd ,BT¤r‘-ñNmÈkEâ„ûÍyuºR™C¾sG§64¤Ð‡¶y$°oœÝ÷ÐpˆyÊa\ZÙf•V؇'‡!u|À”w1þþLÑØxMv¸“è”À¨bÕÔYÚ£Y—‚Çf¡és¼,M¡æòQhG¾/Pouˆ ²€„Ï äõðºC¨¿„„L=„ÛÄ$ üÁµïÎ6aÃláwn½î•ĦŠ÷ñ×ì_Ó/Ç,¡Ö4‡ï±§§Z«n½7µ5èÚ½º.ç´‰þ©ñÄÆÖíû|ãë7(bКýeäé&ßöý!Uéázèh}wùr‡q°…'öXŽïØÜŽ*°nâU-ÿ×rWÏäß~ÝÛ*rÏJ4u«¦rû‰¥S"›^ŽºÇÎáá_ož}È ¾ z¾|~Ô뵓ªA¤62ý®Þ êeEßhÆ]™˜—Ý£ìLØ*üL K£Â=×"ìÒæµÁuCÎ:Èà!¼èÉá¿BߎG¤cGQô’Ûõ†‚ø­^/ÿ쓌E­°Ã_«\•7+àWcBÇcjÌËû6á•MÈLó8a>UËŒº†Á.è=1V_t¹p?þ ò'K« endstream endobj 198 0 obj << /Type /Page /Contents 199 0 R /Resources 197 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 200 0 obj << /D [198 0 R /XYZ 90 720 null] >> endobj 197 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F31 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 203 0 obj << /Length 1318 /Filter /FlateDecode >> stream xÚíXÛnã6}ÏWøQ"†]»OÙ­³Má¤Aâ-ºEÀµi[€,”Ülúõr(GräØièE€‡Ã33g†#³…?6Hé ‚¤A2˜®Ž¨}«œÜ|£˜{"þ:ùþh4Ùœr~ @#ùa²…0JÂD€¯¥†Ì“+8+s4¨ò™ ,DòÁ¬+”ª³²02Ûv‡1‰`ŸÝ0Êê¥59L=˜á¤òÄ[¯ÌÿÏ`iâ5åG‰Ãª´«³õy¹Û;òØ[Ê¢P¹ÓZšô+³´®à'Òª–ºÎŠJÌu¹Âµß•.aÀcy¥;^“ÙÆfĈûœ ‡Lˆ"£Þ…{oMä‚z¹¬m¨Í|*+ub"J½ÚØühp–¸A}©µD±©ÇÛ%©®B©™šá¼W”8ÙUV¨>Ðèk ”–ÅÂNô.¼š芸vháÛú,%!¨ïª¬Uµ/ØpCç…8xé:XÌ5Q[M‘”§¢Ë»ÉèþâêÃøîöâÇQß± %,a¼ñn5ç†[n Ö€û@è„ï7LŒ-c½*f*ÏVYÝ1(tÞ4þöYƺ^—„IPޱ”™ ÖøÊzÆz‰̼ LßÁÀ@ʤËcf #hâe›]Ná¶KÍb¿Ky>e]ŸŽ~z‹O 8ø Ü©h%0ª\×U6Û¢Y—‚{‰æJÐè‹\=ä ¥$$¢À3È ‹ 8ŠŸ¡Ð…&ûmæ›ù´)æQO7iBI¹€]çòIéû;»ÛT FM]x×'ûÊQ>qLE2cØ{òŽƒ»”?q ÝþPqTú&wtIãÐD'k7°^ö9X­"r«ìíÕXæUÙGÛvAqx.i=„8IÓô™°=Ú"EqºY¯¾„Ä<Þ«oÞ¤\,rµ d‰f‹KƒD¡ c½%(%Ô\×< qøê­>×eV•5 ïºùæ¾x™ï07¨Õÿ¹þ÷äúAµ›:í˜cQ4üÍÕ¼ÞbŠó²£ö]<.9}îçyÙ|Ym¶·3Å|ÂÃ7¬ÌÍï"‡’çTØö«ÛQÖâζÊÚûŸ'£NQ3mùŽ×çnüÃÕÇV6¯UPs¹¨š"h~ûëT / endstream endobj 202 0 obj << /Type /Page /Contents 203 0 R /Resources 201 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 204 0 obj << /D [202 0 R /XYZ 90 720 null] >> endobj 205 0 obj << /D [202 0 R /XYZ 90 482.119 null] >> endobj 201 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F31 54 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 208 0 obj << /Length 1522 /Filter /FlateDecode >> stream xÚÍX[oÛ6~ϯð# Ôš(R"µ·6K‚m$n¶aÕ¦c¡¶äéÒ ûõ;ä¡$J‘k'í€Áæå<—ï|<øð£“ØŸƼ˜ËÉb{â›Ñâ~‚ë‹jåf 8s$ßÌO~:à õ½Øéd¾r·š/'’Óu²«T11Æÿy:ã<$ïÒÏER<âàµZ©Be 5a$Ââé_ó_OÎæí¹a© –|ª¡hIîQÆQÃ_T¹(Ò]•æ™>whP(¼h2£Ì£!ÊÏ×i‰š¯êla–A“Ý”’M2 y´ó þ•Év·Q(” ¦¦3JòVfKPŸ|ÊÔ¢ò¬.=ÕgV™Ø |ŠÚ\%Å4¤$Ù*ðr©#P]+aßgšßX¥žj[å8¶ÓvIò8•Œ«XY%Euü©Z:ÍîWÎÀy™vÞýä‡~š¹*–0DÕ¼&÷å!}ÎÒj­Á„>ùGù+hFYåv,Ë‹m²Áv™×:h› é`V¥]Kð°È=ŒJé17çÝœÿ~wzývþöôõ»1Ý"鉠ÕÎì,È àÒ(È­ÒÅP%h68BHÀð|ö‘ñ°N:®ktñV·ë²B'g¹m|† %±q‚@djE i½<Öý×£ª¬7Ç#â«>(O¶›匊V!Ë)‹¼(”É#‹šliqÄ,~ÇΦ²Ý”÷ÀÈCºÙ8€‡D¶ÛôsãX£/óJF\Òj@Ôƒn´‘ÔÍ&’(a¸FÛ”5••4¹ÿÉ`³Öjè— òÛZ5’Æ`mEìöI¡p¢J¾è)•½ÒýÐøb„dòÍRä„¢c0":0k¬v´0fšQh*„ Öm“ÏZb„ƒq-ž6£µ]–Gé™ÊN¹Q†n³¢.••\ar0qæ4FÏq*ۀτï“ÓV-cI医ÌJmŒnõôTT‰ƒÆÝz°=Éõ»‘Àdç÷ž¢6o¥À çš@t*éºÅ€XQÛѪRÛ]…“ðßb©“W†Ëš4á 1ŽŠÉ·ŸY¥AÆò±Tc8pù­¶ýî¦Êw£ôgšMª4·D¯Ià63ÞŸŒä+{ÑZvèt=¿”J/„Ãz)|£ qYˆ |e>fSùL[5ß§_ÞçË»U]ÖÛ[ŒíˆmÔ—ž¤¢ãö‘ß d#®ºÚ${8%ÁÁÝDÜß´9±•d¹/eaM½úñÝ‡Ë Ä3êzáÄP—I7oþ˜Ÿa|ÕºNƒ¼Xgò{ê`.Ý:˜KN UÕEf§è´L‹2#¤Ó´7ß\zrQÕn.üjóˆÓ E™«ÝluŒ½;,)Üž\-×ÿ«®µ‡‘#Ž-lLÕU2¹¶pé‹õ*· j8ð^Uáίà”ÿª“ 8Õ]£8üWÍ‚¶ ¢-§Rýй· ²Þ‰!½IÑÙõ‡KX¾z\WçØJWcqÉò§Ï™æÝ6À—[ðµ¥cžõÁŸöî`¡Ü{u¸¾~ #{c›Î(=Á£~~ñ†¥âç°lkn÷ÏåÚ{DCUæ<¢¡‡ä0±³è~hì쥓ÜÝûJ:ƒ?wAW…Š'EŸPô@ží- ŽöŠøQ„òÿà“ÎÏ:+\?41x!¹„Crqµ€Ùa´íõ¡§,yp‡mÂAha YU5çSòÕ°XìyÁ÷Ãuõúòîôìr~v}¸~MWÍË]ÝQÛOM|`Î ¨éÛ•í³Ùéå[L¡L‰pã^}nºã&ñ—““ü¾|~ïŸß6ºcï;QôŸ †ºïV¾ûÝ 0;û›¹)Æè#µüîrP£?·þ ×n§š endstream endobj 207 0 obj << /Type /Page /Contents 208 0 R /Resources 206 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 209 0 obj << /D [207 0 R /XYZ 90 720 null] >> endobj 210 0 obj << /D [207 0 R /XYZ 90 452.258 null] >> endobj 206 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 213 0 obj << /Length 1539 /Filter /FlateDecode >> stream xÚí]oÛ6ð=¿ÂØ“ƒÕ¦õ),”=\ß5vJ†ò³^¥rMU±-Êôwb‚)­Ø»g™fºT` !ÅË…âÍKÍg“þ v±‡âŽf¨(ÜU™ù%o2MiPÂ+©$T)d]æú;Ïè<¥ec¥ k%¥#°[C™lÌ”ŒY`4͸gßµ‚€õóo&¨Ð€²Sc"t5SQõ÷EÆïÆ ܆ðtŒS´¬>¡ùä‡:¡3T©ÇÍdAlù±×·«ß?^¾%ëÒ çB~*²z#0f¯ÿ˜Ÿ‘C°Ì"Žš‹yPҬߊ*)Ó­ χº%ÖŽãwÂWm 8N@©…XŠ)””ÖX°zMJ#i%€ö¿$Åf[ËæqJJâG×¼Àz)q±{C²¦Â™IÑñÏjððµ3@¡7W:°S}™ÇgûÿV=î endstream endobj 212 0 obj << /Type /Page /Contents 213 0 R /Resources 211 0 R /MediaBox [0 0 612 792] /Parent 192 0 R >> endobj 214 0 obj << /D [212 0 R /XYZ 90 720 null] >> endobj 211 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 217 0 obj << /Length 1316 /Filter /FlateDecode >> stream xÚíYío£6ÿÞ¿"‰Tƒ¡P$_¹Ë8ðƒpr¬´‡î"“H-EœÒž}Ä}O‘~Íâ±JFËu.þ^@.,¿8ÌyøøûèJPI‰sEüx{w£†“9ÖŠ×ÖÚÆ2¡ÖË•ÞKQDy¶yž-T«X õ:­”‡‘†Ï‰×_àÃRs6E?YBÓÅÖ‹šWéµF&j€A{]#´z?ÌtVî=<‡÷w—Æ. ÉIø&bo '†Cøz&ŸPÃófúæíþ¶$?hÃß}pR&ïë÷¿Ý/u§©iOãȤ_,ƒ^Qm5ÇBž4êR|ê'£SíòÍ~qgzïmð*Ô‰^%Ã>Ì|jäaú¢‡Ž¼ìéjq—{»áÒ?.÷_ÒpÄ\ò¶—4R¤ûfHi0ð Ò`£ ) ìÝ+þ›‹¦ïAJÏE¾Çœ@ %ß €!³uøIÂj“£ëˆªD~ßK#þÿ¥ÑªAt:e|˜¨í4ñ´ñ0ˆÂ$ÑSF€òä®NÇ$¼ÄSL£©I#SUq°`[ËbePÄ}ä4›£×¸ö å"OÕ8ÍRC}Vð]Ä@þÖY¡ÌªŠlÊ}k’år m–3­l´}øði¢æ—ÕüB½¼ªÃ[u\Q32¤œ"NÔoÕä–PÍ—S…kfY`ó*%j.CN×÷Fòù×¹J©E!v„¾î¸—qhoºœ¬°Í3$'ÍF2N‹R„cs†/@^ñ¼1ü6û§{cˆêºþΨæá endstream endobj 216 0 obj << /Type /Page /Contents 217 0 R /Resources 215 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 218 0 obj << /D [216 0 R /XYZ 90 720 null] >> endobj 215 0 obj << /Font << /F55 8 0 R /F58 26 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 222 0 obj << /Length 2001 /Filter /FlateDecode >> stream xÚ¥XëoÛ6ÿÞ¿ÂÈ'˜5Q¢^ûÖ<ºe­× Î6 Û0°m Ñà å¦é_¿;)K޲ºÄGòtºçïŽb³þØ,fiù9ÏfëúU`vÕvFć_1Ë·ÆÅ€óòþÕ÷oâxÆ?r6»ß Eݳ?½«ØwRÍQyü‡ù‚óØ{W~TB=Ñæ¹‘J6k9_„q’†çßÿüêæ¾o†g*ˆœÏ5L†²€Ã)Ÿ%÷YÄIÍË÷ïß‘:¿µåZþ³êÚý^q°ºüãþϸ÷ Ï`¡‚ 7Ê]0’»™9ɽ–z­Ê}W¶}fä­8õx0òYLü÷»R“›C³6™7«9óÀAÌë@©FÓöãNv;ç] ˆø4SU¥¥“(@ž9²û­}®i;Ò Ò. ü8 I½;¡æ1óD-!¦·“þŒ8ÐEÈ"_47p–Z5TéPÏÃÌû)’V·vóß¶u-ýâ“™3l<;¹F‘øOä. §î„êʼ¸¥Íjkzî‹T-F÷\o|0†êCÕMy"8Û/ÄKc’]Å0bÜÛ íBgYE½¯$ ­Ëm#‹s­hÚ GSÚÿ«ñ¾èî§²±¾CõÎUè—¶“ú몘—Æ|X(°ªIZ@f#yF_õ`We·#ÝÖ’¨Bam€«•‹¹"µõÿºUe…nL€ØA UÙBY9uù¢5U(]¦)Å Þ6.½ ×BËïÈyeg÷”ìªqžcOT‡Ïš€‰ñoˆûJR‚ÚHÔ.úÉK.?"ã Á ÓÐñZ%R`á~Ä“0-¢ÀÒ„X¹Ïqzï°î[^-zH9ö\ÙÑ‹ü G”Ý £ÃÄÏò¼—ç3’¸4A ˆ<˜úH¡ù´¢°àuj† vMaY>,[“X÷öJjÙ` Mh‚Ø$8üTBm%ñøØÚ€µA0`©­$Ò*҃͘·³Mb+yFwVj[×&Åa°½šLʪ¢•c3™³q€o³R¬’Z/E@³G›aòsÛ†6Ò«ü©ÔÆÍù'Iò3 7 ¬†XËu»mÊ/RÓú/èÌWm½7 ¡ÕŽ ä_Ðâ)Žœ¿6N¦c`äïÔø[›jc¾ˆ‹˜PÊD­¢Ì›Ï„¢‚·p–Y¹œ¥Gïãö㜺s 7DjK¤‰$X› ƒ‰‹»+5J <èݽHò Õ}"Æ¢Ò’Ð "¶3˜7líwËÂZ‰f+Ç-ñ"’k4…yßÙ6z°"õÁ¶žVÙÃ~Øq¹…}³Í@ƒ¦‘åÉIÖ "™õ‘Ìû@e”¹&q¡ÊüN<”}?Ï"´‚ØŒ °ûA6¢ÔZ2 /ü_øý3PµÐ_h}÷ÔɊȯd%€!è!Ï=˜à7óXž‡˜B,d2˜IڪʺìN;–çï*ZÒ‰„ׯ°KÈ»¶£à9ÀÔÁ>}½ZÞN9Sì÷U¹îóàzy‡f§•~B¿>ˆŠ¨q¸aãη©”?õJºà±M~$C0Z•õ~5ÛÔù”eê‹ ®È~ß!r!uµSà?ðLÀ Ô*.^?Õ"ÌüeïgPvÑ7•]¡ë3Ë>á «ãêr?Œ Ä]¯nßÒå RqXiøÜ” t (ÕÖDèú$f!UsÒ`ÃTZ¹…ì­hÃU0Ý:•±žèômÙ]ØMaݾµU샪2ÃSr| â¦Ï 'JL軺ymïü§uÊû{8·ƒ6¼zõùnÐ*ÔˆV(¶b}RT¡x÷ú<Çú{– NjFEÐåÉÞü• º&œô]®„ªZ«ÀOB [ÆÞ¢Q2óoë!Ñ ™7 ÙyÉœ%Çô(‹³ÔdÉ­¾h+ƒ®À7È<3ˆ¤0‹??¥µ±ˆãwX˜~Í¿,™ðýpž±—Xç­~β_¸w‡i;%ÌÔOßì û¬øè®åý¸5 {}ÄMGtÖ% §§(ÌLãèã‡8±Ñ¿M)-ß™ëgg?ÅñéáÙ·Ûâ\<Ëù`Œà'c„»üÀæÂ²‘Ê l |,º\_кG3΂ñÜÀ=÷&+-þêÜp¯à¼hL¸„Ë]Öbïw°¤£dc̺’ /[¡ }qXÜÀK”:W°Áx|„-,xX¤¢~ d¸÷ ”,ÈðIæ\˜FÞåï«K¤ÂccÅEŸdfѯit^áঠ(R­( ~‘PÄBs,œõ· ÜÌÚ)%îö¿ÿþ 1Õ¬ endstream endobj 221 0 obj << /Type /Page /Contents 222 0 R /Resources 220 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 223 0 obj << /D [221 0 R /XYZ 90 720 null] >> endobj 224 0 obj << /D [221 0 R /XYZ 90 490.752 null] >> endobj 225 0 obj << /D [221 0 R /XYZ 90 465.281 null] >> endobj 220 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F58 26 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 228 0 obj << /Length 2494 /Filter /FlateDecode >> stream xÚ•Y[oÛ8~ï¯ò$±W”(YÚ·N§3È´™`f± -ÆæV¯D%›þú=êë @D’‡ß¹Ñâʇ?q•úWÛ0ܤ2¹:ï|¢ÖÇ+n|ûõp|k`\8Ú½ûÛ/Qt%üMê§âj÷0µË®þô>œÔÙêzµÃГ_­¥Œ¼Ïf_«ú™‰ßôƒ®uyЫuÅÛÀ“áꟻßÞ}ÜõëFApá‘óåãÙãDnD(y‡y¥²™âŸ&ÚnbL|»“i`‹aB3ðHA¸õj}¨Ž¥ù¡ÝØ_ ÷¶PÇŠ‡¿Ôç“n›k,šxY›ëfªÁHêCUÊò´ŽVWíñ”?3Qÿ§5kÜ&li-ˆxg*×å äZThäÙÊ}OšÜñ—W¸áξuìOÆžÜò„ÿœý—/B}° wUޥ똲±ZeÜ©ø«øóH2€Y÷§û¼qÆP% ’Ð`B·2÷xáÍ’§kärºfAt ÕðÈSm¬Õ%ìqÄaïsk8òÕè¬Ãj¿¥ZçZ5:c²qi*72x­ 3k‘n¶AÊU»¡CUœU­öù"Ù[ïk]ÙAÉp}5ÓÇ‚É::cä?ȱBG8wïœÓðÍ3»‚ÝxsMBbïédØP˜“v‹†U˜ ÝÑ:7¼ 6墛ol ¡€å7¯‰U‚óáÛF7¨8sp®nP4Rœ7Ò®×C :=¤:—¨Í¿+î~2%í£-u‰Î*õg‹w@]8ÆR ¾$›äl·ópô*Šƒ·¡XD¢VéQ áx‚b#§„Už1$ƒüpw<6ƒšŒ}ïnÚj7w€xæ6*â¹5a}`³³ˆuÃzÁ¹88s,ÛQP›èÛe:0Dzn\ÖðÈÌ ¸j—tþEO-‰¤.&÷†SÓÃ#è8ÄhÛ*Ȱ,ö7ŒªÔ̈+òT'£ß!vFªdGQŠÐ[ššWçÞ^‘ ƒ_€ÞÖ±'1siL³`ee…Š D#Ôå£sÒHïÀ—†ÆK iÜÅë<Ã[ äÄ!pÅÊk¸kúêŒ[ä¸`$Ó–Ó9 þ 8ºg4M'vOY§:ªÝR¨s;¨–.ÆtÑ®1…É8£»äÏ¥´aïBÂpªl$8e¿Íæª #G˜š±."ÉŸ˜²0ra ±€fÖCÁÔ¹ýáØÜÕ§Á`8>x?¿ú¢W¶/EúDÀ7H!Ð`26³»5)k0H×¹®Žµ*0ÒmC,f½ªÍÑ”˜º±¬¹©1ÝUçæ`lŸ¢cüªœx{ðÿ”ÄʺúJi!I¹™q¾/Ì4‰·»-.4öÀïl(ÒÁÊÑò¦ñ^—o´ª5æ¸j&&|ÌŒ­1ÐéìôÆi¤ð¨öHÙüHÀîn -ÝÊÀU$­Ü,¾µWè2®«,[fOq’3yïädöÆ,û”¯wP‹ùÞÿƒP(âÑSvÐü:8£ýˆh°BÿzËDŠO@øݺêújýtÃL¨€ý^†8g¦RÊ0}¢óUo´Ïÿ^g¶£8³Åg˜»»ÛOÜõ7Á5·æ%‰^Ç‚¦‹S[ヒÜÐ~åasézîÚ¼2ýäqKˆƒâó$}2SP÷«Ëà$ûŸMfjÌ)2Ü•)Ì‘?œE^fRêvñȽFxaÐÇ{\€3•çP(v+aJ’LJ‘å,5™ç¡]½Êߣ*èN@–{Íó½L*?y·–iP5ôl½® ™W^ú_Ê’¨{8°ÃlÀ$\.³ÐˆÎ)ÍùÇ”îg0$*&Xçáò޵tî]ƒ¥+™,3ù¥Ãý€ù?³#³‹ endstream endobj 227 0 obj << /Type /Page /Contents 228 0 R /Resources 226 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 229 0 obj << /D [227 0 R /XYZ 90 720 null] >> endobj 226 0 obj << /Font << /F55 8 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 232 0 obj << /Length 2160 /Filter /FlateDecode >> stream xÚ½Y[oã¶~ß_aä¥2°Qu¡n}s7ÉYŸ6ÛÅÚi œ-c1¶I H)»9¿þÌpHI±Õ4íŠ"r8g¾¹Ð.ø.Š`‘ű_°|±kÞ†ªö |ú×›Ðòãù„óÛ훯¯’d~áb{7µ-ÿñÞøC'Ôò<Žc}³÷i߆7Q·¸7MU‹ î¤Ñ.”N/tžà…ÎÃÂÂ4®%/ÓqcÙŸÝßpÄ·=Tp fº ÇJìä¾­þ+ìš¹ÿN Þß¡6÷ø®zv[|F߬ *ûZh¸ºt<çÑìRº’-câ„ÓÇܶߋg¾IåªyP×IRc4hyÀjŒy“E„À­;»¤ª}Õòšf/]Kæ,˼uG2tÿ° ½¸Yb:Q’Œ8¢e³õÀÛVÔ}Ê26œBÉ!­(ÈÙU«;Õ7‚. ÚÒˆ«æjoACÉj'hÉKü„±ØuÚŸ3Ú‹W…;±Àx¿Ÿ‘ˆþˆX8‚W¸qlÀ<¿næÀs î()p#™À£-nà zoð·sÚæP¢\ÛÛ5, ö—£¯»WF2 Œä(0ÒÀ˜õ¦\tŠ6C Ñ.¹W†Þ¬‘G!œ"žˆ‡£ÝPd#uW[¢®À2Üž È9…ÓG%»cg¢ifŽ´Ðºí; 4¥C Æý’¤ ˜¢ubw¹|‡w$Äÿ!änêSÃäd˜(O'PË“ Ô`e€,\¯6D4P\úá vO(!V$#ÄŸ«mXµ¥#76@k@Zû7Aÿ)Èò)ÈÚêu ‹Ód8ž‚ çÆÖ×?\œÁ9׿×$ '’Ü—rZt”`Ê{@¹“ªá{¼èŒ5†B¼®î¯ž L˜\}¬9J"·¢2ón´ >“›àÛ‘vÉôèÀjxe¥w²W|/JÄhšMøG»`ú1ð«ÚýœÂ®(T¥°~„³È…;Ù<Ô°%´þKyâË+ë'fJ§)ާÄ9zЮ»?È¿¡™üWO²É)Î~&7‰:òJ¡«}‹W7lJ63ÙBïï(Þ¢äÔ”ÁÑ`EAî‚/Ö‰ÍlfO&—u4á­`)šÌ%P{“ZBd‹ è·¶¥‘‘0 TÈ3LénίbÀ£½&­†º émZÿmž:3£y]?§jŽh˜¦Ä!ò© ?Ò6ù`ü`¢´hŠ®­K‚/W݉Ïù<›¦éÀ‹è3ÅLÆ~2˜ô“IS¢TÕ=Þ÷Úî±7€På{s‡Þ.¼—û’jsÑpdRÜ)FfŠjðýð? –ZìÀÞ“ù‰WIÒë;XDdÐå›Ðs1„g‚׿땲-PíÒz¤ AèÉkb ˜Aó›?Æ:¶,YT$íÜàvºn´¤±±8~é£êÍMBaði}uEªü´ ÃÈ[ÁßÐûñrªF+öïk…œÃƒƒ&$ÉÈÕ˜ŸŒ°‰H ³Z8D+Ûíµ€xÙÑØðlhGF‰¸›8Žù1K#kó(óó´i +¬Ly¦¼pZÂ̪ã~Ÿ3p æÍ£Ä™nus±þájýýå¬C?aëWææˆB?ΞCÀ–ûJÉÖ=ÀÉÄCs[‹ç=`yî Ý³—Q}?Ù|”j@„õk{P„‘Ðå?£Ë¶®öô­k 76ólÏf»‹£$±?´$ ó¨¿*iRšÍÄá¾gCm  pB8* Š0€B¦P†<9áôóèòƒ8tæ¼Ü|¼\}wùiÎì,ñó0¡5tÂ+C{ô{¬Ÿ ‰çó$‰@9F~2šA%± @uÔ«…Aê3–·k©k×Þ£Žš—¦hS²û»E;ÊŠ6\2Çq'í÷`¹m™Ãá4¯…Þûn‡P×ÀÅ.>ÑHõ­Ý‡’.€Ñ¸Ã¶òmiÞÄCß¡”Íû¦­¾ ÍX‡·T6)ØÍ_¹'†pá⢠¨29ü2ãêÉóö¬øj³±épPWºû楒“¹‚ƒºÿW®pkcmäÔD!€«lbmé~iZ­>ùÑÒ•ïØe}$bq²G‹Çj'fsÉËúÍ×lýÊ¢ÿ¡ð?Nm( endstream endobj 231 0 obj << /Type /Page /Contents 232 0 R /Resources 230 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 233 0 obj << /D [231 0 R /XYZ 90 720 null] >> endobj 234 0 obj << /D [231 0 R /XYZ 90 414.593 null] >> endobj 235 0 obj << /D [231 0 R /XYZ 90 354.797 null] >> endobj 236 0 obj << /D [231 0 R /XYZ 90 329.028 null] >> endobj 237 0 obj << /D [231 0 R /XYZ 90 155.08 null] >> endobj 230 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 240 0 obj << /Length 1741 /Filter /FlateDecode >> stream xÚÍYmoÛ6þž_aôËd RôBYÖ¾¥KÓeH›"v–ë°1¶‘%O/qòïwÇ;Z’£4A˜<žÈãóܬ7páŸ7ˆÝAN,ƃÙêÀÕÒâv@Ë÷ëÙ h·4ßNŽNÃpà¹NìÆÞ`ºhO5þ°~YÊu•C;Kü<´…­suSÈâ‘„—É")’l– m?E¾%ÂáŸÓßÞM·ë†¾¿§¨ùÔÂÑŽ…£±p¼@…óâþ/™–ÝÝM9#˜XëM—ª‹Ã¾P÷ClémAŸäÂʳô‘$‡ï‡ØR©¼IR¨³¹ùæ\e¨S?BäZ2›Ó@‘üS«"ᥪ%z|>9î_½Êé÷ð‹¬·&Û^àx!Y>ËWk•&sÂ{‘k6„õˆ³ä5s3« `E ßÑ"Y’:9½6Âí$ÜÀ#e½^ƒU°J1ô¬ª¤ñ2_T¨¿Á?²HHw5´=K=€žÊná 릮hPÒÏ¢®j£ÏK–*ÏxÙ hÈvìê±¥n—­Ýôt‡T4¸ð[—FSdA¢YÈYâôÄ#ª[D v~F j\¶* {[¶WêõEâÆ-âÊ=i{ÆH3ÖÛG:+S]Ÿ} üCÖÎæ[gf­À—ìÙ Ú“f``åZ}%ü¿?ž­@X®¿?ž¿~Älœäêó.¬r6KJV™ÍÊÆgçɽÚuÎ׃f^úûÁé‡ãNVÁ¾‘“¥ØêÅ %6)«`«“UPðˆ,6LVÁvOVñ£ ÑÕÓö@ì;ÍFUK"éÃdóÑÿz9Ù7eŒc¶2¢L}#ïsj§Ž1{£±$¿ÊÔµ(P Œ ¢ Úi’QW' R™’e¥!Zµ ÒÌö᫲²’)”%ÎÐUD‘…gãà|R`ãt8P%o''<’–9µfúhÅó£ ¬3–4Ä…@.19:WëuË•H;ÔV5Ë3»ÏXXf•3%Sâ’‘æƒýzX ½’ëˆ Ìٞ󬹒wìL(æÂ¢™ b·-C_éVÊU  =ë¢=áä‹.¾ˆ,#çä­žòÅ&y@³]>û#ÁáMùŒ=Í+®±Õ'¹±¼ká÷jSÞósµ—ëŠu+×ÖÂÔÖÁnmšèØTbGTtû•Øÿ‰âÝêT½`Â7% òV}ÿ3öìòìóWJ–%l‚÷4yöä”Mùn 'Ä«Jëí¸©³}Óº éŒkeöÈdv׎÷ͨÉñ {…Ü«™ÞkI£›¥šáwKÒP«uš¬š+ hLêìbb§j›°@ ~$TÝôTãå¡Il²2NqÈüé‹ÐÅÄtóTÊèL*ï[~ è$2z­ôÖiUÈ’bÇØ¸[PaßÈÙà8ê›xÜãÑöÅœ(<è´ž G‡94Z9»Whv©Oô\;âÝÌœštÎÍ•É}æ$Ã'‹æ,|.‰þ_/?2mnTöê¯z+Í}ZÁz®$3öéì͈ªP `jaê ÇócZ^8#îáÈ·NTy‡É)´®‡q™‘¡‚–¾)7wÁÇÁÄæÕoºLtååŽ;u*bz˜Ê‹;¦§Žq«J••¤Ô©²!‡h+•~ÂDMŠ ÐºM²¤•öo—\.»ßð›å5…ÎÓoÛy|ëahHTI¶Í¿—&V=‘ÂÅÓBatcÀkÓZìxž0œFÈ)Kž<à½(]""l…H!7{^7E¼sÝ„ƒ¯®Ö5¿(bŸË¼Ø ¬¿‘•¤–ÊH‹»„µo˜RýA²¤‹!/u—ð|÷mÌ]ÇÂX¼ªK5sžÛšç„"4ª?µlƒ_ܲjÂsFãxçöÑÍ€@—~§ÉM™£Õ§­ÂÈì‘rgÜSNÍe"ç†úm®h(Ÿå´˜„;š9¼Ÿ}ÀÔdTß”åý~Ü‹ û€‰}ZŽéÞ &^ ‰Ç‚‹¿Ü½<;=¥ÖõÐó<ëXÿýýÉ dØ6n¡§3nLB¶ì ¿^t]ã¹ïºF;ˆ·Ð¿äüŸ&ÿº±µX endstream endobj 239 0 obj << /Type /Page /Contents 240 0 R /Resources 238 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 241 0 obj << /D [239 0 R /XYZ 90 720 null] >> endobj 242 0 obj << /D [239 0 R /XYZ 90 190.038 null] >> endobj 238 0 obj << /Font << /F55 8 0 R /F56 28 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 245 0 obj << /Length 958 /Filter /FlateDecode >> stream xÚ½VKÛ6¾ï¯ð-°RE‰’¥ûD‹R÷Ô×¢-b%Ò¥èu÷ßg†CYöFr*| g8~ß¼d¾ÉáÇ7m¾Ù–eÖŠf³ò uÇ m>üüÀ£] †éåw»‡o~ªª ϳ6oùfw¸uµë6±ï{yòÊ%iY–L|›¤BTì7ýä¤{%åuPN™½JÒ¢ª·uò÷îׇw×w«¢øJ€hùÂ- ,³ F„u#2^ B(²:IZÕû=I9ó}€»ì§_’’3å&Dô–*Ä‚o³º,ÉÏ®W“"J^,¶ábPHOìWÁíý€kµIІAœÔäÉòéìéìz·—¦‹1›ì¨¼Õ”E`õ[`mÆ‹–€uîåÓä; WXT@ìËŒW3 ¨‹máÌU‚“ÓÙÇsˆi'{6]¼#½$¥·o¬NÎßÅÛ“>Òu·Ž3¨¢b»¤PÑÄÈ VwH ÐC¸œðj³·&5Lµ„AÌëøvṴ̂ږ]ô0ÎXO›'X¦è<ÞžD} ›è©½… j‚Mû6°ñ†r£6rx\í{{Æòh*öŠ‚=“ÐË… i0’¸žôiFŠ¢öñ¸¸Îž=ɈQ ƒ°·ã(19(XwëP0¬,Î:̲SûPütpu_–´|̹TvGˆøü9is„äq„£ÁáDuBêåEp|ºÃ7ýrÍÒ$‘ž"•ŽÎÔ?gðVÕLÊ`Ex:§«„3z!]+ý”•0ò¥3œ¼¬µE:›Þ¥­ÓÓ3uàÅiHp¶–[j e{lek†¹Ï'Ê¥u~š{úàÑø‚̤[†Ã¨ÿ^«žÆîÅnoNP(ê?{=¿CÙæ÷(A¾–Y<¥›ØæeÓÆ~ §–Ö(.õÂǼÊ/½Þ£÷žT#Õ½'éÚy(# C¢6Ëó+Q¾mÉBùÆÇ9ÌWf„ïE˵Ðq ZUÌáx¯ŸßÛîÓ/F¯NɺÈÚöZ7À‹SêSÞÓ—ô/€›qoìô•ù_ÙÙ˜~óΓLî êp0†@«2U~⢭†x9ÑÈ »0Ç]ì!kâ•0¾_#YIå \4hú§ ò0¤p½â%‘Æ:lî)jÂ' Ö…Ïì+yÄ íÕ ëÀÄ/¸î‚þÃ7ºœ8“Ãk2éx¥„)¯sÐkˆ[ÌËx—r~k»ü̬އ>½¹·|M@ôsø~góªÏ˜‰ endstream endobj 244 0 obj << /Type /Page /Contents 245 0 R /Resources 243 0 R /MediaBox [0 0 612 792] /Parent 219 0 R >> endobj 246 0 obj << /D [244 0 R /XYZ 90 720 null] >> endobj 247 0 obj << /D [244 0 R /XYZ 90 720 null] >> endobj 243 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 398 0 obj << /Length 4814 /Filter /FlateDecode >> stream xÚí]]oÜÆ}÷¯Ð£ TSr†Ÿ}K›ØM§F¬ø¥( Õb!òÊ]IAòïË%çórîë›¶Ð®Š‰“÷œ9sÎÝá,ɭϪù¯úl¬ÎzcÔØ gï?>«–ÿºÿp¶þá»WÏj{Üù|àytä/žýþeÛžÕ•«±>»ø!.uquö·ç/_ æùÃîýýõíîŹ1æù×»«é—ùõØ·Ï›þÅß/þòì« ÑjÍ$s8ræŸÙôJ×mcÙtC£jÓ86c±™ ¬lfë©2M§§Î#5½2í¸žùz=ÆÔgƒ»®±‡Ì'4º·‡\ÿôúöê_ÌÕžÖÇèèN«z8_þËóº¯×èäßêòÿ{l'€)Ô}¯Ú¾9댞å\§QµóÿSÕ8ÿ­ÖË|¦ÿ%žXwþyT`™\É AUÇ •á ºN¨àŽrGÓÀ äü»-p¯†ÚÈ5°ç¨¤ ½‰”{Ué‘+‚=zƒœxÿ,]«Î¤æÿòúîòŸ7Ó_î?=Üo30vªêÌcÉ”©›ónZ?®Ïž2{þyT`;ed¢Ù&¨ž»šN¨3f¦AIĶ.UR |tI*)H!º< |t)`P²]©>º$•¤]ž>ºyÝÃ'¶n“è~µ#“;ìÛ§`;:y€C<À±„x€#*œSÀ d!ÀR |€I*)H!À< |€)`P²`©>À$•¤`ž>Àyચ¹Mà_®3ÁmçjuLËN(`Ó©¡íüˆ?{2íùçQídu27TÚZ5ó 1b.íÑ40(‰ºm1¶r ìù*)ÈBÅl{l­úÊp5°GÓÀ $¢ë»R |s'©¤ …æÎÓÀ7w ”,4w©¾¹“TRBsçià›; Jš»TßÜI*)H©¹óDðÍ ÃæÞãÌß$ÍýÕtÿnÚßö-6-~¨Õ`šãÛY@Üí†/vwTuw¢ñ€¹;¦Âp7 JÒîkàÜMSIA îfŠàÜ ‘7îîÕ6 #w½ûáöËýõÏÓþôÝm‡/ww(€»;ÖíÝ1Ž»)`P²àn©ÞÝ$•du÷€º›'‚w7@Þ¸»T5lÌýÍíåbî¹â¯Î{}‹öç›z=ý<œŸñt±Uר§Ž¥ Ø´`ÁÐÂá{?S<ˆ’›YÃ÷fNa7^ž¯L73ŸòE¦±ø"3*€^d&²¢™1ÆE& JÒ™b ÜE&M%¡/2™¸‹L”¤/2Ÿ‹LšJ B_d25p™$0(I_dŠ5ð ’J RX¨ð4ð]% }]ªoì$•¤ÔÚy"øÞ7Í}îF]ÛošûÅûéòê.³Té”6Ý1/U¬åìÀå¾p_Çê⾎¨p|Mƒ’_K5ð¾&©¤ %_óDð¾È_›vnr]âëonßÿ”Y´eŽjíýŸ¾µJɃ àAˆ§BD… ”,AªI%Yƒ0¢Aà‰àƒ7AÐíܰÓïx¿›>\ßÝOû/nnÖí–LŸ¯õ<Úú·ä[\[BòÅu(€/®ãQã‹ëˆ gqMƒ’…ŵT¿¸&©¤ …Å5O¿¸¦€AÉÂâZª_\“TRÂâš§_\SÀ daq-ÕÀ÷^’J Rè½< |鹿AÉBï•jà{/I%)õ^ž¾÷äMï­ÕjƒõÞu70×{ëQ þ/­I6yԪ׽'ûùy\Ï? dò˜‚`=ɦ6¢Bõ$×Hà´$–G»¹(ÕÀo`RTHi “'‚$… J)Á’¤’‚”ÉÁ oY™]g‰}ñTWó'û0<ò{Þ\¯·” „øJ¬"þQáø—% þ•jàýKRIAJþå‰àý ¡›Ñ¨ÙYÿ~µßßîÿ|¹»ºÉºXϼÇþâbÄ›Ž¼Ø›QÔ›‰B¨7c* o’À $íM±Λ4•¤àM¦ΛyãÍY3ŒYobß{z«6ú±> `?°ÝÈÄ«‚¨º*HäÃW1Žs)dP²à\©Þ¹$•d]V¨sy"xçäsçk¶®²Î}ssùë;׎LîÜPwn,á܈ ǹ2(Yp®Tï\’J Rr.Oï\€¼qnWÍÿÚçÞM¹ïæ{Õ÷ã)oscË«‘|Ù àËŽx"ðeGD… ”,D@ªI%Y#P£à‰à#7h+¥ÛtûítÿíÃÇw·×ï§»ã~†ÉN¼I@÷F ÑMÒ˜ c“”%éMR±>À$•¤`ž>À0(Y°T`’J R 0O`€¼ °UÛ¤Ï0ÝÝï§Ãåì6¼½Q•9úÇç1§[)äNp§ÇzÔéŽÓ)`P²àt©Þé$•dÕ@£Nç‰à7N׃LúuÀ÷»›ì] Oï5N¹ùCÜüñàm>¢Â1? JÌ/ÕÀ›Ÿ¤’‚”ÌÏÁ› oÌ_3ëtëòûOW—÷¹w¤¥«Çý¬rsƒ¥øæ†¨zsC"¥Ánnˆ©0nn AIúæ±îæšJ ‚¬YíL ÜÍ $0(IßÜ ÖÀ¯ÛI*)ÈB¥G×í< üº% ëv©¾¡“TRBCçià: JºTßÐI*)H©¡óDð  §ïÅš;º:Õi»Yû†x1–½åmÝJ¥^Œ56Ç»A…ÜUaz=–ý†»*¢è]îú®Š˜ ã® 8-IßU!ÖÀíB“THaš)‚ë$2(Iw±®ÐTRB'`Šà:D†K;346£NRþr?MÙÄê¦=‘«,ñV yâC<ñ±äxâ#*œÄ“ÀiÉBâ¥øÄSTH)ñ<|â)dP²x©>ñ$•d5‚AÏÁ' oßVÊ}ÙeÿjºÿÓ—»Ýt³ì»ç¾1mU÷žàÇ,»IîX>nØH5¯Ç®lZ°`Váð½W) DÉ©¬á{£¦°Ÿ63m÷L]0êëÛ«‡›ŒEçkŠºïOàÖovôrO‡¸©c‰ WG\8¶¦AÉ‚±¥"xg“TR’·y"xsä»õ¨L›¶áÃVOtÝeÕ¯»B|ÝKޝ»"*œu œ–,¬»¤øÄSTH)ñ<|â)dP²x©>ñ$•¤”xž>ñy“øzP]ÓmÿòMv}ìõ‰fÞYÑê!÷{(€û=ð{Ä…ãw ”,ø]*‚÷;I%YýÞ ~ç‰àý7~¯z5ºÇ¶"¿¿švÓþú}æí½ÒÝÉì!:í­ ò 𠎥®ñ†qáL0@†|8Pëf3Á×÷O`îF/n_Q´}%ãí+æÂh_$2(I·/±ÎÝ4•¤Ð¾˜"8wC仇NµµÎ»;÷™=´j<ŠWQ`†¶–:À «J:âÂ14… J -Á𤒂” ÍÁ o Ý·jpOYC¿~ÈÝÂÑšyxúIÝnnÝi%’G À#ψ '2(Yˆ€T’J ²F E#ÀÁG '0u3_TÕgóšUõ}»ÉÁUö¹‹ÃÉOàF¾f<¬õ/ÎçN¾;ÿ<*°™|‚$ ×uk.ÄOˆÙ£IdX2Ÿ€¹{ª~hÅ"¸ói*IÀá—ј~C "æo:eªÔùßN¿Ü¿¹½»¾Ï¾–|¬”ô1ÝÌç=fÇ*7r(€9”0rÄ…cd–,Y(B02E€PFæ ° æ¬ç>oÒ­´7—w¹¾l¥™ÓÜJó>´zÈÍ àfE'Ìqá˜@†% fŠÌNQ «Ù»¬Ùy,fˆy³×­2îÑŽuGÅÍXîæPws¬*áæˆ ÇÍ2,Yp³P„àfŠ ¡ÜÌ`q3@̺¹·GÐÍo?M¹UÈ|íß÷'óå†óžÓ@lð¨jðDhÜà1†Á)dX’6¸Top’ ! Îà`pˆ˜7ø0¯œÛübúøéöÉÜj 7x(€<š0xÄ…cp–,\(B08E€Pç ° æ ÞÕlüýîöæáãé~}éM·^nl>îëH_ÂÖÇÕ8,(Xð´løÁÒ‚24k苟S¸¼;£ªôûÊ·÷—ûÜë„Õ6ý‰½‡¡zÕÍ— V†Ï6¶=ý<œ¿5v ‘¿°µ2UóÀ'×L¢¦ó¾ö™ŽÞÇšâ‘@”bÍ~ˆ5 b-~ˆ5Á#…X'¿ÏÆš5ô%Ö)\>Ö­Vm[ƒ\ß~BnîNt§ÓEϪ!w(€ç;–xD…“p ”,d\ª9I%)Åœ%BÈ9 K’.!D¢@¨°óXÒóqo´ª†ôcüâöÇ›)¯Æòë“Çôä5fj;n¹©CÜÔ±¸„©#.SȰdÁÔB‚©)*„25O€ÅÔ1ojS«®6S/ßÚÞί°ÜÍ¡îæXUÂÍŽ› dX²àf¡ÁÍB¹™'Àâf€˜w³®ç…Vêæïwз!µgOîÊüôX­äpÄ‚x âQò@Ì{ ®T×7À¯ÿVr„¸â É4Ã"%Äôý9ÎÍP©¦µ¾{‹¼DÇ̽ڮ ß^~üt3Q¯×8ñ«·¦ëÔA_ñÕ[T½zsÇäß.æ.µb*Œ«7”¤¯Þĸ¥M%YÓPaKž~i@!Ã’ôÒ@*‚o $²~, ¹–À@ë-böc¡i;UùްÆxªûÔãnÕÇ=ÀãKŽÇ=¢Â‰; Jâ.ÕÀǤ’‚”âÎ!Ä@†% qŠâNQ TÜy,qˆù¸7­j‡fwô‘î¿Õé!7{(€›=0{Ä…cv–,˜](B0;E€Pfç °˜ æÍnZU×íÆìOãyn/¼UA>»¡>»±ÔÛç¹—Ùx”f ægW7ªkÒÙ=\מÜÓ°uõý| 7úñvë²çŸG¶­ € k•A«ªë*ÄZÅMƒ’ÈZÅ-¥¤øõI%É¿øØ/®xøõ JÖkR üGI%)}„±Da2,YøŠšE€Pa<–&ó;6f¹ñÑ~l¾#vl쇷!^:÷r?ýëaÚ½ÿõô¾ª0‡M¬ñ7¬Ù¢¨áÝ1ÃÇ\†§aIÚðR¼áI*d5ü˜3ã¡>ã±üÈŒG> endobj 248 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 630.605 282.182 638.126] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 249 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 630.605 297.029 638.126] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 250 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 619.644 271.942 627.415] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 251 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 619.644 282.182 627.415] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 252 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 619.644 297.029 627.415] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 253 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 608.933 271.942 616.704] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 254 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 608.933 282.182 616.704] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 255 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 608.933 297.029 616.704] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 256 0 obj << /Type /Annot /Border [0 0 0] /Rect [246.856 598.471 251.464 605.992] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 257 0 obj << /Type /Annot /Border [0 0 0] /Rect [257.095 598.471 261.703 605.992] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 258 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 598.471 271.942 605.992] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 259 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 598.471 282.182 605.992] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 260 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 598.471 297.029 605.992] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 261 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 587.759 282.182 595.281] /Subtype /Link /A << /S /GoTo /D (8) >> >> endobj 262 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 587.759 297.029 595.281] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 263 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 577.048 282.182 584.57] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 264 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 577.048 297.029 584.57] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 265 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 566.337 282.182 573.858] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 266 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 566.337 297.029 573.858] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 267 0 obj << /Type /Annot /Border [0 0 0] /Rect [246.856 555.625 251.464 563.147] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 268 0 obj << /Type /Annot /Border [0 0 0] /Rect [257.095 555.625 261.703 563.147] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 269 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 555.625 271.942 563.147] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 270 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 555.625 282.182 563.147] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 271 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 555.625 297.029 563.147] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 272 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 544.914 282.182 552.436] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 273 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 544.914 297.029 552.436] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 274 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 534.203 282.182 541.724] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 275 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 534.203 297.029 541.724] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 276 0 obj << /Type /Annot /Border [0 0 0] /Rect [246.856 523.242 251.464 531.013] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 277 0 obj << /Type /Annot /Border [0 0 0] /Rect [257.095 523.242 261.703 531.013] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 278 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 523.242 271.942 531.013] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 279 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 523.242 282.182 531.013] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 280 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 523.242 297.029 531.013] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 281 0 obj << /Type /Annot /Border [0 0 0] /Rect [262.727 512.531 267.335 520.302] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 282 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 512.531 282.182 520.302] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 283 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 512.531 297.029 520.302] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 284 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 501.82 282.182 509.59] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 285 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 501.82 297.029 509.59] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 286 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 491.108 282.182 498.879] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 287 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 491.108 297.029 498.879] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 288 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 480.397 282.182 488.168] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 289 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 480.397 297.029 488.168] /Subtype /Link /A << /S /GoTo /D (30) >> >> endobj 290 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 469.686 282.182 477.456] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 291 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 469.686 297.029 477.456] /Subtype /Link /A << /S /GoTo /D (30) >> >> endobj 292 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 459.223 282.182 466.745] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 293 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 459.223 297.029 466.745] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 294 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 448.512 271.942 456.034] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 295 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 448.512 282.182 456.034] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 296 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 448.512 297.029 456.034] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 297 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 437.801 282.182 445.322] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 298 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 437.801 297.029 445.322] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 299 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 427.089 282.182 434.611] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 300 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 427.089 297.029 434.611] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 301 0 obj << /Type /Annot /Border [0 0 0] /Rect [246.856 416.129 251.464 423.9] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 302 0 obj << /Type /Annot /Border [0 0 0] /Rect [257.095 416.129 261.703 423.9] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 303 0 obj << /Type /Annot /Border [0 0 0] /Rect [267.335 416.129 271.942 423.9] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 304 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 416.129 282.182 423.9] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 305 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 416.129 297.029 423.9] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 306 0 obj << /Type /Annot /Border [0 0 0] /Rect [262.727 370.21 267.335 377.981] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 307 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 370.21 282.182 377.981] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 308 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 370.21 297.029 377.981] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 309 0 obj << /Type /Annot /Border [0 0 0] /Rect [262.727 359.499 267.335 367.27] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 310 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 359.499 282.182 367.27] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 311 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 359.499 297.029 367.27] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 312 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 348.788 282.182 356.559] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 313 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 348.788 297.029 356.559] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 314 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 338.076 282.182 345.847] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 315 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 338.076 297.029 345.847] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 316 0 obj << /Type /Annot /Border [0 0 0] /Rect [262.727 327.365 267.335 335.136] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 317 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 327.365 282.182 335.136] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 318 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 327.365 297.029 335.136] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 319 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 316.654 282.182 324.425] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 320 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 316.654 297.029 324.425] /Subtype /Link /A << /S /GoTo /D (34) >> >> endobj 321 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 305.942 297.029 313.713] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 322 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 295.231 282.182 303.002] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 323 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 295.231 297.029 303.002] /Subtype /Link /A << /S /GoTo /D (34) >> >> endobj 324 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 284.52 282.182 292.291] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 325 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 284.52 297.029 292.291] /Subtype /Link /A << /S /GoTo /D (34) >> >> endobj 326 0 obj << /Type /Annot /Border [0 0 0] /Rect [272.966 273.808 282.182 281.579] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 327 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 273.808 297.029 281.579] /Subtype /Link /A << /S /GoTo /D (35) >> >> endobj 328 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 644.782 507.153 652.553] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 329 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 644.782 522 652.553] /Subtype /Link /A << /S /GoTo /D (35) >> >> endobj 330 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 634.313 507.153 642.084] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 331 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 634.313 522 642.084] /Subtype /Link /A << /S /GoTo /D (35) >> >> endobj 332 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 623.844 507.153 631.614] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 333 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 623.844 522 631.614] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 334 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 613.374 507.153 621.145] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 335 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 613.374 522 621.145] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 336 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 602.905 507.153 610.676] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 337 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 602.905 522 610.676] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 338 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 592.436 507.153 600.207] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 339 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 592.436 522 600.207] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 340 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 581.966 507.153 589.737] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 341 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 581.966 522 589.737] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 342 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 571.497 507.153 579.268] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 343 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 571.497 522 579.268] /Subtype /Link /A << /S /GoTo /D (36) >> >> endobj 344 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 561.028 492.306 568.799] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 345 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 561.028 507.153 568.799] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 346 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 561.028 522 568.799] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 347 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 550.559 492.306 558.329] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 348 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 550.559 507.153 558.329] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 349 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 550.559 522 558.329] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 350 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 540.089 507.153 547.86] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 351 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 540.089 522 547.86] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 352 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 529.62 507.153 537.391] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 353 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 529.62 522 537.391] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 354 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 519.151 522 526.922] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 355 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 508.681 522 516.452] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 356 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 464.53 492.306 472.301] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 357 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 464.53 507.153 472.301] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 358 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 464.53 522 472.301] /Subtype /Link /A << /S /GoTo /D (38) >> >> endobj 359 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 454.061 492.306 461.831] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 360 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 454.061 507.153 461.831] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 361 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 454.061 522 461.831] /Subtype /Link /A << /S /GoTo /D (38) >> >> endobj 362 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 443.591 507.153 451.362] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 363 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 443.591 522 451.362] /Subtype /Link /A << /S /GoTo /D (38) >> >> endobj 364 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 433.122 522 440.893] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 365 0 obj << /Type /Annot /Border [0 0 0] /Rect [477.459 422.653 482.067 430.424] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 366 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 422.653 492.306 430.424] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 367 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 422.653 507.153 430.424] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 368 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 422.653 522 430.424] /Subtype /Link /A << /S /GoTo /D (38) >> >> endobj 369 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 378.501 507.153 386.272] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 370 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 378.501 522 386.272] /Subtype /Link /A << /S /GoTo /D (39) >> >> endobj 371 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 368.032 507.153 375.803] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 372 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 368.032 522 375.803] /Subtype /Link /A << /S /GoTo /D (39) >> >> endobj 373 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 357.812 507.153 365.333] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 374 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 357.812 522 365.333] /Subtype /Link /A << /S /GoTo /D (39) >> >> endobj 375 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 347.342 507.153 354.864] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 376 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 347.342 522 354.864] /Subtype /Link /A << /S /GoTo /D (40) >> >> endobj 377 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 336.624 507.153 344.395] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 378 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 336.624 522 344.395] /Subtype /Link /A << /S /GoTo /D (40) >> >> endobj 379 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 327.273 522 333.926] /Subtype /Link /A << /S /GoTo /D (40) >> >> endobj 380 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 315.685 492.306 323.456] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 381 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 315.685 507.153 323.456] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 382 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 315.685 522 323.456] /Subtype /Link /A << /S /GoTo /D (41) >> >> endobj 383 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 305.216 492.306 312.987] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 384 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 305.216 507.153 312.987] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 385 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 305.216 522 312.987] /Subtype /Link /A << /S /GoTo /D (41) >> >> endobj 386 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 294.996 492.306 302.518] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 387 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 294.996 507.153 302.518] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 388 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 294.996 522 302.518] /Subtype /Link /A << /S /GoTo /D (41) >> >> endobj 389 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 284.278 492.306 292.048] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 390 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 284.278 507.153 292.048] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 391 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 284.278 522 292.048] /Subtype /Link /A << /S /GoTo /D (41) >> >> endobj 392 0 obj << /Type /Annot /Border [0 0 0] /Rect [477.459 273.808 482.067 281.579] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 393 0 obj << /Type /Annot /Border [0 0 0] /Rect [487.698 273.808 492.306 281.579] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 394 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 273.808 507.153 281.579] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 395 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 273.808 522 281.579] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 399 0 obj << /D [397 0 R /XYZ 90 720 null] >> endobj 400 0 obj << /D [397 0 R /XYZ 90 720 null] >> endobj 396 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F31 54 0 R /F8 401 0 R /F2 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 439 0 obj << /Length 1677 /Filter /FlateDecode >> stream xÚíšïOã6ÇßóWäe+-žÆñÞÁÁnL¦R8MÓtâh™ªAaå±ÿ~Nâ$¶c;©oLÚ5B¢¥8Ï÷éó|¾þÑ%Pþ DÀ„͓ۇX¾ºý#©žÌß 5.•SmäÑâàûK ”,îôP‹eòÛd1Åùäï§i*VÓ”2¹Ù,‹'tr=Íéäf»¾ùt¿ª^9ÝLÑd¹z•Ãy–£ ͧ¿/~>8Y4)0ŒæZŒì$Ëe²`ĨJ6Ë)@„ÖÉT&+ŠŒ8SÉÊ'×S¡'+_9Ý™Êüª°šá"¬,…€C^E=ªÆ”ä@dUCÌL¾V ¹¸8«FåÚ $gÅû)Çü0MGÕ6þBýÿÛ¿ ,n°À€b”dX*xÉ`ò ù á"ó¦úúT P…µ†Ù"eßD7 F*~ŒëÑa“¹eˆÃЍwýнûép>B÷_@Çr˜ˆg®½Þ‹œ&NËcp–j‡7ÆÈš:Oûy;=¿\̯f'ç‹.u”ÁðžSgwMÖ?G$a”,'»ã£®Oµ]~,‘²þÈO–Ë„,å.Cr5æPífý =,?.W/ëÛ•! ˜Œ¿oÙâÒ´œ& ÀyÄ:§®Oµ]h,Ϭ“c€rl¤`F [!Káï¼Æ‰­Acœ`*¦Heæ5ΰ"4Ʊ” OHßPA©}S˜b»~Ym¦ €«ypz­KM‰ÀK‰Ñ/?%z.(±•;”H»ä¤¥äaýz·]ýåÀD>åÙþ`â™4ëzEOšZï¤i4Å;iê© ˜4ƒÂVÈð¤]ƒÆÁTL‘>; +BcK¹cŽÉDk‡Ç¥cAäÌ‹é8e†|¢ ï“6€ß'z·ü>ÑRâ“°²Ç'±5h|LÅéóɰ"4>±”;>ÉÈ…æ“/ÏëÛ—Çû/»ddð›^:|¨*ÅÐð ·Q/Z.C°”;0(iúÿt³y^=›Ë˜ÍeUÉxFšëýˆhÍ Ò&2S¶Ã…òφíJž=>|ÄðQU2žæz?Z³|´‰ áÔíðA  ¢ýÈæy³¼{»÷ªJñÍoø»¯·"Ð~-—!ý·” ¢ò4‰’LúŸbÞPà`œ&¼ÓCðœ5¥Ü•úúT ÐAÅñ R|ŸªçÑóÍ«­èF„` VÿÏO¯O_I 8ÍG@z¿1h:©ÊKÀ‹Þ;”9qÑòèÃÅRtã‚åÁ…«µl¶þsö¸üx»]^ßÞÜw±á@ò¿ÿNÉ.+Ä€QÖ”bç«ëS-@·Å–ˆûÎ ˆ#•@—Õèa3¤ûÞ[ƒóP*–HhVV€sKÑ9’Ç3fP¾Ún7]ÄYrH¾‘™Ñª,²Trc¨ª±k“ëËÓöúN-‰²ˆ¤›G¢zþ&׃êF@ãµãÞ}ks–Dɇ¼ûÖã!U#`Ã#ß}cð@¦DÈÞƒÞzénSÎmnˆÁ¦»Ÿ?o¥Áßßq pF÷èpTÜ@nÊ´{ë«ëS-€£÷¦ˆ}l¦Ñ×|KÐÙ}& àõçy³‹ã«³Ç~·HŒûÝ]OIuq£§ -€w¾0:èÞöêyô@c+º¡É!À\Ýh5›Ÿ;OI 0´·ÔtmÉ›Òí¾{¨®OµŽ…Ü© ¾%TÏeÀR¶C†WÑØ"´¾¥b‰”©`èôŰ”¾°ݾÈDùÁ@å‹óÓÅè‹¡¾P¥‹÷EÀï ½?_h¹ ñE@ÙÙã‹È"´¾¥b‰T¾@N_ +@é KѼ¡²1 –¼ôÜTI¤jçsy8ûe܇ü‹ûÌ%_qlÑø¹Rc<7ì–\iyôqe)ºçÛ⪭Ïåѯ 38ŽæGNÏõÁ¤®tôéG à=ýít¤¥Ñ%èʹ*W{„˳‹ó÷#@oªt<@m?@z;Ýiiôd :*nxÍY½²}¸˜½ @u¥£Òx2ÚéHO£ [н5¢™<äJò*°7RŸø_ËÜBÆ`dm?djL2->È,A÷,E€¨h\æÞ Uéx€Ú~€ôvºÒÒèÈt¤ß´s5.soPä=X-@{°l‘@¡Û¯þ˜DP endstream endobj 438 0 obj << /Type /Page /Contents 439 0 R /Resources 437 0 R /MediaBox [0 0 612 792] /Parent 402 0 R /Annots [ 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R ] >> endobj 403 0 obj << /Type /Annot /Border [0 0 0] /Rect [292.421 629.497 297.029 635.275] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 404 0 obj << /Type /Annot /Border [0 0 0] /Rect [292.421 587.59 297.029 593.368] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 405 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 545.683 297.029 551.462] /Subtype /Link /A << /S /GoTo /D (19) >> >> endobj 406 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 502.034 282.182 509.555] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 407 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 502.034 297.029 509.555] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 408 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 492.434 297.029 499.086] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 409 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 480.846 282.182 488.616] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 410 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 480.846 297.029 488.616] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 411 0 obj << /Type /Annot /Border [0 0 0] /Rect [277.574 470.625 282.182 478.147] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 412 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 470.625 297.029 478.147] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 413 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 461.025 297.029 467.677] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 414 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 449.437 297.029 457.208] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 415 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 440.086 297.029 446.739] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 416 0 obj << /Type /Annot /Border [0 0 0] /Rect [287.813 429.617 297.029 436.269] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 417 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 642.553 522 649.205] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 418 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 632.902 522 638.68] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 419 0 obj << /Type /Annot /Border [0 0 0] /Rect [502.545 620.633 507.153 628.154] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 420 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 620.633 522 628.154] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 421 0 obj << /Type /Annot /Border [0 0 0] /Rect [492.306 610.107 496.914 617.629] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 422 0 obj << /Type /Annot /Border [0 0 0] /Rect [502.545 610.107 507.153 617.629] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 423 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 610.107 522 617.629] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 424 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 600.451 522 607.103] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 425 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 590.799 522 596.578] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 426 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 578.53 507.153 586.052] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 427 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 578.53 522 586.052] /Subtype /Link /A << /S /GoTo /D (20) >> >> endobj 428 0 obj << /Type /Annot /Border [0 0 0] /Rect [497.938 568.005 507.153 575.527] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 429 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 568.005 522 575.527] /Subtype /Link /A << /S /GoTo /D (21) >> >> endobj 430 0 obj << /Type /Annot /Border [0 0 0] /Rect [512.785 525.435 522 531.213] /Subtype /Link /A << /S /GoTo /D (19) >> >> endobj 431 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 514.909 522 520.687] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 432 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 504.384 522 510.162] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 433 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 493.858 522 499.636] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 434 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 451.542 522 457.32] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 435 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 441.016 522 446.795] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 436 0 obj << /Type /Annot /Border [0 0 0] /Rect [517.392 430.491 522 436.269] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 440 0 obj << /D [438 0 R /XYZ 90 720 null] >> endobj 437 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F31 54 0 R /F8 401 0 R /F2 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 484 0 obj << /Length 2340 /Filter /FlateDecode >> stream xÚíœKoÉ€ïþ<’u¦ß=¹mÖÚƒXÈJrHrK#‡0Ec*Àæ×§g¦5£~н´-­LŠfW•»>TuUׯ*ý¯êj%)E5S«›ûWÕði÷a5¾¹úù6ß»Ð_¼ßüÓõ«?üÄù W¨®j¼º¾[q¬P-¸ëÛÕ?×ÛÍ¿¯ÿòêòÚÉᄜ¨°ÿæ#Rk”ˆ`ÎzÚ&¡”ڮ75[7ïwíæ‚J¾>ܯ?öŠ×Çv|ùÜÛ4Šbˆ2AzQúÇ0ª˜%áÍÆ„¯ßŒKºƒ–„×·7Ç­6¬ÇU`ýž ¦ þ¨9¾ˆÉO§Xºî›}ýÊÌéLomMW‚QT©ÑïˆëBU­ÿÂd`ú $Á,¿ë Þ3%ÆsK´hF¿þ›=~š‰GeÄ03Pøp')OŸß",Ó¸óÅ,¹å ”&Î ‘ämÈ4U7 œ¸b:ȱ¯"’…¨AUU­ßn?¾Õñ‡¨õ­ŽB”öñì¦ýd㘠Y˜"©e”Áõ´AøÖæ>OGxÆ›¾½qý a®&Ž4$Ã_Z¥Pam´%à#vï>n4ƒ:·âõnƒÇ7G ‡ü¥;|èšû ’„û±yŽàgà0ž*gÐ H18"È 0$Ç`R¥cPÈþi¤Á_vM߯Ûý‡‘7vm8Va…êΧ!†âè°rÝúˆ€ äÐ[‘Ã0¥ÏQÈR¸¶²†ïû!+³õ¥Ž‰ÿªpO캽‰dgªœ>Ù"á©qCÎx§œ9/ „€©†ä°KªtÜé“§Ž;n€‡®G×—=mí͆ôŒU mgͼÆCåìy)ö 2È0$ÇÞLå£2–cÍšT6¾Žuìß>aNòõñ?¦¥ò×íû®é~ w@¸>2ôžE].Eíî•Ö¢`}¼¸Hf䀘i #V „MkºrÔ"0Ä ¿o]·Ýg×›ŸÂ4D¼ŒSØ7Õ‰NÆeÅÁɯOÄ&ÈED`EĤ>Ç¡"¨VµÑ–¥×ÃQìÓP˜ìøºÕ9‘í·}—v) ¾kY`VŽ¢b²Qa†ähLªt8Š)j“¥+Q/»îÐþ¹Ùßîúä °VH ò¼® ~M;ë´r½€Ž0ŽÀŽI•G.P¶6v¥ê$M¿éCb³Ûþ¯Ï[¸þ芋Ÿúlþ°/¹ð:A é;‰Ï"‚ÆP0VŽ‚Bú%Œ0$‡BR¥CQÄ©CÁVïšûO}›lêv}tcëÃö¦µìû|zì»`âäI.^x-9w"­Q¿?vß¿˜(³þ5S3^mVA¤€%9¤’:R´BT ‹”p Ð~…\Q×#Û©+wc•„K`„ùK­bP™/‡Ê HAŒƒæÐ’TIª~†ƒr •´)ëÐܺÎêëæØŒ‘éN§¢îp?þð¶½?Øþâ ©š¾Ô£}Œ"³Õåy)Š Gq°C-ÉQ4Óù¨_E•Òe#·Ù±_åO<’¯¯Ú»¶k÷:»…[UÄJý¾ZU ºÒÀn¯¾œ€qýjOÍÔŒ»åÐ’ sá8B%F²2±‹¹ÕДjº­™ÓÁdFÃ|dB FèÒ¤:KKÔëšâ¸$â΄€uÀ’uIërL©å qî©sÜD0ÚˆL-Ðå¬d]RN›¢ z>B°$G[R§£qÄ*îi³íOpø®=õÁ)šÐïÅÒñ<hÆå y)РÓ# Kr %u:Ð(A„3šml¾î¶ÿ&¿ºSh“‹%—ž‰6ã’rÚ¼€mÐóÚ€%9Ú’:ÝÑMS‡+jisAíØ=ܺ“Îm#¾Ìž 5ãrÔ¼€jÐíXQ–äPKêt­âÃЕEÍ×|` Æ2¡P­ðrSó}šõã¼r.½€—‘—À’—I–KR¤*â¹$¡æjL)¨èø¾q+Íú«E â‹0ŠÐ’ Ši˜2¤(YY#Á1@ÑÉŸÛ}Û5»GS×öbñîÐÝ7ÇØü–+%{~¨Æ0ûTŽ€Bº#‚°$‡@R§C@mÿ2›z~ßÜô¯ÇN|² :Äa²ÜèLé1[\N¢z´ %9z’:].ãQîá¡S™ Ÿõÿ¾ï£Cò¬ËØò )iÜör ÜúOÀ·88ÈÌÈÑ”Rè`bÚâºö4±Ù CèLD—daæû @X•ƒè¤H„`DP–äXLêt0‰*`tÏd\]þðúò*8ã§¿ÅåÒûŠ©Ôx¥8/ t> NÜ@KrÀ%u:à0EªV87só«7×QàðR~UàŒWÊóRÀAç“à4´$\R§mÅ’ªB’I \`ž9݆íŸñPrïëgYã¨r½€ƒ‡ƒÀ’ƒI6èa%¯=ƒáöÀdô–“=ÇFÓ̮ÖÅ  Ð&Nƒ-É€–Öé@“ 1&)ÇÍ Há]O‚¿ÍZ’Ã-©Óá&0"5÷¸E#)æ8R/e<úëÇ6ã‘rؼ€lÐñØ€%9Ø’:l NÅ"ÿ,Ð|‚#ÎZ­%Ôt¹ó<ë®!‚•ÎáZðXj&v®f/8‰ -ÉÇN™ÃíïêÚYì&“2‡+‘¨—IµóæVãšrê¼€uü}Ð’uI.ÜŒss,ü ìӬǑYÉ– DÙòÒŒ ³Íåy)‚ 7#Kr%u:‚*¥# ˆÄNgþ¡6›EOá‰s¤ †—S,Ä2Û\N"z“†\À’AI– š#ΈˆªI˜#·åX-‰ïKC“Ùýb®üúVÐÅ4x›ÌÈ@•Th™RÑ{¦|¬É>°} VX dé‰ýÆs»qG1d~}2ès¼Øf<‚ìÿŒæÝ' endstream endobj 483 0 obj << /Type /Page /Contents 484 0 R /Resources 482 0 R /MediaBox [0 0 612 792] /Parent 402 0 R /Annots [ 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R ] >> endobj 441 0 obj << /Type /Annot /Border [0 0 0] /Rect [441.93 643.088 450 653.051] /Subtype /Link /A << /S /GoTo /D (1) >> >> endobj 442 0 obj << /Type /Annot /Border [0 0 0] /Rect [441.93 610.71 450 620.672] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 443 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 592.15 450 601.847] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 444 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 579 450 588.697] /Subtype /Link /A << /S /GoTo /D (2) >> >> endobj 445 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 565.849 450 575.546] /Subtype /Link /A << /S /GoTo /D (3) >> >> endobj 446 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 552.698 450 562.395] /Subtype /Link /A << /S /GoTo /D (4) >> >> endobj 447 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 541.669 450 549.245] /Subtype /Link /A << /S /GoTo /D (7) >> >> endobj 448 0 obj << /Type /Annot /Border [0 0 0] /Rect [441.93 509.788 450 522.541] /Subtype /Link /A << /S /GoTo /D (8) >> >> endobj 449 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 494.018 450 503.715] /Subtype /Link /A << /S /GoTo /D (8) >> >> endobj 450 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 480.868 450 490.565] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 451 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 467.717 450 477.414] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 452 0 obj << /Type /Annot /Border [0 0 0] /Rect [444.545 454.566 450 464.263] /Subtype /Link /A << /S /GoTo /D (9) >> >> endobj 453 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 441.416 450 451.113] /Subtype /Link /A << /S /GoTo /D (10) >> >> endobj 454 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 428.265 450 437.962] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 455 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 415.114 450 424.811] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 456 0 obj << /Type /Annot /Border [0 0 0] /Rect [433.861 385.355 450 398.107] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 457 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 371.706 450 379.282] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 458 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 358.556 450 366.131] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 459 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 343.284 450 352.981] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 460 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 330.133 450 339.709] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 461 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 319.103 450 326.679] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 462 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 305.953 450 313.407] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 463 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 292.802 450 300.378] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 464 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 279.651 450 287.227] /Subtype /Link /A << /S /GoTo /D (16) >> >> endobj 465 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 264.38 450 274.076] /Subtype /Link /A << /S /GoTo /D (18) >> >> endobj 466 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 253.35 450 260.926] /Subtype /Link /A << /S /GoTo /D (19) >> >> endobj 467 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 238.078 450 247.775] /Subtype /Link /A << /S /GoTo /D (19) >> >> endobj 468 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 227.049 450 234.503] /Subtype /Link /A << /S /GoTo /D (20) >> >> endobj 469 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 213.898 450 221.353] /Subtype /Link /A << /S /GoTo /D (21) >> >> endobj 470 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 200.747 450 208.323] /Subtype /Link /A << /S /GoTo /D (21) >> >> endobj 471 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 187.597 450 195.172] /Subtype /Link /A << /S /GoTo /D (21) >> >> endobj 472 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 172.325 450 182.022] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 473 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 161.295 450 168.871] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 474 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 148.145 450 155.599] /Subtype /Link /A << /S /GoTo /D (23) >> >> endobj 475 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 134.994 450 142.57] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 476 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 119.722 450 129.419] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 477 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 106.571 450 116.268] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 478 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 93.421 450 103.118] /Subtype /Link /A << /S /GoTo /D (38) >> >> endobj 479 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 82.391 450 89.846] /Subtype /Link /A << /S /GoTo /D (39) >> >> endobj 485 0 obj << /D [483 0 R /XYZ 90 720 null] >> endobj 482 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F100 486 0 R /F63 170 0 R >> /ProcSet [ /PDF /Text ] >> endobj 497 0 obj << /Length 776 /Filter /FlateDecode >> stream xÚí×[oÓ0à÷þŠ<&ñ|¿ðˆ`\ÄE‚ ¡Í ÚÖNYÇåßc×NâtŽS²"4VMj=×>ç(ç“­ ê?”(˜B€¢2Y\Îàv¶þšØÁ»g3äÖåzaî­|<Ÿœ2– T(™Ÿ% 1 ˆjã͗ɧ´ª²Ïó—³§ó6ÃxÏ”fåHN©þ•&BÏA"lN X–#aúj],Ë:Ë !é»ò¬¬ËÕ¢4œrÒ#ABçÝFx¤÷sa¿xï¿àäKî8yŸ2ìô›ÌSnZdz˜þMÏê„·ÍïÏø šý¹ a7•€oU£óø• ë3+Gr"¤€”2áŠëïN@Îßëu–c™.o.J‹Ð‚¼DHÊŽ÷Ü7À¬éÅdf^€³~˃ÌüJF˜Ås¶Ì$‚ðŽvÌÞ—W{ Ãú€> »›0׆éº1a½nÓ 0¯’1aÑœÍ5Ê…®_²Fw¾žÔÕ÷LŸcÝUªHÏ2”nu3XéÁ îX—ùý&ÿúÛôo:Í.@ŒfI˜¦WÉÍhÎöðcPÒÑlïØ7寨üa>Öõ¹J=±'!œãIxÇ“Ðõd:·.@Œ[¯õan^%cÜ¢9[n”,iÇ­¹kŸõrk­¨Ýk­‰AkX? ü@^-z˜¹L×Õˆéêu:¬Ë«dLW4g«‹ €ôùÓê"ÍM[]Ÿ[U3IÒºÚ4wîØ‰F x(Úžû†X¹g?U ƪ×bdåU2Æ*š³e…PÒcE«·›oû:‚LÄ!ɹ¾L'׈‘뵟Éy•Œ‘ÛÉ)tN åØäT0aR©°Mwš)šÞ¬›j½ÒÐK_¬–åOKLô÷"];Gü/ÿHãAo=$GíSýs+vîôm7µ"BVüJF¬Äs+Œ†ÍyFPúëJ3Ù¾7,ÅjiŒ£¢®Š/å¨#¡=E¡Ö»‡4½õ]€Xëý^Pl½WÉ­ÖÿpÞþ endstream endobj 496 0 obj << /Type /Page /Contents 497 0 R /Resources 495 0 R /MediaBox [0 0 612 792] /Parent 402 0 R /Annots [ 480 0 R 481 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R ] >> endobj 480 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 710.037 450 717.613] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 481 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 696.887 450 704.462] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 487 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 681.615 450 691.312] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 488 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 670.585 450 678.161] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 489 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 657.435 450 665.01] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 490 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 644.284 450 651.86] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 491 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 631.133 450 638.709] /Subtype /Link /A << /S /GoTo /D (45) >> >> endobj 492 0 obj << /Type /Annot /Border [0 0 0] /Rect [439.091 617.983 450 625.558] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 493 0 obj << /Type /Annot /Border [0 0 0] /Rect [433.861 588.892 450 598.854] /Subtype /Link /A << /S /GoTo /D (47) >> >> endobj 494 0 obj << /Type /Annot /Border [0 0 0] /Rect [433.861 553.724 450 566.476] /Subtype /Link /A << /S /GoTo /D (48) >> >> endobj 498 0 obj << /D [496 0 R /XYZ 90 720 null] >> endobj 495 0 obj << /Font << /F55 8 0 R /F63 170 0 R /F75 7 0 R /F100 486 0 R >> /ProcSet [ /PDF /Text ] >> endobj 499 0 obj << /S /GoTo /D (Introduction) >> endobj 501 0 obj (Introduction) endobj 502 0 obj << /S /GoTo /D (Tutorial) >> endobj 504 0 obj (Tutorial) endobj 505 0 obj << /S /GoTo /D (MikMod\040Concepts) >> endobj 507 0 obj (MikMod\040Concepts) endobj 508 0 obj << /S /GoTo /D (A\040Skeleton\040Program) >> endobj 510 0 obj (A\040Skeleton\040Program) endobj 511 0 obj << /S /GoTo /D (Playing\040Modules) >> endobj 513 0 obj (Playing\040Modules) endobj 514 0 obj << /S /GoTo /D (Playing\040Sound\040Effects) >> endobj 516 0 obj (Playing\040Sound\040Effects) endobj 517 0 obj << /S /GoTo /D (More\040Sound\040Effects) >> endobj 519 0 obj (More\040Sound\040Effects) endobj 520 0 obj << /S /GoTo /D (Using\040the\040Library) >> endobj 522 0 obj (Using\040the\040Library) endobj 523 0 obj << /S /GoTo /D (Library\040Version) >> endobj 525 0 obj (Library\040Version) endobj 526 0 obj << /S /GoTo /D (Type\040Definitions) >> endobj 528 0 obj (Type\040Definitions) endobj 529 0 obj << /S /GoTo /D (Error\040Handling) >> endobj 531 0 obj (Error\040Handling) endobj 532 0 obj << /S /GoTo /D (Library\040Initialization) >> endobj 534 0 obj (Library\040Initialization\040and\040Core\040Functions) endobj 535 0 obj << /S /GoTo /D (Samples\040and\040Voice\040Control) >> endobj 537 0 obj (Samples\040and\040Voice\040Control) endobj 538 0 obj << /S /GoTo /D (Modules\040and\040Player\040Control) >> endobj 540 0 obj (Modules\040and\040Player\040Control) endobj 541 0 obj << /S /GoTo /D (Loading\040Data\040from\040Memory) >> endobj 543 0 obj (Loading\040Data\040from\040Memory) endobj 544 0 obj << /S /GoTo /D (Library\040Reference) >> endobj 546 0 obj (Library\040Reference) endobj 547 0 obj << /S /GoTo /D (Variable\040Reference) >> endobj 549 0 obj (Variable\040Reference) endobj 550 0 obj << /S /GoTo /D (14) >> endobj 552 0 obj (Error\040Variables) endobj 553 0 obj << /S /GoTo /D (14) >> endobj 555 0 obj (Sound\040Settings) endobj 556 0 obj << /S /GoTo /D (14) >> endobj 558 0 obj (Driver\040Settings) endobj 559 0 obj << /S /GoTo /D (Structure\040Reference) >> endobj 561 0 obj (Structure\040Reference) endobj 562 0 obj << /S /GoTo /D (16) >> endobj 564 0 obj (Drivers) endobj 565 0 obj << /S /GoTo /D (16) >> endobj 567 0 obj (Modules) endobj 568 0 obj << /S /GoTo /D (16) >> endobj 570 0 obj (General\040Module\040Information) endobj 571 0 obj << /S /GoTo /D (18) >> endobj 573 0 obj (Playback\040Settings) endobj 574 0 obj << /S /GoTo /D (19) >> endobj 576 0 obj (Module\040Instruments) endobj 577 0 obj << /S /GoTo /D (19) >> endobj 579 0 obj (Samples) endobj 580 0 obj << /S /GoTo /D (20) >> endobj 582 0 obj (MREADER) endobj 583 0 obj << /S /GoTo /D (21) >> endobj 585 0 obj (MWRITER) endobj 586 0 obj << /S /GoTo /D (Error\040Reference) >> endobj 588 0 obj (Error\040Reference) endobj 589 0 obj << /S /GoTo /D (21) >> endobj 591 0 obj (General\040Errors) endobj 592 0 obj << /S /GoTo /D (22) >> endobj 594 0 obj (Sample\040Errors) endobj 595 0 obj << /S /GoTo /D (22) >> endobj 597 0 obj (Module\040Errors) endobj 598 0 obj << /S /GoTo /D (23) >> endobj 600 0 obj (Driver\040Errors) endobj 601 0 obj << /S /GoTo /D (Function\040Reference) >> endobj 603 0 obj (Function\040Reference) endobj 604 0 obj << /S /GoTo /D (Library\040Core\040Functions) >> endobj 606 0 obj (Library\040Core\040Functions) endobj 607 0 obj << /S /GoTo /D (Module\040Player\040Functions) >> endobj 609 0 obj (Module\040Player\040Functions) endobj 610 0 obj << /S /GoTo /D (Sample\040Functions) >> endobj 612 0 obj (Sample\040Functions) endobj 613 0 obj << /S /GoTo /D (Voice\040Functions) >> endobj 615 0 obj (Voice\040Functions) endobj 616 0 obj << /S /GoTo /D (Loader\040Reference) >> endobj 618 0 obj (Loader\040Reference) endobj 619 0 obj << /S /GoTo /D (Module\040Loaders) >> endobj 621 0 obj (Module\040Loaders) endobj 622 0 obj << /S /GoTo /D (Sample\040Loaders) >> endobj 624 0 obj (Sample\040Loaders) endobj 625 0 obj << /S /GoTo /D (Driver\040Reference) >> endobj 627 0 obj (Driver\040Reference) endobj 628 0 obj << /S /GoTo /D (Network\040Drivers) >> endobj 630 0 obj (Network\040Drivers) endobj 631 0 obj << /S /GoTo /D (Hardware\040Drivers) >> endobj 633 0 obj (Hardware\040Drivers) endobj 634 0 obj << /S /GoTo /D (Disk\040Writer\040Drivers) >> endobj 636 0 obj (Disk\040Writer\040Drivers) endobj 637 0 obj << /S /GoTo /D (Other\040Drivers) >> endobj 639 0 obj (Other\040Drivers) endobj 640 0 obj << /S /GoTo /D (Index) >> endobj 642 0 obj (Function\040Index) endobj 643 0 obj << /S /GoTo /D (48) >> endobj 645 0 obj (Type\040and\040Variable\040Index) endobj 646 0 obj [272] endobj 647 0 obj [285.5] endobj 648 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1] endobj 649 0 obj [892.9] endobj 650 0 obj [285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4 456.8] endobj 651 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 652 0 obj [569.5] endobj 653 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 654 0 obj [562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9] endobj 655 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500] endobj 656 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 657 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000] endobj 658 0 obj [656.3 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500] endobj 659 0 obj << /Length1 1590 /Length2 9658 /Length3 0 /Length 10543 /Filter /FlateDecode >> stream xÚ­–eXÌ’¶!hp‚ûà3hpw î>èàîîA,¸»{nÁ!hp÷àøæ=g÷$»û÷»æÏÜ]ÕõÿÂÿû0ˆ‹;zù²BÏ••j âäðrýÿG¢¹» tFnÿzs¡Ï˳¥ ô1ƒ½Àæ(‹óŽæa¶i-åR…“L°âV­‰ÊÝ3¨¡?>ÀBJFœ™Öt*3p0vv)<ŸH\c:üÞKŸ;'~š{Þõ0ÙÍði#ѹÌPòÞq¢º =Âlo™½:æ†U™^-OÖ-êÏ>8ÊWeÔØCZ¡„éÑ÷hêÉ ãáՑ΀hF†7ÐqRªa}r.âŠ\õÄJþ¿:`‰ü™yù±ÃýÍC!r^Ò³1œÅ¸–É­Âiª7ú–ÞCâØí›ú ò˜-÷<¥tÝøê'3ýŠ,>äò}æ,ý/7ƒôš.§¥šÙœ"½{d"® ™hy^t›˜/E”š0õ‰µt­«Ö&zÊ7äc…ó¤Ö 2/ÍQ>'ëM3ñ_¾>¡Qƒè0j2i^ä9ÂæÃ¥~W7¦“»&ÖcìÛJ×FYvcQ©ÒÌíD°Ê­5ÿ8MYíGá².Jt–ÔÂ:Ü2y-…c×ÝX!•„¥ }^ÞËËܽ^P¼ôå ¾iùU%/ÅCr¿NQ«I½5æ ³R¦ct†ã 1Ð4¤ÑÑŽ‰ÞcYö/ˆ6VÖÓOˆ£ìïµ#…òÏ—iK¹ÝŠÖØTX •ãQ%5&¹ˆI–…é<{’=”«uúïr.%ž_aæþ\„‰³DßAÍ\((sIïåX.c‘´im!Jäg& ¥o;çQŸu,Ïç—ŒúˆifZ‘Î igex-2‡ê±â‚ .«ª ÒæûÀpC+Áƒ˜ÖãÜÀºJís_ae¿-Œ™Ö#t w?n\Ùâ—,îï²­•ˆLŽðivžFà0²q‘9ñTÖϺn<( XÚî 91wæRÓÚ‘êNCêã ²cÃÛÌweæ¡ÇÊ)’åÀhßÜ ?Æ`siqÆá$§æôsßct"Ošëê6G[ TNqá<~}O°3â$†÷ Ã5LdÀ4{`H†ßž„y—õ¨ ¼-!ÌÈbºº-xW†Ñ9,ì]ÔêM…@íAU¼4°î…cÞû˜¾ª:|€O¹ä‹ºÅä4J(ÖÊš÷à¨h›¹ìX‚?“¬·ü|?†Ž×Ûó—a UÊOšdJy‡w4=ˆ£˜5 ŸTë×ñÃRH€"u …ÖþEä„ÞbŽ>‹âVØïT¦Á5Õ§ø¢íÌÝLnœæo*àá†kÅòã½TI_Ìd7yÐÒƒÌfƒFë)$‹É„0;±çP\ô‚#—>?sDæÝhú×î5l=mô`>ÊŸæÐ˜“éT rgôO† ¤ÒÙ”cžþPµgЊlÛ4 Á8t_ììF¿öz?´lR·àn•¸Iâ-”Ä>\’UÂV#cP±ß© ÉjჩPFâÑd˜ÚV|ŒSFäzO ûø(>«<~5N¾ÙSñš‹§ÔãG:&ì„’y[DþàH£wåM¥Äýú¥dyšq2[o6ψB‘Ì­k„3ó©;Xìk·´ïÂj‹_¬.šÉN—Æ#­sêæà$p¾tüÐ8êuuuשûuo”‹ÚG=ðÒ¸ É™ûUhiŽpâDÃŽ( ‚(3ôX§¨/"“¼}e¶:s"‹Õè{‰®*ž.€ÍžËìµ’‹³ªkº]ÍKt¯¿g]Þ{ñNÚ-AA3û˃Jý/’iúxc\bç >48J–§`òR^˜wlˆÎȳgø¸€’öocµ”Rå‹¥3 ·;#×qÛ͇«úS¬<¯ô½žÌÞyš¦>¤Óìó°vut™·±ùŽ3GÙÆña¼Fèk“ž|m&òZ-»óÌ^S•k¡uó°ÿl½Ùò-&,ß{GoR)"q×þ6ÿ,>Y¬Û…ÉÀA¤ á_tL$Øë‹ Ø¢0å\¼‰ö'd0GÊ,yE¡¤Qæ?qÿq@˜þâý#¨q•µ_õHdP°!Íù²rE0™ÎkíÁ·ëCÒIÚè}O T(2"›ÔA_kyöJËÇá·&]"D»ã¢âÄ^E˜§D#{î»zø“oÞ£‰üâÆ°2¿´‡’1é³¼‹E“ÉqY7 wîK¼„áqƒHÿ…­·öÃ"°È'™dm(‡§ÒSBÀ!٠׌ß~‚ž‚‰åjCÙÊÃÆpb? r™ÒX“à&íÑ÷sMTeš~í(­uQ„O…<èè^¶œzñ÷¼£ûqõãÑbªmŠb”¥«=}e&oumk²¬>sÊßT‘J*ð÷ê×w0¢ðž"6M×üb=_ÿP×бutÀÀS~ÊÞ&næ˜Ävš¾•ïîó&SS¦¥µ¼OyÑrŒ6ód&Š «hïríA½9e‰ÆÕ¢»™ásŠ_/þ¥*Sþ¢„þÉ‘Á…¿+|¯ö-EÖª\–Ï|Ge³Båþ¤êç°§3å× Á)©Šó}ÍB8±ÇÏ«è#+nû¾v€ïW´Ý.0’è©õ¤Ï„?Åí™"ÞÚΞ¦ëì²3Èãvjµ'LnÕÈÂÓô¢Ttä<#cĶSpÂ~`”-y3(îò;^/Äk|ÄU?à¾j©'·çˆ«óƒfêkÍôë)çƒÊò†wÔÃV͸ú_fÈè7*0­üÅJü“uas<Êa›Üúq˜¬ à.t‚™V1ÏÑ­XÂLRHO_Ý,¡ýä1äB¨¢•ª˜.RX» q^ÌX¶£vÅŒÛhÍ(¤©ãPîþ¾þ,U¦m”Á·–ÿ$Ìå;`œßã¥NuSÐŒã>ž‚¼OÉ_x\ÿ8éá4jÖM£+Ù°¼ì·G¯Îoîqâ^[¬!%é‰Cü™ïÇ} ŒHVòቀO:…¬°ÁTi®»}8ν/’þ¬–Nöw›èÝC¹Œ1Ö‡X^å$OHLFÇMÓçw¬4Ãú…ïœ:[|¯V$ˆ›T0FLõݯž¬§kPŠwo$ÙŒï<ÊP˜¹•„HïªÐˆ7½pÁŒ/¯™†yZ/hËNÙåýa6üõ?/%G_H9É,%*-‹CB­N­šksT¾~d48‚W&“ írñ ˆMÒs¢©`œëº8(aÝ–“⌿7ì 6 4Ûh +»Ã™G¶— ÂÑ1tZRšrö ,‡=ÔLar!Ì q}T±* ä>i×Kn— ®£Ì¼špŠ_hÎ-ø\ý£hŸ‘åúVð¸a.j·ð j¨býV´¹OKXKÉ‹æ¯îHAé*'òà€ÃOíõqÂXzŠß©ºý›Ô&ÝkðöRiÕb»¶×òQá¿’çc¦çàÍ<ªa=+¶Ï‡FÄ4-X“„´$EígBv²õÃ6_ÈØÙž6L³#7„è‚‚K‘q­“Ü6™E”é>`±e‡rùíiMQ ½æ‰Íe(uùÑz q·õð_ÒÍý Qút&¶ \n¿¬`;O3ë­ÛÇÏ©8"hdXååT“-öá¡Óª·J•5¢,’ºè.é›",¹S•Ÿ9 ÅúXu†¼4ή¹N°ÝâÖÜ`¥>ý( a6;¨?™Õ…‚å:úüUƒÏ_"- D,aD‚H,ƒ­à}‘0©$Ê™_&>ÍÀ„˜H°…Ý"—ž]Øg|¯T™@FNÁnÊá zíøÍ©…-^Gö–ÕÖ4~–~Y~x¸;;öbHm[sÿî­vöó´|žê´î3U kiÓî €´9Lv±¹–­3•áš!yÿdã¦rÅá­;*¹²%㪋g­'^ [ÿ¿ŽšrãwFëÔ¬!ç×™:U$‘}‹–g¯6 øÅ0òüd±þ ÞcQŠñU± lˆG6ã­B!£öçŠJù\ôqkyý$i¾ˆŠµeƒ:–v*òµHÐHüTž÷îR÷Y…P€^ÿ½Ñd„M¦þ[ OUéǬîýHSJ¥:V¹þF0,u¤:¡rqªî¤¾‹ê.D5WÆð’Ë–kÝŸm·ÕØÿ‡ªÂ@õVì]MÕ¤SéjQ£-N(y ÒQ~Îbs¤sLP”æ^$ÂFùÆÐ®µ†=P+Þfw,¬?–¥Òu3ºŸKÕ2%g›5¾ñÜb¯¿Š‹fç4Ç]¨É ,ƒ‰Ù4Õd>þèµ pr妮“þì“é\œBDVö¡ð ‹Óú–Ç/9U9Á@Cîw ë¢Wç+W1µŸn!É/Dñù1 1¤±ìÛ´»Ræ³ ‰|tÕ å«™ ±ضýÔ`xUÖ íFþZÜ( Î0Ñ#jÌ·ßU磮¢] Ú^Ž]L×bá›Á½k!ER“o»ôgD³ÏöÇ]ò6¸ïäê;‡Hç+.m}'¸9ŒA#Õ¥ § C½àcb #‚äwéM8…#Ý¢^y½Ö…Ì#gvVOTkž+T)ü²ˆ;É2k´0ܲ¼P’ gnñµ¸ÓG¶×fžªWs:¹Ó@ØŠZY³p'¶¾\sò©…)·O†®²«šX*¼(£tWÊÉoÄFðì¦`@K±bE@¯ýޏ¹iˆð6¸äº75dtögµQï‹L³DK€Mæõt¢2g´¸Ù-€Åk…ˆˆ$Áy’¥—ôFÚï AU*¹ QËâúit z’Ë^£Ô³ØúÁø`þË'N8Gžð^.´„Òjö#¶x;JHq± h\\s@ºl3 DÀ’\“0>«ùFpQJEt¬(xã‹Ù5L<©‰$; âJ%Š÷þFD½‹©5ŽhÏ*œ"0ÊQ~1N·ˆÙ^ÝÈ:Æ«#j1»ÿ£ 6«ÿñ·_ßDýá–kÉ“¼Ì ÌP©núÍÓùW‡u%'°ÄÞ_™ô×>· ¤ã†÷ç‚Uð‚è»P»1ó?φìæ|úɨqO÷cÍ)Ùœ±ÒO¦ç‰ 6ðXm­Þ675¾§1ù†“:i9:3Õ^m@Élʼn›|•JWOºñåãÑ ø¯k›RZ&íOÚ C“^>Éz<›¾—¥Ì}ÐúÒ¼k@~AX²Ü¼Ž~˜‹—3tY}FŒ Âi/³ûÆÎAö±IÄúliB¾WVð·'>~‡ðý¨5 áêàž²ä²û±ÞjÌt3Í%쓽Ò+W«Ï'"`Ïq¢ÛÂŽv]Lâ8-NÔïuïAXóèMÑ;¶ X߈ˆæ¤IþLeí«º³F}l´VÍìçØ!æ¥/8°šù›—ÇÂ=;‹«Ë9ÆYdKoòÉ”¢QHi xÚha%|õ#ÜìÍÉêpB¨d£èç_WÛÈo/‘0‘ÿÙû“õšòË*r±]Göª‰H„E_jjgV ‡kYžƒ…rÉÖÁA¹ý´WAƽ/L“Ò®èÙ+úÜ+?±xÓŸ±{¿ƒ3K޶ùŽ_;¨JŸiX‡(WüÔOGßü.0·GWÐêœèžff_që–>¡~Îu «L)‹œÚ¸d`YG~7(˜„ Ïh5b»'UçËÄSòZÒ‚²V:ÍÛO0ûÝ)Á]ÒÁ•½£èö)ïU£ö¦€ûÌò¦ã’á k|I&9—r“ï·1ŸíôÖæJ;æ¶(-…»§¯æ/³lWÂ_©æøÎ¶ ¹q˜‰²LqáHØ8§¿1£PŸ©.j82Ç"ñÙ=‡mïËõ%3å°Ó¦Å¡1åØÜ{øÉ)¶Ð6 nÖUÆŽ¢Œ§…¾ÍýìDέ´¹È¼xÉU8¯äËgÇŒv±ÙÁìB؉¢ÁUS)‚G£³Ža¿4a±Q ¯2±/òJ•í Mâ•W+÷å/óGÜíÍTŸyûmRÇÛÀ¾_HJ5¯ñÐóÕEá[óòu–¡ðË婅ļZSG²ïkûÔ+)S¢¡ý2H?íúÜS&_a«Ì¶“±ÅíøèÑ}o$èY„ÅŽt© š9˜a¾û0pWnƵ¹Ï^ 2p*lãÐRmáE.ä´,lëˆQÄhb%Ç! +vúÀLÿr›jú…FÓCž¯Å%$Ù·KFýLF£p½6"*€ºN¨ìYåö!Æ=q3žD{ÊgyèÁtWÎUha>¨¾dè˯ãžêòâµEé\ôU™{dïÆd"±Tªˆ¹¼2äY kÜTF´{ùH÷›½N–Û ì¢>á´ºo¡n’_™‚&©Ù‘Ÿ¡CfîÚ!X{nZÈ Þj^z£ùétöŒô.%¶¸¤›,Ra0W±úrS1o&ÎÌíwvî-‡\ð^ X_gLIV1§¾·[t5«oO ÁÞá€ÌÏ¡uñlñ3"a<“•”IðyÛDΗóé+•mmy­íÙHo0b4ÐïB‰~U $ØÛÁ™V˜Ò\¾rìv§GNü¨¤±LÓB÷N¬”À¡ßS,“IÉ÷åQ‡Y sQï6ÜÕpgßèsjE×Ï@¥Â¶Eê ‘•¨jõ‚D°#±ä„“³¾QãA¹”T¥\.‡ “dLÓ!tiGóúôAqò‚wœ!]ùÓWYˆrî6C›APG‡ùV.?Æpu9Ç­É<GñúòXžÖƒv òPxç«M3²M2†é÷Œo³†2íE+ˆZê>“Ñ/‹ &ÀxÀöQxb†Åu}Í—ýºA#Âò®{;^%øþû0 ú(ó§ì„â›`rD=;@í–ï× اr+y"J‚p ãx¸«Ëˆ’Äí»îûvÌ”y¶‘[èí - YŦ°F Á/`-­Ë‘G+Ž’Ïþ^#j¸ïÚ~@Æø¶xáË5;¿‰)Y¼4ý,?õ¤Œl!a) Ô5ÄÑïGt#I÷jëxÅyÀF”M榧îZÉ0?¢¹6eo÷qVzCìÎáÅSG”¯5­êÍóøZa|ççMG=Àö$Bh­L<ÙÊǯ >F’ã¿¿‘3P¶J3Q'þ\0ãx4«~ï¾÷,`Ô¤ó ÿ[ÉhRÍ58ð°ýùôÌu ³»û—^¯üq«´}ƒ­#ù·!9z„ûåj¦Nî¯6ïe-RKEâ¨p™äÙ_κ š7i±õeã“’ C‹ã¿;¥<²7½l¢0~?€)LS_zðØq|ä¸*‹×v1]„­Øw7»ËA¨ö³P[’z6°ÈɲeKCïˆRV\F;iåþÕaÀ~ã10I|p'èwÅÏyÊߊ¶ṿjáe¯Via1#ú‚¹Ò@ïÕõÅo†á9à{ÑÑðL¥Èöœüi‹±ìš’‚ž³ ×í‡äú²Áˆå\á~A°!q?lÚà=DZ>œsºš±)V乿™¿+ lu)h³ $'¾¼Ç¿ˆ»cW^tÆÇƒo#}ØÃÒWÊè4ô2¾Ù¸OÀŸŸ/öu:ÁÒÓ~mÔ»þò"v9GÝx–4ôé›CÀò`T¬?¸féä9ãÎû<ìëÞ|\ÚØoR•Þ·ãÊcÁ[@>oú¼wàÛ™i ‰Ø¥xÈrtþ¼¹UZ+¼r/¾(¡Ik‹¤îH¼/•°“«wƒVDë´õÕ¬V8ScýqgÝŸ¦87ÂéOw…•­j(‰­µ…‚”ë(7p¸ idïW¡ÆOÁóc×è`”z¿‡Ö¼Kã«â€¯}Mº°5ޏóÁ¢ïAúô9Oak¹×é¼»•åÆ=.HAž%¶„K`×g‹ÎSiŽP9ÔØ*¬e)aÐJ'©¡­?Û\Þ…Xý6úêä–>“Å'Vì›Îö˱­×¯pŒîûÅ ëP#Œ¾#{sžTŽ·U«²ˆ.YrcvI4¦6çíãü.®¯ñ0ÿñ¸œùOZv >Ê‹£‚_ÑXL’Ùu¼šð‘¾÷µ+¬ÆP*³‘¬ì6z¤§T-›ªÔ^Îò‘òØÅH9œŽHË7=0MUÏ5×cõK8†çÕÉ%EÔ)ÊŒLä˜û¶¼6uÄ›_S–HKNÑgâ^»Ã;éY±sZ&âÍ+Ó ÚY%i\Š£íh.´™òqÅKoÉ)Ð*OX.e=|?„iÞÇFDÀÛAÿy ˜è=èåÏÕL¹¥GîÅ@ „‘ñ?/Û=‹…ÂöâÆè2]¼Í7Øá¢;¾}$xEŠßäª$¬ÊŽhiŸ+xtÚd̹j*¶Ža”‚xJrܦ› ì¬¶^¦h­>àu‘¯.!Õ¢5!CócŒÖ·ÉéØ3é%Ïçéþê òR¾fÊÝ ÅÒ„Ð6ÝÑÙ‚Ñ+dùaKS«^FÇïl©A„(¸O¦ªqSãþ÷a Û”:¦/Ä6âÊ⽜(Åj8º–áh EÏ$ 8‘åœb=Š}áØébÏAåÔࢠÌìÍ0PÓé¢wÖÞž{HÜdó»·1•óµ6ïwE¶2><»ÇÈq›¸Ï/¿G‘)¤ o%ª±©á`Ù#š_ˆ‡~þ=2ñ9´±=¿çâ¼Êˆ¬Aœ™ŸOÛSf‡õ¼Þu9Tb2èäè^A_ëÆVܦ쪡øþ†Ë ÆÆ]v¾Š,WR½'ó«`ÞU+ŒßÞq@éP³ßeƒØ)8}Σ’i7‚¼¯†*ß—« @ÙÙn¬`&¯hZÖQ÷ýÜs »¶ØL&êoÎÍ É¢í—i©žq²>OìKÄ*yŸZKdVp0/f‚‡Uû¶¥Ôñ–ÒÅR<Õ´*¾&ŸD2¤ IÆ>>Ìf‘â3ÅÊpQ°T>¸N•3–_d;`×ÿý]âÅpÐ(Y ~¨ïëõþáA¸0îM9­Cܪ RÅ/̃»Œp›GáO"¿™œ›£L.m¢ô\‹äpÚ„~ø|ÙE%ˆdM 9NÊÙH× ií}…ã>¨ùSíQGÉF—Ö EæIh)É•2 /³Hò±ÖÂT"õʱñÝ&ãX±¤ª̳m æ’:_1OH“ >Ù®)Fèd’;ÿ!ê°gQ; wQ¹à‘,A‘†ÜÔ1ß“hú-„Xû5 ôkøÁãÎÀ„qé½$­OõøŸžVlâˆæ‚>Í’Íö¸?|t\B¿ÞCϪÍ<ÈÔ0¸— ë óÐÔì`'þEif?¥â6óEýJ‚¬=F å)QYÀݲY#·`EQ¡q$.©¥gË=]ÇrÇXmaD-ZH¶zæîûÍ'*¬ÄWíå[’7÷Cãnä$Oo&N=+TÅr·é#LYâSÌ(n¤ð¹È,”ö¥«eÁ!ª­®HA:°Á®{þ‹c×êÓùŠOp§6Ÿ±õæ¼s¶šÁœãÙ‰‹øÚ<¯g‹SKIÇŽÓG7êÛ÷7¯)XeŠ„ô³¿'6Ò›"3“þj3ôða¢÷¢Iójr{¾Lje†¸…:\Y²#,úíD®˜ÿ(õµ6f´SeStûìÇ8 îêçL•\|t^V&“³š÷i ¦oúáÚ®Œ™›GŒIKÛóñ4=Î3 É+( [R$ö/†63>M›ç¡Pus:BðP¥> ¶iJ"lGL^B®÷Çf;Èâõ”u¬¿‹ÕÈ3nÇNÉkæÙü6¯} t¦g\ùÖdÂ<\'Ÿ"§ŽÒ]ÔSÐè%ë{IÈFÆ£Ç7ü;²ÿÿå§Ž– endstream endobj 660 0 obj << /Type /FontDescriptor /FontName /APRKCQ+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/a/b/c/d/e/eight/f/ff/fi/five/four/g/h/i/k/l/m/n/o/one/p/parenleft/parenright/period/r/s/seven/six/t/three/two/u/v/w/x/y/z) /FontFile 659 0 R >> endobj 661 0 obj << /Length1 815 /Length2 1790 /Length3 0 /Length 2355 /Filter /FlateDecode >> stream xÚ­Ry8Ôk–,5t2tbRúI#Cf³Œ!ËbL5B™f~Ã4›ÆÌd—J¶NÚŒ†dk#ªs’-e©L‰’(’¨ÆQT¢Cvgètº¾Î¿ßõþóÞ÷s¿Ïs_÷óÂuÉžÆw7èÄåð1HŒ%à@"¹`ЀìŽFCàpHá3¸œÍ>h `ðxsÀUÀ°&gifbi†ƒÀnh ó"@`ƒ<•ÂH~È–õ RX€'—ÊùH€Àbó/Â0 ä A‚Á4•ìƒjÞ“ ‡Îpßhš ô{IòÂd¦ƒ›@f’Æå°"H‡ ¶reÓ@™—ÿ‡­Ÿ›; X¬­ö|û…¤þS§°¬ˆ\v¨€ò—ò8?K·ƒßÌ‘@CÀþ¹ê§°T'˜ÆS$ÚôÏsb„ƒ42ƒO èV¸ÀƒÚÏNdù-ø@ùúølvw5úgµ E2…Áá{E„‚ú‡zc~`YHìcŠBáóg3_b™qͽ*§iz}"H`ÎM·tÐç]ϱ‡“œ¹ÜÎó÷52G5f;aõÝ­Ì—ËÄøÔÒâv±õôR4"œþº‚Éb®íô=‹wõ´\²Ú¼Í'W È­²ÖûÚTVIŸ–¼}‚À¿Õ«¶ºˆmÙîâ=¦]”§N-ÔfY;Ÿ‡-¯Õï¨aÛpê¥×ܨ3¯µ`­OaBËÓáA3ð‘õ¿)ü85õêë\*¬fˆ¥+§uE~»‘E–­ÐÀhÑ„†)>M’èúQBNöó ¶[^©Ø¥6°Ù¾Ž®'¾øöý+ž]JÒëÄBÞ[N°3r7’výQ!9à.‡÷»ËÙô:ÿóÀÝšÔ,ìN'ÿWAÕ^Ïîߨ-جQœ¨(©pr*X_±„ÛñÖ^S×FcµÕ¯j„©r´³®5ü؇[Ñêf“k.[šg·N[õ=yKÊ?^4_«ØwP›yùÁË0ÊâÓâÛÄâ ˆ‹âë’+7dм¢Ý3˜— ‰…‡ÙÃø¥éEøkŸ1‹s£oýE¨¸GÏá®ãF  ð]ÅÃ|µcä©ü $Ï϶º¦žÃãH¯LD ±ÕÛv™Y϶Ú\ô8w>*-nhø¹éšä]K•×oñ°PÇHQìÜ¡±g Ô±¢É¿“Ó_$î~ÐËÀ¿=xëT gí[¢oS»ZûfÜÎÝ ¥{E¡Y~F)‹^OÂi•ùìâpÚ é}{J°A§–„¤qÇå/-ޤ24õ°~aæzÈ+í°+5×å»ç[r<õ]ÊX†ròÝ ã_DZÒQ^|öÓ-¸¹Gi¶/óÈ;Æò&­{žL ök4~LiîºiB¢“æü=Óƒ4é¼½u3J]ù{$ämÍñÙ¢4øÔHƒö–u=m+[ÓŠŽî:Ÿ]_8¬9¾šXó૆gÔ Ns¶îþÜ{Á×»e~Reø±|5 ÿ¨êJeË,+\úbØ †r»I ¥ñ9‚<‰òj*¼ ]6Wy¬~¹^8s§:iŸ¢É ßrÑ$t[Wɉ£Ë<5öU Þ$½J3šQ¿·ñPÓ½eq ?OåHìò¦ØLÛš#n£µ¿ÄJ¤Š·’6¹c— )C˜?IÞ¹òýÅCª ±n"íÞ¥ u‹Ÿžð€ö–¢ÇÊåm’ä3UÒi0kg%)_ Ù3;ñðÜŸ¤,%£éòmää!ÕOçÎ÷%àŸ9+Ä=or/v„É™òè‹ÝÉýݤšr5c ‹mº{I›» ·ÒóBœ2öビlž¸ü6s½hø)?Oqg¥4®¸(2©¨—ÙcùÀvxù–¦ðéñÇÉSÖot¼i? Lë]¢‡âGKô‚é Y§‰®÷ÈÒ»RÑIgå7 N'T£õÀ´ÝÈ]z÷Œ4÷µ*£ÅU’ÙwrÚb4•–ž#F^“ê}DHÔ¡½såkf¨*7Kú*þ,¡Ú.i·»Â¶æM*å®·Y³b6ŒgÕUõž9©_¥›=ðúÍñ[ö3Ì5WæÈ>¯ž*ãòK€d|ŠŽ°x³Zòàþæøê¢ 絫·ŠÊ~O´jdM3Û––èkçêäß}‰3¿ÚâçÿLaçSe„Ø]ä/L‡10%î?7 —´wdÓzgöls¹K®¼S=ÈRœ8¨~@Ù¢R_qÝ…´¦®þãØo|ü endstream endobj 662 0 obj << /Type /FontDescriptor /FontName /XVVDQJ+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/b/m/p/period/slash) /FontFile 661 0 R >> endobj 663 0 obj << /Length1 753 /Length2 981 /Length3 0 /Length 1509 /Filter /FlateDecode >> stream xÚ­’iTSGǤÔhØjÔ´.£6GA ‘€­!J1˜Q°†¼—äIò&EQÄC]Y,P .¸”¢q©¸¢ˆ ˆà‚bQƒÀ)µ@íõxŠ_{æËÜ{ÿsç7ÿ;”é"±'¢à@ ÕzÒ½èÀ tÀ÷4Bá©a‰ÁÐ-Ìt__°(V l@›Ëa±9,xXŒ^ÈZ0›ç6$b® V#R „­Vá=¤%cRÖê½W©K‡NhÀRX«ã`È‹@§‘jA,GPuˆI€Ê0À~—†bc>”â`µ‡³‡1Ý a¨R XF cøm0Îò`l«TKTCí‡ú¤.Q!Jý{¦Š‰ÕÂj Ä XŽ”†Áïà„0„ĪFVZ‰‘rQ¹žt¦ù.h ‰­Td¥ÎÃ(4’÷o˜ƒÊqƒ—-Ÿó~´ÃE‘AµËô10 }TÇô1n’Ñ•4/Ž ñõa9â²…¨ƒT, Q«%z oÅ`±€‚uÖáÄT/ÓâGîLajÂÐ\Ys5  å Ÿ>$ Ó<½iÀ“ÁÂÓ>€Í¢%üG(U«aT;üYp;>Ä2w†u°”ÐÔ€Iý6¬É:¾±$qañönšÉ9û6ÔV¦˜sü¼,ü\o«OÔ-ƒ§þå’â²9è¼ëeÐa*$c="ç/ÄÔ”».‰ãÝ sÅ]RKÄ*ÛKªTy›Û›¦µÅœ˜ÓuofßøJûÒÅÏéì"òË´Ñ% ƒ=‰Ñ¦kšÆfC3Ÿî"D”/΄CŸ=Üvõï>VŒ5í¹41"·ï‹šÈÕ÷oF·s|·íöw¯ä—fvÍ.©‘4·dŸ7ö-šB~îƒ$Íã8;åúäN“ï6)¡b[xÛ/?\`›rr€”ç˜}›²µF·£¥Æ¤·[ï°}Ie¾ÜŸTMòÿlê1®UéÒÞ§Ñ8Ö¥õPˆó”’¸ÚC‘ŒÎúùX¹©ÇñPþ¶ScÝ{;Œ³ü‹©.{Î`V®¹¨Ÿ¬Fd4¯c‡šJ7¬½Z%ÒµÜns¤õ>- ¬fÖ…»O~Ö“ÿUá‘=;Y¡ì6í„Äì;_vïÏ1ó6µfpœÁ½§µöÌ=Îæ˜ Z×ßó”“|–Al’‹¥»Û~¦ê ³S¥]Y†¤qyÇÌÀ·ú›“ˆxí·G»3ÞŽœkJðŒ/;S뾺ÌãURÄÀ¶šSã«zòyo–›2ÚŒ/Â÷É´ÐqKˆYË ×’"U) BÊ8BMr5ÔÓ2zšÓÍgLb&;m€÷ÊŸ^NÈ|K¢Ð»²([CÙ m7F¶WÕô±·ÎkaÒǬï·Z'w¨Tcz-NÄx÷-Á† ®¶ÖSüAáV D›¥OðƒíÒVÛ(¦­óU¿jÎ ön§l]ep0O$éì*w”½vº{…X8 ¼PQ›à;õèb“àk4]ý|“…oTË)Ýx½¢quÄwël®yÜÈócrKØ¢®ãQegìëŸN_’5“{‚Ê_ʘ¥UÝéîýî;ÂÒ°-‹ZÂùì·èË„•bUÉ“ÇWšç7W;þZosËßoGY]Jâ(à£1§“3CŽÙðk7»\ÞÚºï´òÁ~O&?jc»s¼b&B¸å}Ÿ#ðÙö*ˆ•“§O êžðûCýîQ–<$•Ÿ»žY^ôºem`ñ·¼'{úMšôùŸi›UyŠ‚nØšgXÎÕ·Ff§’:Uß ™a¯z.×'¶ÞsÀ4ì¸%˜(,iS8¹]wÖæQüCäÙ¾èÎ/‰’}é•©+ަÎGŽ%úðÚ/ÍlÓf]M[TÛZ?gJþ žÈ´èMÅ&Ûº":Ó!ý&;ɡΉØ^ÛçHn¨o4»vD ÔÿcØØµ endstream endobj 664 0 obj << /Type /FontDescriptor /FontName /GPANTX+CMMI12 /Flags 4 /FontBBox [-30 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/period) /FontFile 663 0 R >> endobj 665 0 obj << /Length1 750 /Length2 984 /Length3 0 /Length 1508 /Filter /FlateDecode >> stream xÚ­’{<”YÇK #EºÉ¥ƒ|–d.44”vÆ¥ƒ %´õš÷Þ̼ï˜K ¢6"·í*†¤Me¥’R6J¡u 5)j´aKIH‰®b_Ú>}Vÿîçüsžçùç|Ïï9fÆÞ+&Œ#®8&±¢‘iöÀ‰ÍvcbK¥’ÌÌœD$AqÌ’ ö€Æ`Ø‚ÕR>°¶T;{º=N2N¸0B„†„J€¹“ŘÈ0ˆåB`C’PD@ôàB|ÀÁ¹("‰ &Ÿ|ÆNˆ"FD[˜L¢ÑŒr%  A1e É ãáÀîK– ¿–¶ "1ÌÇ1- ã?ÀDñĉÛ‚åÿÀšØÜUÊç{B‚±öcF}W†(?â_.J%ˆ°qa¥ë/llF¥‚‰U7 ÄG¹L,„+ÚR2ué—<*vEeìJ¸¡€ñÅÈxÁà‰$„}ãï5n¾?Y~ìxÍB1‰o„Ôoâñ˜ö-&,¡2H%S©4BH¬¯» îrÁ¸8Œb!Àšn ‘Š Q‰VÖt:ˆ¢ƒ@d0…Œáâ Œ‰<\D›*} ‰ÁàðXžôý;X,\eeÍVÖt¢1ÕŽìèÔèÿ¹R‘Á$ã_…pãkÌC D†pIÊœë·9ýR|~ŒK®â”ª…Ø@ž×P¾«Xî@îis˜uOTrÛ1ÐÙ¥³-Ð>Ôç~†óèz—˜Ûj¢8”]tj´f[ü–ÉQëçöý¬R›S]9SØ¥\Ø),±ìo5jßR®ZèÑM³;¦×—45ÿ~Ëç71aÛ;”š°éÓC¤ 9eiÈÚçí{ë?ö®Âsqå‰ÚyA™Cº#J½ÊGMaiÉÉ9ì)ÍòÃT ïïF-+l¡Òÿc5Ç^ÝÀ¶eèæÆ>¯Ìº3FS? ûtù× ì/WÒã?Ü~¸N \öÙÃ&gXÓ˜ñÚµ†»ÉÚÒLôGæ¨>ÒÝ[”Uq0ròe‡êÐò¬Å3ÐüP?ã”I…9W_n ¹{^ÃCçèªà‘”ŠnC’ù… “&÷§ß›ênò¢ôcóbRBVçÅ=9öjQdÁÑõQ;¶ü•`Õ<Í÷£òØÝ[.ú[÷U ³“ õ_›®Ï*ØÉÐ1sι“³= Ûý O~L=éæì·frÏÜwšá1³“£2<ü,žîs Æq¹ZÕ±-0WQ:¬(fIO6OÚyý“—³œ«8C)l³)]±õJþö„ÔÖác—Ü(môµ47†kÒ+¯>™_˜ímpl!Æ#GHO °—Ì'¯O·ÁùyRQfWãz¯´ ‰óëû-^iz}„{bm€ž­a8îrª$Nçfû¿%7è[´›é%ë¥A²µQo=;䩨\y¾Òì¨:ÃR3<‡÷zÁÁÍšÛ&] έN“÷žkÖ¹— ¨u¨àüH½ÓŸ"7íðªKr½mÔ2Íâ™òžé•²J¿+ÁiÙ¸Í/#Ó:‚õ²7>½È¼`$ÍÄ¢«, çZÛ¦jä ífðþ¢ó%+œ­ó“¾Üæ endstream endobj 666 0 obj << /Type /FontDescriptor /FontName /PQILTH+CMMI9 /Flags 4 /FontBBox [-29 -250 1075 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 74 /XHeight 431 /CharSet (/period) /FontFile 665 0 R >> endobj 667 0 obj << /Length1 2085 /Length2 15307 /Length3 0 /Length 16417 /Filter /FlateDecode >> stream xÚ­µeT\ݲ¶»Cpwwwww÷ÆÝ=¸Cpww‡‚»»»w öñì}ÎNöyÿ~£{ôXWÍšU÷¬ªÙ‹ŒHQ…NÈÔÞ noçBÇDÏÄM("§ÌÄHÈDÏÈ( CF&â0r±´·5rp2qq1ŠŒ?>¿Ül¬ÜlÌ0d„"öžN–æ.„”"Tÿ8q Ùœ,MŒìåŒ\,¶Ÿ1LŒlUìM,.žô„B66„Êÿìp&T8œÜ¦ô0LL„¦–&.„ÆsK;†$IÙ™ÙrüÛlêêð¿Kn'çOQ„”ÿ’IEø)ÒÔÞÎÆ“Ð`à oÿ™ ð©åÿYÿ7¸¸«¼‘í?áÿ)Ôÿ³ldkiãù?ö¶®.'B9{S€“ÝÿuÕü[›ÀÔÒÕöÿ®J¹ÙXšÙ™Ûÿm²t·ô˜*Zº˜XšÙ8þeØ™þ_Ÿ•û—M1)q š÷ô_kŠF–v.ªžÿ‰úó¿˜éVÇÉÒƒP‡ñ³¼LŸŽŸŸÿ}Òû?¹ÄìLìM-íÌ ™ÙØ œœŒ§ç“ؽ™-íL„OÁ ôvö.Ÿ[?kâKhfïóOCÙÙ„þ1ý›Ø „ÿ!ƒÈâ$dýC\„ bÿ!FBñ?ÄDÈ ñ‡˜ $ÿ !ƒÔb%dþCŸZdþЧÙ?ô©Eî}j‘ÿCŸZþCœŸZÿÐgvå?ô™]å}fWýCŸÙÕþÐgvõ?ô™]ã}f×üCŸÙµþCŸ3Î`ô‡>=ÿÐg]ŒŒL¬.63—?v–ÿØÿ}]þ³ðÚä?ÄöÌÄÞæóÚý¯…•õ‹­íŸ„LŒŸ§7ý ?SþDø<à¿201†Øš9[üeûÔó9ÔÛXþ1y˜ØÙþû³´fð3“Ù_ÈúZþô“ÿ Ë?èöGÓ?›?ëÿ¸Û»:ý•íÓÁü/üŒÿGëgï,<,vy|ÚþÊÏøyv«¿ð³OÖágmmþÂÏÂÿuÒÏ»Ëð'2ÛçV;K»¿´ÿsvû?b>7Ûÿ×òçaþ,s0rØý× °2ýõ¿'€å3—ÀÉ`÷—+û¿l–öõùŸò9þ¹œÿ+ÀùŸÇŸabþÇhï05¶ù¯Ô,¬þÏü±ÿÏÊûsýõ¿™þiù_ cú¬¿óŸ¢}nrØZþ÷³ýãpû«mlŸAœ?ÿúþsØÏ8Ûü×x2}ªú“–í³p.N€¿¦ü³À.îömøŒáú~öÚí/üTæþל~îöø ?Ã{þ…ŸEôú#î3’Àéß©þßW€°°½‡7ó§ÂÏÆî&×gI¹|ÿËÓÄÕé³ë.ÿzÃ~^ºÿe3ËÏ÷à0YY´7á ¶Jm -÷+œ®§6ÿ'ߨ=× ´lS2*ãH½Ù ù»2áüÀýÇ9²ÃGiBü2À1.máýÐÍð0ë Gó&CÎóÀø1èñGËüݰÂìæXy’VÑ@öÕài¾"¥¨êä:PŽ[SOf0;‡¦x†ZXH9 ‘2Ršcy8k؆;RRØÆTŸUT+ÍÚµ}‡+ÊïB¨¼ÄwÝÇ/ßM:X”w©Ñ”ÎÊŠÂë?ú‡k3 ÍUœÁW¡”G¥‚rPCk³½°Å f®0&ÅÂåÜ.iÛ:4‰ÞÈØõ6Kö Xh ,Ф—‹¯ í«b(ž¡¼ÞOSž¸ :d¿’nû_ú &ºäǨëRiƒÁ·Y‘`hddN£y1!Üe©a ùÁ;$}x» fè ù–8ÃXî!ý¶¦zõS0†EìäU<ÎÁÈiÆ—•éWÆpbÀ¼ÞŽõ¤¯ÝÖÕVœ‹VF–{•SñùI†²lf²)¨\Z­Ò"Tà°ä<Éf†#õE ?†:ÎÛH-Ô‘‘ï°¢ A^ ÂÍíðGuiUݨ·Ï{™Â9×ø‹­ªNCGŽ>zª)dev’šÍüé¥F¦PË:wm0¬À` ¥{,°ËÄ({í7ñ‘!§qR"Z™%àÇüRÙŒ¤s Äâ€ÆÝ¶+’DíaÚY!pk2bGÊAÀ5š”Ò–Ž+sã[a³«6góQ*ue Dvúëf¶cëÚ]²bûIÖu›ÏÏ¡ñ©ØñÄ(l ¤€ï1I‰ÖZ˜š7Œ$„3åÑÞsŸ/fxCpœ°ÜvÇ—‹ ýè “ðÛWžËå•~ `"ƒŠ-¨:yýŒåóP~­‰.c·õ¹…³ÕA»&cÛ¯HAÒ>f«Ù[‰f ®¦p²j³ôÇŒYé3QÁŸ¶@é›oÌÆl)º&¦žDQ7–gÃ^4¸ÑÕ6-Fu©]4C£ÌM*‚®R8ÇZ3lâüŽæ9Ê_ÄìÝe¨ŸÞo—y¢ÒßÛE§¾” JàåOxðñ7HOºfZÉŠší.#<…ZWCl±ÎB¾ŽœÎ/ÇÑïøaôÕTùL1eC¸WØ~ß&ƒUŠû–béÞùÖy7­)*ïëïs’îÓ.GoŽ%ã]8{§úZ›AÈoÝL>»ÐÌŒ¿3›W¯¯ÒѺ·dÞˆ0»AÛVgËD\Ê!¢>Ow<Ø‚–`ý&º…4# rzþ‹&ƒ›9Kçì©lü~òÎ4\JÔ;o•‡dSž }}¢¯n²K*-V ½zfò€›;ä6—ƒ¸±÷¢Ð±aåm™>‡{/»´El¼?>D1ZBƒgO¤6›C˶<Á?¤BŽKLjw‹ÝŒÈXå>Û/ÖþÈÌ!h#jŠÃíÔk=Q$¬(jC\ØŽmyðäW¤ˆÍÃÌ´oŸRÅmƒ ­`O´ÝÐu©²~+çÊF0CÊ® M>ÈLŒÄ–ñüî®87 _Å߈ԯ!HÞ‡~DjÍÙ= Šèˆ$Óÿ¼ù²è~ G¡À‡ßÞ24ŽÅXuiOTé0¡†ä§ÁKUç-?[ælÝQž…ˆzÔ° ñ-i蘢»_ÅÑõOÊQfU%>‹¢4]ƒû¢ÈKôJÇ¥IZ3©›)JÏùß`Ä\Í`Ïá³/¿|x†‚tb÷ìqš/ÑÞ4ÙGEcQsžÞ‰ñ}! JÚ Æî¤Í2îvẇÁñ B!ˆÁjÙéJâ¾Ë¶)Üyæ6¨èKTÇ»&ÃpÃCsIÓ¨êà•ãpÍ¢ ß8[€ t¼”%!÷± dN\EÐjrË“:b¦š¦ãØçJ!–rý6R8ûÚË­'ÆNÑ¢–p= ~u–ˆgx„¸P¥vCoâ9gÉ(`’w‘À“W¢Ól0x‚‘Ú¡Ô3­"ˆ=!Ÿ©ï¤ }ЖŹ†@óþ ¹¼\Ú\˜v=w#õLÊm÷«›UŽ@0§Ø »+ô?¹xèü‡æŒ6hû~nûTçó¬½Ukõ˜Ëô7Н¡fG„”þ^g6äùÂR6óØþgàøazÏ÷]W†m–õ©µ©†Q….°L*ÆØð5•`ª6MµÑLAÈo%sÊÎ_ˬlo÷½(O5¹ °)AG )Ù˜¼à±Q«8FUi.ÖÜŠÐÜ‚=~Ò—ì?è~ãfôæS²nŠ“ŒYß—&44ìYÌl±:.³&×Ç«,g ³êtúÓOô˜‚'ÚÍLù²%¸6FÈÈUMPÄ)/é$RVŸÊeë휇™Y‘‚`ù€52—éZBIª¦ü sDH‰ é{w³¾êq¼”|‘¥LÎí²‹°ž©=ðtG7§u’Òz3æŠü¡g2`”f&Ƶ÷6Úë*ŸÅ‹LRü(¾®C[>ÏHÎ.VíÂßõ4L—Gbÿoâ#L[‹RЂ³ _ðVýôÞ+BÐÊ^Š^_ß&Z.¤ ­ŒÇJ¬N»Y {mX¬‰’wïQ¯€öû„Ç „gtg»9ø2âO¨ ÄÓlæÄ•dgØ…¤äü'‡À„fh‡ˆå*Ö<Ûý¨™0ðW™%N|') Ý;%ªèêdÚ¯fî`|GƒË:†s§­EBz?7¨~ç5OÊ«%'“”uæ;½ÔfbOíàVWö~Ç_{{Ü!‡HÐ:•‚«¨óÕÍ:B”ÃˆÞ ¾´Å¢u¸[ÛÒì´É)MᎳ14Fö#ÂzP£4•#ø0,›?ظxLM>Oo¦C>âdÅàê~7à2Ê UðÀ`ì_éGwØTvÏ¡fíy¼ü•wî[æmô¡x*„çÊ÷—ø1§*= båêBнò‡×5iž×E åÑ3æ°w“p}/sÓ3Â㙈¤f,´p’à±…µZ€5((LY¾d*WBâ…wŒ²|ý¤ò>ñ3ôNqu%¹øq’*Z6#¶2`ZÙÍGŽt„}Ę+ùŒ_NHÑy°À>Üžö0³Ž¦)×Û¥R¼nke½«ªUU\ìU•"µtt71Ïç'ÎO šK^7ü;ßi­¢Æ0X2ص~y.; JÀrßCJ…>´kû’׫Ž_o`•|èO´©?‡ÈÃåòÒöXˆ›¤V*Ý‹1%ÍRÎämy ÕÄÓÒc!™Àw¡{VÐñ€ï~`2ð»‰ÏÝ–9ê»!Í]ƒDä[»JÐIÁWú úìjöƒóˆîq»0©.¶B­–C™3ÞMêwwq8x c–@IM \,‰­vçKïAÐw~qÑNc¢þ¡šée²ÈÉ’•îb…‡Î@›h̆o1¶zeømÙÜÜš¿:¸Š‡C±Íl2l¤ ¡f ®™Ê'楥@%5þï§ó}Æ}6q#¡u ­‰ž‚&®Þ¦.^ZÐÍÞ–ˆšƒ…O³Uå1æµV·)\ý ÉÞPÈ& AOt1°+ÇÏÁÙNZG“1eE`.¹„¸ó˜öX¢˜Í|ŸIEù®Ÿìfx4È*T<ëHG.óóÇnýØ´_`Êã&§j-:×ÎñxÊ:gpö’YþDt”¢rE'õ P©ÔÕÓ~0Ú)AT_Sß@`*fò{Àôê•jv3:½šô¨‘óMÁ¸D»cFŽ ye ×x˜SiÂæG¶Iô¿÷½@þ´.­5¬2Ÿç¾Õ[âô©—–¡Þ¼?qˆ¨\ v·âÆÝÓÙç)‰Î›!‚‘ ¥±G‘îèlã²K•F+fæVßÕ;õÚœ4GÁÔÞl!æ â{Ësíž7÷hƒ/ÞÑ—~'^j¨Ôˆê—×nν·¢jŒØ{ûH©Xw|¡n4Ø‹äa.C/Äk%X²Íé?Ù^Ü´¼”HÒŒÂ-B³ƒªGž§ÁSÆx1¿·EH¯ænÂA_{åÆÙë­cù ®Y/iX9Vˆ{1­)¦œû—wû7Ž#±š½­BüFmô–gC«–ooÎÛ»AKŒîáü:Uý”Uç—d¨zh•~í~¾åuº#“•†_s¨¡7ØŠàGѱcNÝøì@amöúc+»±k¤ÓL+9jµw)¯ÒËáqç‡yñvüY£Áë+L¥¬‚ç,Ýz¨lfŠ¥ ¬êa§ fa÷ÖFÝõ)ð“Y_Îɦ÷Ε¬l'b)q–ÞorÝ·ºÇÉúÉ·ßëô,×–„ lÖzîò*½Dçv²ýgH½1ê¢ýÅÌ9ºšÜA·.Ù<Ô‘2w{U–hØ`g›¯¼E:H–åâÎQwuÞ¦ØOý68yZ*˜‰¿ tæðÜ H»aJTû$¼‚6¡Ï‡íANŠ!PÇ…k˾{ɩܿC—›¯U5^x€`D´™û¶žÈ¸,;U… ž†ÎAâ“F`Ë0ìn÷Å–ý~ <ÖiEþpVÚüÞ¯øhÎiÂ;Yo¾êÆïÓŠÔKf³Ù‰fú 21Ö³šåÝZF†"¤®‡èé 9 ,ý6u%/ž6h7Ð-Ÿ³’]ôŠU<:Ìp)YG…¯ udQÎV•0‡¸Hœ9Òâ·vú¡XÖwާ‹øØ4¾»ö–ÕÂ_@û@Œ³"“xÒÐç•Ø°º¨g]>Ý]½P‘Ì­üS‰ ó=ƒ,}ÿl˜6"‘LdkQl‡ ˆ=òh®:Ý8éÂÊaŠõNg0_4Ó„2 –ïYÇŠ ®æôÁÉÐfŽ„®AÓ—®%Ò""£\ĨD A`vç(¨BòI·¯7›4¥¼¯ášd‚µSžiÓ˜h.!‡P«ÞiÚc½kæfñxÊ.´a&Ë¡Ï=øDÞé›Af:°8kAêS½ï-•;Ѭš--²Â媤já†BZy­ZZ3¿ ž·­]´º˜Í„±Mò\VòëBc1ÊOpešªï¹@Ú`k˜òõ1Ћ"ˆ¸ãºŠ]Naüír6ûÏÞ{(ö€(ù¡t¨l„ï3þkööÜëî¬) )qÃъĨÝÿ¤A`)1ÀxÀ‹¯:ï:Úý»±§ê¥Í: å0L8ÜϤ‰ToŒ·§ûv±ª¦{»é{Ãú·V)-l|—Fr2øštŸþų2K#ÝÂŒðA’á:©";·•6LÅCÐU¼ŠÜwžì×b£±ì[·ó‘”ÑðPAJö(tàŒbHÜ´^l &X4Ð>•ãŽ~ ÄÁ‹áî'Ság©Å¥2ž÷ø¢øCÎ[÷ Eáß·­’› ¦×f¾RIafp0 Ð)2O™­x¨‘I‰ø%m«É]#uÈŸ*„e‰Ñ!®ÇÖ”ÃÂ%…p—ÙMèÄhJûñè7N"¹L¢zMï™vâL)ƒDÓÂ$V®åÕ‘©![i¾O%Îhmà¯Y»ô¼>yz9:fÄÙ;•|I.RùÍU+]ŒÕæïºñ#<ñÈÚù@Bú¿Ïo·Jô{y¨«“1†œª)*5 äÉÅ`®…Ã:Ê´ªØ'‹côk”;Ï )pÏÅÇú­Í¥_is+t.ò÷è›&² ê$Ìq¬Â,¿ælgšŠ‡uÕl €öé;6~k4ƒM›Bã(ÿ­m÷1(¢˜Zæ GòÍÓ¥0ÍŽ?I,~> Òéç°…û½ZýpUu4Ì4)˜ ¤ŒÁ8)5¨¨ ¦ X¬ †n¸R,‚‰Ur[ÑXÆ0öÚóp߃S`uŒ“,¨b l•º‘PÝaÚ üp•½¼äž-®ü—±ˆ‘ðûóíàKL“6¨ÁÀþâ$x¾“>ä’íâ«ÂïCjXP/„3¹Ù:ì&òË<î¥"Q܉•[ùß]޽!΂|¥õ¼K«ð¢c¯'»8ü »³k†K§´¥ÀÀäª÷•u¶~_ÅkL1ÓMÀ̓‘ƒW;ŠÄÐg¥}¤Ó “>öÑKºMN–>ÿÙzC$gA¤Lmž­µ¸P7¸MþE"=¿A)$yà›j¢É†ÙAæ]” ºw­— ¸ñ$}Pší5kF1H=-AAmÏ#œ¯-üø­Îä%geõ”Ú´mÿQx³lÓñ›©.¦™k{Äl&½*ºp‰-cø{F å×Ð6|4ÇÇÚ:µºäü™Úñ‘Êþ“Kð_ú;õ³~­ãsð0cüNM>ƒ"6ë}·ˆ µôVO2¨`Δï-¼+ÊÅ…Ãú¼ÂûGÃ"§QËkr5ûmuqœr\»_0!†-+ªîŽÙ(§ëmÐJXRW€“øDÐÎR_sx×\j0vÍrâÒá¾D«p%Ù‚*lkvÉ/$~\TÒ­Z6åObY®9öB&`p—™½Ì«¶ B.¸èç1ê$ëV÷š•h8«ªëÊ6`´¹h`k1ÊM-ÑÑ2Ö‡1'¡È ‡6Öåš@cHTæÉÊQ-o*<ÖhîY!˜·¾…Y¸üÖŽ_j¢VÒÊ~/|äœ*:EWhÃˋę­¤Øi¯m½ Ĥ࿫“ŽšêMNeHJpE¬¨e„á;•‘ý>;+xéKµ ÆšîÎRjš:Ôý[è ¸ ¯2~æi™Šîó+tÛÆd{­ØIQI»)íÀkp"9ä,Y|ÎòÚàáz¯¥Ô场gâ!š0÷¶ˆsɲ›Å«®'<ý’B`“xŸg=«÷ð'×Û1sæ,ÕÌjR°•òˆ{fwäuÓÄ(+û=3ÖCú¼E‡Ìʯ™ç®×ÖžÒ“éböÏA¤8®ÒSà i;¾jMY4¿©Øc‚év· ¢´ëÕõWr³6søÒ%‰Jç"dO%2v1OgÓg jto¾×›M¾™þôÈ‚í-iȧ­NÑG<£{R±*âÓâq“X–טâ5쀆R êÅ}6YNjÎDãŠD·Í"€‘ în5îŒÊxr$¡á&Èg«¶Fh÷*u¢ë¹%÷$0MÝþâÂE>¾îâ‚Ú Õö-bÆûËý,ž¼Œ©œ¥¶]ã·`I9ØI·4®øJ]^€

m0`îrR±ºLÐ’¯¦t1¯$úµ¬‚€9¦,Ñäžõ¸’‡²×ÎE‰æÌ:&î5–·µ#û˜l1Àöèó¹ùC†îô1Æ}㓚#m¹ØÏ¢  ïì$óçÞV(TVêè]†jõსȕéi¢³*¶{x¨ŠÌ|&|½¥i¦ŠQ BoìÂe€§5ÈÍa]ÔWýç{ië…BnåÂqí¤Ò·{Þ`αØW8šæà¨Êƒ4FX’yë³u^ʯèÂΪÕ}ôxbsXÍ1Q|n>ö¡û§^?½1îPî/~åðÝ@\(6¡ºoS£‰W%6Í.°è‘Sˆr{CäA`šL²PÁÇõuß]&`x~­RßcºŒx©ÛAaPo8ßäuP5æ_ë·£kt²¤³©…—]5£Ð´µì‹:DûnL6£Å㬠 Y%…JŒÊwVúei®±ì׿z¶šQ`lœ«=s W Ë*§é»ý%þ¹Ñ3ɪ\Œ…zø¥õêôNzÀ/ñ4ÃgåmA†$B)ÀºÏbÝ·5åÑ“{õçÀݬaA…yiQV¾æoG’,~\ýá?&£gxt =ÒvÆnDHÆ\esý˜l‘÷vç’HBw.ªá!6§mvGôæÕ‹¦V¨ÓrçåŽ2ãæŸþ…GÀ‰Þ èÃd9¥NÃ`-¡ÊßÏÔr]Ÿ Ô†Á•#žP˜°š—VÄ0­sNÛ|qgP¤gŒzj‡OÖÂÅmq§q’‘G&ùg(¹˜]¶àãì›rð“I–£ÉëqïØ­GaÈueÉPʤ3ËÃ#NˆÑ;.Œ ŽÀ„iبû/Ù÷{ "Gm[ûÇqüdI~Aü>?W•ÑÌniì~‹óþŽ÷±Û†u":Ìä:³åÚ\±o§\QÆi~%à}0 âî ˆ§‹‡2äIT[xÁ©iæVøÝß”mñÌ:~+XMï ^@ð±U«À9H¼¾f–ð éq¾)çÂÅåù&M ?FONW¬ÍšMZÉÜ û;8èuLk]Æ*ÿÒ£ákáU˜+0w7¥ú‹µnÌ 5w‘¶ê„¾úƒ¯±˜Ã‚ޤ!Vá(M\Â+‚éD¨ë„Zé¬ï—ˆq+Þ›I'xðnO»Þë —¬Á:iÝÊJ)šèÆà_ïÎ\¹{¨êmGaÈ/µûý,O4íæ]‡š‚û^m}uˆ¶Dý¡£G$Ÿ‘~ Åi2öÒäÎçÙzÒ›ôÀäCx’9\™";Ä±ß ª<Ò¯‰ ã‹öM·å%-•t©×ã?õ J€­ò/µ,ÐTØ´a y"2ˆà ӆž¾–jOÓ¸„kæ)E"£RÙr r!ò®è <Ð#F'É‘ÏÛmy£˜ß#_™üÚ—w¼§Ð˜ –˜Kâ–™­e¡­Oµpù5ú½³Q@ÊFÇRœM\ð»íPb›äšóʼä’bqq²µ·ÄôÓ ñ“IÞáw8Ú™‹†Dù¼;M|å-4×í$¯þáÖºä\|ûN–ݰ=Œ‰«Â©vÛÚûÛÙ|„wÀÜþÅa#¬¬ö{Ã»š¼²¯I{Y–dü\×K&*´l}Ü¿ÁCÛ7àŒ‹Ãa‡¶šÉÔTÆ÷xvæ ‡î [/3Ìßùè¬w5ùî=ÞvϲÚqî(ê톤“rmJD(…ÖI6O´éhަQôÁW«ìá>-Á¿&,z"¤!•ÑÁ°þìš|³M k¼ûšøá`d"°Æy¤M’¨M¦7ðJÔ9О+.GZóü¨o~‚É­:6î—€äÑäé'ñ–Ö¸Âé«Kt®];ï×­Ì%Õ׈ôé4Ù­óøÐa‹vÇ•aõL­ ßž¨v.õ4⣭Ä<ÝB÷¬§OÏž­ÅsV¢Lsh )¶¬éŽZ-D2@àƒ†H­ájû{£K“ª\õÀý]5ë­Ç¡BdÃ6ÏÀ –ßî•‚i; ‚á7nVæQ‚È€BŽ>ŒSÀ Ôg•#ñëu]ù¡ðøü&M!çÆgßÚStJHÖSç'¦'S|þ•7ÚµRE®ÛÃaƒC•·ÆWLRÜ·'@ÞçÿkN>‘*4)¯‡î^" µH7âQ²“5/—m ›×õ%]"Þu+_ Jª¶#d}i“±?Õ¾‡Ž=œ«6^µ&µûuþ•ª–…[gǤfIQš Š¡[y¹Ù´µü6µ9㩆DŽD¸/ïm\™#¸hoÜ=o74§\™’À—GÑ0³ˆ¹3h_ZM7­K”[a\1¼ñÃãŸh-Î&»¿Ë;CDCãzwg­Ra ðóñjj£"ÉÁyË)5~ë»¶ÐÚz£©ñ— s6¼¡wK’+¡î¸Ò+.°’’O÷¸©Ž€±T¯Ä0¦¯u”$®hÊ™PZj qw2ÿIÔpÔ䢡_¸×%òq)n5²`ù‹­Â‘ª®Ì¢SzôО½ëNû]ÎC±,+¸ç’ÉØÕ媅Y–½Ò#”Æ€|ܱä¹@lþ¥`¾2 #8åâJyeb\ä™’{[¸КèðfVD;3?´Ð>®ÊùÒ€Žœ¨øë†³›‡š³ý¼é':ãøD¹öÕŒ±²t¼)s¡:üuNÛz-ìgì<͸V)G y¶v»ýÔïšWýXÞ8Æ×ö×ÒÝtzxmdé.AŠÈ•ÌÒKå`9Á¸SéÏ,Ä~-î4›X;Àâaòη!²¥÷ú~²tºò@+âÓNœÞþ3™­jïu;|ŠàËš8мÊ÷8Ùê nìåhØÛ_À~:]L?Þ’ü&ܘo¾…hýšåt½EÂÓþžVKÀaÀxªž¡ÓiZ¨P†FÀáêm6]Úk…±†8$¨®CÛ¿ZúUÓ…ƒZèîdãe«æ`†Ÿ©% ¢ÃäúÀ©iÛ›kmË·Ô¤h¤­ÇŠ<¼S‡ŽùMÆüÍçD¬)$0Á2sÁ^¢Î–‚a]‹¾÷…–T“#Œ>{e¬ãV<çè+©1ot 4QBz=­˜6ì¢Dl Φ^Àª–ï°‡Ó€FµÄ£ùøåæ’3¥»ÊGÍôÂ>V¯U"§¢^l©ç8¶WÊp‚ý—jGÞoް²ZNÌ•Ëɲ ˜õÙ²º¿5«¿>zqŠÑs 0ƒ¤pe‘^ªˆÓ®¸õy8ƒP*]ÉvŒƒªäê¶Ï#™f}³±ÛKãJö¤¤¹ó:*"ŽšÜÏïÕnu Lð&#©!H Ü´7C*°_ôØ9õQ‹?=àì¾¾-`ŠK¤åvLTÎfg‚v¦ }kœ(}/gøÂbLK.ðc"l»¼†nËn.«KvÁ]—²_TJ‚r|Feíxë¥H7$¿% ïã4ÔÅd_õ˜Cþ™±õZ|ß×OåÙñ¹Kƒ:Ãiâå*·®( C÷Œs©"ˆ'ýþ-±µ#6—4…UŽDÏ6 ÿÉJpØ+·()³ Ý;†œe¢¿³oýÒ,¦øÛÒULøƒDZIJè)7±ÍcT]ºOø… .¢¢·6 ±f£Ê¬Â´Xf5ã;¤ ::Tt.ì‘fZ‰³LÄœžJ Fý˜ÛÕPó¯âdã® K˜,Ç”YZ9mY˜×:ô‚ÍBŽÑÿ¯hÄœ6aC^*à1\¦“Ã`ºtôU¥ÛŒMÑ Ô•ÝË(N÷¯¹µ¶Rx¢ OÐ?u;q=ZùÆEí’¸ý–7h:&ÔÅÆ§ä|š—ögKvÝì@ßêcWk\ Á›C`s3q%üåí6›‡a.…p.œ”6`$ã;wÐ=[Æ ¡Ÿ òÛGŒ‘ƒPÞ ÊµX¯tYaèÀ4‘~ϲÐÕrD;Üž; µ»‘÷pÐ,È«°s;îBCï¶ òX;>—ޏÜ#ƒÑàÉhnÉŸœvcU´¦Â¥kñ6ȽŠ|#~ä\#Zð«™±ìèOEc¡.PÚO·Ø¾€P ƒç@Qù9G/ÐgÀÎʇ‘{A;–ÛZeGHcý•ÇkÀPÝ¿éC –ÁßAâQ²%)’3j[Ι °5ÜÅzŠ:Ã[¿t«À7­ê uµTzl–Èò&”5Œ{›Jò˜]Ž×HºîŒ”-±]M ª _Û:Œz‰¡‰ë¦Ìø;\~Êcré³Òi´@2IúlVÃÃl>~†¨hŽJ€Z0 ¹‘@¬Þ²Ö øÅê—®ÈÑ•mÔ¬ûÂkìϯS@[ðX@?A ¹.NÄ@ Ãüäô5-’`0‘ðQ´aîÊ£Eä6)¿|ÃJÊSî-ˆŒ‡õp5ô&í{@wÅ6å4‰Š6žñ¯¡q~Çuú S­{Ë™¿=€m›îAP+]1çO…y­¦|× P•±ý!”rzµýáxåä`ÚÁÊ¿†yL̄٠c22º?5¥2ÎÄvŸ÷ºìR„”Ä,ªÑÓ ?r)¼çnìÿ`9b è‚ão|í•6#N×´ã¦oÉ7‡Ð*—&Û¦W %>š;ˆ`xŽL¯#Ùá7£½u°à’(ô£·X,KV[‘çý>ñcývýœî¹e¾$¾ºQ¾6]GTÞÂLÇ{ßrÜñ`!YW¨pâ=˜÷pì@„ýׯK+Hﳡ¶j9G§õ»È <ª¤À”ƒ#yÙ&¸ ;r6:$h“ƒ•€•Ò—Ñý²ÕoÙ±K¢]ëÖ\hªÔòíªÙ+ðil}VÞrJ[Üq­ÑeWÌÕij‘lœFKÀ‚—¾§‹_´ ×–ÓyÆTrÒr_|Ó‘ü(m}DÛâØòûW ÞéÁ€úÝ'´‘|~»I£I2Åû ¯4§Í/ÎÇl;ÇW]èÖчmô‰­0¢¯U`T=bQb'XŸ7ñ^i#C†@”FÛ)Ìd4Ut~[b@ ÑùêožÝH'w@vÜxÆèòL›²|ôë¸ ³5ë»ÆûF”Kò941jAÄë.j‰wpìÕø£nv—ŽHmÊG8hòü/¯é¥uwdK¾…ºß~_8¬”Y¢š+Fn9Ií‚ÚϰÎlèI Š•MßLø…â­±éqm‰ÌÂ…aLqN«Ä-ž©Ïp"§$ñp† Ž$ÀéŠwÅl'p»}iMYÅS/5Gõ¨e%µ·ær;VQí9ßãÒ°5ÒZ«Fjó¶Ë+¦=™Ì´º˜y2.M›‹Óöñã3!mR,±Y:ÑŸ­±¤ñÑ%¿Ý¼±¨è`¸ç Ö(ÆÛ1Cü—é¿ î,ô°4"X%¯Upåʆ¯TñÇùýL“²GËò;ƒ•7V¹øÈñ+Wšþî_R‡Ü”¤Á°°yÐõ‹½Íä•û´¼dÎU%¿Ðæt­k9_Cš³N_¹c€+¨öè{‚#äN¹i¿¸ãùøŒÔ7_eMù:|6ƒ¢®‹‘ýåV‹¯½t>56@ÔõF‚–Vk’iÿ%~z®’½ú¤Wöý¨_ýŒ5Uä$Ax (îxjT3XAU‘¬s­¬!ž’@^ps„J›^Øûk­_¼ªû>V1Ã7~ëîFf©5ƒôüôÝÓ>É–!AZW¥¶ö€«q+K¡ÙMX*@8€‰óÐ-ckÅyf†©âß5Ï`#Q)3™U› ©$·-½W2ƒVL­„iy<½]IPjñl!~Ì4‹+€E¼¹÷¢oïµ­½^æÙ¯ñ­4‡:W¹é?uD¹{ðcMâ[Þ‹P¸1cs^ñ› ¿Jö ³W¤N¬H×ú‡ÓH1„“æÍ€N^—$¶„”i‚Åcgľ€hY S’nñ®*?¿ÉQ¹kÆ‚2TÞß_/mBkù‚+ÜŒèfÙŠÍÈx`kƒƒèl@!<ìñT¯å•‘ÎúJC2p•LË«îëÕPa¤†;~ŽÙ«óòÂo-.5²ç·Ã,j›&xŒKKjbHØðë Ÿdi2äü‘_ó_¡§BÕ—}·å‡w÷FœF•¸Šûž« „»ÓDw³6sK¥¬E×Ä@´íæuF±]–{`Çò*%ˆÖî6}‘¬;蟪Ák×Ý㜈ÿ&D<_ècø¥žþ("VHï·Ié¤÷éCòdÔ57IJX^[©yDbáF¬V€¥!nT°0‰l߯G+#øÄtMeŸ¨³\\Ëtßl1}ßV{8Oë9›èwÉ¢9Ð:4–²*‚þÆ8wFLèç&Ñ'#Žu°-ªˆüÁ'…)”-¢¦p@øËÚ¼Ó«Y/kmF¥ù)15:ÜÒIs*‚wUÒ­ó.S囵 Z²þŽÄè1?ÈdW|C§» ÷e—P¨£ƒ÷^£öx1Xå$H ŒFdU éú£Z«ÜM±“)·:©ãIÖB ‘>C4³)¾o†l|õºÜ…cpw6>ã @f&ÓG§ãjÞtÉ+˜[[ËÒ&‰+5®Ñ¡’ü6(FÏ.×HY¾†GϺò$a[úfè¬:ñÖíû—q¹Ðù‘¦HI4 ƒEÒ%Ð¥:ÕÕM,Åëóô“.wáEº'¸~¦c7hh=lߟ` 1±Gï9NyÉBïyÇ眂èœ ضpóÁ±Ú.ju‘ºÍ´§Ó-MB7\ ErÙ¥ë^AøÂ’K·²µï”€¶xJ¯×ÞfÃqjû €Ä€çÕêâg†&À¡ÓØ=ê %bWäƒ?Ì„ØP’b9ûs|2í´¦É¨ƒ6Š=É®¥&ÚòˆnPtËi­ºYìÆõo3'E/ªh– {où ½¸‘ç3é®0×g¿"C‡#E}ÙPg´žÈ¼„ýOV ”‰­iËß-’KF,o£õšÓq–6ÜAaóÜÉ«P/håj¦Eï‡/V6IeâŽfsç;4¶¯_¦ätù¾S[éÂUÊü(7Y¯mf¦tÈ<¼BV¿ñH*9ì*Ñüáºc“RMUr@Y~b›‡T>ávbBê»F7(k*…¨v÷ªÕµ¶ë‡§¥ÞÂÆ!™ñ²·X›(]ü³½§ÅC+c¤·5tB¡ã´fƒv½>®Ú²/I6JK¥…kVh©¶p™‘EÐvËxüBSÒr¥ìÄD°eÖCûP¹ƒéuž\ó‚"%ˆ´%…údš•G±Ö€þ ’C™da€â>9õ;¤z„]•yÙšYiÕé1—ÝTmL®×°x%å-H™AïÔ¼á,ì5ÆG¬ŒH·¬ÊÒ¦°ë¯@b±ÈȠƃz±šE+ÕÄtßBÁê¸7¸ã :¶_.œ]Ã!¿Ið"û_=1˜žŸ7AoÐ/HûŽÔBWÖkªhÈg~JÖp2“þþYðÄ5&+CO᫆kþ-ê鼯!ŒFïÊ÷£²Ô䡼w‚¡ötœOk.¤2iB „UØÚY“¥æÃZ+4=/m¹Ë'P0Rï¶Ôœ$ñ¦ƒEOé+8/=6¡S®D\/lK•È#Ÿw•aEçü,Q÷å‰õ%ET(å\—f¤üdcaéë¢`Ö8£á¼%¢ð;Ÿmzç4W °¢—dô‘Q”æ=bo¾ç˜À¢A}½TÜÐ…%c6¸¡—Üýˆk²,$޹ì´H9í+ˆ ý°æh|ò—vË~zG VȲ¤¢zC\ŠLÂ4†À ï]¸Rðìp«:úùg¬§+%-‹"ÉáÅ XÔ×S„RÚèš}ƒˆáïv}q„ µ¼Å«ß}|)DØQE\¨/|¼[*«ZÖȟϘ”ûg;9³°áôŠ$g㔆t@¬áÒ³ÔÚAêgÓ8ø³W={=΄ ÈÄ( ø¾ Ì[K@×–0NhmŠ~¡AÂ(5Løe!)Í_Ö«^,ñÐj×ùK¹2[]-‚ëÔiX}þhv{·WŒ”oA(øþ²‚ÙG«LÌ(Ùgoï†,gûD^X”4S8’EéÇ$Oh<¬f|-ý²¦ c#Q2Òý6ôúAþð$·5ïªL Í±À}n°CeŠÏŽ21¹oŽRôÎñê釨vTqïä«­i¥Å\u9ᚪHüxÌÚÏúä9»7$“[¢ó4äÆ7{?~–YT0MÈô¦ihOj<"„…œæå{ð Ô_h°;]wÖ¿üɈ²’ÞŒ¦ÔvõZonÚsÀfÀzñ̳ݷ³hZŽ.$ðªˆè="–÷¿¬ù|ûF§ Gl¦$8ÞëÉÚ=õ+?ëðDÁ3÷cvFÎíæ‡ÜøŽ¾=p`ȯFÓ|w÷™]]ÜÒºBækÊXéûB Õ$•u2¥\L¦l#logn иNçqñh°–CƒÂkÐb£££?‚t 5/=áÑІ°ú Œ~-RŸy®uÇå—½5h#VÔß/ï»­E—¤¢¼P‰1Éš¾8.GŸŒß¡Öê>ï-; e2P…©¬ÆÂ·Ž6pžH,@و܌^ '6|2R¡ô­&aÿ:tûNÃw$½öƒ&r)Q8{Pc×PûÆ`tq×}˜xD~T6pïׯ( Þg œ¸´àðüf—ݸ £ÙÖž²`šUþ½–“H˜à5`©œ£Jk(63 ú§Ô­¯‰ôìXZÍΨA6¡ÔÑÆQÑ3'ž·æ0›¹«Ú8*#¡wÎ ÿgˆÞS’ëωÖ`É\=J¬e°&'Þ¼/£’²®ì?o±è¿­kÛñàX ›Í%úƒµT@‹lãò±^¡Œ<$84ôÔœF|UúmݽênWS´nyÂŽ:³/O:–Ô³}ëOóJ÷óä ŒÙÒ6IùK¹ÑõÙÃf0«?Nk9ÆåíOJ_ÌÞÙ³ÅÒHÁi©¡|ï vá=„Ö ˆPFcm¡Ë†%ñüBì`?^óíBs„;²gø;ÇDý>ÿzåfð^£âfç1yeðˆëufÒŸHÂìNC*éuÕZFà!ÞøÐúØq .6Ò¿u`¯{™#£ÝlÉ1;ôí*YÚkÁxšsã÷Ë¿@¿ƒ^Ÿ’‹YKªu”½^Ë_¸[®À7c%[‘ÿH5œºÉ_:z|ˆ6sG8úe‚K0¸ëÜÆ!Šhu6Nƒ§ñþC¤ŸÔµI”Òœª™|ö^’d-ˆÅHL—ZÃé¶>:‚vºœ†ÂG.š{.¥vv Wõýl]×ÜBBe´¨Ãæi°'ò]¼­&kwC9É”âë#±=Zw]GÿFzÚ´›@˜­h ¾–_üþrŠO¡SÉKÆ|p/âf²%Ä·Yò™5‚Â}@Õ‘x`v4.ê}ôý-=å3¢* ÿÒ –«Dýów‡½+E™Ú:KïÀql/ª}ÒŽBµ¯é&h#ÄyƒZ¼qÅo…_ì™ÐM®S[±WåB\U™ÅÈÍÃá' ³#”'îƒ[Äè»F4ï3q*íB…«}hú¹BI 3*|TäI+7ÌO_o¥ôûfÈ÷GߢΆ½6Jٻ˾A3t³Ù®aVí/ñì-í…P¢¤+Æ`¢¼ßW‹E¢‘-še.™oT\aÚæt{Éé$eÃënï:"ªo¨õÇ!:Nÿ?°hJ endstream endobj 668 0 obj << /Type /FontDescriptor /FontName /XECIFG+CMR10 /Flags 4 /FontBBox [-251 -250 1009 969] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/emdash/endash/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 667 0 R >> endobj 669 0 obj << /Length1 735 /Length2 1053 /Length3 0 /Length 1567 /Filter /FlateDecode >> stream xÚ­R{8”Yf·–ì º*’[13æ’Qi0&j¢I¡T>3¾i|ßß0C)ŒK[Y›TšlÖ%m±‘B$ÑMJ¢mY¹”J²ûѶû¬þÝçüs~¿÷=ïyÏ{~¦ÞkrDX쎡øBª• \ù ÚQH®2 uƒp˜ ¨ŽŽTÀ‘‡P™lG6J²®˜T)CBBq`åj=FbN,C„ ø ‡BHÖ`BÆ•v€#‘Á؉ €#`Y$,²#Q©@„q‡ (É~֧̌¶H.ý E²Â°"LZ¢C%J ‚ƒIö«0â.˜pò˜š(î.—HVAacòDF_ P"QþcaR9ËÁ2t"Õþd‹yØDÔ‡$ˆƒ†H`@ùÔB"Ü,òFpa(†$ðxFEM±[°çzrÖø¬´ÿÍqÈBPÜG)ýGtŒ;^Sÿ­‰ldˆl ØQ(T‚H¬Ï»®â¢BL„ Ä80˜’É %‰˜ ¢b€*@P¬°‚ðko‡b8q‘lÁ˜Œ4ö™tG`¡ðX“ôå\\0EÌB ,¤1U*X ʶÿ…r™ Fñññ ’ø\#Dn0¬€…¤÷0¡“J|à\R^,÷ø­üÉ6š.!çÓV•TÜ.Ÿ’вWSr¢nE¸M[±ßpA–¹kr—IÔˆQÄ÷e[W7¸¿Š O˼;ÚØ•}ÑÈo ‹¯ì”š½MèÖ½tîÎ놦Ws[}^ºε#}ÕÝǼ­Ü|^h=6Õ¨Üy¶òŠÉòsÏ’¬MN,žï`*ÐË ÏK¡'·Fé¥ï›ÔÚ˜+NÖ¾`û¨+“O>®}tÿhÀ› u—²G$Uý/‹hôîÀÑmg ÿ¸¤ªuRï|ŒèØÐ}‡L>)­H‰æÍ®åµqöÞx´ ¢o¾%ýH¹:(oáìiåò¬Õ«K†æmM‰_äÿñžžÍo½£m"ž¯xx¦‰eNüô¼ºû”u†ÈsEqÒ€¹Õ@‘êÕÌ%Ïõ/³ W{äWû0’UÓYjlÂU±š.[BÓ2fokzCÚLKlï×oRÓG~†õnL=FÛu]5Ç·ö[÷æ+#qô ¢žÚê›ZÞÌ›¹Œì:ã´Š¡¤ªK–½ÃÜ»Ëß–k­ì"‰½ª³_²×Ì3`+˜ö”Ô=7v´êx´³®j—vì‹&Žæïžv(cÀ²\­Ž;•÷°{ÐÄÛuG±öTµ~cv·¾Ý•,ç’ò¥q;²«­éɹÜM%”ÍgËÝÓmÏÌ[ôã|žY½¿¡Ä.÷¿(ÆÏØgøœšáA3ÕAgú­02¬ ã;ëÏĆª6Æ,=ºzrïs¨ÙÞ˜ðk˜{ÍZs^jd(M>gèZµ¨ü¤ï]'ÁºnaöS®¸‰ªïB/*Ô)Èq ê~è¨ÜP$=°ŽíßÞŸ‘’ì8˜”gå;eÐk©Åº”“ït§´: =ýeä|³QWY.¡ëf®ÞŽ}ó  ¶å5V™´kó¦âIx~Ô‚þ·­f ¶ôIík<Ÿ‹U7‘n›WFxh°6ƒÆ†àèÓéÏjêM•W­¬¯?g¼È1žds«ô¨É» shG ßùf‹Ï"ª´gÃïè2³¶°Uè$¹)ü}‡vÎßÛîöŽYYm?ë˜Ý‡ð¯]oÓ‚L”kGXZ+;ß×ô«9Z‰³rîïe“Z §¾¿èž§¼ð­h¦u}õC!ÔMN7 ×.£ŒÇÒÜÊ|ÁòI#©™Už¶O6¨Í(.Y|¾7qÔkAˌҪæèVë$ryê  ,—¶ñ ”›Ø`>¹Œ]=ûZgqUÔØçPïü ñMDÎ}áó-©é<^Íú¨•Q?ì^ê£îàÏÐkT$ä$Ö<¡ r×»YýÄ<²¯‚¾‡{Ù³gÓthîtãM}ÓÒtùCl¿ÇæN½)œÀ/×'6µ-‘ëþ T|öw endstream endobj 670 0 obj << /Type /FontDescriptor /FontName /EJASTL+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/one) /FontFile 669 0 R >> endobj 671 0 obj << /Length1 1398 /Length2 7446 /Length3 0 /Length 8269 /Filter /FlateDecode >> stream xÚ­Te\Ôí¶éî®EÉ¡C ‘Né†a`¨¡»CZRAºQ:¥»DºAZºAï¼ï{ÏÑsî×û›/³ö^{ïµ×ó<fF5 NIs¸Tnï ‚DRÊê›™YÊ vÁí_] "°0 éj àá€Dx…Eø…±™RpO'˜¥• €EŠõ/’ @ÒꃀíÊ`+¨¢l ЀC`PO @ÒÖ þW…3@ê urƒš±A €9 â0ƒZÂì±¹þÒ#ooþ6wuøWÊ êäŒ`Aˆd $šÃím=æP l.8b¡äÿCÔ7—qµµUÛýÕáÑÿÉ‚í`¶žÿ›‡Û9¸º@Êps¨“ýSu ÿHS†šÃ\íþ;+ï¶…A$í-m¡îB0g˜Ô\ æ±X€m¡Ç¡öæÿ-aÛ߸å´õôÔØÿ>Í¿Sj`˜½‹¦§Ã¿›þÅýƒ~c„7N0€7›„ "~ÿúgô_£¤í!ps˜=â:ð ÀNN`OlĽ@ ~€7³7‡z ½\@{¸ ¢€°Ä`wÂþë0…ø\Z…þAÂ.½#Äiq#!—Ùo„`Bþøøng÷› âæp™ÿA.è¿!B*×?æÿ&ð¸,~xæöGÅ_i¸«ÓŠå!Áê· ÄZVžVPû?ˆìˆØÎæˆXÏöˆØÏî7!¶ùÝŠQj³‡þ‘G¬ÿ=Q ÿ4B½Ãï4¢™Ø jo µøíè£Nÿa Â*Ä“ÿ6“ÑÞÑޏØÿi!aÁû:ÿÖü‚ºýa?‚e¿ £~·ãGèq±r‚þqÝ.îð? >¸þºý2ÝCÄçŠëa<ˆöž@„C^¿—Ftò‚:ý3êÿ>­—/áÞœ8yš7A ÈÏíûDˆ«ÂK—¿¿Zˆú/lC`@sŸ‘"BEÃ;"*LIVAz:¼ÇŸÄv0…¤bs,gqïȈBT<[»š¢ÝlÛzÁgâ‘„ïmm¼ßÀ¹ú+®dÚåê(TçMòeF!•i8¼| ÂŽ—1÷7s3þ9g9s!7éúN$TMD‹9yz(aÎRÝÞݶÆ55žqÒÛOÿ,$ú J÷£áhб÷²kƒÞbe«öH¸A§ZÞk©TA–ªùý:‘ö]#Ì#ü¸0㨣‡U¢±©‹¸í\ÑÍÅŽ`>‰HÓ¿‡X룋sûä5abOx8´«<0 ;~É`‚JÝ_–… Úr„¶%g“Ù¹•¼î›±÷iuÕñ¥Æ°T!UhvÅ/V$5"äã )¬¢ºËÒ†À˜:àŒt`è„õýh«ìæ1ÒpeÖò7‚ļÔ¹Z=üOÅęѽ½+9X:ÖE…õ¿nä;¹yšTÖzQž¥I“¿zk¢Uºðž§”sÜ\S¸Nq’B3ú¸Ú™Gõ=µ™OÂ’»æ ¸é45Ä&TÃEœß.Z5b=\”uÚœ$n¯\»¶}1\…æ©2j$|"=È›ý×Sg@(ÅxøA›!ɨ°,àóÛu˜{7U–hŽ3ç†H Â§Ž"NM·óó=¿·?$ÎÞ4nôdžT$ev‰0|/6ãÈ’o:j¢MŽP¬í4Ë!öoÞ€˜p .­lè±Ífœm5Dœ³s<ÐЊ=9Æ?¦\¾» º%¾@¡ ®5Ñ‹#¨bÀ<¢‰µ@«1¹X~ít+ó‡ù´z OYcÍÞoS}¢’&¶ï!fˆÛ#Úˆ•)úQ !š'ÂÌwbü²Ý÷I£Y¤¨˜ s¸Ñv‚.ãЛX©ÛEú;>ùq¦Ú^½“4ªåîA»Ø|Å„­tIz¶·..êçïŠ57Š_Î)Ê$I@•šÇ®®ä±NJv‚/ó•Ò‘&Ûö_®ëK:^X?³Þ\¦9$ÌO£í°šh€b¬BZâS²—k„ïvKföóe~ädظã^L û›µ^µ¯¨÷IféÚÆçßxøÔ];µVdT£[Þ3÷C ä±Õ‡²6¥›ã•ûzÒC¨­æZtÖg‡dSïÚ²³Ü„áeü¾¤Ïë¤îEï4žÕ§Ïï“`ikNÑ¥z¡ÙBó½½ÀA Ì u%3?ox~ÿµl‚¥ìZ¯NY›/\ÏâCðX“ ïë\ˆnô Ën¥ù9Ÿ¸å ¶ñ‡ÓP\B^÷r]f/Üõ§`Ë'ÓŽîïÉ'‘'U D¶íò¹BG7®ºnÄžµº·K¯Ò²¾+ i¡ßí <¼lÁ,Û³ÆïžÞ ¥3©é`8<4gÁüÔñÂÍKÂ)Úi#bï€WGíÌ@»?·ã½’[èOm—ÄÑ /õ±§à"©fw­{[:¾]Ã+ò® ˜ó‰¯üÈç+Û6GÌxžÛmjD‘ŠÁ‹í/_ÐDó©Š-q»¿õí2|#¦ª©UåÌŒhŽ=ÄG»ï8B`›ˆGÂ÷–C(ùm÷/;èà€ÑÕ£é&iß´ús)‘8F ¢­øŽ‘Má0…ÔµÑsVN£™WjÏš„ݸnU#Jz&´·à\h!Èäc”­so’ ç1qÜq’Ì O6bÞ[èN?þ5[‹×¶®#kßáâ5K¾ù²oÃa;I¼Ñ„Èöx5›‰„¾K7B’ç­Tµ*çT¥_1w\eÀ#Ιõúdk=¸šÒ;æ6‡gÅ-Åû4rýndã{æ0ÝÐþ %±Ðw¯yJæ¹çáݵõXï!c:Ò61i%8Ry¸šWä~×Äwĸbø\3Zµ¤ÒÚ,(ØÜ?ßwÓE¿¨öÖö}-ç þìõòR'(åÙá‡`b×ÄÓ¤êšûûS£ïíƒ]4Ù}ªï¿á.߯ |>< þ,·[÷Q†›§%£~ܵXk¼ ÍO­1¦Ä ì:,AݯôŠP䬒,ù¹õ¨KJAÞ³fŸü›%63§ek~úF~8÷3éݾO­)®»îM,3„‹ø40ÈÁ²ãóìr `ÊŽ£}²ƒ®•h_Ú$–ññ˜ˆçýÞEõAÐòbZô÷XôN‡ÉØñât7Øä]e êjÎF帰ãq»}„ù‘×ÀJCº¬Fx]Ö€BôøPÃ2W“0gáR »5ñ§Ÿcû²ïC`‘ÆéÍ[°0•ëÄ=½+0o˜#£Ò`·1áuSûZþc¬¬Õàú\¥ÑïÖ!QÛ •ALº r´(Ÿ>މæZ¨l•ð×ãvæ8Éü~­/ÏÞk•öa¶)ÞÎçQÈóŠégqÃ] œ,Ö*b:u¯^ó»¢/*3Õ½àKr]¿T,ß=ÎFW Jý¹ÿâC€Úž«ºRÖˆ+ÄŸ=Ò>úJÕ4ÐÌMjèÚ|ÏÌ~Ñ:AmQTùŒEiˆà¥üPu¬ïJ¨Ê½£é\ùiõ‰NÁw|#ûB¥fããBOôr/$•õñ¹ÞP§v¡]0gg6(דbG3G|Ò‰¼h\e&‡6Ömˆ}dj¨ùšNs„tþ_>˜ÀàpMñÔCûš`ºYåíU┸è=j©õöÚÛV’ÎaWK fÓÎsñÉ1:ô5/9gRýw–h5¯*pP}ëÖbfBçÑ,m­”0‚ç¾/:‘ºŽJr6)íÉ8Ý[=fÄ«½¤åc~lØ¡ïâ «r9 uÑw†qežÓ–÷TŠñGÉyK(ÆV™œ˜ ÆK1ÀÁ¹¼G\Kc´5°öû¬º˜ÛÄ,­ŸÈ–î}^­Z\N8åƒó¯jn~æ=•G*ÖRÜäÅ´z žä¶'èz}}V™çü•ÃÀ<_ƒ0_óå¹å§ëšÞèÏ3¯¨¦ûLÇ"/0ej“˧Ka°³&Žï4ý »Ëeާ4r|ßëÄ©VQ[r j†Ÿ¦Ó>É~Ć‘ŒÂªÃ>*ñãÀÌ*53F°i;]Â/—åHÛ çEN­ˆËìݨn+H7Á¥A¿†ÓÊÑè—‡ôÙ¶Õ]3¸Üpiá6}|GÏŠº*!ÔÜ¥n÷œßNÄ7ï.õqä—’‘ÔnˆH$óŠÖÊMðm¦‹™®1ø'7#û=È ð^r°Kz¼©»]÷ÝìêI˜ wlyüOø Ôgô’ù<·Úá×X}á“£¿=Pwf½Ì 1!ÏñËõÜÁY鳸Î7è›ß¥Ð'öÞ#w§ “ý »˜¹BË·ÀrcVôð~Iþîjï¿êepÍÙŽŠÓ®ÅhÓ3в ´y O~š¨ÝÝä®_±B® $¼@²'©ÕZ¯Ÿí¡f3Ó+s[VÀzAÍ/Í ]uÿ¡(´WÕmÃ.ÃèÓï^¥Š"¾&îˆ\à0ç–°æ Bÿ$ùÛ]ÚcfîMÒãÞ¬¨¥zÆlUÝÚ'ÝS×óùÔ3·`9[dÛ§I‹éé^ w~@]89ÞÊŠH­)¾„\ÅCʪ…Î2E’›2t8õy4 X÷Í¡±¾åÝÄ#ÛÊ à£å½±3*"|®%ÜR0–ÀIòk.ªécœô7*dµþuÜÇÔ ;Ϧ"p=éq?~Ð?ŽZ5¨ÄcµN0>ŠžQ°Na‚× K~u?aÊÙðóœ©óKiUðpÐwE¤,Ž*ɾ—ÁÍÁ¥ñÕÀê纜²ËRÏêê°ÛTüºÕ­bH&îõH‚›Ç&‹eeE"ÃÃt6Óøo%?­¿}+˜´¨WöV²­õcfÂ#â‹Ó„R¯[=àâ÷êÆEzdæ=:WâÞþJUwöQr+'2Hh Ρ‹Q£3›ËJ¤Ù¨yçsë/hg'[Öe:¦™ˆ %eŠJo-G<'’õåO;Gˆ X¢š)îÐw~‡ÖÒ*ÛÝ-§í©ÏRª]¬ÅïpùÕ_¤[Ë€>Î.“+ÜZ‹q•áÅLÎǺ}áf•˜ùüØcÏltd{Ä7Í)x0‡ã%Lvš$Ý‹_žF¦zÄÒï‹–,ÍÏùÃë6ºøûÄGü#óÄö¯È_:psÓ¨ßã»\Øi¾nw—ÂpËP.ØÅ7~)øõWIVú%í‚´"¿Qžyþ¢ï­Cr(P£R]= q©ùt9€qS#¶„Wïq8Üóêïû‘CÙc(§Ÿ¬éõ£(ñ—º²H=cZáÂñ}£ƒ‘õrœåöÛç9 ‘«=·ý`ñqÆê¦Ý²þ{ý¢˜Ù"#ÖÈ·çúK&ô/ðŒÊ¯…ÞÆ·îž¦{° cŒ6J>(»l—5žÊÀ*$-F>°p_½’íÍÖ–¡œ=6fÔ?{Lž«:½Ó*úÒð‰$µÒ«`F^-k¸×cþÙzáïs* ¬©9¡mé·¹¦å!„RâÚ¿ _´¤d1æ²æ|0ŒÚ8óË|sûUU3£iPE7[éIìý¬Ï|AºŽ*)ì~Ú"ÝŒÜäSŒg9®^—S˜áBnºÙu±<ÌôÄõˆv3¨?Y^õ¢LùùfagÞèæ«iô3 ìÕÝyŒo2ÅÚtoZ ËEAùJõ &ëÎä×a½1šïﺣ›äº2yß®êÕváú 雪­*%zÔ„µ¡Š¾µ]"4ÿ´DåpZ ÂwÞë_!çžu'«›[e‘#-Pÿ‚ WeñÅì% ¶Úm§Ã-߉vqêên·d@ËüÁFÈ´Uƒ†–]¦s”ÀÇù€,Ž™Ë¸={—U,Éô¶a"A-@öáz"áÚŸQ•No÷Ÿ½ë•ȼ8ñyaG>@&»Ñ…=öÛ0,~pô™§2ë¹6à)*äTÄyiØäçoy1­¹/Dvi¬‘ôÆÛôF„&»)|N¹Wê#“ˆ}ûDG¦m›¹v%ì~ŒœwÁ"ŒJ¾²Ë%tƒ+¤BE?ãûh¿¾k óÇRí•óž %ln<¯á D2ºJtMÞ1ÇÜ‹<Ô_üÎNݼ’/¿–žìÔ©;#íã0µifuè›’›Ö^škYó?LR;õ3ÀoP”ä4º”±é»¡þY)…Ùa–õ€"Su€D¨oj7Ò9˜(¸,ÈMfw’ëIt5=Nö6}ø` ÏØóN.DsÒº ÁmŸ|ñžIÍnÌñ †¨‡ Á ûr¹(êÏˆŽ•âêš5ŠÑKM*>Œ <…Óè^ƒT‘ÁG/UTGÊ 2©¥¼kÄ*¬V^² ™ +NwUøPS2-/ÐüƒbϬú†g¢9t<Ë9Ö.*Å®‘ÿ2Ø®u"¸ NfžŠtU­¶œ¬ˆé¥¨¡üÒW³rOôMRá;Z\ÓM2ä¾­Ül Fu÷¼ß)ïö‡Jyù:’EÏì±jk)ÕÈ“žo¦Üóª®zÀ ßKKdhñªh7• Z²’Z£­Ø?·âã‹üV÷àŽÒNÔ Š¼ˆQ?ñu}Ž(>‘Çs’bî®g6k" è#´6œ öK:Ö‹ú݉Z´!ÄIO¯]!ã¶mq´6$ú¬~qhãÏ—è5°R¥y^Á>ßPD«WíäQËäļ*00oçr|4û=±PŸ”·bòÅP4ù즴DØÏéÍ^Ú¼' ÓrjÊw‹÷ìû‡yU½¯â¡fËÔ CÉöGÖ»sýVò‘§Õ <½ê}B³ùn6ó)—Š]Š»¸þ¥Ôã¯óÒvŒòH!ïuðv1¾^§˜›ÂgŽÇ—:ÈwÈÞ¤ŠÊk’ÚÏwjêÉ+‡–nIŽ%d—éöÙ€CŒ ‚Cõ9~Š&ªÞ,¨ÒÏCâð9ãf¹óx×x¢E“›Xô'È}ñû˜Ÿ÷ nØœœ6¾&˜Î÷«©_”W_]ðûã)l§°ö?;Äͤÿø2±â‘È®™?oX¡ÃØ`Æ;ÉF½aßDñ¢=/—³Â†¡ƒýæ~y΂¶Õþvú ʸkºÖÌ+í×u õ=Y¼ÂlSäøú&^ gŒ°Ðç¡Jº¦Û‚§>£ö>"Ô ý\¡8t3ÿÈ:i‡„jÎjdzºaø¾ùkéjÙ£Á2ù::êV¿Ó›¡kdô@a u#>X]ÑáÔcppuxݳÍ|ÅüqÎÜ%K3OŵT>%¡èŸIzÒ~+gEQ\mv¨×‡ˆ, kJz3%ª"›ZRÀÒ])Á»ýÝ3Oj4Ï¢äÈ9êû´ª—©^‰¨sL«PG÷äÆTQL„sù¯f»U’ UßïÔnôÍ0†bD[éc ¿ý°[•íÔ%BÍâ»sÉТ†ï¦U[1_ÌNòÓÛdö%;!ó_Wø+²¥|˼ÊSª¦”v¾äà¼3ô[±˜[ÇÊ“ýt75/hÍ|3“»ûóÄßùi9??•dH×OÊ“’^y] ׿]Ô2ê…o‘7/y¸Õ%Ìò§øÕÄuë’ˆ«¥”о d?—Jˆ»ú‘û21‹Néuä3ŒÉYŒì´ó“yRÀ¼êt|ѺtMǨ~ü«ðY‰~ïãst-缨ÔGé)¸ç(ý,·'ñsLö<™ÈÄVF½y°Çª.Ü#f¥£í=Bbò#"r@K±ú,$•Ó²Òt´ÄAV.ÛLsýÛ+é˜Àâç#ýPÇI™¹3æv=M¤ÍÉŠæëÌn…1Ü[ë#iÅ~´{»K}Tcºú¬ðDåÙÎíHQ›¾ƒ÷HIÒD_¨ŸÚ‰bT-Ú_qdª×_?šÒŒ7|ÂôôIÈøAC}9SL—CVµro¯pìˆÆ´‚m‚=IVÇ2ÄÇ•ø‘m°§iG»²P–q•ï?åîbÎD´Y~S‰ý!g%±G»Iš8BºÜSR`|}0^¡‡ù‰¥<¿sgKšL¯q—ÔÔà63å¦W””öª|àCá² /Þ\VŸaÉ%'?£\¯G~ü´4.hN3ÝWWbF¼zv…ÔèFìÄÏ’ ±¦ö¾µýõ) ¥äeü>¿²cIw4ƒ\ømЖ~­¹è¥°AïUøªL¿Y³Í ¼WäKÊþöÅàóãé~”p8.0Vý†¶Kôç £U¨JЍO¨4ª<“/†ÚpîçIˆ0{§Þ5/oyŠ&õ8™žî.îxSº¬aY -(¥+zž- «ums FýÛæïz>¯^ /DËúJs8w‰ŒCþer8bÕÕ3?¢Î0tûè‰Zì&Û3 /Ë®ýìöü µ$ºQ† rÇÇö¶]ï_Ÿú¢Ú¸i !+?“/i¡«¸owí±Dù†Ú¥Ÿ:cq—µõe\§v·EíJ7Ù”[h~ux‹>qÌŒšb¢‚¨5®A"¬3Þ‹4õ=ar{vÊÜ‘â>r‹ÙeÃuW¢aæÈ'×ÎäVLÂ’_¥hÅW$PŠéüRÁ¶6ˆWa~uB.+E76­Œõ o“ô®dåqÈí» >B¡Ê•Z‹ÍŒˆýHÜÛ~?^W‰Ë³²ksU*é¯T2¥`uà+*õ–ŽË—€TEº”å@5¢‡ HØ"¼H‚,E]¿j¤§´w‡Û;¼Ÿœ}QÆ-Fâ­L:jÉWŒV×µ¿kâƒot–7Ùs6Ñ¡®Væ»ìͽëÎVÔ§(Gë­Pu2¯*ˆfièµBSÝq¢fýÓ;d…ô±NÐË›Å+¿pÝf= LõNòm9ƒÓ÷'F­«ûÓrü$8QvúŠ¾Ò¶"«4asç¶ïžÇkñJ¬$Y‚·h ¯rgSN±,íeí¤y…¸xTÊØï:Ñå…$øÜ Æ9[è}?•ìxzDJDa8´Î݃O—5îßAƒÅ8P¦%’E ……õcƒ¡Æ]u^›4,©‡Õ«7žæïí9y?ñÙ>ÇOèn@Û|D–úq~€OŠwñ+šfJš›5b —”Ó•NøÑ®­âM“œ®‡ÂRºEïd†ùªˆ¤}4T­æ ËÜœ/ ?úHCTÑQ<¼d¸Ôª\ØÄ¸§¦oÌÜQ˜r{¼nÿø(ã»§Ãuû•ˆË±Ä‡ºó¬O÷$ýÉgrLqŸNíLoIÒÇ=w,Zºú2dL<ö¯|QE¤î§:}f6‘¦£ê˜ÀêbJ–•mç ƒk=&ÔE¼¨bÏØa\”„®y®œ©×š÷kQâÿ•ù' endstream endobj 672 0 obj << /Type /FontDescriptor /FontName /KHVYYP+CMR9 /Flags 4 /FontBBox [-39 -250 1036 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/U/Y/a/b/c/comma/d/e/eight/f/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 671 0 R >> endobj 673 0 obj << /Length1 816 /Length2 984 /Length3 0 /Length 1541 /Filter /FlateDecode >> stream xÚ­’}4TyÇÛu"—䛈í‡^ÈÌ\¯‘ÖŽAQ& ‰b»æÞ7cî¸s§Fyk£¤¤œR‡B%ÒaK%SòÒªÓ¬èèM·ã’·¶=½nšöRgõïžûÏ}žï÷÷ü>çûü˜ÖA.JÄ`~„”r€Y°à "`€YˆÉä‘Bá„Ô¡0»»Ã€«ØpÜ<9.nðY"‰‹c)°˜·dÂä¸ñ‰ )D¨X,žž!D$@@qŒJd®DB&NÈA&ÇÈ-Ê‚` ¸1˜—Bì "©ˆnŸÛ¨BöUÚ‚‘r ,¦!—%¤’D€b"ˆÍ'è»0šäÿ€š>ÜO!‘ð‘ø‰ñ“)}£#ñ¸$ñ‹ƒˆ—)(ŒŠ‘ÒéÖpì3\ †âŠøéª?…Hp!W*–`Àvfqœ\> ¸ÜWbhN c‘ȱÉ>&E§£ÐñM‚°×ðÃxAáö_ö:)!¸” M”a€3垬ᩚN‰Ä•`‡ÅáÀ´‘þ¾þEM»ÌW*$P\*Ž.®!I$¢_]¹€í0À¥(¦˜’&f³¤Et4É@DÐÄZ‘ÓQáò8z+±âdŸ~fì:rŒšjÑ^!N %˜pbÁS°ãq©B>Ùø6 ooB¹ÝÁÑ8¸»Òh0ì ÜÜ\’ÿc*H“R“¯ôk-Âé%`˜BšvB¸<}ó‘Ë»ÊS|OµÉÖ¯®|®Ñk\¯J)ÀÑdKa°µ˜*:ÑW½¿É,îî¼áòà ò’y6_ô«“ŒŠê¬âÒõÒ\Xf‰;³òfkí ù7%¬;z,£o¾GÙŸ¿Çv©æ•mªÚ°ôŽžÅ‘)Æ5«žÔ[÷KØÈµ¶6-Å[êë7+S¿©lѧªËéj&‹ÈHõdæä7±“Æm×[ÇE©¯?œè_¶U0£³€{ˆ‘þðéŽK­"uÑË¿¶Õn4o?ï]Vj}nØg§ž«Ñ'-1VnøÇ{Ïúþ{¯üwïDù¢c¥?…xåm7–z£çpuòéíª ÿôôÀƒ³Nžr¢SeaZø¤o]—ÒP>uäúÖ<ßbwdõ®Íh¯øh)Ø‹ðžkg´–>¼æ³°"âY±‰WßÓË1+W’87ŽCi Œý) áwêòï¶¶‘?ÉŽ¶CVë2‚í»âô{®߬F¯Œë~«zr›‘3f‘~ã0júÏãÞÆ[~ôv÷º¡{úl÷œ¸Ç¿Fguνýâ-ûü@³©ž8TÐ*)¼šÝÇh—ŠmðÑ3ÏvÕù„È ßm£LJœ…-ó"s‹ì,ìÚB5³ £õ5+vt7vTï#j¬*«–™*‡,µ;U…sr¨o‘yé½I!ÐÆÚÖ÷å凣/YäÞ§z´{U-¹#uyè¦Ì3ºËtý£‹xoîÉ2™]æj®’ŠÛ–Þ?˜Ä~0?7hîœæ1þ/€î5 endstream endobj 674 0 obj << /Type /FontDescriptor /FontName /LNUCPW+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/asteriskmath/bullet/circlecopyrt/minus) /FontFile 673 0 R >> endobj 675 0 obj << /Length1 745 /Length2 581 /Length3 0 /Length 1092 /Filter /FlateDecode >> stream xÚSU ÖuLÉOJuËÏ+Ñ5Ô3´Rpö Ž4W0Ô3àRUu.JM,ÉÌÏsI,IµR0´´4Tp,MW04U00·22´25âRUpÎ/¨,ÊLÏ(QÐpÖ)2WpÌM-ÊLNÌSðM,ÉHÍš‘œ˜£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š¢Çeh¨’™\¢”šž™Ç¥rg^Z¾‚9D8¥´&U–ZT t”‚Бš @'¦äçåT*¤¤¦qéûåíJº„ŽB7Ü­4'Ç/1d<(0¤s3s*¡ òs JKR‹|óSR‹òЕ†§BÜæ›š’Yš‹.ëY’˜“™ì˜—ž“ª kh¢g`l ‘È,vˬHM È,IÎPHKÌ)N‹§æ¥ ;z`‡èD8¹{øhCb,˜™WRYª`€P æ"øÀ0*ʬPˆ6Ð300*B+Í.×¼äü”̼t#S3…Ä¢¢ÄJ. QF¦¦ Õ† ™y)© ©@ëëåå—µ(C¦V!-¿ˆ © ú¹™y¥Å Q.L_89åWTëSœ®¥©¡‚¡‘©‘‚¹…Q-ŠÂäÒ¢¢Ô¼p:†ŒŸ– ¿ÔÔŠÔd®›×ò“­[²¦ok[YçºøÂ*V}Ο'Ö¾¼É~ bGÝìÌ”Ú`ÓyŠé%K^-|´µï°xöE ¯dë©ÂE[${ýzâ¾,^³µkÁ²ˆ ¦ûõn‹W6wMãý§­þÊópaØŒ9­¤­ö=žÕ©¬só‹rý žy)/œ¢ïû~ï·VÐ$-%)ó›+Øï2ЉWÞ}~)ÐSnêÊžù6žï-Š*Ðôì÷úÿÌb÷²ÊmÇ?k/¸¦·Hâê&¿gB‡ñ;ŸµþËûA[":S·Z}ßqM¾÷w~êO½û:  ã77sàã7;ž8?ÜÇå¸ðlj9Ö³MuLœWç§Å­‰ã9¢4÷ÍŸˆ‡á©N>ç¨ÛÕ/rØW­7Uj{çEõ¤è=Û™í^ë m<ñôóZy—å’ákuŽÚN¬þË©Æ(ÑöÎìÂá»yU‹ÞÏ9Ât¼þcȼ„Y…ò‡ >óëW³MXZ7_Ûý±÷ô®õÉm]¯ToÙ†»U—]ú ß0ýR‹Ü­´òb©¬óo¸WdÌ☭«ò¥znÚ¶òŽì «*ªn¤nýÞ÷Äd•ûö U¼œDUåï+øË¸RIíѱôC&N3.0†G߯Ð6·9ï”à#Íã ë4¾óÏW·ÿä쪻¢•­«ût`j°¿å´Ó7n³ßŽ´MÈ‘¬ú£:/SFE?O.U´t[«ÖÚ°JÖg_î,ä¬Ï]ä{RPÍ“n‹ÊàŠjíÓ-Åë.Ý_alyyžÈ—»V®êk¬&'ó Éi=81w޽þ¯²rçêÙŸy°ð_ø¸„»7 endstream endobj 676 0 obj << /Type /FontDescriptor /FontName /PXBGHL+CMSY7 /Flags 4 /FontBBox [-15 -951 1252 782] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 93 /XHeight 431 /CharSet (/minus) /FontFile 675 0 R >> endobj 677 0 obj << /Length1 1225 /Length2 8164 /Length3 0 /Length 8902 /Filter /FlateDecode >> stream xÚ­”eX˶°qww†à: îww×w î!H€àî–àî!8„àîîN‚ç²÷¹çì|çþýžîýÖZµêíUÕMK¥ªÁ*féd–vrtg±Jšr vˆ]…–VÂlæqr”4s @üüi°ùëÃë-ÀÍ#âA¡H89û¸B¬mÜ Œ%ñÄÀ® 3G€’™» Øáµ†…™=@ÃÉv÷aˆÙÛÔÿšáP»]=Á–l( Àbá0[CQ€9É9Z9xÿ5léáüï'ØÕíU Àð·&#àUÒÒÉÑÞ` ¶B*;½®~uùÿ¡õßÅ¥=ìí•Íþ*ÿw§þOÜÌbïó¿NÎî`W€’“%ØÕñ¿SuÀÿ’S[B<þ;*çnf±s´¶XA\lì\ÿ‡¸IC¼Á–ªw €•™½øïq°£å›¼öïo ¬²¬ª’*óÿníßAU3ˆ£»¦3ÀþOöß ú‡_›ä ñ°¿vôšøzýûÉè¿“r´p²„8Z8¸yf®®f>(¯‡è•¸ï@ˆ£%Øö~5²9:¹¿N¼vÆ`åäŠò×¾òð€’ ý‹ø@©ÿïkLù?ÄǪþC ú?Ä jü‡^·hö½Ö´øØ_ËXþ ü¾–µúÿ"È?øºŠ•ýɯlýr€6 7øÇ\ö×—ùsî«•Ã?øº;@Ç?ðÕÊé?Èõšëäø‡å_^ÎેËøêáú¾z¸ý< ûøÚ+?ðÕÒó|]Ùëv¼Zzÿ¯–>à«•ï?Ò¯•|Á®ÿz‹ÿ{>Åż߱‚x8¬ÜìIóøyøýÿŸL WW°£ûß?×cþo¶‚¼~`°7ØeqÎÉB0Ì6µ)¢<@ªp¢žÑ,½4l¬+¼!]íxMgƵù‡&˜â ;ÛR‰•rªðhiŽAÜ$æ7øN¾€=ˆŽÇ˜Ÿ¡xnqlh 3”;Ћéý~‘rǹ™ù|‰úvݳ ¾ZñÄ[@| W>?÷|`ø}c5Í’z7Å(·]1¬}°þqôáDÆ©Ði±xˆÐ0ã÷e‘¸wuÊn=ÿC®ìlºð2;£·ÕæwP¦å¢n¿ì}L*¶aÏ9ÕôetÞÒR—oXä¶S¶ð¸¼ñT'<ˆ9'Õš ^lF#!3Ÿo€ Ip…Ýò¤s'› £®¬çQX؃évúïñ¨3Ve#.–?´ê9f¸BÜcgòGEߎR[3‡ä-¼°ß_\Ü6Žá¢( ¦œ!h&‹Û´º»³á¤•Ò|û¦x{‘"P±Ù´Æßñ†*ô² oj-V_æÈ¡ÅI´ž–µâ…‡ÐL©ð~˼Oeuß;‘ sõíAÍ’˜^"{Ó 1 @YºÕ|sÅ4b¬ô]éþi2²ØªùÑŠž]J }n Å—Ïc`ôîÄ rÍD)øµÇµmmØëÓÌ!7! ·£~ÖbåJ“zèŽn)]¢ú&Y»¥z}ά§*qb\Öd%Ý—Ðc@Û *v%.¼ Q;Œ4²Ÿ,UãÕ0­æ!ê¶k÷÷´ Œ¸á§̵ô)?çÏ5ÚÇ÷˜4J=Åí3Z›FŽ  ¹úÕšn”@Ëëü ”Ó¶wUr/äjH1ø¼éïgçŒÉ”Y™%ÐÖ)¨Çꌒ •ÂA(Îv(u†±î,NŒÉššKU{3^‘þÄSqž5GHÁ.ÏP¨¦ó‚B:¿4;‡»=Hý™9¤²ÓùÌšûjcÄ™°»Æ9)?aŒœ½w±?ÕØ¶Žuã´`½°©ºxñÔá\*â/)ú–rgÊQ„|´IóÎÿ@PpÇáê}xÚocû’d½SJ€Ê ÙªéÜ.|†îƒ–ã5{‚w£A©Åá®zˆdç­ÎûseŠï›GgËÉZ¸7l«?ø«Ô™È{Pé]kŒJ0…¿êëÛUŸ~KLvôàSåŽÚbäy|´(…bü€ÝgÂgˆ$ŒX+XÛñ‰äyñZÉ5(òœI·_)ºYcûT·ªEÐuô#Ãë—nløROµK¢û äó&4rŽ[•–š}ñ8AÂuu¨¹à÷ÃD½“[žzWUŸ ¹‡nÄ—¦ˆKµk%û–ÕìíY ;µ’Jך»ë™]~Å¢¤v6~h§oØ|/øb’&cå97x¿oxÇ@’³"±ü¦`ó+Ì÷Úy£]P¥}Ÿ!µ<+‰”xÄÝ<å£íëÜ_“¡#6–=æ,ë³M»ýúCôZɆQM=¤¯å“È~¿7(ž=*.Õ:;€ ¦UàUÜê‡I[$ÖgsQù±Ëñs­£.óÖyÊ#Ť¬ÿŸP¾ò Þ^hÄ&˜;#eâ­-²Ž†;š\‰“ÃË«ÎñП¿]O«[Èä„Fk'àÀ9Í™£Ûwâ© èëŽK„žPPüv÷¡®n·+ž9ü&ô8ýŽàˆ9΢Á­†¹Ûûv~Û&HrAƒ¼ÕévâOàJ3R~ÖäÁ.£YÐ>˜5hÇΕˆŒØ±K¯¬Á..Ð{ˆd¦sÀÿØP¼/õÊœ=¢ÿ4ÉÚWË”ÖYÁs¥|ÝXÏ:ßA«‡»¾œ€ñIìýBY®úy‚ Ž"cB^ŒÀÝ\Zž®FoœjÊüÒÓÕ<LÓ(ÎNaÍdÊÛÆ¡úek³, êÙÜUqËïèê¦â_Ûq$–žÕàû d¨—–šß×MéƒIÐæäô)n‡×¤•õãÉÕõ7À¡EH¸Èï;åÇbM¾8»#plþ°÷ÂÄm:ѸMÙFF±%¨¬µqÀÈ6~LzÛ^äõ#dõVàÑ×-øŽæ&4*ãZßtPƦižO²¯|kÑEùåÒݾ8óq_GÈr¯»öL–|Ø_ˆÇJÚGµÏ_bV« ‡–ÕgïKLI„.4?7x|z¡^æþŒ×õV®á¬Ú­ìšæ;yO ‰tU¢{n@$yùä—¹ɯ´#ú`à j×̾£¯êèïúE ¦íÌñõ«%-m,…Z‡ˆCœHÄ”ZÙ^èWD\”•gÔBE1ÂÊüLq~(OâþÆóÚçÆÀP»ywKÞtïëµ™M:¡¡«Hx&¡€s’¼çQå¥Z¼>þ!ï»bôйæ:ö;l«-j²÷'¾Ñxí¹j#¡à_-A-—¡<ÜŸ_ ¦ÙDó†œ'TÅ,}gε•î[Ùu—Žrrâ„AÇèÈSþÓÕd~1.µ¾ƒlR»Ðd\49¤úOxoeÞüÏ“ÎOú¶¢mæVì •–X¿äk•ø‡¶_î¤ìɦôŸè‡=°‘Ç_¶çÉ∠Ož»”*RY°°• ÊŒ6.%HjEl=ëHTï?Ða°²·W#ÁGK47êíØ6Ý­§e…ÉGj×y™¼mC{Ÿ°“@5UÚñ•oÿíÞâßFiÄø‰³ÑÔÒìÙ£+Çy~φm‘É5²ÿG¤ ÈR¿ÙtêÈp¬¢Ö;'”q1Ç/Ÿ £Ê²?ØÙ"wfRfHÑ/'Íá6ˆì„íT~w†6ï¨ù“‘¨®f…óg~N±Š ší/–>|Þ±¼¦=ŸÁ8H3ú[»ÍfñENõáË— f¬öŠÇ¯kÛ¤5oíG\Íïpx‘›œÓã Ö™ŠÓ§s¤¯ï#+†-¢i²îaSsÕùº›òo J/û ÈOöH×Dor¡‘3=…LþÅÄ}YªV8©ïôŒÃxÙV.+!„Ø­X8·Ý_ßbË™††n„°8öûÌÑÆÆ‹LNï¢z¼z~xŸæªЧߵ9ªÅ =H–Ü£„ÇÅä==MÌ-þÚÚÓ»ÑQvl†Š+–x"ÁöוÿPí‹®cС4bŠg?ƒL}jŸì.[$·»¾ZsÃÏÂ<-‚ÚtÚZ÷/—ø4ƒY#üœä Gº(Cö‡¦ý›™TY;å’,æÙˆßòŒµÞìG¶zþ§ß¤)hõE8î.›úEñÊ«¹»Œ‘„búGž„bé‹öÉÊT9½.´ o™Ê¸sèè~›!ßq¸¿Õö @½5â¢/‡ä;*”ƒÁ¥E§aÙOƒ®1nýYBH†Þ_B\¦œ®ÈÈ»K¬Î¶¹N¢àȨ…›9¨V»÷¼—Ü?×›âGTµË¢ò4µiäe’ÞèH |¾ß ZòËq*‘½‚!iAW¬2ëÞ64Xž¯â.†ž“øM#_"ôÑ(— ûú²ïçEt=B‘;•øB2Û“}]`ÉwC|wuñpá¦LëmWÒ5™£™ÊÇõªÓsKÕ®[ºse`å;¨oðá§}‘À7DaÈʱèI+@Çô™ùTž˜QL%­\A/tE«Õ­X÷?£ÀRw¿²&P˜=ǃFä¦ÅªòQ)Bn¤„]}DÖÕI=Bë)/_©Ïu8Æ>Æ*8wü ñÓ‹NQûN¢».ñaÕÞ3¼f¹ÌG–«¢Ž¼±HvÒx¡û_l'^5è?|Ø0¼6bô’>iwm¨kî½BxïΣý3 ×ÛåÙ¯ŠdN:Ó×ÅÍkCºqåmgo¤Ä= 3—ïÙÉR g+$•óU±3.„>Avm%Ú’ýHÐ>ʬ–ßO’4è-V{´’F@²Æí+Šc·>Nrpü’}éØWÅ'k¦]ôˆz¤iï£S²f?l­Ác©i»¯8´wT™0\z Vßær‚Œá÷T§£[.ÎK›Ä§rA·mM0±»Ä"}» Ö: Û"ÒSz6×b¿àiˆˆ{h“q _Y±Oèç“?rb}- ¨JWîÓF ¥q¡±Ê Ô„T’Íññd¾+U×åçè¢ÜQ6,;fù¼äf—ëU¥zöQ0Î&Eõ5_ÄÛСöÝ|¶5ž* –ë•Húh¹´02Ìxær0‹ ŠQ'G}œ¾1v6Æú“3æS±0«–_ô ²RB¨ß‹^Vèîì4º"Ù ªYⲤÿ½_› o-{°ÛåhMhÊhÈÊðäÖ×wÉü±¬câ>­Ö©´©PQâŠtŸ-—¼74<õ]B¡µ¢ Adctm°È™Úr¡,DÃkP+ø)ˆtAœjQ¡ÛQÃåѽ'jë¥om’éÒVPSüÅýœmðÝÔ}=ï²ä}„]½zy*í»8þ P> à"8ÓE :xAëñ­ðÈ }×9}™üà7KÀ¹s¶ê‚ìÆ›!Ó«Ž˜rÓ2$š¬ Õ‰T·‚uŠ›²I–÷5ßíZeËçȵ$x¥„ké£ßô&ÃBšY8)oA:̓¡ä8¾dZņôûisl„±ãÓÚU/Sß,:¢‡Ûœ&-ÝA0uÞ3«¹Ñš‰÷ø³ž»Ÿ-j´²CmO›RÿúÛÌI/Þ»P 5º î VAü8þ5¨¿EpàǦ1æáð¬Æ. ã¹Yƒ&æ`ŽCPÊe>W°°ý½Al1òýHâFõŠÒ:Š6^*›eŠg”ÑÊ#oˆ¥x¿`¿ J¿ú׳4Ëöüúüqͳ³"‡„Õ9ª“ô[«ð…¨ÐŸQ8‘Dfoùr8ÚË —ÇTEÃŽLMv5ØžÎ/DÓËôQaˆÏå’« À µvÃ^—&â’Fñ‹Ñ×lÚòö3k¬9-vB[uEy’oãá,¯Õ# TNã¢.}2W…;¡d«B¨œ@ šœFiÉ4Væ,©Ìø¬eä²K>=[€…"¸†å|qG˜v<ÓÂãÚC†„kl í®’÷zØîV‰ -@¦Ã3¢”æ“:at{³Š aë¿Hù2t,'vl ¨³¦çÁ=‡hÓû´(4-®¹Ÿ'!ˆ§¼ KZb$žÕ¥–‡ÿ‰ÎŠÇ+À>@ %_@ZßS†™0·DÆ\aèôÔÿä=ÿ½ÁŠzúÆN"÷š§Cz„í1â-1µÚh.¨.RÍÇ1wZPd±0l‘ E4eCubgB¤–À¿‹s+HÓ¾¯SÍ›¤§€3 „3­¦n/„o˜ÓÑH±SdË¢Óm‰ùü1KO¥l&£9ä–xÝy®AۀƅŸ¥ G)4ôâ l϶[o%ÂF‰¹d.ú/vÝUuƒ¯~Ó²å <†ä^»ÉL‹Ÿÿˆþ2y¥úÑ _ ¹l(þ7‘NÚ@Ü6Ofþ|T ӿлv/ cLI.öÖÇ!"Ý)cR£¦qÕkÑÞïw#"BÁ1üÑlþ©‡^á\@’z'ë® zŠ“Óè‰Ë˜\0y®U*"=Ä_‰Îþý‡æ·å‡¤8HÒMHPw†Ã¨òËvÍUœHÖýv!^ž»fËí-Ž8bO ç¤N¡ôÏÞ_E}›„ùí¯¤ø'"2úEöþ@ƒÝX<ØZ‹t¸Ï¦anàžf’·Ll3ß–\G%í}n$î=÷pÖ|]ÿ$'1z—UEäÃÆ¶K\89ƒ"æÂô)¥ÐêEg÷úÄà˜œóûâÙù¡Š¢ø#žçÍYê9ƒ:¡:/R‚á´þ®pöE@ÎCþwf}R^Se»xO>Ïí›÷cß@2º­åº óê‚„oßS[6|\bñŒ´¦‰˜~®mÖƒáÏ÷=—< â˜òXf‹¨É'“m‘k)é|nÊ ©Á ÜMþŒ'[wQ°uZª‚Ö…ŒëòT䵄“ákS* â˜ôgz©|#ÝŸN o£‡Ãs U‘·f"ØC%A6áÈO…fþ–I;"°×Ô"w矎<OÆ?!ÀfäM“~Jƒ—³ÉíwSzêñ"k ° ¾úxQD–ù¤³µ$vϵ5g'Ĺ×pâUV˜¢ü­ C*Yõüm3eü3ê åT”Æú¥×Ä™Mw œï{úÆ“+dm'«/ëÛ‰x+?ÃÕm× Óð›5H¤çX¨ìJu•d†! æ)?ªm:^6Ó±šõªÜœŠ[ÂR„áÚ9Ö·q¡½4 —nÒƒ‚*Gxã£ù’†U½)ß=g| ¬ØÔž>;ãNUá…óòèÖî6Ê¿í-ľOꌑ†¿cvÖ%Ï Ì:ӾܭÍÜ!aͨJ‹Xpù×,6©%sGSÄñ)”“ÞÇ©Ørr>›² ÙrEÃQ‹Dârhš™þp5lJy²)é€íL´}TÑØÝc ø;_ª›F²"ÏôP`ü¿¾›&jR’ }ÃVääQíA·É¨”çk‡ÄE$ßÍrô†YJÑÄÅ–´£ØÚ—Ê_ú•‹øóºªרÛð÷ c|5ůˆ ƒ#ZŸ5±xô¥„v€o4µSrË<’è¶î”X{;k/l|ë,?(F<oÓŸªíyýÛÓ˜Kz×(EÚˆ:kF¾¹cðõÌm`ªÙÉ-ŽLkseÚ30¦ø!îX£<¬˜Ê&»‹Ûк½ì9ÀGhÑE­@­09”㉠¢j=¾uÙÃq–Š@^ChßY>ÄJ\9PÀ£ÀŠ–ÜŽU^m“z×ZᕞËé,¼°Ä0³×#ƒÇÚ¸‹"Ñ3»=Ÿý2-W ,‡me5Ó÷Ï(÷-fÝ®Õ.4WÕMs—î:ý°Ú§öMBè†÷"ý¥Ái˜X¦‚£y¤ªòa¯zû;¬¯DAñÚ´‹´Ô,“yÉÛM’g#é¤* ŸGbM_8³…໯ßîr2Å'Ï>C*­‡;ó~û§È,Wþ.µLy7U}yD—À4¡ÃIQí ¼3Ð ¦7HCìè"J:jDd›²¹¬ßlÓâm ®èN(¶V[©¸O;ñÒÄÀ¸0qW~p óÖ¢7ðÈ{gSÀС²è…ôFë\ãFT뙥h‹YqÇ“¨þ–¡âT®£Mã?(ÃÃL8m;š°Ê¼/b\B"¤Œ™lRë®7·ZÙXÎõú„ëBõ¹ÎÝ$_׋'w[* n!gÔ(Ég1 o}Ðáãuìå„ÿ1“s¸V¬M¤Îñ%ãÓ{½Ù/Z¾Ì}'MóÙµÉÞm§^¿8׋̸‹ÞLÎ •Äÿؼ(‘ iùUeîÏö)„ÝúÚ¿í͆¬7'ˆâsq6©»Wî¼Ée¥2$‘Á´Õ:!cªËû •_C®Ÿ{¤û¯•ïªrDPaE)*“¬ìÃ÷~œ©½ ³ók(‘ðÕKæ•JT3Î'sFÊ–žE'¤¿ SÚ¾Ê,m¾çŒýf©  שÉcß7ᣠƦê‹pB^Mè"ñÚë°‰˜,§z±‰IVÿæX¨.lÝÏ:HêÁeÙ©5kV©ÑÒôEYk!çB5Â2)$¹þH»W¢lF½6¦*yËos›iBqÔ%!§•­‡aÁæÒT¬íC,b™‚óf)¤]6õJ1ÔηÀ½5Â`‚}ÙE:Ñ&½Q|Ô Oçv’o]Ÿ`@¡ÈYÐÐp¥š)i³ç6Ch”ž²¡…ß[_.—HÍïÌŠÒb¸B>k—¼›m³¤ÃNŠÔØ£a„[36>¸Z~+FL ý›Ñb¹A+­’„þ¤^V=/Búà|éÞ IQ&[¾?Cu”/’»Š""ÒÃÿf•§ºî‹wE^y¡ª]ÒqµØO$ÏÙ/•ƒ<Ωä- ½¬U€) Ç5ÎOÃÊŸ>«Ž=^¡9³ÅÞ}‚ X_ÅØžx+XÉ*TE‚Œyko×¥qпÏEfµÚ½¶Â¦Pü,bþX°Å³EÝ`œU]¯X'IˆDxT²S¤g‘äR®fµŸ!øœê-öø4M5˜ãÁ¤‚ͲfÄàÂÜìmŒÑ!'ÕCד1Vc^âLÑÕjÂ,³Ì êì Z¯S­Þ~ãqÙ¡òau§Þ ®éÓ€ÙßF42þL«·*£x3HØM]¦Ô›)½ûÄã—é3k}()>l‰kÙÌZä»´ú«Tã3S\Zšµ'ÊÂKp~ ƒ¯uQY,Õä¸)̈k*mö²Ì‹r5› ~ª,ÍœCKP$ÝvçâÃÍ‚¤Ñz_Ôż‰rþËY>:Gv†ÆÔ­yQ^¦Y½r¾Sz £íc[£@7âÈxUëéu4œÝCZÍðß,;e{yÝÂdÒW‘åÍ@Ÿj,n>j/êDoô xÊ OLûEÅòÌ?ˆzªPŸ7TÝÍq8xÈBj­¥æ[5)#$ƒ™áñyè¬KÊèŽ+¡HÑŠê>§9ùh|½2à.ÌI»œ¦ä^‰yrpr†Å"_…›öm0¸Å– ;NÝ û=ÄØp(!ç?…¶áªz5Ñ?„5¶=»·°õj½³RÍ3¾‘Œ{tæ÷–ÉÜÓQºî/–nf–Õ¤='½R-(>L¨¦ô<ãi/Q'¦d3ï¹f­š4BG”,Q‹±‡woºÛ»¡h`Ëü¤ªDxÎFÓÌ<“¯",˜QðD£s¬K,~w'ÝlH÷I~$÷FÔßG¶aELžÝZùÒ¾.ª‘âÆ‘^Ö*ó2ׇ N¾ÁŽÈ-ãÔô%r ¡÷ñÔq—.€ =§yn% YÝžHºê×<…ñ¿.í§¢è¡›XÃ"€Àì{iÀvRwêÖtQ˯æutuC D•ô9ˆ7Åž·8 kdø`iÄç™kpìÝE5@Ízc²Æ‡è%<÷á̬>ãú7™µœ|¤ÈÑö©ÅÀŸ¬SGËÈ×X¾µôq]«xvežá_Ñ'Ð÷>s™g‚Q6svTÓ0¿K¦’ [tÎPä \htu¨kôtT=†òÈs²;^R 4?Ü\G’™"‰Ñ[°¼¡“ylçw¥üùoö'dª ò £~—¹íÉ‘wd¡èŸ¢þhwŽ3·^SÀ?F‡Dð“’,Ù»i$Ú2«Æ]ñöðw¡è¦3U €‚‰Ç¸3¢ËÚŒ×vïíXÕÕË|ÿ¦Äž9À`HhŽÿ#²ËE޳£¢©nô3µä)Wì`Ÿq!”ä½ÿ¶Žµb:ö­Îö7T»"æ4-• y8Âv¡1RÙêÎ)bîÛ$õá);]"Ç ˆ¨2…SŠå»³ï\¦Zgry]ëZ"vlÒh]Tël¶’†­ê€¨K½Çg‘$ g^³›ˆæš d£ò#Äd‘ü2}ó‚kø÷óÆýfƒ=NF‘DšÃÉÎ áãï°ùýµÌøõr'dÿ‰ÏUB endstream endobj 678 0 obj << /Type /FontDescriptor /FontName /HNHPMP+CMTI10 /Flags 4 /FontBBox [-163 -250 1146 969] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 68 /XHeight 431 /CharSet (/D/E/N/P/R/S/a/c/d/e/f/fi/fl/g/h/i/l/m/n/o/one/p/q/r/s/t/u/v/w/x/y/z/zero) /FontFile 677 0 R >> endobj 679 0 obj << /Length1 2228 /Length2 14558 /Length3 0 /Length 15763 /Filter /FlateDecode >> stream xÚ­·UX\ݲ¶w  qww'¸»[ãîž@pw‚;î®ÁÝ%¸»ûßïZ{¯díïô¿šƒ~jÔ¨º«jÌ1rbEzaS{c „½ =33@TNU•™ ÀÌÀÄ$ON.ê4r±´·3rò˜¹¹YÂN3 èž jïàédiná ¥þlj l t²41²È¹XmA1LŒl*ö&–@O€° @ùŸÎe 3ÐÉ hÊÏÌ 0µ4qÍ-íàÿa’²3³pþÛlêêð¿Kn@'g€ê_˜Ô¤©½'ÀhÏ(oʱüÿõƒK¸ÚØÈÙþþ_úÖl-m<ÿÇÃÞÖÁÕè³7:Ùý_W à¿á䀦–®¶ÿwUÊÅÈÆÒDØÎÜ`ú·ÉÒYÂÒhªhébbpqrþË ´3ý¿  Îý‹€QXò³–ˆíÿ õ_‹ŠF–v.ªžÿ‰ú÷¿4ó j“¥@‡ Ô_f#èó¿ßôþO2q;{SK;s ;ÀÈÉÉÈt|@ŠàÍ °´3z€ `F;{Ш'¾3{'ø&ÊÁ¢üÇôoÅ`ù£8Œ¢€Qìâ0ŠÿGq2%þ(fãç?ŠÀ(ùG±¥þ(6£ôb‘ù£@,²ˆEî±ÈÿQ …ÿ(.‹âbQú£@,ʈE屨þQ µ? Ä¢þGX4þ(‹æbÑúâ±hÿQ }FÿQ¬ }F¶ GÉt‚þ×Ê"4rZKgë?A®ÆÈÅØÈÄÚÙÆÈÙâ?Vf¶ÌN@å;™m€f.™ÙÿÇüïgó?Q™ÿm¶ºü—?7ëìÿg¨R“ÿ(v¢‰½ èRøO%lÿXlmÿTÌÌj‡é_”ø'¨ÇÀÿÊÀñϺ£+è†øOÏ@0 ÃlcdûWP;ÌþDy˜YºýöŸe{׿úÂr1ÿ“´nþÏ- üÛÄþ§µl ŽYx:XíþòÙ,ÿ’ x«¿$hÒÖIPsþÁê‚ ÐÙù¯uP+ÿªtU0þIÅŠegi÷§"VPj;W[ã.aó¿@÷7£ýhPLû¿v13ƒ uø³ Êá`ä´û¯a³1ÿõ¿GÍ BT Ý_®ÿ²YÚÿuvAu°qý«0fÅñOáÿ(W ó?/´?±Ùþ1Ú»Mÿ´ˆ›ãŒÿEÇÊý?Öÿ¦cf…økxÌ þüa`mrÚZþ÷ádÿÇèö×DÙAAœAwîŠÕüž0fÕŸ´ì ^¹X8ÿ:j žº¸ÛÿµÃõOQ œ® ûØÉÙÄÞéïÁ€N‡Û_ìþ×ã êñ—eõüK‚†êõ‡É èôo‚ÿ÷$"bïáMÏ g!NVfÐUÉäû_n&®N á»üë}z¯ý¯6³½@  üÒ¼½ o UJCp‰Ÿxþd) ¸ˆyc¬|m×L;·Å8p›¢aGšõͧ²4 ä=¨="÷|çð6¥1‰sÇØïso{n†{i^ÍøšWirž»$÷ߎQZfoNØÁ¦×GJµ ú3/Žs©ÄT÷aV‰ÁºuÜêºÓ985%ÒlÔB‚j(X‰•Q¿;–„²…¬¹£&ÆX›øægÛD»rißæŠþ”›“ðföhÀ"’µØ8aÅ’F˵¦+fþ¸©‡«-êd$7N¯ìN­Œ˜m±[j½_îœÜTi©îö›}Ù‚3¦ÃÝ”¥‚™ävÖ8…)“@RþpÌ#ÞX.‡jí YñM2ˆ‰¥Xüæc¢`ºÂ)ö›vA å:4¯w™ño„õ¨ A“';,Í#|¿{èÊ×ĮĺåOµ}¤ûHã>·‰h¼¡W±ÞtÅÁ¾£M¤`ÊÍŸ8äõuï\Så“ï°“?bwùQ²gÞ‰Xû Y!®™Pª$B–ÂnÑseOÑX¦zf}!+IüÌ‹\égׄV:-Í´d‡UHàÿÌ‹:ý»<ª; sश°]bŸêцËéÀ¶Ä‹(·ëÙ«ðøBê9‚–M¨ÓQ‚·…ÂÆg è ¤4±þð2Šp†Ô3gkva[CÆ%NE2rt!pxôƒ;†Ò®k‰æK³G·Ô £´ïs¡ý|U°Ã1‡øzÌðsÐ×¢7‡=Nƒc¼¬4¢°«œœê›¥žT{QÙùeüöiP]ø I–1kê/þý%vgéåe/Lãn´Yé9|ÝÉúIÀ ÉJôËÜ 2Öc “ÂOn†ßm]›E„.µ¹/<ü!pÈÄ¿–" èẾÙGv’ÃRŠËt¦ ËÄf|+4sJ Q>•Ñ÷Ü 6tSÀÒ¾ÈzÊv ºº…ðÒvW©EX®ËËi ïO²Jâ©ä9ЫÒ9B;CÆ2MP-6ðª%—ÔѲî/‘$Js9²~›1 —¾4Ìÿ9tÍ™^ÀI»µ$UÚâZyÖ¿¶¹Øi!ÉÇOL‰þµ¬™@uÔ?ù+ C™Ó&9¼ÂÐê»g MgßµJBüw]ÙZ²Ÿ`NÔ݆þ?Ù VзӿKRˆC©lO;^ðGõLÑÄÌØ^±—1šÜ##áœ%v>åþHÉN‡9aåÜGlÝÎw'Õù0˜Þºb6þ O8l¹q<îê±Êvy25~ÎÞ‰:Ö—õŒwÅçŽÃZvAAX,pu¬E,ý©"?…RCÞPžyD‰g;ÆH©§­áPcÐ þ¤ RÓ«U?ÒlΚå¡íuÈ¥tþH ÷×O‹à‹ÈÁuU°ß·´0’‚³-W6XêÔ5ZïüŽD]z˜=1ç>Ãzp|·Eχ¸»(çê¼zÇýã–¤¤ñ¿¢ ÇR¢{` iã¶Ì÷O#êT#Zº1–-Üô· !Ú'š VóÓ—¿œõjF ÁŽKc+7:pj)~sÓ4ƦŠMÔ]kÝ S'F°çV™L™·Î'À¿*`Ïç9týÜ„I±“ý6ÜÀ: *ÜKÌd¦Œz£€zwsĬЄÐ]°L¿.YÙ¡œð“Ó„–TO~œ¯1¥°„½O—ŠòÛ+4˜Ðû–¹•ߤgôv“™Ø9ÓLÑì Oîô¡.Ä;óó×;+Œ‹_›ïIÞîú®?ÄãÍæÂ[Šbyã#‡:v£ï’~5 Ož«|ŠA¡”y6ìÌoé+ça ™…CÉ?wpœÞ\ÓsXùžƒoˬì8…B˯¾dÿ‘sãï"…hba’B†-ô3öy4hòñøJªì/¯ê@´“ñÛ¢*upD’}¾÷ñ&ú†h 2ƒFA—ur¿"³Ãæ-«s?2&Ðo°t27B± ¢w4co±ø9 G•àý‚‰µÏ†™GCN8Õ1æ ›ÏoT,O‹oMúô¾Oþh~é(Ð(QòAûhKÀI·ì^€6ö†zþÜXÝo¾Þ4ºtÜw5Ú¨N½×–ÓgA¦eÎUzC‰ôøv[3&"IEÈ®B(—%úñcŽS•7»%x]å ›Ø«à…üÛ/û’²‘!á­„½ê\gúhõ¥>V%ø‡ƒO‹–á'F-q\ªÄǪõ;ù A‰…'m=δÑ ëO”Úâ²cYŠ‚±Ú¬‰õyšyi™,¨ô˜Ð̸ȱ“M-z 25ÄðA0aqœVÝC`˜¡8›?ɼËi™†òT–£µoö"#‚b6nxCÐ_sæˆ/¯ª”¡}³N‚%N¯Qî×™`ÑS¬9N׃37ñ¥½!„ñ.Øh<Ì›}^éØma¯$VOVÛæ@IÌ@Y8êXÿ¸ÓÑÞÉÚ·×7-àd賘ÇPúëûP{mf¡¤›{!¢EÈï\€R`ô¬1¤qa½ÌP«ã­µœÜXà,”@á¢&îz'öÕ×ûÍ@MœûØ{Ñ{ßÙ™WIqó ¥Œý'ÆQÖ¶Üê®M»±u‰‡¯vwuËa²ÉgÑ73&YPÓ‘k_ëüù„¶VÑ#Ý>˜‹¯áp’6þJ§B°gW"⿈èï¡ú}='ò\»• ˆÄ¿¦4f£h—Ž"ÿä?o%9ý»)BÞ¨6@°<_ÇSFp÷J¡°; ~ysb&5lUÙ*Ê÷jÅ@ûÁX¿¬9g¼'ÍgÖ>̈0X®|” »¦TBÅãŒ2§‚Ý|Í’ñ ü¡c; kÑ'êÔ’Ñ^d²ò46(Êš/nwÁ·®±5Vie…D‚~‘ôm¯„øJ•!VçÅ·ôG릀bšÀ0ºIÌȈìB†b”é¶V¥û©£y ó»¸b”——P^Í'ƒ®ã5‰õ±v@F š¾´Ã÷t©/Üšê%mP½U¯¸F>f¯š,N2_\꽄™ pö®Š2 Û¦Á†®¸jë©xs´¥ï¬ç†r˜ƒp: 'cuK¿ÙÁD@-ñã-„7ýoFÂoœ#_xÛ˜îÅ’QwF Þçò”g«ý‹ÅìDpê¡dŸo‰>©¹/'óªy$ £.ajíä¥àÄÛ®Sß¹ë?›^v2qÈÊÊ[º¥­!Wƒ÷]ùCÛ(/¢bRk}¦µÙ·b ØÝÕq ;û9dE§%Bî#êU›LV ª„¯ñyU×àâç§=÷X†Ì°rR¥°}¶šu]—Uzu¾9ÿ"$k˜ OzÚ;Fê ßD ô­%r÷Úº8&üø4>â: øú&+ ÃcrÛ°þtATÛÙ̬þ‰ó‘ñÊ9ÿˤY¹êG¡g![ y¥nœ“êœO™äêÌI‘÷߆u|K#üÇqsù¢ø\M:¾]徜oÞ)ò´ºÉ¡²\ü”Lz°þ~u™è2ƽyx‰þRézv§ìënNÓäÅs®ÉÛJ§Ð.?' ¤v"`Í$7*l}¶ê(v'8:¦cœÎ‡ñôîëˆÐcŠpC…{Y Ç$P®¬¹ÔŸE'J#——~f*å >8ˆ?Ÿzžë­DþaÐBÀ™ªóvÓ–5qõ!¾ÔfO` 9¦MÄy)/ –Åî² ¾ûÙŠ”R0î!Ðf2U‚úܲk§Å‘ózÈ0RèÓ¸ º•ä÷Yªå4ÓÅ,ºÝðKGRŸå­S¤•ç*’ZÃÁ:—âÏXµ€‹X!âB·Á]¨›SBR™ØÜ°»#ùsÖ2û" êaš¯¯5ݲÔ1Â=mâŸÚn6´‰)Z“‚B­Ê§Þ„„k-Žtž¶|®eRô¾‰×–ÇÜyŽ×Pü";TØòÄÝz¼öcbÜ¢ƒ}Éÿ—P ‰ðëÔÙ˜pôGanìö°[ôcÕþÒ7téÊhûb¡«/Ë–bIÚ %Üb¨9eåvœ#kµª‡¶î- nVmœ–T •‡pzÜtç°úÍÐS¿-z Ë߉¥†ç…ª…2P7ø|Aáè"‚æªXqŒE”úÑJ¤FKié¨ÁU˜Ñ/'1VoU½6]4O~od · 6xýËÌöaÆñ>ùzm—ËÎ?»"Lczy¸‡; ãzeïý¦Ä’; %tª2­vQ‹ÒŸœb"ÈtšÏQ9âJÇÅ™ûí‹ï/ÃtEÉ¢T\­"§3×]{iÚa†/^°õÒ$BÒð¬+q£YÊ߇ ÕÃ9(Oîä_9&fáOÝI_:8s>¯Y¯üP‚Í…µDÄ5éÿ¸wÊ-üðÀ,êQ.Ržê.…¢°1ÆåìQW¯ÑUŒÛ]ÞÔ…t£`æ!иñÉõÓ¶ŸÚ²¡f–¦Ë&Äž‰ÜºLiA¾×£Õq‘}$d•P¯t³?›y÷pw`}¯¢Ý ÚÓó躾"\ësŸéÑœ¯{0ÿ9判vË’é”ÃAD¬in wÿÀ~Bm13}9›´Î„j*ü(8Z¿=%|íyÂ%Û…£³ArqÍp.‹·5Dàm”L¸ç k6uõ_Ìr2ü$¬öAhy¬R‡ ½²)´{s§gÕ´Šc&ÖÔþ†'®“ {%Þ4‚yÃNùÆ‘8™2MËÿ—mêbhðBå‰É9¾!u‡ìåKáš&`Éy%Yk3æ¿ávèšbÊ›,ÛO:½ÑLÔ‰(/šÌf¯±nHâÀÍò5F%ï­ŽFšUe¥PRAŽS|ÆU{ýŸ;úCtˆËÏK¡&«A¢&UF¸¿ÙÏœÁâ/:o‰ÎØØ¥«ñÃКkÖ]pÀCE\•y›š1\W°’ã‰]ÃlyF³Ûuêïuòò%²WÙðlukøŒZ!Í3ñºÒ‰ýqÁoЉ /áËøCüVbV]ÈÃ^>\A²ùU¢µG‘­ºw‹ÎÞ÷j¢ø©Kg9Úþ®&Q§âωZ FVo†0ómŒÛLöÈD@ÏÅÓ-;í›ò9j“„ÈÇ™Ê"ºÙÿ$3ÈÚ£ãí¹í5ÔŸyE^Ó3ÖåâZ—¡*2 § }ÿtçRD£3ÓôÞ7‹gl/öÌ”ÀzøH¶† ˜Ýïï'o.õªdûBê =†Ã¨®³òŒ]ÕÐq“ƒãVι×K<Í<7ÌÕ'Qì °úpÎyQ•OH7.hN!ØÊŸ2ý½G§R˜ÑÎéû^¨-ÃYö>g5À)ëƒC`žïŽðU¬®Ã1Hà…œÁd©(Î UßKèzvÓ¥-LÁ‘“›ŠÛs“ã1¡fç§ÍDñI•â'•oÙl ;ÓÑ^¤T žÁÂ\^«¿ÅJ€gçÃ>MóU[ï¦~j?¹ Z‡]Y6‘(CÖ2~fd1ã¦då;YütP6b/ºEãæ,å'ºNsÆÐáÌòÓ*k·~Ë&t2Œ tµ$Vã«à¿~×TÏ­"®ò:]ñâä¯Ö`ô@E§]uä×{¥‰VÔæK²~Z1G,4F(õPü·pðüzÓGùÓ1¥Úï¶ñŒzßb¥‘©Ã><<ˆ‰÷ìSe÷@ÿ§½¨S8½­ÆIü±Iža–"›Ž€ék…p+ž2V†öMbÂÑ#l:¤Vq¡ú¹·Í,[*Ù½%í|š+÷ʱ/×ÁÓQª°’NEÞ« þ’¹›*¯ w±N»íU¸ü“î!Îö6ŠÌÛß@5„‹—¨œÞõ%Ñã ó"ÈÃ(è%w¹:ªM­Ì”¹Pv°›Á̶ Ñ'|¬MéѺ$´§˜ž¡iRã;Ôš)Ò˜•Ì…tB²Zõ‘ÑÉï“É…Œ§‘dX¸8îG¤¥ºú oÍ4¨9KuòžqPؾh÷#Q)lžO”$¶Oãì¬ÕصÁì§2²xUýÔïI¡ÝNqÚê­8yÝ+I[kjïñ·Ö?O•O„ª#CG+*y‡Ð?<³LHT`tÖqšÄ<¹¸’ì§×ðXÖ\²×ú¯g6OÝC€·/{ÃÕ•ùܸ_< ˨©ók®ozB®J!k¶gõ©¤‡¥§lꯒ †v«+:Æq¿#½lGg#¿&H|†y±ÀHíÌÅŸFÏ7‹QEÇ%»CS©¨ïÁ̆=ëÚx\pl]–¶Ž”ív2U‡~¨³â%Wh7×AC]mãñÎE´ù¥ý¹¤FëýF_`…)r~Ê"}²¡E¶E¡ú†h“ß×8yZa.ëùg 0„{hL3«fè$iã¾Q•ò{ËQ ªy] à”ø¬µ‹ðŽÌÉ̬èr‘"r”žž™Èmüå«4rŸÝ§ßÊÁë¹€´¨ßl¢ÕÆî˜ú¿dØnL¥ó¾‹9Õ'útb ˜¦è˜Å¢b‡8f5âs™~Q«šà8­ƒß¤$€“uʩ˷–r{¿><üxÆ+’¾®êñ¸²UsW¹•žèž=aÅe3¶q7Ÿ#…ýûE%" j£§.5€ 1ø‰²*k‘¯1€VFï‡tË^n53"‰ý+rÁð¾ÝE?¿isò›ùùˆ",î¾á€y ì’uRÊõ/0c7•ñ¥7¾U¯—Ú¸wúhu$zëÙÏ¡¸wõð0ɵõ‚J¥'„ßmŒPéáCïF1;ª/ ¾Ö|¤8çU[U8"C³à‚i0À.P;%‚_Ã+ PUÒ»<|ÉXúpÙbè9'ð{+ùÆDëh¼'úò€ z”YóÕlýz(åg"…ûïâA›‰€—÷ª&+ލ9³G>¾º•€‰oâ!Ìö‚.XøÕC,91c÷ë\ã%ɉ¢•Ãh\\è2èªcN›ÝgŒz>07xÈ%¢u,&²{–Üèò`˜}=dñ=’Ì4œ=òAþÔuŒŒ †•±1O¾d¨­±¼ñÓæ²h]hOK²å«Ç縞Î0©Ôê>”ˆ ‡t>-’ï »{²Ñ¦Ŧä{õ ZA·`ˆój2b=<gË£ûzIv÷4" W±®¹£¯°H`œ{pÄ;®¬»ãYC†öy‹Öœ®ì¦øßQ-PÔöÐ÷¯¶2‘ï!•½ ý?¢–ï'ÇzØ´Z!ÊF}þîkÎÛiUëÚ6KQ}µuÖ€žàú"ë[ÇúµêØRÕZýį¡`4)ÆÌ« ê9Þf1ÉyFc„)ýi"ÄLy¬±ŒŠ2oÚ£aÒ qÿ•¬Îg¤?ŠoœFá Áv~n˜ðîµë|ùl‡³ÁäF*Iœ—…#B@L4ª ·ß¹¶ŒO¹yÍÁ¿-ÔVÌ­-Ròz¸UHÃbÝC\¿¼Î T^ƒë5æ£ñ·KjòÓcͶް‹‘ãì~ܦ7Õ=3£ñ-}\ 1B4^Ñ.5ô£éOöh ÂûwÞTc:µ(äŒý¶Nø6%0O_r9òSÁšèVµsXà¶ÒnåX[3[pYËÌfªMkáu¦G4ß-£Üg©)R=/ÖŹ‹Ð‡3ó— ÉM<4fW¶‰â‡ŸÎ}©šú…Š«'âÃ;ß; œçN‚ ¸Ñ»º~ñ+—Á·LÍ¡å÷©§Í›gX>¢P…ø;_kvµÝ‹ñžëVôKª…SGˆ¶SöXÖ‚au°fÄE p¶üÉ[´Ú!1Ç>Ôö1Ÿý¸àŽâ­¤.1P7Å7^W¦‘àÑ­œŒÙ}pŧðöiæo™ ò¸þx€¢ž6I×~st8&¸'o7Ζ?Y²êñÎsCÐ>¬€ÁýZÑ£4/h‰#>F2_ÖI›Üõ‡Ð_%JIÍ[©8ÕËüzÂÚ"E¥Lá¯%4ÔÄžz‘Š=›Ï9R»c„>$×{tħ²åsÛR]Ýg ŽôlÓ¨•sR&Q7kÛuHäC+”†v6‡$å٠߀?T-yú )Ýš…To%+¨–43zϰ§IeñÍÿÐB`ŒPR^Ûeք݇”º‡v—Â׆ ’Zdx:»Idc#ÉñçùBðcû(͆Êvì"çœ)Ø7Á'J (rÓ¾¦DFœL ;~†íÈŽ¡RÛˆYH?p¦YZŠøjOm_:ÞÙä§ÊFA3”GCåùסƒki?v#F¿‰î)ñæE.øˆ´ø½P‰¨ãøÄlÌeoÔ«d–8BÖ|†9þia³ÏŸ1ïŃ]ÚÝ¢d“õŽ¡ £?p+g‰ÞÃúì}ó87JC„&m¤Ê Ž)6KÃó9CHc¦é`bÍådúŠr ÌfÓœVòY³cç ÙÕµÖ<5ýè90[ñ¼ Á{pû¹H “Þ#û†®‹8$"öp~Ò wÆ,Ïác½JhžYöó'm…0–Á1Ó¤/` ¤My¬œg{ f¢`L3ƒ&öÌÙÛC¯¦¨Ö)ûaSi ØÈy÷œÓ z¯hçÏ{K)7ÝrÇÚõð„X6›Ù¤ID̵k´Ðqp98ÁìÕr‡#ѯj¥;‘1 ½n•¡js@×Or ˜(zñ\z­â= †Z>*ûÙÈ?§ª}ªŽõ>\‘Ç"ñ7‚«”vüîNaß]lÈåû}ˆ™+(„¨4|ŠIæí´áa’»X__çZÚïL-Œ.É€™·´•u’½”KQ´IîÕg’¯ù|z £i/è`E«ÅSÊô×l¡ðéì+õêT(bj%ÍÅáØ¬ ?ànëIôÑHñb™"ÅÍÙ‹%—}µXFL?„.§ï§Ã¼ò’"¯ t†B®Ë_sõtÍG1‚nÎ8[F./,C·ñhÜì¼áDÞÔå#z䩸u\Ó@‚otÄýTÁÝÅJ(ïgÿ£¤âaRÅÉ}° \RÆOT"ÆkîCÕï§{ðydë öKÉðh5ög{ÊçÝ"à”ÿò»ôÈÉ#àä& °?©&\÷ŒùùÞÝæ½jÛûbV—«^ÇùÁ˜EotÎG°·°Yc’̓©Zþ…c Ä›˜Ì®V¤nSK¿àzn=wšÃŒúìYÅ@:Ý9Dベ4ⵡ«D–ñÃb[ÓVµê^å.§úÕZÆ¢ÓžúèƒZë·fq?„¯CfÇ 5©?ÞI2g;=¤‰Tó´eÇN>³Ò-î7Õ è퇩³ó£o{=?«eEH­QäÕ-À€-˜º$+?¸/Ž p‰vfh8°æpèÖGÙaêÊ nøÍı1<ýr4¦Beq÷„¥‹âHXý™Y¶4Qºäó£Ÿh¿†U1ª4L™~`»MWj½IWõÁU/03“Ž…âó[&­7m¬ƒe•Sc"®ÍGÛõÇìübR7läJƒeçgnš —â}(½¬«Š»¡¼ `«RKG+ÄMŸ‘‚<'^ÝeÊù[w1ò÷P¿ŠíZ¢FÑK$zfeE©sî HÁߪi­béÛâD}ÙCù¿æp–5#ï"[|¬ãIè?­4Í¥Ö¶Vº&kYD,Ÿ'¯¢« KkˆðGWn=ä{Ûã§xÿ8¯ð¶A=¤¡]ÕÚ€­uü9Šúe¨Ÿˆ¨šA×eªgóIŸàú*y0½< _Ùb—»ò9‘<† ƒîxûœ÷W^áÛÌ`bÿ<øƒÔü¾D®;}úCð¦eù0Å&^86µnxxÔ¶€¿Ä:!¾á/­©r¹6»ñ€Å ÔwÕ@~‰“È:Ç»,y¬S4ÖDº‚þƒõÞ¥0Š<$|ÅM§13pê«Þ„’Àžcú¶·ÚÉ€fµT,q8Ô«hÚBª=2¬ÝLd޲íÜr§G—”ªl”-‰Ú°O5Ë¥ˆ¿š¨.Jà +vO‡ß›áœk7Ê(B´ºÖ†ÑD›ºƒ£ÝÎ~m2†Ô[·A–üˆ@÷ï,—¨^ãêG? 7º`Á’PGj 0~üÖŽœ¦šâ¹~ …²+ºyª(»èt<‚(,ðuhS"”¨E€œâ5!&Y—;TKÂ¥&ÌP{ÅSnÐ."e;d‰ïè˜ì£ÛN0zUý­RŽË Q´kóàŠ:¡{s@ü,òR'8bã™1ú’ºž^ "sÐïÃYl ÷¸ÂÍþøtŸäÑu{b«g9=D³ÑÀwž1+x³*ð‰ñî¯ HßGx ý\>£f²º[¸¶úÑEÿxù¡ËbØ2P¦ŒJkw”ãŠN&×á1¥ªO3)(0Á”œÉ˜ºùPÆÓ¸1l;µ8Múžf¸’e±.2žù[U¹–Ûö*k"L¥lJ‡Þ°…Õý3°Š¡Ñä›Ú<V@ó<¶»ÞŠå0‡Þ±1ÎèF]ú)÷|ªèZÿ~ae›‚Þé ÍŽ»Ja"ÍQXªC+¹1šDxÊlËÇyôQÑR¼ÆÁú’ÍKoZ¦¹û~UéP´T·Îds2ÍK)Çámd¯­y¢ DÇ70ÑCNLƒšÛÏ?êêvͦeÖ‚Mûßà´uµ™8T—qcJáKxTú’³¦îë´ØÝ.u–t)ºƒ=+º_‚µ²É<Çø]Æ0G¬è=¶‹äkÅËRâŽÝÌN³`+c1|‚è#§å·ˆAÍŒ·Äßï±c”Äá\;ûºryN%¹1íN“Õîv̸7Ò¤ïãMú2Štžal1Ÿ ?Üú÷@å1UBWªÁqfXIúRZ}Z´N99eýŒ wév2Л]¹ku¡Y‡åÀºnF´rˆeÐì\$-â¡1m""CkË\÷"øÐžï$¦bƒhðœm¨xˆ»‚ƒÊv¤\GyÚ['ÂìÈ4^óŽ'³{Á#2"¥½SêV$ü¨³[–L!£k¨Úì  'OÊ›ÁKÖ *¦gY\f .Ž)¶¤òÂÑÐ_ko0ޝV·ushnƒÉ«Í ¸\A=Ôœî‹â¨ÅÑÄãÍ ˜(uœQø½HCôB¼õqšüÞ:[e•ñ¾¼®J¾åãÁq•Bø×î†ê¬ ´(Uõ>Ú¦ß9ö~ Göyõ¿­8ÓFøí­æ˜†œàüì±­–æu¼‰Ê¯<ñ?Kj9ÓˆÚ–ª‚Ùž2Ñ àPf&öî÷ ,+R’~•Ík*ŸDþÙ”¬f kHtƒT!‘_~³˜ùA2LAc{tdÃ_ßþƒ±eô”‡÷-…¸¹FˆNTë±V î|xBóôHLY×®0m©œQ©g‡û7±DAÖ’{ºÙv:s%ùª“Ø@pmî9®¡ ¾ŽNÛùÌëailµÀºF\Q¼‹eLZLçù/`üNâ[žÂÛæ±$ mxÈiÞ{DgÑP‰³˜Q5(.+ÅM{é¨ô/*§ÙX»/ ¼£îq7Ræ&DóÆ#Èc;zÑÎ î{ö"jk`ÙÍè«=¿Þm=Ú¢†Yëµäê£B¨~<ÜßwfU|±›¿7âl¢z”q°¸Ês=?ÙçV¦)y¾gŠqQ¿\æÐoYâ׊g%Ú‘\KF û’þ³®k<ˆß¬S4Ÿ€$—ÙÓyaj˜ˆXñ}÷ƒ¾VL‹ƒl„ÈFݦjÇbQ¶Æ)×E‰ Cg6z¤ƒ¢±Ê(]58Ï éðªÏ¼ÜÁ>3üƒav@5îE4´wèÌá ¦™Ø©ô+8Òe‘þJãîÔ©["쇦ð+½‚lû/͜팶}þ¨Ï ßdïòü¥” w€™(m £qË÷þ³pˆ&åûbK… tÇÏ÷٩Ÿ ÎÐ=?oÁE…j-WgIF·Gri6\É~í?Ïó5\dÇ8j”„ónÍî½H*6€ž‰Ë{ÈnövH&É]Š~T¥”¦•Ô€³–¡{ÁçªAÔêÐWä•ñ‰ñ×ÿJ%†çÐ%k™™ưQö’ÉîÞž{ÃŒŸ¬ï\s±¿ª@X% ±J;¼æØ¸$JO_‹{-+•ÑÜÐÜtÀÈ«È[ùú`fh^ÛméÀ23ÔO…JÛVœƒN¼×Åšư6E`ØÄó2ã+ÐV×x?óî ®,,ëdœT¬¸”ó²šG˜vL \ØÆÇ'Ü¥§ŽjÏV4ò’1mÎýôW+–¶pLÞè¦ZûÏ †D­+,÷>˜8Å´ˆ-‹_vÒ 'ÚFO–:J?’szZ«Œb?Äê)0)9ÅE3ÚøLDƒ™ lÖ%ŒâÖYvT`†Kv¯˜€—û§ÑQä!UIRdp¹U±G¤üh…s¿9N,ëcK0wò`¢\A[éê=0jÃ盌«wï|¬ƒŸb&A=MesžëÉ£cW*¡˜Uì8©ÒK;+Y1’ ["¥ê“’PÙúÀ/—ì¬ìzr}¦. ®qÔÃÆÍLh}ã¼l\q©’ °ÍµºP]FyÐËZ³ãõ|[ò·è±ŸnQò[È!‡9{ܤÎL¬ tŠø§PêDÜëjY[¥,<ð̯$ ϸÒXÚñ‘K4åí«ª1[PhF† ¹ƒìa÷8å¨`Š­®öE­l.Ághúí7ÞàTvL&ÇTe¼’¢×(Åkäµ!±·…“6ŸÇ8miZib˜Àeˆ¶]a;&¬Ä.Þ Ù¡Ø]!T7÷H[5&Qü&Ú„ ŸôR}wÄ¥çÌó0’;j|šìzÜ"Ÿ×.¦o_ä5f?Ь×~6(,b:ÅiÓÒN2w-Ü&í¦Psʺº}ÿ1øJj|2¾Ái7½¢~0˜¨¯¾HÌxwr½‹LŸçÓN:PmìdIš¹Ý èF(¡|xÙ  F/ü5p /+½[÷XÆí7Ȉ‡ª ÞûÉø®K7Ó¼ qóб–„㘮}¦²£nŽßðgŠ€ýD•ȶÀo‡ÅßP™[tõ°pئ›å¾U¬£,P( –ÚÈ6hŒÎõˆQ‰×B¯HÕ¶è[ÚuÚM’`_5Ú¤¶n{»DBl‡å}ie[Ð|ÏvÅ븟!Õ4»%HüÊ þÚ]k5e,VþZN(þõhÛúÆl˜¯ïλ`p~¹ûÀ Ê< ‡¶†Ç¶”Ù†bÂcD½ä7»5¤B¶úoAÒ-÷í—^QÕ›‚™HŠ+¬wãÉÂ|ã)_¹æ«àS‰Ž̇R4üŸóeȧ†Lz¼Þ¡l£åä.Æ ßö?zÍ2>¾c;B£¦âp IJˆd¦œ„—þÚÇÇYŠ2Ô,jâ˙𗦅¤Ó¿û>íóÓ—'­N€jØüÙ·ÜàtÝH5áÓÝi`7Ý"+ñ âséféC<²2¢‘­Y`,AÌèL™p NL@õJîVÒðwfê×§h¾7éY%N gjëß>Q¨‘ˆCé*ˆaÑ*$Ÿ’¦CÀ ,|G˜/ x"Y¡rÔ_`¿·ËÅÀªÅWÀs­C¸“J?ÆŸ{e·Ï<1–/WÑ¥ê´Å'rºåú2‘ó‹¹~aØMæ[ÉÎ󢮿ùX­[©ï-ZêÆRŽŽr). ®YWâ·ãÊܶœ“Àîflˆ– øX5P)¿Eû ûn«—mWþJö~_Z%}\*‰µ{<Ì,uTÌaÉ,E&y,{d²$àe;t8yQÃéR÷²õVŠ)A§½iY ƒ§tîÇÇ–Än—Y︲qL%5ד¯%tK o•âÖPË•Pˈ¡ÜýÕš©tØÈ{’1ÅØSØ|6 Í—Ôª£vR»ˆ©»É#>m,ݼP qxz³vסÁØìóq6_Ù Tš'SDã°!‡¦L¥¡¯ R l Mœ"úó¿ÂÕ°kŸœ›cI—åÇ3/çÔ"$âîÕè{5ž'¸®÷‹- FÑ“ŽýHM)z `)ŠLƒÓˆi²'ô4Ój+qpüÂh¨¦ë¶ï ó¡m.ŽH&^ƒDSñZ! £ˆ´”LZ€‚Ó¼Cn÷¹Ñf¿á§ÆJÉÆŠy̵Ë•õ»W•H 4ΖÍ*ZHk¬cã$R”Óv_Ì™—ot9ß—­äÇvÂ96ŠŠÆ´»R»kžp™YX7ž-åñIט¯‹RA”kkõ÷˜–™Ç@á1ØõÙ©–Ÿ¬™—”ÅeÒrNž*þ¸ ×ÏßY™Ï€ë*2]ŸÛ±žQûH1½ù‘ ÅšŒMJÔ¹!r“tŸCPöm}°oÏÙ%ý‰Ëô˜^œQT«ü¥ò‡Ü=ߪ_­2eäŠ_¨dŸ“àc¡ÌÛCÜ€G¦Ü];+Úõ2ìÀj¥¯cå•ù/T°›ŒÖ z„iÿ1ÿú#Wéªîˆþñ÷½ü³+ tlº¾ï0âu,Àêž0r‰?_qç­0Ú‹êAQ¹®­MŽ—µ¥­ ¤êq¬"%´È %ªòVDjƒG9Wol‚-•óûO׿TÁò‰9áÝ÷‚m_º,¼ò ±V”å‘{*Råˆ!v*~¯B’˜wiÐû´Û¹öºHѶñJhTEÅ`\W²KÂîÄ|)¥½bëa¬º&Q—À§Ø«±z7&ôÀ!ÁV×îÖ´dúæjhYѺ Yº½#žÇ‰Ð½ÔÅ1[ª;4ˆb¨ ߆ét'D“ð œsð†arðÙÏ jåÔL­Îz¸Ä×жpt%C¤IÄ^žæíöÐ`oQý$ºuò­ç¤ ª˜,ð=»d­—Ec†Æ:Ñ5pó×÷ֺ챵ºÏ­˜!‰¯ [s‰ÍÑ6TÍÁ¬±Ð’¥ˆ(èV"däâ_ç°ú•j‚w i\¢L Î3¸ŽÈ×EÊSŸê$såò•¶ òèkËÚ|èØIêGî«h웿Ñ`dã 4ŸM7­²žÛ7Ö§Ê& $·/"éöÏ/¼R+ê$8±ñ!/Vݘíg‹! :Æg×)’’µÆ§ãLKKú[zˆûZá’¹ÙWkƒ¯zf„¾½?eèlz3'ìšÔ)Ã6cš-k^˜üyÄ ¿9¼ßa“¾þ,]GI¨hèXìiÀ×£0xÆåóõW[žÊGeµ×®—L‡ð‚&kºÝù,³K˜Vc¾wù„g©û¢ð!!¶þ&+xSô¯u i; ½U=ÊÜã¯;ާ̱_ýOC)€,XÿKÈß4s —)+MÄØBxްŽñ`ЪÎôé1©ÏÔhšê'¤`ÕÀ“][Ž• ‡ ¶ L]›íý#0ò±nî2}jrFn‹[~,­Ã§*zÚé¿¥òØiV¤LæµÃ‰^¯†eÙÜ ‘‰¸«„™Žï–B.|íiT¸«^7V·MO2°IªH Ãt^\þ)ó@•o•R2…1È”ÇabÙæëÑ{«yá‚Wö7ùI1vÎ97Ò°+LW‚hüjíW?B’`”]:^r‘#„ÜB•ó¥uibâ]57O`쎹3HW Ä•âã¶Ï1úŸX‰œ²¸QfÅö<ï‰ÖU¿¤ï³ÃÊM½Nîâa‚ñkŽíô­vF [øÍ]—èÙ™|‚°žF|°+'µÖŠsèù³v¸M˜¯’–ÕÊÕ°qàñb}ÀqûRZöÐWOÎ,Cy©—ZÉ´Mþ8Ô¶\U¹õÑæO]Ń[v#ÈÕÇ£ƒF ˆup¤sRß:ü1‹V–á,>ùæ ’d2Ã;Àa<–s±l*Âðù<~´Oóô—lqÑ…qŠ _¯ƒóðsÑ“KMS‹;øl(Eâ`íjbk/Ýè<¾ ^vüPQq[1O `Þ<"îáÇûð:s3yj/‰$sý!!HñN{±4¼&ÞÄn6œ¿G¿±wo:(aÁfY ;Ó€’ò·û¡³½ÇRW¤¯¦6±WÈC³Ëü±Øàô(7~*ÕYŦØX4/ s¦…ý:º£¯œ×Ù «¾É§èù=Â.ƒ\3ïβ`P¿šêJ¾ ö;É]êž±Ÿ•”kðCÄÉ;xVÓR<¢ÐÍÇ"Xç&dY>k‡I:T\¯$6póêÊçÔ¨r‘Ž¡ÅK ^ ¨üº®ßÁˆŠÞÊ…Ø- /Š2W¾¼ £Z†' Ïì-ý*Á;j)EÅþJD.K¨³gtæÓ„5}§¹1ž>ÅÛûê¸uíçÞVáå8#ÃÏà¹C<´i\,?„¯¿¸«Ô~ûµ­½É™ †õõ³\|9”"¹T³žµ@\à.Ü!Â/?ì»x—`|OÅ9u*”þ>[áIL¯Ÿ&¡0W“wçX~í,ÓÓÍã•œÆæ–Ò?ƒ¸-ãàw~„z'Þ>5‰rÅNN¹á8qR//f®¶„o²w‰>¿è1X¼µS~ÂIMÒrmœ¿„FI ea®'¨ú4³vQÑ\ƒ‚ ˶é¹:ÒC%´òþN@BJ{¯q¨7TW‡h°³RÝ,R”iɪàæ3ŽžVžW‚¤ð-眇dû᣸á|²œ\Ó¼‘žÐ UàmÞÄJ¢Ñd¹Ï†|üieonù>åöõ¨¬0ŒÉŒº9mÀZm¾_Ž-Ã!NíEåìÑW#½4NˆÐΤì$¬÷@kÑ’ã…rúá­)$•_ÊKü7Y>Óžò " ²”úï2dª<òU?Fö ‡Z•.'YwN:¬‚nbÅnÅEÓ}ÿ.PÍyù­ÌŽ›?_r#%jõvSã‡ÿZÄÀ/n·îû“Oï{[†Ä8à¤Añ_ÊåSІzÌ;%Œç%jóê«$•ÜÁÝGaî(Ybd>̽´Ói£L=Ò·}IUC=Pqi·Ñ:E-Òü¡¿ÔB1Ùà||¢ZäìEødÝÁ9%ÀFK›BY=MWmùë:O‡C'¯³­ašÖÍ"´F…ûùñÐð6›yÖÜtñ[ÜÁÁ3µ³ÅøOìO¿]( ÅRŒâä>ÌÛyg¨YtŰT¢)ŨQÛ ëA'#ÝëÑ´,•ªgÞγǕ¶xgÑÆ3:ÜY°\½vל~™…Åzž2i>×òÛ…kÒHíï"³˜¿e÷6û©s èß­àzÅЮö†ŒYwíuø*íÈvÔ›£Å•9"ëfG¢\íì?0 ^ÿyþ"9½¡\3›¥³TM2`ìËpeV 5Ð\t¥'²“e§£«z£;×íL"QHýDSî¹ûª$þ=¢Ê{ Zþ8¿nélWè‡e6àîb9¨þÀAÜS³²»3A}þœ«ñKdPÁ´WŸaÜâs“àoêe ‰`ðÀ@«|ÈläÈEkö[áü¥?¤­%ÄýóïmÊ ‚þ.5E CíßžÇgmØNä·$¬¯íº”æ–ÌyÅu“0Pá6„ôZÏÄ'dM5… GOÝôpê~Ûáþí»]·¢#M9°’ëšX‰Çâ”1&Áb+$¾Þ'H%6â;w¼rÏ;þ§[×Þ7BVŸ‹• ‘a7Q¿³$:y`W×A…ÈAé”WÄ1‹ŽœAPùŽÄ#@y0ýª $:LK´qk¡¯nßeWʽ²LÏ>ÕeˆGÙRNgnO‘O4 Êtf” Þ,xò1£äÛÈFÝ%Í­ÑéI*;&;LI†š–cSäïì'Ç V /ôTÏdÝÙ ðáÓÌÆ ÿ¦ š©B¢;J›º48^·W·Íkò¢ |¹U¯‰{ù¢G`à‘¢P®ÉªjIÕOº³Ü©ÌÞ~¾}Š¡¡ñÑé]‰¹ý'Pm˜T_˜FQ(?:©›#¤¨Û›û• ±ÔôkY‹D²Ü2Ò0‡}FòxÓÝâÿ3·/ó endstream endobj 680 0 obj << /Type /FontDescriptor /FontName /AHGYBM+CMTT10 /Flags 4 /FontBBox [-4 -235 731 800] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 679 0 R >> endobj 681 0 obj << /Length1 861 /Length2 2300 /Length3 0 /Length 2885 /Filter /FlateDecode >> stream xÚ­•y8”}Ç“JÕØZÄ-é±ÏŒ±Žd'Y" 37†1Ã̘Œ¥…ƾ¯‰F$ÂPå©”ìk{Ù²f{â<[oï¿ïuÿóûœóýß÷:ç\×-)na%¯ƒ%º€†DE®GzfÖÖpE®ã–”Ô#h ŽHÐGS@$WW‡:¾n€" €« •”‘J*Ü’€Ñ›F¹¹S)=éï"U@Ç $á0h`†¦¸ƒ^ì4°"bp …¦èàñÀ…ï7ÈÀ ’¨ V°8 pÝpnèwGÆW" úgëëýwŠ ’ÈlS€Û¤4À¶ˆ%ð4 ºrC͉ì·@¶“ÿ‡©Ÿ‹úâñæh¯ïå·»ô?y´OûKAôòö¥€$ÀŒˆI„Ÿ¥¶àŸæÌ@,Î×ëç¬1Çatnx€ý‘ q~ ÖGÁ¸’/¸ ØŸ=°û¶íjob®c£'û×@·“hbMóþ§êwõ6Ãÿev{H8?àLƒ³…ìïï“ãO0D,ŽÀÞeM"¡iÜìÕ`“2@‡8ô@?¶a¨Ha_Ø=¹ ¸IÜßç©¢@Ñ”ï±m„Ã`û"¨Û¨ @q? *õüը׿ÈÞ&(ñTR Þìé¨g?NÚÆÿm ®.Ñ.äJ€²¢ ¢®|õ¿d_ $P¶W“=„¿ÙÇžúîß»ˆ›Ie·ó ˜-vËpèº=‹6/}Õþ’çFw >罉Ì@‰ÝZ~*?ߨî1±+ÇÈŒ–†_®ûD'wnŽQÇRýŸ³[H5£zŸX¹1u ²¬ciZ™ã|Û@}^üÅìš»sµSYRúÖã\}â;^_¢>yvSEÕÎ0or«äBüÂÁdŸ¼P¥þ+ãcwõ7ßôÙ[.Û;O|á Ycî͌ۼ̉mD9oòoq¼¢ÒÏò4ò½;~iÃuÎ8®Ÿõ!Ic VÁ´–K yf ´–lÁåxïˆmd­+¿UƒX ¤óîÖMÿ†öölØÓ]%‡Ü4ûôiÁüªùæN KÿY–ží™Iµú?ðó,§ýx#ä®+:ó[ÖP‘ĽÝP‰x±åJóƒÑ£×}R}ªJZU¢®¥©q‘ã }–0x^Œ‹—cÆôìÆèPÇåœ7§…†µ ¸ÆžcPž‰å-ißM:ñenÏUŽDã¤SÒl»:YÂSÆzÎÙ=jdè|^jÿ!cØS”½4C¤9`&{©à㑚­@×ñ e‚¶’Ç{Zúß½»²åuVÜÓ,ª5^8Ðá+á+(VþÐÄ Òm9c¹”£.rN”R0Ÿ[òDÿ9j¶:Ë}D;ºT„Ý“.±0†IÔŽ{£;©Kôs½5_‰··©<ŒÏÊiš/ÐM9Âñ›ˆ¼h¡æ×¯s*¬{›éuºóèΚdøèþÑÙ¡^¬v.ïD\ªJáolñÌ=V  ãÎÔ0zÒ+– ŽÙ—‰öWøÖ¼°(|ð…ãí6ûàrÃÆ¼~æZGyWŸÂø: {"ôúÅÐz‡‹,–ܤ¯}ʺ–ÿÚhµea:ª9Œb9o®® Ìì6<7œq• £¨jJ?¤ËfÄ 9ìâ …Çp'}« &ü LÍ`h‚ó1hÍgƒ´*ß|7×o† rAßôçJ_þ¾7=Œeã{µÙb2û@2Ææi튇Ü‹"ò®§µŒ=èµ÷wE!!åc¾•ŸêÎÞ>¹Ó`º{6(Í}eA®J^„M&ÌtÖ"’¥g+‘·5ùlWTP­h¼áYñ>2– «×aö3¿Ž>—쟌&Õ¾½µƒO—±Pª¶ÔJu*¿À¿„­ iß3(6}Žr–®Ò2¬jêzÌ©u­‘µgZ)_šŠÉŠ‚¼|u©Z|¢L…# 9O¾¢=;8ÁÈÞÒ¼Æ&¢¦Ê&ëÅ£&„ÒlE<÷ œŒ¼tj6J£Ñ^ܬp‚/™È¨8×e{ù¡Ó«õ)|ëotdaéà]ÓΫ‚ ¥Fù/r0Õ¨ 4ÿ¶ºÈf:HáT5óûÎ7Î#ßzËŸÈ÷¥¬_tX‘7Ús¹«r5g‡‹–*s„™QĬ|³nºU,ì¹qTEé«yëÆ™¤¤ÂIñÃ9ËÕî ËjŽ{‚^¦×l]mè雨¨¾Ú¶T˜ÔšëXòËkéÒc;M:žÚ _ÍìtóÒ2ÚéF=Ú´§‹ÿu¸' ÙúR8шߒÄ>I6&““;1.µ³‹Ó1_$t¤VqÁÕR^mnQIÁCÅËÌ «Éñ<]•]EëjŒ³àɱ¨ûëõ÷è{ý@'…ìWÿl܉êê›í»Gy[fã[|}µõ(âuFѧ}Xê@ùŽxb²)÷¡UÃî/tÝÅð„îèüü¼ñ†üãjˆ¼ZեǻcûN£×œÓï—ÛOÎñ1dZõ5?íÜ´ÈÌË–~Œ&tЖÅ{sûsКL®Ë6™œÌèfVæ½u¡ Eîàh-è«ï©@ßžqø¼ÉÕ!œ¾¼Îí‘Ñ%„HÒßùBSN?G4¼,@ñÎ`$¼{²¸%D:ðÕçÀ™zºñìÔ—Qû¥}áìÊEá‘ä ‹®ã•T*ÌQ?…ש“ÔÒ\ëh½[-ò‘º]½1½ê›å}-JÎ2|ÑáøÌ‡ôÏÚƒXžÊÃîv´×pÇj³ïfhÁ˜·¢7¨!heʼ’W:ædIš Ðò4ˆÈ Z›¡V¦wš«sŠV2Tê…Ÿì‹ê×\)08QGåsÍ{ä1ÚXlòÒ;¨ÓX–š˜iw'1DΓ÷ÌUæ+†+si%ãÝ)“ß24ȫӻÏl™¥,Fd„GŠ´9QwÑõ–[já_ÂJY-ë1ë²§¸>¿~þ~I9ö$qß³\Ã,Ô ÊÅêsÄ8S1ü-ý˸2k6¬íTžÚÛ±tl†A}Ë-ƒÜb¨¶n´Æ€üÒ<þÅÒ­H endstream endobj 682 0 obj << /Type /FontDescriptor /FontName /ZKNAUC+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/at/d/g/i/k/m/o/period/r) /FontFile 681 0 R >> endobj 683 0 obj << /Length1 1717 /Length2 9934 /Length3 0 /Length 10896 /Filter /FlateDecode >> stream xÚ­´e\ÔßÖþOHH#ÝCw Ý)%Ò8ÀÐÌÐ Ò  tw·Ò H‡t# ÝRÒýŸï9÷}ð>¿§ÿ×<™÷Úk¯ëZkïϦ§V×b—²€šå Wv P £¢­-rp¡ÑÓË8ƒA®6PÈk+X¤Ü¬Ü\ ¿0/¿07/=@êèålceí `’aþ'I åv¶1A* Wk°¬†9È 5·»zq¤ìíšÿìph‚]ÀÎî` 4 `acî 0[Ù@Ð8ÿ1¤±„þ¶psüß%w°³ Ì€ f’³h…Ø{,À–hœªP˜æäÿSÿ]\ÎÍÞ^äðOù†ôÿ,ƒlì½þ'êàèæ v¨@-ÀÎÿN} þ·7°…›Ã¯*º‚ìmÌ¥ Vö`׿C6.r6ž` uWsk€«³ø_a0Äâ¿=ÀÆö/œZJê*:¬ÿ>έ©ƒl ®Ú^Žÿ)úOò¿øÌ°á8Ûx ¹8¸¸€°DØïÿÿ—–,ÄjaÝ>~ÈÙä…»0âø6 °'ì óËɺ¶`#ñXBÑþ9M~>§Ô?¡?€Sú™œ2Ï$à|ýLBNÙÿ€SNùgâp*<€Sñ™`zÊÏÓSy&˜žê3ÁôÔþC‚0=õg‚)h>LAë™xœÚÏëVç™`êºÏSûL0u½g‚©ëÿ‡`טôâ…©ƒ\`·ÌÆÅî9¶Ýì?ä†y2s™ƒíÁ–®…ùþ'üïä?›ajæÏõa˜Cž\°ö-þBؼÁÏ'ó9¹Á¾ªç˜EËÿ ÌŒ¥;ø¯uXÄê/„)Zÿ…0—6!¬{»¿ÖéßR0ïÏ„9…<+öBl )ÃÞNès«°ÍÐÿ³ 3îø¼ +ærCþÏyÿý¿Cä…®#l°Ð¿„õéôÂútþ a}º<{…yq;ؘCí¡uðOØüWVÄö­þGÖ£‹=Èå¯aVžñÁºpõ€þµ Ûáö|ø07ØWëìbuþ{°9»ÿuu`U<ÿBؼž=Àr½ÁÎÿÖøŸ&ii¨§;?€›‡æŸö1 úýŸ4s7gØ@]ÿõæÃž·ÿeKØ[{‚ÍÑ~@ÍEBlSÃÊüe &Ê‘X७šbUë:§ÛЃçãà틇”œXVjõn+Òñ°vv¨<îÉ\"¿ùjŒÊ:ŦÎ>ÛI÷þJ¦÷']ÅkÛ‘æ*ø»µqæü^mje¸,Q¿°/ë¤ÿ Oéµö.Ê5\—¡{}WF¿€ž\º½Nxh-µ&NªSYoø²Nbü‹åñ`ÛpÔfÖÅSè7·W·¨¹ ¦p7æÈQAÜÒÙóMã¶báéì”ÌÀ1Scâ~½wýŸä>^h®‚³¹px†Ð­ùðƒy[¿KˆÅRA¡+D‰ü°•ÝèÎy"ÎÎÊ(=’ï”!¹ø’I^ôÝ›$ ë5³Á+ûƒ„¬D\>n$ô,ƒ©sÒì»Dº…0-^söcf¤G²Vá2T„rñ„õ}ö¹< ö:pnVù.2‰¢eßeÜ2LE(«9‚qÔ(2Só&ýW%4—Fzñ×O¹F%»{\wN”?„÷Qq€“Ž2QøÛ+_XR%£D,Ì07]XT>; Î.øó~7þL²ßÖ‚’Lh„«ñ­£fõ#s±p0Üâb6ípÐ[j³„k™ï‰ƒ ù!åâËm…Î…®ÄAn`2ÎÌ>Y7çŽT…‚ö©ÈŒ[ ƒ?>m„®©ä ’¾ÐZ–Ô0¹ðöUפöO[’-,Lû.Bï_e¤0/ëXô&ÉQÇŠ„´]§÷UÕ&Ð9¯2Wå·µÕO˜‚ÿĘ*k&ãý Ö[CyƒÊʈSÌ‚ï› e m CÿeŠ;…äkùðƒÊþ­¿W@ŽÊNÀ; •B2¹ë)üu¸xÝÞzv®_=jM±§;•ònÚû€û¯pøÕã¬È7l”úâzüFÞÂI¿5È¢£g‡À—¾ÐJPñ/êjW5˜jyá÷ë,U„¶4Oƒªú£€ˆÍ6Šý¼@s€É·ÎòæŒV ‹GðÛ¤ÍNnvé„´9¡¶©4« ‚×w5ZêÍd ©†#r¨<øèÜAˆÔÂŽk¡¦ôy7Ûô¥råØ~_ì+õˆ&ÒS~N #èG?ú+Êß!ÊEp1´«/#h$úiª¶›vÄýÍéÁ£™êœPÆ ïpzÔ^ "0)9Ó†g´ ¦ÏÄC + 8Aü²ðAÙáñ.°çh”‘…mÇ'ÝÛg8É@ÏUê¼;[ÌÏšgºvÏù5ó0MìÏ”E°I¢BTÚÀö±Tƒbp„P®äзÚBžúÖIÖÛܨ̷١Û9šýôuD½¿/á Biâ†òó¹Ä߀m­¶Bª-”õó¶¬ ÇpLJ]zhJì©ëSýÜ߯y3»&oPÑýþ• `{y¦ô²V¹0rJ0`Í×Çõ÷]º+KrªG¿6ËnÜ­”Ðd¾›pWÎ\»zßê x™½8ïSk-mŠ7¡äeÆniŠ”Wz:‚œø%ó#y^;G™XGMó;‡´µDi¡/ùj\þÙÉ':!ÓUЏ—6D’ K®¼ ‘ÌáÑOèu÷Üq‘‚¤ŸÙWy¸Þ4hvÔ£ Yiõï²K]Œa§ÿ¾Ì–%޽zmEÞà:,¸[÷ÛMò¥‚½Åm&áÊF;d—a¨©è.îÃef/l)¶÷ãà;Ÿ(©èØ+€Þ;³.<Æš‹¸š : —I-®;gKC¬{á§â—üƒªÔë%VZ¼ºÎX%â N¢š¡9dµú¼D˜í¶© á"SÉþµêÚ÷=˜£Û‡Ñ<¸‹ÅÈó~«Õµðñ*m8áÔ§gÓ4ÑØ +OÞ—kñ×­/FÏš‡+éeQÃG|Î-êXË‘ç)Š´èÍií”Z§~rEo·3=ÿBÄÆ/>‘2Ö²¬÷S´üÓ ¡OœNÁÒCŽâ%Vè<Í3vnñ«í-nŸiÍ„äé¾£§hãGcsúÈñÝà¬|«† )½`Ò%ðm¼æOކŸ>Ùï}Æ@Óaá°þ¥±Ä’Å YâôŠv¼NMÍ V7Y.:úKW´s¿¨Àšæ›x‚ÈÀ*F»&ShuPa§ÃÔ¹ìM&ñ¶6;åÐZ@•«*lý»;Š\³ÿ¡0;Ä¢–uf™ÈX±Š^O™BÉŸm¬}7f³v—TÜm·ÕõIíãïûB;ò«³ ½f3äÉg}oŽÌ¥^}&˜Í€ ?V'Ĭ ¸ù£¤‡ý¬_½í–ùã"û,œ X`¦/6lSÝ7F#­üUµÒoÖ÷Ȫ‹1_ !-µþY=˜jÝ ¡’/™;k_sŽ5Rôäi+wvß´®Åt~=ê[º’hŸ©Í·eg –ºòâkºÒÛˆñÕwÔÐPK²üöÇíö3•¿<3‚»ÒßNe^¹ü¼•ýDàì 9hŸœB?Æßœüð¢w©Í{Éè:•²­ÿŠ ¼-óºZ#eºs´ÀŰ~Upªâ,”^\(ʶ;L½n¨‘]W2jˈÔÔU¿™ØáåŽòV6ÃÔ{C€Žc?§‰±gI|D2¶aVþ¨ApøÞvJ‚ˆÁXò¡ó1¢ìÎäb;ÛF¿.zƒ¡6ßmÏMí²Ï 4?ļǧפí,é›SNÈÅQ®hz 0ë0uªh{¿eB2dlÅck,Ž·E3­¦iNä9cï åB;B;¶:¨â…–NâçR¬ ÎÐÍ+.«Ö]ì:™ð’ÅE½âñXl‡®#‡Ù(טÎRW¾˜&À³ʾTB•Lð’ÌtGᘖå³m‹{ýÖJ ux<ë}…CvÎ0ŒI–O™%œôIÈæ?5ÿòí(‚>§D¦üØG†~-’,ˮχ™¢ ¾©¥M‡“·:Oç~²¢<%4§G·ñ,ç£Èææ>æCÖ@¹;‚¬®U.bÈÈøî]ìÏBtÆl)^oÏŸüyOYý;rðÙù@·Ë)Uá¥w­jW¥¬¯¬ØI¹bϺ–4_³ÿ0úÁ&xâ³GÀJÖS+pC¾XÓá®n±GØu•ô–øŸíÒåµÓ;±àe­óZø’+ÄV* B„÷G ò}Y”'¼\<áT‘º`Ddîhõb”#Ó®h'ÞªÒ4Áûr†(”ŸìI5x>$#ÝL…‘Ô }(”4 Ù¹u×LŠæ&Ô`YÙn%6¯n¤¨1ê ʯT³¿»”Ó’vsíO4¡’=@‚©dÓØ  etHŠjçæÎ¯è˜¿nUÒåÍo'û†ž_yEohi¹>®Ú§Åõ«+eå¢Ðp{œÓî!ß]’‡‡ ‘AwAp ¯±š>רw*=…yŸ=;‰ebdÕ#RˆUÜ è™áò¥Aoí®cåíÅñ¬§óŸ“_³%3„9œ#îóÞÆVV«j”³i¦ é™BSëÀ¹=éÚIÛJÈuže7ÞÅ'Ì­Îâ5Øí{ÓdzòÝÊ‘M=‰ÙùBêçAx–1B§¡™Vüô…–Ihæš¾ãŽ3 £°MfÁŠÌyÕÈ&93íKñv®6¿1îÎEmja83M/åWPÿ:ù¨v‘(³iÈ¥fD¾ùJÓ'%œÛ?Hr‚WÛr*¦ÎÈý’ÍSš®'OÃäÁýd³RW¥5®?‡·……w®J Xå^ý ±1xé³í.ï„Ùú2kªrÆÓP_™ÈÖyŸÍ¨ä—üù\þA/îXmLiÀyì]•’ã ¬¤@zùûîÆÏ_ØàÅúÇb{w#OÆð‚¯2=Ÿzœncºªç¨Ã§ØÜ?íOj"úõ®\›Çõ¶É*ë?bƒ)2Sq®¿EOŽj0øbB»w[Ö_hO¿ÞµW6ht’˜;‘pO:èèáúôö}’ø)0>7ì3gÕvÝáÆZ§5­q5 Ócœ¦-Ýcé=±Ü2üw§oôÇ·eŸ¾YÅg¸§ñ“~ÚÆËlw7Rn´ » „»ùAŽ¥ÞN|1$"–í/‘©…º@nšl¦¥ïðsS¶Íö%»'ÏÒÁØÒNþYxn¾ËN„ÀßA—@™Ük‰;¼bÏ•ã,Üðõ–M…/ýwÏJÅ[VÒ3©Í|ÇΡK$šs SPëëvW¡)é~:%rT-·ÆÓŸ óA”?‰Õ“­ú´›&”øŽ[æe’e8HÕœk\20òrX€Òiõ™­H+4 ýï.|HÞûâãÍùm‚uݳœYÆU*ÀEn;/PhÊVÜþüì¢Ô…%ÄËŽæf~òļ9®ZXa)÷Ñ,cc¬˜—‹D-·½­]…–â%–:\j».! éôÒÄäŠÓ¦«i¥™šECÇ(«»G1ˆÈ6 «F<늋D2ÜǶò*Yó•!L#BDéTejF ÊÝS“¨ï{æUÜF‚†æj°¿ó¨PF–ŠN¦õfE„_3‡m?X{T-R!”6äO…Â/,>&éõ(”4FNí«ó[NA8c"ÈÉr©ÜÂ|U|à\~¬Ék”Ä}Ìd ¹ÅX3Æ ‰°‘ð‹O´g8Üå^dGë‘M§Õ¸ÌŸ›š6n< éW¼ÊÏèáp+ý‘Ê(Ž¢™ë‹à2WÆâ¯6õLZýN:m\¾jo8‹!]«Iï@–59é½ü.CQ]wœ…†Lh{~:¹€œ·¯ "¢Øv8Å6dÀžZë5ý¢ ‚­žå’úÓúÄÑC¸ò=1³ñ(8w{•Ù´câ2x–6ί/Éa_îS¨„˜»Ÿ=)j”:ö5ù7L î¯Z7ÞØ·…E™Š¹$_îÕÒà¼z¸2›3­ah)â“N¹¼+a·˜%ª4?#]ÞßnJTîrRÖÊW7¡Ê­sæpÒ=bàž:2û‹Å.ç) P¿?òwb´àû}nA~¤ÿYlI&˜#öÂÍŒÖlU¥üvâ%Ò9 Œ³€…7™ü*5vו™ÍÃw,YµÊàL‰6K†-Ù[ª!áZÄÓv^ÛQzN”×_*©$Öe.ÐÌ 1H(tM´†‘HÞç§{Æïèãnðµ÷ÎÖ^ûÞ^øsºq'y%tñª"žY±TÓÜf©öµß}…,()òô•ýw¸mRûeˆ¨O³Ø''}#ÿ•Öœ#¤‚«E–_¤×ã½…Ê|Š>³ßzÐà ¨Y©+^‘2ŠÕ*)b^Ωe¿3禕³ùreŒ>p˦0 ÿ& ~iÖS×yv‰¿E†ý žO?uà fûL=qY÷€+ŸÑh§ù!™7ˆ¦,ÿŽSuÓ)f@cP·ÁÜß2é¬ÐÙ6Ù«¨Ò!Ó?…ÅãâBF^ûà¤Ãñìâøÿûð2í~©^¨ýñK»Í(1_ìÓLC…;Ã)¥[ÔÌ/”œÍ€BUÆ{.h‹Jª¦ˆÌÈ‚ˆÛ”hö‰#2’–U£tÔ½ƒ¶pßñW.JÒ@JòYÜ–Y†`|$P.Eö¼ìår9ú§LeohcBô`9„Ëí~?µ Â7<×-ô©Qö£¡®—jÚB†×$]:ž åj.÷N7¹:\°iîÞ„“ 4` ¢¦UêèÑ´n=É÷²BÕ¯ú˽µÍ—é"’j „ÈøUpøâÉ.²2õ¹íLèn䳕wh²3L]ãª/åWåw, ÍóG°[.ìh´Þn~{“³Óä_âÕå¯_ߦbF²Þz¿þkí·¸e× ò{Ÿw×§7ˆ*ý =Ú}h±ÆãZóê‰@ÝàÖ3d ,0ÖOñ‰»£Ývæt¶•KêúÌ…ýKÑŠ4¥£¢c¾ ç1.Ö0t8•Z†¨{úë2ßlÜ·Ø ¦j[i[‘Ï뎧½mÇÝ«BŠ×Téó¢x¾?Âþ´'šØLb©ø¬m](¿¨á±^A©‰`P÷ âã WÚË$D0l̦Ӻڰ™ÉÙVC};zÀiE²PüM)ó˜b™=)ŸÜoÖINáÜ+z˜1×™p@«SœÝ7™ŽYŠx`½]7ïÑãödk@VHòZ¹ÞP]±{:õVÁ@uñ…r‚ýY½9¼Üú~DÊÍqró÷é?ú1UF¨ „÷ò3NM’?æ$?:±La@Zâî?ÙÕtv¾sLÑйŽ4FXýÛÒëQAãz,%¡áH9&€‚ˆÓ+ íq~O„O¦W燑ØLe†å }ñˆÂyÇ $Ñ_åÊOy¿§âÊU8?<¢c½(fSM´ ±ý€"ýQ¢¬S`çž–“ wïšsL_ë€Éu=c¬8! ÕÉáå±}lNU׋^&›æ"œ»ÝUñ7kNʉokïñ-¤û³»Üq¹oî»·Ì™œŠû‘pµÈáZ%þ¸ ˆÚ`ŽÑ¼_Ó#]þxëiaó@{‘­µ¸¤ú…@ò0||îµ+®œ°L÷|É£—…é^ñ,þi€Õð;„³81ÃÎ?“¸%o¾‰RÄl ì𤂸P~&癩O—|ÄÏw|­‹lû4xÖŒ*tlÆ"ãšdšPÈ8‰s\QØÄG¡œ²±'÷£þþˆæ ¸7(pA¯×äi¦(<×(“$‹ëqXОAÐ{¬¯7{QÇ¥ˆØLÆDŠ*Ä¢8_¦Èsoií~.eáýùdzݒK‚““ßssmGSL{X¶ï¶ùG›,8'–‡¶¦&-UÎi‰Ý1Ê_“Õ{-HÜ(}Îgûçûc±Å3ùCòÆY÷A5ÄÓ’±©r|¢ÁÚ¡†Sä,ĪÔ<µKK4FH^ÕlÔ ¾pê^ÚÉËú‘Nµó€ÄöªæªÄ¹­SHÏèv­áû­‘Hܨšx¶©õ¥eå)§^³öN›ë©Wªǃg¿;f°gfGi°^xë²|Æ&?ç™$4y"±ÿñËd¡!0(B°ËY—r–1²C|Ù|5ýU¸¢Í=O+ã-¢²ëRý©&|.m;ã+&iòp¼7ÞÁlj¨äD_Cý¥ ¡ÉÚQ:äù‡o "Éðú#-Ãí¿à͸Œèï´Aãí$@ éY“ôjþÀ´4ú¼¯Ûõä‡Z}_™¢…Å v™ä£«ï«ƒÁD-ðþ¿-8¹T#y~9_¾Áp&M¶“%WIÀFL„6‰”›¿Ð­Ûˆ$—y4¸þ±ZïëæUxUö„7ljS¸gWúm#ǽ¹Å¯}Iç¨?{cGô*/ÀÅ Ÿ¨mú%w}‘®zýVà€üPÊG‰nwdnÒ’ô|ÜxüNÔÏߣ”“;HŽt„D<ß°—þ!ªI!éÆWD—çkÄ›ãF»¡FéG¦,A6²DªÞ¢NúĘBjkøþŠl‚ÝflMœfŒ6¦±¿³ÀZ"ÈÄöé¾'Ms×à›á£ë,ϯm$Ǒҕ?7KåÚî%ïH ê‘ÓhƒÆXù<:YJ°%Qiô…ëé)͆%¡Í½T»=ÚO2µ K1ûnJ:;ÙjÈ|þ6Ä¥cª›ö¸ZùôòÖ1|†3oÂéLib».6¶xA÷¿H,¯BÔs‹6”³6pg§?¹5ò)+Jú ¼œÐîÿ4ÃÚɰ²îìS^"³Œ²wÓu]rPêRÑ.©·#mŽ ù„&Ü÷Zý +7¶¢ã“”²ÎOŽilÖÙ§+Z™IÒŠ?÷Å ±‰­Æ—ôw©Éàd^4ªF¦²Ÿü„ø ŽhBLc†ƒù>- JWÛê ˜ã³†¢££½žpb+õ¬¹®–vùÆ¥/€ñªmH‘0&%%Ä›ø "#¡æèŽð¾žô2{XVéæY–˜0¾dü¬º5,‘Ò*w\0‡„í-IËVÃÇŒ¦æ°…Ò³@b’w„„zçdåV’_w÷ë™ÜLu(?ÒäTU“&Áí)³à9ŒeöÉ&d#9𼺻 Î9òVœ…Ö™‡$}ùC¾lšÀòÊ–~uÁ:¢^}Ü(j~·Û'&|‡È¸O„æt ˜´œ|ÉÉÑE¬îtŒñÀ~á¹zs¤( (¨X°©Ö¶ûl)} ÉcÐQé.žE5àbÕMt«( )ž½xO žŽÀà=_ŒÊÍ6ƒtâCÂO¢1ç‡T26'(<žÜEbÝË”oq³õš0 ƒÉ‘i‘ÍwC0™\.wõ@;H‚%`¹+ó.1½éÂ;è ÐV`^0¯PG«f·À]CýÓ¿zÁ‘Sä—bÕž–Ÿ÷ZvWŒTá&%(¿C½Êd’V~ í>=`ôÕÄbó*Yíõñ6õ§w„a~·\fë㺴hš¤òeK<z0wËRÇ&"³¥7óÌ5þ¢¼ÁaÒúIIJ©îgiÅóPß{UžG”g–YztÞ¡ô969|UÆã,˜-õÙÜž‘ g«’Ëi^cª©ÈZ^°%Ò‡È2óY̆ä3üÈíï,ý–TæVʯõß›ë˦û ïlWX¥Q j¹A{y÷úV>TþøóI,n"ó;¾Þ%ZãþË/Øî×5K_¶¼D¾£IвpëP(‰"1Ý÷mÁÓ½JuoбQÎÙ7ǦFå#.l1¥b‘Çy/oùÆ{x°½8ââ߀µ °ÙceJÈ‘XL¦ð¢ÌÉ)€á—pR[[yYž©$sy/}†3çØ’D¢²c²¾ºeµ04QðÞø•ÌÎ#ûqŸ1yè4æ;ˆA§Œ¼_ ¼Í<ˆYp (¯ØhÍfj)f)‡3IÃkêÕ;/gv÷‘ΠÕ}(· Å~)æ<Àr¤ À“¾Pa ÅÄ?u&®¶¬ž:UøÃÌÑÿÞŒ©ÜÆÝOë—¨ÆiGÒŠs ¹X ™ãäxÚ&ƒ6ËÒªgõ×ðLMN¥ŸªŸžÄC¾Ua™ÍλèP%á÷d§"ɧù­ÿ¢oñw@Fiÿ%W0Üxd’œÆ@"CWêñº¶ç„÷©aj c±%L?kUû¼åÈDÎxn$Öº‘|¯]ixôn¥ûQÁ†lþ$þd˜ÍGx~ä±¹ÛŸÖ)Clð* ßa|°},n3*?òkÈ(¡ÖúIöMÂâ$žuõýUã…t†\ï«jæQ:H4š‰ mƒlÝZ4hï“®¼“Ò²Óì}¼s%Ñ»W@QkÝÉe‰ø’P¾ ÇVT`šíÀ´ReË[nþÀÐ÷S yµ¯ù¿f¾Ü7UI½>ÆZÒµdjT[6:kãÿ8°»ã÷ªbv†Æ¾Äƒ'Š×SXq¥äO.!§íÀF=…qQ=pS¨‰xöN«VF•€7œ\äœÞòŒ:UeèxmâÔÒãjäâÿ±³„šV{9µìø»À€ãùž:E5…ôTç"-‘äZ f ÑN§ÖÔ“®@w¶ÛAáö‰{Íî3žøâB®ÕÉ`ÊÜg9…—OèÄ1ª\f¶ÎÒú‘¥ÀülPWR¿L¥p¿XR‡¨1¯o ¼>£¼î·&ºÉbuÞð¦›Þ×úd¨ü{§í­A_ZŒùËt™9Ç.Âê n$úmÕDSV7UÏË&kYù—ðÕ7Ë€z!??_ ®ƒcžŽß͆Y†ìÛ±RÖ ™ëjú±´èJ˜Ý½_ŸPææð‚þ9HçJ,eÈ;  Æ5–ÓÕ²E“™’q¾”e$aJ’îOp£3E 0ó}IöÔÓX*³‡ûu˜°{>‰ï–Ø<[‘Öœ2õÔ.dìÐo$œ KVåUÃgo·¥7©%³¾—ÊZåHÕ,ÐQ—1w[i)РÆåÆÌñrV}HS§;Ï÷ìEÅ[†äw¹ÊÞAq\%|…RàF»ž>Óš«Zb:Ø-ž}NµOÊ#ä˜þ>.ù-È^€zO.jÖsJ;¦§éqè~îÎkÈw´³Š±`ܪyaçýD‘ÏÕ¼ÇíÅã¨ê;Å=Â8¦üðC¿ó\i:ÛÕÞÄåÊy.¿M®®&ÑYK,Q…¢MÈb¿ßü“˜Ñ‰%n†‡«+K¢àÀë)Í¥aW4¦ Žü+dàñä6íå~ È‘1mrõÑÓE=C±Š©¦CRÄb¸E=-¼’È„-^y0€"˜ ÷Õ¡[’Ž€…ýœˆÂ×> þuÐàèqý~þ@ïÓVÊZzìn+Ã{#DQ¨­_cY’3§žª¯cÉ>zCu"Ë£6?Z¯¡†]­²¥Çú@óK‡áLäbp좾mIल®v~e¾Çn„XÖÕŽ†¹PÅlGÀMQcM6LæaænüÂsĪ¿Â÷c¸"€ÛqÉÈ )¤›·É|I”ìûjy}ž4ZË/÷çGÕå&l:†<’¶Yu;eH*†ûhtË×w®ùÏíty©áOZkF´§T‡‰'âÑ“z·Ë0PóíÇÜ’¨Ä•=£rDPLö cÉê^)ʲ†t1•°©¥Ä€ô‚ÕW¨¿Áeeöl„$†}Ý}Qʳ#PAáFƒ(ý} ho+ŽògYµVŒÕ«Ž_,Y Ð@´ž.¢oXH#¸mÜ:^÷-_AïÜ"L‰º%»¡i1߆†ó$G‰˜¬½–à¦zyd8 R³¶îÙíýº]ýþÚ¼½A·’"Ö0ÿ›`¿õ|Úë ùõ$8]E¤Çà…a½Vd‘‡I)¹i7çŒX³Ÿh(†WâÂ0;§8üYJrÆÐp~åkн\8M¼Ý¥äª% ÷ ÞHNKyé^Q›£k>Ç]yú̶fu"%´qF0ÏéíŸCŽê"ÖʈßÇA+AvZwt:ÀäÙ%§ª¢Ê—§LßmNDoCg•ä&ñ¥XœŸâžp/ÌÖûÞ ?¸P;ù”ë§ËqqÆÑË'J l‡ø|ú“)N([(¶œpñB·ÿ¶Â"ŠGpÌç-yÝÇ @á|ï²^°oØçY^íÒõ|a²ùÙuƒ½óµÐ-|ãèÙþЏc㇨_—Ùå0¯Ðµƒ`ë5V¿èb"e‘´ÎF"ÂpïWÁèh}sVG“!TÙ nÞåÁƒ= ßkï”C[O‘Ù‰žŠùoXNæï£þ\]»Ÿþ¢EéAPé÷V6çóIž×ˆ÷Qo#Ãé53CôX&6n˲B:ƒåõ&ù˜*ª†èM‰m?mBvˆ·ÄIÚ¡'¤Ü¥ã&b§–õÖ”CSéßœGYö£&¦jØ. 73i«¬y´ \Ž^—ZO–bx/Ä*4í©š°×ùzð°S½ìKCëM¯:bu#®•–=²wfñÖ±*’÷@Þa¬Øö$eDvàñ‚“KP'|òüÉqÔFÞáZ!Å#÷ïû¯›ÞCJˆ?ç/,ó‘àS7’{é•4ãäf¬À%‘¼›]KÆ×S{Ô¤‡½Á¢x;‡®å:…ñÊï3Ì0gM×pž²/½¥ª1i™ïG§I@£,évqK®?óv"ëpæ¤Pï:;So> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /APRKCQ+CMBX12 /FontDescriptor 660 0 R /FirstChar 11 /LastChar 122 /Widths 658 0 R /ToUnicode 1 0 R >> endobj 170 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XVVDQJ+CMMI10 /FontDescriptor 662 0 R /FirstChar 58 /LastChar 112 /Widths 648 0 R >> endobj 486 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GPANTX+CMMI12 /FontDescriptor 664 0 R /FirstChar 58 /LastChar 58 /Widths 646 0 R >> endobj 401 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PQILTH+CMMI9 /FontDescriptor 666 0 R /FirstChar 58 /LastChar 58 /Widths 647 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XECIFG+CMR10 /FontDescriptor 668 0 R /FirstChar 11 /LastChar 124 /Widths 657 0 R /ToUnicode 1 0 R >> endobj 53 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EJASTL+CMR7 /FontDescriptor 670 0 R /FirstChar 49 /LastChar 49 /Widths 652 0 R >> endobj 55 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KHVYYP+CMR9 /FontDescriptor 672 0 R /FirstChar 39 /LastChar 122 /Widths 650 0 R /ToUnicode 1 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LNUCPW+CMSY10 /FontDescriptor 674 0 R /FirstChar 0 /LastChar 15 /Widths 655 0 R >> endobj 84 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PXBGHL+CMSY7 /FontDescriptor 676 0 R /FirstChar 0 /LastChar 0 /Widths 649 0 R >> endobj 26 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HNHPMP+CMTI10 /FontDescriptor 678 0 R /FirstChar 12 /LastChar 122 /Widths 654 0 R /ToUnicode 2 0 R >> endobj 28 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AHGYBM+CMTT10 /FontDescriptor 680 0 R /FirstChar 33 /LastChar 125 /Widths 653 0 R /ToUnicode 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZKNAUC+CMTT12 /FontDescriptor 682 0 R /FirstChar 46 /LastChar 114 /Widths 656 0 R /ToUnicode 3 0 R >> endobj 54 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QSKPMU+CMTT9 /FontDescriptor 684 0 R /FirstChar 40 /LastChar 125 /Widths 651 0 R /ToUnicode 3 0 R >> endobj 10 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [5 0 R 12 0 R 16 0 R 21 0 R 30 0 R 35 0 R] >> endobj 43 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [40 0 R 45 0 R 49 0 R 57 0 R 63 0 R 70 0 R] >> endobj 79 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [75 0 R 81 0 R 86 0 R 93 0 R 101 0 R 105 0 R] >> endobj 113 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [110 0 R 115 0 R 119 0 R 123 0 R 127 0 R 131 0 R] >> endobj 138 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [135 0 R 140 0 R 144 0 R 148 0 R 152 0 R 158 0 R] >> endobj 165 0 obj << /Type /Pages /Count 6 /Parent 685 0 R /Kids [162 0 R 167 0 R 172 0 R 176 0 R 181 0 R 185 0 R] >> endobj 192 0 obj << /Type /Pages /Count 6 /Parent 686 0 R /Kids [189 0 R 194 0 R 198 0 R 202 0 R 207 0 R 212 0 R] >> endobj 219 0 obj << /Type /Pages /Count 6 /Parent 686 0 R /Kids [216 0 R 221 0 R 227 0 R 231 0 R 239 0 R 244 0 R] >> endobj 402 0 obj << /Type /Pages /Count 4 /Parent 686 0 R /Kids [397 0 R 438 0 R 483 0 R 496 0 R] >> endobj 685 0 obj << /Type /Pages /Count 36 /Parent 687 0 R /Kids [10 0 R 43 0 R 79 0 R 113 0 R 138 0 R 165 0 R] >> endobj 686 0 obj << /Type /Pages /Count 16 /Parent 687 0 R /Kids [192 0 R 219 0 R 402 0 R] >> endobj 687 0 obj << /Type /Pages /Count 52 /Kids [685 0 R 686 0 R] >> endobj 688 0 obj << /Type /Outlines /First 500 0 R /Last 644 0 R /Count 6 >> endobj 644 0 obj << /Title 645 0 R /A 643 0 R /Parent 688 0 R /Prev 641 0 R >> endobj 641 0 obj << /Title 642 0 R /A 640 0 R /Parent 688 0 R /Prev 545 0 R /Next 644 0 R >> endobj 638 0 obj << /Title 639 0 R /A 637 0 R /Parent 626 0 R /Prev 635 0 R >> endobj 635 0 obj << /Title 636 0 R /A 634 0 R /Parent 626 0 R /Prev 632 0 R /Next 638 0 R >> endobj 632 0 obj << /Title 633 0 R /A 631 0 R /Parent 626 0 R /Prev 629 0 R /Next 635 0 R >> endobj 629 0 obj << /Title 630 0 R /A 628 0 R /Parent 626 0 R /Next 632 0 R >> endobj 626 0 obj << /Title 627 0 R /A 625 0 R /Parent 545 0 R /Prev 617 0 R /First 629 0 R /Last 638 0 R /Count -4 >> endobj 623 0 obj << /Title 624 0 R /A 622 0 R /Parent 617 0 R /Prev 620 0 R >> endobj 620 0 obj << /Title 621 0 R /A 619 0 R /Parent 617 0 R /Next 623 0 R >> endobj 617 0 obj << /Title 618 0 R /A 616 0 R /Parent 545 0 R /Prev 602 0 R /Next 626 0 R /First 620 0 R /Last 623 0 R /Count -2 >> endobj 614 0 obj << /Title 615 0 R /A 613 0 R /Parent 602 0 R /Prev 611 0 R >> endobj 611 0 obj << /Title 612 0 R /A 610 0 R /Parent 602 0 R /Prev 608 0 R /Next 614 0 R >> endobj 608 0 obj << /Title 609 0 R /A 607 0 R /Parent 602 0 R /Prev 605 0 R /Next 611 0 R >> endobj 605 0 obj << /Title 606 0 R /A 604 0 R /Parent 602 0 R /Next 608 0 R >> endobj 602 0 obj << /Title 603 0 R /A 601 0 R /Parent 545 0 R /Prev 587 0 R /Next 617 0 R /First 605 0 R /Last 614 0 R /Count -4 >> endobj 599 0 obj << /Title 600 0 R /A 598 0 R /Parent 587 0 R /Prev 596 0 R >> endobj 596 0 obj << /Title 597 0 R /A 595 0 R /Parent 587 0 R /Prev 593 0 R /Next 599 0 R >> endobj 593 0 obj << /Title 594 0 R /A 592 0 R /Parent 587 0 R /Prev 590 0 R /Next 596 0 R >> endobj 590 0 obj << /Title 591 0 R /A 589 0 R /Parent 587 0 R /Next 593 0 R >> endobj 587 0 obj << /Title 588 0 R /A 586 0 R /Parent 545 0 R /Prev 560 0 R /Next 602 0 R /First 590 0 R /Last 599 0 R /Count -4 >> endobj 584 0 obj << /Title 585 0 R /A 583 0 R /Parent 560 0 R /Prev 581 0 R >> endobj 581 0 obj << /Title 582 0 R /A 580 0 R /Parent 560 0 R /Prev 578 0 R /Next 584 0 R >> endobj 578 0 obj << /Title 579 0 R /A 577 0 R /Parent 560 0 R /Prev 575 0 R /Next 581 0 R >> endobj 575 0 obj << /Title 576 0 R /A 574 0 R /Parent 560 0 R /Prev 566 0 R /Next 578 0 R >> endobj 572 0 obj << /Title 573 0 R /A 571 0 R /Parent 566 0 R /Prev 569 0 R >> endobj 569 0 obj << /Title 570 0 R /A 568 0 R /Parent 566 0 R /Next 572 0 R >> endobj 566 0 obj << /Title 567 0 R /A 565 0 R /Parent 560 0 R /Prev 563 0 R /Next 575 0 R /First 569 0 R /Last 572 0 R /Count -2 >> endobj 563 0 obj << /Title 564 0 R /A 562 0 R /Parent 560 0 R /Next 566 0 R >> endobj 560 0 obj << /Title 561 0 R /A 559 0 R /Parent 545 0 R /Prev 548 0 R /Next 587 0 R /First 563 0 R /Last 584 0 R /Count -6 >> endobj 557 0 obj << /Title 558 0 R /A 556 0 R /Parent 548 0 R /Prev 554 0 R >> endobj 554 0 obj << /Title 555 0 R /A 553 0 R /Parent 548 0 R /Prev 551 0 R /Next 557 0 R >> endobj 551 0 obj << /Title 552 0 R /A 550 0 R /Parent 548 0 R /Next 554 0 R >> endobj 548 0 obj << /Title 549 0 R /A 547 0 R /Parent 545 0 R /Next 560 0 R /First 551 0 R /Last 557 0 R /Count -3 >> endobj 545 0 obj << /Title 546 0 R /A 544 0 R /Parent 688 0 R /Prev 521 0 R /Next 641 0 R /First 548 0 R /Last 626 0 R /Count -6 >> endobj 542 0 obj << /Title 543 0 R /A 541 0 R /Parent 521 0 R /Prev 539 0 R >> endobj 539 0 obj << /Title 540 0 R /A 538 0 R /Parent 521 0 R /Prev 536 0 R /Next 542 0 R >> endobj 536 0 obj << /Title 537 0 R /A 535 0 R /Parent 521 0 R /Prev 533 0 R /Next 539 0 R >> endobj 533 0 obj << /Title 534 0 R /A 532 0 R /Parent 521 0 R /Prev 530 0 R /Next 536 0 R >> endobj 530 0 obj << /Title 531 0 R /A 529 0 R /Parent 521 0 R /Prev 527 0 R /Next 533 0 R >> endobj 527 0 obj << /Title 528 0 R /A 526 0 R /Parent 521 0 R /Prev 524 0 R /Next 530 0 R >> endobj 524 0 obj << /Title 525 0 R /A 523 0 R /Parent 521 0 R /Next 527 0 R >> endobj 521 0 obj << /Title 522 0 R /A 520 0 R /Parent 688 0 R /Prev 503 0 R /Next 545 0 R /First 524 0 R /Last 542 0 R /Count -7 >> endobj 518 0 obj << /Title 519 0 R /A 517 0 R /Parent 503 0 R /Prev 515 0 R >> endobj 515 0 obj << /Title 516 0 R /A 514 0 R /Parent 503 0 R /Prev 512 0 R /Next 518 0 R >> endobj 512 0 obj << /Title 513 0 R /A 511 0 R /Parent 503 0 R /Prev 509 0 R /Next 515 0 R >> endobj 509 0 obj << /Title 510 0 R /A 508 0 R /Parent 503 0 R /Prev 506 0 R /Next 512 0 R >> endobj 506 0 obj << /Title 507 0 R /A 505 0 R /Parent 503 0 R /Next 509 0 R >> endobj 503 0 obj << /Title 504 0 R /A 502 0 R /Parent 688 0 R /Prev 500 0 R /Next 521 0 R /First 506 0 R /Last 518 0 R /Count -5 >> endobj 500 0 obj << /Title 501 0 R /A 499 0 R /Parent 688 0 R /Next 503 0 R >> endobj 689 0 obj << /Names [(-1) 485 0 R (-2) 498 0 R (1) 18 0 R (10) 72 0 R (11) 77 0 R (12) 83 0 R] /Limits [(-1) (12)] >> endobj 690 0 obj << /Names [(13) 88 0 R (14) 95 0 R (15) 103 0 R (16) 107 0 R (17) 112 0 R (18) 117 0 R] /Limits [(13) (18)] >> endobj 691 0 obj << /Names [(19) 121 0 R (2) 23 0 R (20) 125 0 R (21) 129 0 R (22) 133 0 R (23) 137 0 R] /Limits [(19) (23)] >> endobj 692 0 obj << /Names [(24) 142 0 R (25) 146 0 R (26) 150 0 R (27) 154 0 R (28) 160 0 R (29) 164 0 R] /Limits [(24) (29)] >> endobj 693 0 obj << /Names [(3) 32 0 R (30) 169 0 R (31) 174 0 R (32) 178 0 R (33) 183 0 R (34) 187 0 R] /Limits [(3) (34)] >> endobj 694 0 obj << /Names [(35) 191 0 R (36) 196 0 R (37) 200 0 R (38) 204 0 R (39) 209 0 R (4) 37 0 R] /Limits [(35) (4)] >> endobj 695 0 obj << /Names [(40) 214 0 R (41) 218 0 R (42) 223 0 R (43) 229 0 R (44) 233 0 R (45) 241 0 R] /Limits [(40) (45)] >> endobj 696 0 obj << /Names [(46) 246 0 R (47) 399 0 R (48) 440 0 R (5) 42 0 R (6) 47 0 R (7) 51 0 R] /Limits [(46) (7)] >> endobj 697 0 obj << /Names [(8) 59 0 R (9) 65 0 R (A\040Skeleton\040Program) 27 0 R (Disk\040Writer\040Drivers) 242 0 R (Driver\040Reference) 235 0 R (Error\040Handling) 67 0 R] /Limits [(8) (Error\040Handling)] >> endobj 698 0 obj << /Names [(Error\040Reference) 99 0 R (Function\040Reference) 155 0 R (Hardware\040Drivers) 237 0 R (Index) 400 0 R (Introduction) 19 0 R (Library\040Core\040Functions) 156 0 R] /Limits [(Error\040Reference) (Library\040Core\040Functions)] >> endobj 699 0 obj << /Names [(Library\040Initialization) 68 0 R (Library\040Reference) 96 0 R (Library\040Version) 61 0 R (Loader\040Reference) 224 0 R (Loading\040Data\040from\040Memory) 89 0 R (MikMod\040Concepts) 25 0 R] /Limits [(Library\040Initialization) (MikMod\040Concepts)] >> endobj 700 0 obj << /Names [(Module\040Loaders) 225 0 R (Module\040Player\040Functions) 179 0 R (Modules\040and\040Player\040Control) 78 0 R (More\040Sound\040Effects) 52 0 R (Network\040Drivers) 236 0 R (Other\040Drivers) 247 0 R] /Limits [(Module\040Loaders) (Other\040Drivers)] >> endobj 701 0 obj << /Names [(Playing\040Modules) 33 0 R (Playing\040Sound\040Effects) 38 0 R (Sample\040Functions) 205 0 R (Sample\040Loaders) 234 0 R (Samples\040and\040Voice\040Control) 73 0 R (Structure\040Reference) 108 0 R] /Limits [(Playing\040Modules) (Structure\040Reference)] >> endobj 702 0 obj << /Names [(Tutorial) 24 0 R (Type\040Definitions) 66 0 R (Using\040the\040Library) 60 0 R (Variable\040Reference) 97 0 R (Voice\040Functions) 210 0 R] /Limits [(Tutorial) (Voice\040Functions)] >> endobj 703 0 obj << /Kids [689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R] /Limits [(-1) (4)] >> endobj 704 0 obj << /Kids [695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R] /Limits [(40) (Other\040Drivers)] >> endobj 705 0 obj << /Kids [701 0 R 702 0 R] /Limits [(Playing\040Modules) (Voice\040Functions)] >> endobj 706 0 obj << /Kids [703 0 R 704 0 R 705 0 R] /Limits [(-1) (Voice\040Functions)] >> endobj 707 0 obj << /Dests 706 0 R >> endobj 708 0 obj << /Type /Catalog /Pages 687 0 R /Outlines 688 0 R /Names 707 0 R /PageMode /UseOutlines >> endobj 709 0 obj << /Producer (pdfTeX-1.40.3) /Creator (TeX) /CreationDate (D:20140104221101+02'00') /ModDate (D:20140104221101+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 710 0000000000 65535 f 0000000015 00000 n 0000000681 00000 n 0000001358 00000 n 0000002480 00000 n 0000002375 00000 n 0000001962 00000 n 0000242379 00000 n 0000242967 00000 n 0000244023 00000 n 0000244341 00000 n 0000003693 00000 n 0000003585 00000 n 0000002570 00000 n 0000243423 00000 n 0000004967 00000 n 0000004757 00000 n 0000003774 00000 n 0000004865 00000 n 0000004916 00000 n 0000007416 00000 n 0000007096 00000 n 0000005047 00000 n 0000007204 00000 n 0000007255 00000 n 0000007306 00000 n 0000243703 00000 n 0000007361 00000 n 0000243863 00000 n 0000009279 00000 n 0000009065 00000 n 0000007532 00000 n 0000009173 00000 n 0000009224 00000 n 0000012388 00000 n 0000012174 00000 n 0000009371 00000 n 0000012282 00000 n 0000012333 00000 n 0000013546 00000 n 0000013387 00000 n 0000012492 00000 n 0000013495 00000 n 0000244450 00000 n 0000015898 00000 n 0000015739 00000 n 0000013627 00000 n 0000015847 00000 n 0000018642 00000 n 0000018432 00000 n 0000015979 00000 n 0000018540 00000 n 0000018591 00000 n 0000243125 00000 n 0000244182 00000 n 0000243265 00000 n 0000020806 00000 n 0000020541 00000 n 0000018768 00000 n 0000020649 00000 n 0000020700 00000 n 0000020751 00000 n 0000024179 00000 n 0000023859 00000 n 0000020910 00000 n 0000023967 00000 n 0000024018 00000 n 0000024069 00000 n 0000024124 00000 n 0000027776 00000 n 0000027562 00000 n 0000024283 00000 n 0000027670 00000 n 0000027721 00000 n 0000031262 00000 n 0000031048 00000 n 0000027902 00000 n 0000031156 00000 n 0000031207 00000 n 0000244560 00000 n 0000034447 00000 n 0000034288 00000 n 0000031354 00000 n 0000034396 00000 n 0000243564 00000 n 0000035860 00000 n 0000035650 00000 n 0000034552 00000 n 0000035758 00000 n 0000035809 00000 n 0000038209 00000 n 0000038358 00000 n 0000038801 00000 n 0000038068 00000 n 0000035952 00000 n 0000038644 00000 n 0000038695 00000 n 0000038746 00000 n 0000038502 00000 n 0000053478 00000 n 0000041319 00000 n 0000041155 00000 n 0000038893 00000 n 0000041266 00000 n 0000043265 00000 n 0000043044 00000 n 0000041401 00000 n 0000043155 00000 n 0000043208 00000 n 0000045103 00000 n 0000044938 00000 n 0000043358 00000 n 0000045050 00000 n 0000244672 00000 n 0000047076 00000 n 0000046911 00000 n 0000045185 00000 n 0000047023 00000 n 0000049451 00000 n 0000049286 00000 n 0000047181 00000 n 0000049398 00000 n 0000051358 00000 n 0000051193 00000 n 0000049544 00000 n 0000051305 00000 n 0000053534 00000 n 0000053313 00000 n 0000051463 00000 n 0000053425 00000 n 0000055712 00000 n 0000055547 00000 n 0000053627 00000 n 0000055659 00000 n 0000057516 00000 n 0000057351 00000 n 0000055839 00000 n 0000057463 00000 n 0000244789 00000 n 0000059123 00000 n 0000058958 00000 n 0000057609 00000 n 0000059070 00000 n 0000060537 00000 n 0000060372 00000 n 0000059205 00000 n 0000060484 00000 n 0000062267 00000 n 0000062102 00000 n 0000060619 00000 n 0000062214 00000 n 0000063892 00000 n 0000063613 00000 n 0000062349 00000 n 0000063725 00000 n 0000063778 00000 n 0000063835 00000 n 0000065619 00000 n 0000065454 00000 n 0000063997 00000 n 0000065566 00000 n 0000067455 00000 n 0000067290 00000 n 0000065713 00000 n 0000067402 00000 n 0000244906 00000 n 0000069849 00000 n 0000069684 00000 n 0000067549 00000 n 0000069796 00000 n 0000242538 00000 n 0000071723 00000 n 0000071558 00000 n 0000069980 00000 n 0000071670 00000 n 0000074070 00000 n 0000073848 00000 n 0000071829 00000 n 0000073960 00000 n 0000074013 00000 n 0000075849 00000 n 0000075684 00000 n 0000074175 00000 n 0000075796 00000 n 0000077799 00000 n 0000077634 00000 n 0000075943 00000 n 0000077746 00000 n 0000079669 00000 n 0000079504 00000 n 0000077905 00000 n 0000079616 00000 n 0000245023 00000 n 0000080849 00000 n 0000080684 00000 n 0000079775 00000 n 0000080796 00000 n 0000082571 00000 n 0000082406 00000 n 0000080943 00000 n 0000082518 00000 n 0000084298 00000 n 0000084076 00000 n 0000082677 00000 n 0000084188 00000 n 0000084241 00000 n 0000086240 00000 n 0000086018 00000 n 0000084415 00000 n 0000086130 00000 n 0000086183 00000 n 0000088130 00000 n 0000087965 00000 n 0000086345 00000 n 0000088077 00000 n 0000089786 00000 n 0000089621 00000 n 0000088224 00000 n 0000089733 00000 n 0000245140 00000 n 0000092241 00000 n 0000091962 00000 n 0000089880 00000 n 0000092074 00000 n 0000092127 00000 n 0000092184 00000 n 0000095086 00000 n 0000094921 00000 n 0000092346 00000 n 0000095033 00000 n 0000097801 00000 n 0000097409 00000 n 0000095168 00000 n 0000097521 00000 n 0000097574 00000 n 0000097631 00000 n 0000097688 00000 n 0000097745 00000 n 0000099938 00000 n 0000099716 00000 n 0000097894 00000 n 0000099828 00000 n 0000099881 00000 n 0000101288 00000 n 0000101070 00000 n 0000100031 00000 n 0000101182 00000 n 0000101235 00000 n 0000107584 00000 n 0000107716 00000 n 0000107849 00000 n 0000107981 00000 n 0000108113 00000 n 0000108246 00000 n 0000108378 00000 n 0000108510 00000 n 0000108643 00000 n 0000108775 00000 n 0000108907 00000 n 0000109039 00000 n 0000109171 00000 n 0000109304 00000 n 0000109436 00000 n 0000109569 00000 n 0000109700 00000 n 0000109832 00000 n 0000109965 00000 n 0000110098 00000 n 0000110230 00000 n 0000110362 00000 n 0000110494 00000 n 0000110626 00000 n 0000110759 00000 n 0000110891 00000 n 0000111024 00000 n 0000111156 00000 n 0000111289 00000 n 0000111421 00000 n 0000111553 00000 n 0000111685 00000 n 0000111817 00000 n 0000111950 00000 n 0000112082 00000 n 0000112215 00000 n 0000112348 00000 n 0000112478 00000 n 0000112609 00000 n 0000112741 00000 n 0000112874 00000 n 0000113007 00000 n 0000113140 00000 n 0000113273 00000 n 0000113406 00000 n 0000113538 00000 n 0000113671 00000 n 0000113803 00000 n 0000113935 00000 n 0000114068 00000 n 0000114200 00000 n 0000114333 00000 n 0000114465 00000 n 0000114598 00000 n 0000114728 00000 n 0000114858 00000 n 0000114988 00000 n 0000115118 00000 n 0000115249 00000 n 0000115380 00000 n 0000115512 00000 n 0000115644 00000 n 0000115775 00000 n 0000115907 00000 n 0000116039 00000 n 0000116172 00000 n 0000116305 00000 n 0000116438 00000 n 0000116571 00000 n 0000116703 00000 n 0000116836 00000 n 0000116969 00000 n 0000117102 00000 n 0000117235 00000 n 0000117368 00000 n 0000117501 00000 n 0000117634 00000 n 0000117766 00000 n 0000117898 00000 n 0000118031 00000 n 0000118164 00000 n 0000118297 00000 n 0000118426 00000 n 0000118559 00000 n 0000118688 00000 n 0000118821 00000 n 0000118950 00000 n 0000119083 00000 n 0000119212 00000 n 0000119345 00000 n 0000119474 00000 n 0000119607 00000 n 0000119736 00000 n 0000119869 00000 n 0000119998 00000 n 0000120131 00000 n 0000120260 00000 n 0000120392 00000 n 0000120525 00000 n 0000120654 00000 n 0000120786 00000 n 0000120919 00000 n 0000121048 00000 n 0000121180 00000 n 0000121308 00000 n 0000121440 00000 n 0000121568 00000 n 0000121697 00000 n 0000121826 00000 n 0000121957 00000 n 0000122089 00000 n 0000122217 00000 n 0000122349 00000 n 0000122482 00000 n 0000122611 00000 n 0000122744 00000 n 0000122873 00000 n 0000123002 00000 n 0000123134 00000 n 0000123266 00000 n 0000123399 00000 n 0000123528 00000 n 0000123661 00000 n 0000123790 00000 n 0000123923 00000 n 0000124052 00000 n 0000124185 00000 n 0000124314 00000 n 0000124447 00000 n 0000124576 00000 n 0000124709 00000 n 0000124838 00000 n 0000124967 00000 n 0000125099 00000 n 0000125232 00000 n 0000125361 00000 n 0000125493 00000 n 0000125626 00000 n 0000125755 00000 n 0000125887 00000 n 0000126020 00000 n 0000126149 00000 n 0000126281 00000 n 0000126414 00000 n 0000126543 00000 n 0000126675 00000 n 0000126807 00000 n 0000126940 00000 n 0000127175 00000 n 0000106276 00000 n 0000101381 00000 n 0000127069 00000 n 0000127122 00000 n 0000242825 00000 n 0000245257 00000 n 0000129445 00000 n 0000129577 00000 n 0000129708 00000 n 0000129841 00000 n 0000129973 00000 n 0000130106 00000 n 0000130239 00000 n 0000130371 00000 n 0000130504 00000 n 0000130636 00000 n 0000130769 00000 n 0000130902 00000 n 0000131035 00000 n 0000131168 00000 n 0000131301 00000 n 0000131430 00000 n 0000131558 00000 n 0000131690 00000 n 0000131819 00000 n 0000131951 00000 n 0000132083 00000 n 0000132212 00000 n 0000132340 00000 n 0000132469 00000 n 0000132601 00000 n 0000132729 00000 n 0000132862 00000 n 0000132991 00000 n 0000133120 00000 n 0000133248 00000 n 0000133376 00000 n 0000133504 00000 n 0000133631 00000 n 0000133759 00000 n 0000133940 00000 n 0000129049 00000 n 0000127291 00000 n 0000133887 00000 n 0000136913 00000 n 0000137040 00000 n 0000137166 00000 n 0000137293 00000 n 0000137417 00000 n 0000137545 00000 n 0000137673 00000 n 0000137801 00000 n 0000137928 00000 n 0000138056 00000 n 0000138184 00000 n 0000138312 00000 n 0000138440 00000 n 0000138569 00000 n 0000138698 00000 n 0000138827 00000 n 0000138956 00000 n 0000139085 00000 n 0000139214 00000 n 0000139343 00000 n 0000139472 00000 n 0000139601 00000 n 0000139730 00000 n 0000139859 00000 n 0000139988 00000 n 0000140116 00000 n 0000140244 00000 n 0000140373 00000 n 0000140502 00000 n 0000140631 00000 n 0000140760 00000 n 0000140889 00000 n 0000141018 00000 n 0000141147 00000 n 0000141276 00000 n 0000141404 00000 n 0000141533 00000 n 0000141662 00000 n 0000141790 00000 n 0000143139 00000 n 0000143268 00000 n 0000141970 00000 n 0000136477 00000 n 0000134056 00000 n 0000141917 00000 n 0000242682 00000 n 0000143397 00000 n 0000143526 00000 n 0000143655 00000 n 0000143783 00000 n 0000143911 00000 n 0000144040 00000 n 0000144169 00000 n 0000144298 00000 n 0000144480 00000 n 0000142935 00000 n 0000142078 00000 n 0000144427 00000 n 0000144588 00000 n 0000250274 00000 n 0000144638 00000 n 0000144670 00000 n 0000250142 00000 n 0000144716 00000 n 0000144744 00000 n 0000250063 00000 n 0000144800 00000 n 0000144838 00000 n 0000249970 00000 n 0000144900 00000 n 0000144944 00000 n 0000249877 00000 n 0000145000 00000 n 0000145038 00000 n 0000249784 00000 n 0000145103 00000 n 0000145150 00000 n 0000249705 00000 n 0000145212 00000 n 0000145256 00000 n 0000249573 00000 n 0000145317 00000 n 0000145360 00000 n 0000249494 00000 n 0000145416 00000 n 0000145454 00000 n 0000249401 00000 n 0000145511 00000 n 0000145550 00000 n 0000249308 00000 n 0000145605 00000 n 0000145642 00000 n 0000249215 00000 n 0000145705 00000 n 0000145778 00000 n 0000249122 00000 n 0000145850 00000 n 0000145904 00000 n 0000249029 00000 n 0000145977 00000 n 0000146032 00000 n 0000248950 00000 n 0000146103 00000 n 0000146156 00000 n 0000248818 00000 n 0000146214 00000 n 0000146254 00000 n 0000248700 00000 n 0000146313 00000 n 0000146354 00000 n 0000248621 00000 n 0000146394 00000 n 0000146432 00000 n 0000248528 00000 n 0000146472 00000 n 0000146509 00000 n 0000248449 00000 n 0000146549 00000 n 0000146587 00000 n 0000248317 00000 n 0000146647 00000 n 0000146689 00000 n 0000248238 00000 n 0000146729 00000 n 0000146756 00000 n 0000248106 00000 n 0000146796 00000 n 0000146823 00000 n 0000248027 00000 n 0000146863 00000 n 0000146915 00000 n 0000247948 00000 n 0000146955 00000 n 0000146995 00000 n 0000247855 00000 n 0000147035 00000 n 0000147076 00000 n 0000247762 00000 n 0000147116 00000 n 0000147143 00000 n 0000247669 00000 n 0000147183 00000 n 0000147210 00000 n 0000247590 00000 n 0000147250 00000 n 0000147277 00000 n 0000247458 00000 n 0000147333 00000 n 0000147371 00000 n 0000247379 00000 n 0000147411 00000 n 0000147448 00000 n 0000247286 00000 n 0000147488 00000 n 0000147524 00000 n 0000247193 00000 n 0000147564 00000 n 0000147600 00000 n 0000247114 00000 n 0000147640 00000 n 0000147676 00000 n 0000246982 00000 n 0000147735 00000 n 0000147776 00000 n 0000246903 00000 n 0000147842 00000 n 0000147890 00000 n 0000246810 00000 n 0000147957 00000 n 0000148006 00000 n 0000246717 00000 n 0000148063 00000 n 0000148102 00000 n 0000246638 00000 n 0000148158 00000 n 0000148196 00000 n 0000246506 00000 n 0000148253 00000 n 0000148292 00000 n 0000246427 00000 n 0000148347 00000 n 0000148384 00000 n 0000246348 00000 n 0000148439 00000 n 0000148476 00000 n 0000246230 00000 n 0000148533 00000 n 0000148572 00000 n 0000246151 00000 n 0000148628 00000 n 0000148666 00000 n 0000246058 00000 n 0000148723 00000 n 0000148762 00000 n 0000245965 00000 n 0000148825 00000 n 0000148870 00000 n 0000245886 00000 n 0000148924 00000 n 0000148960 00000 n 0000245793 00000 n 0000149003 00000 n 0000149040 00000 n 0000245714 00000 n 0000149080 00000 n 0000149132 00000 n 0000149155 00000 n 0000149180 00000 n 0000149515 00000 n 0000149540 00000 n 0000150038 00000 n 0000150401 00000 n 0000150426 00000 n 0000150817 00000 n 0000151480 00000 n 0000151586 00000 n 0000152019 00000 n 0000152651 00000 n 0000153298 00000 n 0000163961 00000 n 0000164342 00000 n 0000166816 00000 n 0000167055 00000 n 0000168682 00000 n 0000168909 00000 n 0000170535 00000 n 0000170761 00000 n 0000187299 00000 n 0000187854 00000 n 0000189540 00000 n 0000189760 00000 n 0000198149 00000 n 0000198519 00000 n 0000200178 00000 n 0000200437 00000 n 0000201647 00000 n 0000201872 00000 n 0000210894 00000 n 0000211188 00000 n 0000227072 00000 n 0000227684 00000 n 0000230688 00000 n 0000230928 00000 n 0000241944 00000 n 0000245358 00000 n 0000245473 00000 n 0000245567 00000 n 0000245637 00000 n 0000250353 00000 n 0000250478 00000 n 0000250606 00000 n 0000250734 00000 n 0000250864 00000 n 0000250991 00000 n 0000251118 00000 n 0000251248 00000 n 0000251371 00000 n 0000251586 00000 n 0000251847 00000 n 0000252132 00000 n 0000252416 00000 n 0000252704 00000 n 0000252918 00000 n 0000253016 00000 n 0000253129 00000 n 0000253228 00000 n 0000253319 00000 n 0000253357 00000 n 0000253466 00000 n trailer << /Size 710 /Root 708 0 R /Info 709 0 R /ID [ ] >> startxref 253738 %%EOF libmikmod-3.1.16/dlapi/0000755000000000000000000000000012262343244013342 5ustar rootrootlibmikmod-3.1.16/dlapi/Makefile.in0000644000000000000000000002523412260336527015421 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = dlapi DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = dl_hpux.c dlfcn.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dlapi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign dlapi/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/dlapi/Makefile.am0000644000000000000000000000003710003535130015362 0ustar rootrootEXTRA_DIST = dl_hpux.c dlfcn.h libmikmod-3.1.16/dlapi/dlfcn.h0000644000000000000000000000041112222472510014570 0ustar rootroot#ifndef _MIKMOD_DLFCN_H_ #define _MIKMOD_DLFCN_H_ #ifdef MIKMOD_DLAPI_HP #define RTLD_LAZY 1 extern void *dlopen(const char *, int); extern int dlclose(void *); extern void *dlsym(void *, const char *); #endif /* MIKMOD_DLAPI_HP */ #endif /* _MIKMOD_DLFCN_H_ */ libmikmod-3.1.16/dlapi/dl_hpux.c0000644000000000000000000000270212222472510015145 0ustar rootroot/*============================================================================== $Id: dl_hpux.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ simple dlopen()-like implementation above HP-UX shl_xxx() API Written by Miodrag Vallat , released in the public domain ==============================================================================*/ /* * This implementation currently only works on hppa systems. * It could be made working on m68k (hp9000s300) series, but my HP-UX 5.5 * disk is dead and I don't have the system tapes... */ #ifdef HAVE_CONFIG_H #include "config.h" /* const */ #endif #ifdef MIKMOD_DLAPI_HP #include #include #include #include "dlfcn.h" void *dlopen(const char *name, int flags) { shl_t handle; char *library; if (name == NULL || *name == '\0') return NULL; /* By convention, libmikmod will look for "foo.so" while on HP-UX the name would be "foo.sl". Change the last letter here. */ library = strdup(name); library[strlen(library) - 1] = 'l'; handle = shl_load(library, (flags & RTLD_LAZY ? BIND_DEFERRED : BIND_IMMEDIATE) | DYNAMIC_PATH, 0L); free(library); return (void *)handle; } int dlclose(void *handle) { return shl_unload((shl_t)handle); } void *dlsym(void *handle, const char *sym) { shl_t h = (shl_t)handle; void *address; if (shl_findsym(&h, sym, TYPE_UNDEFINED, &address) == 0) return address; return NULL; } #endif /* ex:set ts=4: */ libmikmod-3.1.16/macintosh/0000755000000000000000000000000012262343244014236 5ustar rootrootlibmikmod-3.1.16/macintosh/Makefile.in0000644000000000000000000002666312260336527016324 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = macintosh DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/_libmikmodversion.r.in \ $(top_srcdir)/include/mikmod.h.in INSTALL ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = mikmod.h mikmod_build.h _libmikmodversion.r CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = README INSTALL \ config.h mikmod.h.in mikmod.h mikmod_build.h mikmod_build.h.in \ cwmikmodheaders.h \ libmikmodversion.r \ libmikmod.mcp \ BuildLibmikmod libmikmod.make libmikmod.exp \ strcasecmp.c strdup.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign macintosh/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign macintosh/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mikmod.h: $(top_builddir)/config.status $(top_srcdir)/include/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mikmod_build.h: $(top_builddir)/config.status $(top_srcdir)/include/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ _libmikmodversion.r: $(top_builddir)/config.status $(srcdir)/_libmikmodversion.r.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/macintosh/_libmikmodversion.r.in0000644000000000000000000001450712222471454020552 0ustar rootroot/* libmikmodversion.r NOTE: this file needs macintosh linefeeds (\r) to work with Rez! */ #ifndef __TYPES_R__ #include "Types.r" #endif #ifndef __BALLOONS_R__ #include "Balloons.r" #endif #define LIBMIKMOD_VERSION_MAJOR @LIBMIKMOD_MAJOR_VERSION@ #define LIBMIKMOD_VERSION_MINOR @LIBMIKMOD_MINOR_VERSION@ #define LIBMIKMOD_REVISION @LIBMIKMOD_MICRO_VERSION@ #define LIBMIKMOD_VERSION_STRING "@LIBMIKMOD_VERSION@" #define LIBMIKMOD_STATE release #define LIBMIKMOD_RELEASE_NO 0 #define LIBMIKMOD_COUNTRY verSweden #define LIBMIKMOD_NAME "libmikmod" #define LIBMIKMOD_SHORT_DESCRIPTION "music module player" #define LIBMIKMOD_LONG_DESCRIPTION "A portable sound / music module playing shared library." /* Resources for libmikmod shared library : */ resource 'vers' (1) { LIBMIKMOD_VERSION_MAJOR, (LIBMIKMOD_VERSION_MINOR << 4) | LIBMIKMOD_REVISION, LIBMIKMOD_STATE, LIBMIKMOD_RELEASE_NO, LIBMIKMOD_COUNTRY, LIBMIKMOD_VERSION_STRING, LIBMIKMOD_VERSION_STRING }; resource 'vers' (2) { LIBMIKMOD_VERSION_MAJOR, (LIBMIKMOD_VERSION_MINOR << 4) | LIBMIKMOD_REVISION, LIBMIKMOD_STATE, LIBMIKMOD_RELEASE_NO, LIBMIKMOD_COUNTRY, LIBMIKMOD_VERSION_STRING, LIBMIKMOD_SHORT_DESCRIPTION }; /* Extension Manager info */ data 'CCIª' (128) { LIBMIKMOD_NAME "\n\n" LIBMIKMOD_LONG_DESCRIPTION }; /* Finder help balloon */ resource 'hfdr' (kHMHelpID) { HelpMgrVersion, hmDefaultOptions, 0, 0, { HMStringItem { LIBMIKMOD_NAME "\n\n" LIBMIKMOD_LONG_DESCRIPTION } } }; resource 'BNDL' (128) { 'lmm!', 0, { 'ICN#', { 0, 128 }, 'FREF', { 0, 128 } } }; resource 'FREF' (128) { 'shlb', 0, "" }; /* Owner resource */ data 'lmm!' (0) { $"00" }; /* nice custom icon for extension, drawn by Anders F Bjšrklund, follows: */ resource 'ICN#' (128) { { /* array: 2 elements */ /* [1] */ $"7FFF FFF0 8000 0008 8000 0008 8015 0008" $"8011 0008 8015 6008 8015 9008 8015 1008" $"A015 1008 D015 100A 9015 E00D 1000 0009" $"1000 5001 1000 1001 1166 5201 1199 5401" $"1111 5801 1111 5401 1111 5201 1111 5201" $"1000 0009 9000 004D D000 004A A598 E3C8" $"8665 1448 8445 1448 8445 1448 8445 14CE" $"8444 E34F 8000 000F 8000 000E 7FFF FFFC", /* [2] */ $"7FFF FFF0 FFFF FFF8 FFFF FFF8 FFFF FFF8" $"FFFF FFF8 FFFF FFF8 FFFF FFF8 FFFF FFF8" $"FFFF FFF8 DFFF FFFA 9FFF FFFF 1FFF FFFF" $"1FFF FFFF 1FFF FFFF 1FFF FFFF 1FFF FFFF" $"1FFF FFFF 1FFF FFFF 1FFF FFFF 1FFF FFFF" $"1FFF FFFF 9FFF FFFF DFFF FFFA FFFF FFF8" $"FFFF FFF8 FFFF FFF8 FFFF FFF8 FFFF FFFE" $"FFFF FFFF FFFF FFFF FFFF FFFE 7FFF FFFC" } }; resource 'icl8' (128) { $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" $"FFFF FFFF FFFF FFFF FFFF FFFF 0000 0000" $"FF00 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 00F6 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6F6 F6C0" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6C0 C0F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"C0F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F9F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 FFF9 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FFFF 00FF F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 FF00" $"FF00 00FF F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"C0C0 C0F6 F6F6 F6F6 F6F6 F6F9 FFFF 00FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6C0 C0F6 F6C0 C0F6" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 C0F6 F6C0 C0F6 F6C0" $"F6C0 F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 C0F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F9F6 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FFF9 F9FF" $"FF00 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6C0 F6F9 FFFF F9FF" $"FFFF 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6C0 F6F9 FF00 FF00" $"FF00 FF00 F6C0 F6C0 C0F6 F6C0 C0F6 F6F6" $"C0C0 C0F6 F6F6 C0C0 C0C0 F6F9 FF00 0000" $"FF00 0000 F6C0 C0F6 F6C0 C0F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 C0C0 F6F9 FFFC FC00" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6F6" $"C0C0 C0F6 F6F6 C0C0 F6C0 F6F9 FFFC FCFC" $"FFF6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FFFC FCFC" $"FFF6 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FFFC FC00" $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" $"FFFF FFFF FFFF FFFF FFFF FFFF FCFC" }; resource 'ics#' (128) { { /* array: 2 elements */ /* [1] */ $"FFFE 8002 8002 8102 8102 C103 4001 4281" $"4541 4541 C003 8282 8542 8542 8002 FFFE", /* [2] */ $"FFFE FFFE FFFE FFFE FFFE FFFF 7FFF 7FFF" $"7FFF 7FFF 7FFF FFFE FFFE FFFE FFFE FFFE" } }; resource 'ics8' (128) { $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FB00" $"FF00 0000 0000 0000 0000 0000 00F6 FF00" $"FFF6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F8 FF00" $"FFF6 F6F6 F6F6 F6C0 F6F6 F6F6 F6F8 FF00" $"FFF6 F6F6 F6F6 F6C0 F6F6 F6F6 F6F8 FF00" $"FFFF 00F6 F6F6 F6C0 F6F6 F6F6 F6F8 FFFF" $"00FF 00F6 F6F6 F6F6 F6F6 F6F6 F6F6 F8FF" $"00FF 00F6 F6F6 C0F6 C0F6 F6F6 F6F6 F8FF" $"00FF 00F6 F6C0 F6C0 F6C0 F6F6 F6F6 F8FF" $"00FF 00F6 F6C0 F6C0 F6C0 F6F6 F6F6 F8FF" $"FFFF 00F6 F6F6 F6F6 F6F6 F6F6 F6F6 FFFF" $"FF00 00F6 F6F6 C0F6 C0F6 F6F6 F6F8 FF00" $"FF00 F6F6 F6C0 F6C0 F6C0 F6F6 F6F8 FF00" $"FF00 F6F6 F6C0 F6C0 F6C0 F6F6 F6F8 FF00" $"FFF6 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 FF00" $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FB" }; libmikmod-3.1.16/macintosh/BuildLibmikmod0000644000000000000000000000042010003535131017031 0ustar rootroot # Build script for MPW shell # Create object code folders (if necessary) If !`Exists -d :obj:` NewFolder obj End If !`Exists -d :objppc:` NewFolder objppc End # Make Make -f libmikmod.make ALL >libmikmod.makeout Execute libmikmod.makeout Echo "# Build complete!" libmikmod-3.1.16/macintosh/mikmod.h0000644000000000000000000006314212262033674015700 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library include file ==============================================================================*/ #ifndef _MIKMOD_H_ #define _MIKMOD_H_ #include #include #ifdef __cplusplus extern "C" { #endif /* * ========== Compiler magic for shared libraries * * ========== NOTE TO WINDOWS DEVELOPERS: * If you are compiling for Windows and will link to the static library * (libmikmod.a with MinGW, or mikmod_static.lib with MSVC or LCC, etc), * you must define MIKMOD_STATIC in your project. Otherwise, dllimport * will be assumed. */ #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MIKMOD_BUILD) && defined(DLL_EXPORT) /* building libmikmod as a dll for windows */ # define MIKMODAPI __declspec(dllexport) # elif defined(MIKMOD_BUILD) || defined(MIKMOD_STATIC) /* building or using static libmikmod for windows */ # define MIKMODAPI # else # define MIKMODAPI __declspec(dllimport) /* using libmikmod dll for windows */ # endif /* SYM_VISIBILITY should be defined if both the compiler * and the target support the visibility attributes. the * configury does that automatically. for the standalone * makefiles, etc, the developer should add the required * flags, i.e.: -DSYM_VISIBILITY -fvisibility=hidden */ #elif defined(MIKMOD_BUILD) && defined(SYM_VISIBILITY) # define MIKMODAPI __attribute__((visibility("default"))) #else # define MIKMODAPI #endif /* * ========== Library version */ #define LIBMIKMOD_VERSION_MAJOR 3L #define LIBMIKMOD_VERSION_MINOR 1L #define LIBMIKMOD_REVISION 16L #define LIBMIKMOD_VERSION \ ((LIBMIKMOD_VERSION_MAJOR<<16)| \ (LIBMIKMOD_VERSION_MINOR<< 8)| \ (LIBMIKMOD_REVISION)) MIKMODAPI extern long MikMod_GetVersion(void); /* * ========== Platform independent-type definitions */ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include /* Avoid conflicts with windef.h */ #define SBYTE _mm_SBYTE #define UBYTE _mm_UBYTE #define SWORD _mm_SWORD #define UWORD _mm_UWORD #define SLONG _mm_SLONG #define ULONG _mm_ULONG #define BOOL _mm_BOOL #define CHAR _mm_CHAR #endif #if defined(__OS2__)||defined(__EMX__) #define INCL_DOSSEMAPHORES #include #else typedef char CHAR; #endif #if defined (_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) /* 64 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed int SLONG; /* 4 bytes, signed */ typedef unsigned int ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #else /* 32 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed long SLONG; /* 4 bytes, signed */ #if !defined(__OS2__)&&!defined(__EMX__) typedef unsigned long ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #endif #endif /* * ========== Error codes */ enum { MMERR_OPENING_FILE = 1, MMERR_OUT_OF_MEMORY, MMERR_DYNAMIC_LINKING, MMERR_SAMPLE_TOO_BIG, MMERR_OUT_OF_HANDLES, MMERR_UNKNOWN_WAVE_TYPE, MMERR_LOADING_PATTERN, MMERR_LOADING_TRACK, MMERR_LOADING_HEADER, MMERR_LOADING_SAMPLEINFO, MMERR_NOT_A_MODULE, MMERR_NOT_A_STREAM, MMERR_MED_SYNTHSAMPLES, MMERR_ITPACK_INVALID_DATA, MMERR_DETECTING_DEVICE, MMERR_INVALID_DEVICE, MMERR_INITIALIZING_MIXER, MMERR_OPENING_AUDIO, MMERR_8BIT_ONLY, MMERR_16BIT_ONLY, MMERR_STEREO_ONLY, MMERR_ULAW, MMERR_NON_BLOCK, MMERR_AF_AUDIO_PORT, MMERR_AIX_CONFIG_INIT, MMERR_AIX_CONFIG_CONTROL, MMERR_AIX_CONFIG_START, MMERR_GUS_SETTINGS, MMERR_GUS_RESET, MMERR_GUS_TIMER, MMERR_HP_SETSAMPLESIZE, MMERR_HP_SETSPEED, MMERR_HP_CHANNELS, MMERR_HP_AUDIO_OUTPUT, MMERR_HP_AUDIO_DESC, MMERR_HP_BUFFERSIZE, MMERR_OSS_SETFRAGMENT, MMERR_OSS_SETSAMPLESIZE, MMERR_OSS_SETSTEREO, MMERR_OSS_SETSPEED, MMERR_SGI_SPEED, MMERR_SGI_16BIT, MMERR_SGI_8BIT, MMERR_SGI_STEREO, MMERR_SGI_MONO, MMERR_SUN_INIT, MMERR_OS2_MIXSETUP, MMERR_OS2_SEMAPHORE, MMERR_OS2_TIMER, MMERR_OS2_THREAD, MMERR_DS_PRIORITY, MMERR_DS_BUFFER, MMERR_DS_FORMAT, MMERR_DS_NOTIFY, MMERR_DS_EVENT, MMERR_DS_THREAD, MMERR_DS_UPDATE, MMERR_WINMM_HANDLE, MMERR_WINMM_ALLOCATED, MMERR_WINMM_DEVICEID, MMERR_WINMM_FORMAT, MMERR_WINMM_UNKNOWN, MMERR_MAC_SPEED, MMERR_MAC_START, ___filler_MMERR=(MMERR_MAC_START+22),/* 65-86 exist only in libmikmod3. */ MMERR_ALSA_NOCONFIG, MMERR_ALSA_SETPARAMS, MMERR_ALSA_SETFORMAT, MMERR_ALSA_SETRATE, MMERR_ALSA_SETCHANNELS, MMERR_ALSA_BUFFERSIZE, MMERR_ALSA_PCM_START, MMERR_ALSA_PCM_WRITE, MMERR_ALSA_PCM_RECOVER, MMERR_MAX }; /* * ========== Error handling */ typedef void (MikMod_handler)(void); typedef MikMod_handler *MikMod_handler_t; MIKMODAPI extern int MikMod_errno; MIKMODAPI extern BOOL MikMod_critical; MIKMODAPI extern char *MikMod_strerror(int); MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t); /* * ========== Library initialization and core functions */ struct MDRIVER; MIKMODAPI extern void MikMod_RegisterAllDrivers(void); MIKMODAPI extern CHAR* MikMod_InfoDriver(void); MIKMODAPI extern void MikMod_RegisterDriver(struct MDRIVER*); MIKMODAPI extern int MikMod_DriverFromAlias(CHAR*); MIKMODAPI extern int MikMod_Init(CHAR*); MIKMODAPI extern void MikMod_Exit(void); MIKMODAPI extern int MikMod_Reset(CHAR*); MIKMODAPI extern int MikMod_SetNumVoices(int,int); MIKMODAPI extern BOOL MikMod_Active(void); MIKMODAPI extern int MikMod_EnableOutput(void); MIKMODAPI extern void MikMod_DisableOutput(void); MIKMODAPI extern void MikMod_Update(void); MIKMODAPI extern BOOL MikMod_InitThreads(void); MIKMODAPI extern void MikMod_Lock(void); MIKMODAPI extern void MikMod_Unlock(void); /* * ========== Reader, Writer */ typedef struct MREADER { int (*Seek)(struct MREADER*,long,int); long (*Tell)(struct MREADER*); BOOL (*Read)(struct MREADER*,void*,size_t); int (*Get)(struct MREADER*); BOOL (*Eof)(struct MREADER*); } MREADER; typedef struct MWRITER { int (*Seek)(struct MWRITER*, long, int); long (*Tell)(struct MWRITER*); BOOL (*Write)(struct MWRITER*, void*, size_t); int (*Put)(struct MWRITER*, int); } MWRITER; /* * ========== Samples */ /* Sample playback should not be interrupted */ #define SFX_CRITICAL 1 /* Sample format [loading and in-memory] flags: */ #define SF_16BITS 0x0001 #define SF_STEREO 0x0002 #define SF_SIGNED 0x0004 #define SF_BIG_ENDIAN 0x0008 #define SF_DELTA 0x0010 #define SF_ITPACKED 0x0020 #define SF_FORMATMASK 0x003F /* General Playback flags */ #define SF_LOOP 0x0100 #define SF_BIDI 0x0200 #define SF_REVERSE 0x0400 #define SF_SUSTAIN 0x0800 #define SF_PLAYBACKMASK 0x0C00 /* Module-only Playback Flags */ #define SF_OWNPAN 0x1000 #define SF_UST_LOOP 0x2000 #define SF_EXTRAPLAYBACKMASK 0x3000 /* Panning constants */ #define PAN_LEFT 0 #define PAN_HALFLEFT 64 #define PAN_CENTER 128 #define PAN_HALFRIGHT 192 #define PAN_RIGHT 255 #define PAN_SURROUND 512 /* panning value for Dolby Surround */ typedef struct SAMPLE { SWORD panning; /* panning (0-255 or PAN_SURROUND) */ ULONG speed; /* Base playing speed/frequency of note */ UBYTE volume; /* volume 0-64 */ UWORD inflags; /* sample format on disk */ UWORD flags; /* sample format in memory */ ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ ULONG susbegin; /* sustain loop begin (in samples) \ Not Supported */ ULONG susend; /* sustain loop end / Yet! */ /* Variables used by the module player only! (ignored for sound effects) */ UBYTE globvol; /* global volume */ UBYTE vibflags; /* autovibrato flag stuffs */ UBYTE vibtype; /* Vibratos moved from INSTRUMENT to SAMPLE */ UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; CHAR* samplename; /* name of the sample */ /* Values used internally only */ UWORD avibpos; /* autovibrato pos [player use] */ UBYTE divfactor; /* for sample scaling, maintains proper period slides */ ULONG seekpos; /* seek position in file */ SWORD handle; /* sample handle used by individual drivers */ } SAMPLE; /* Sample functions */ MIKMODAPI extern SAMPLE *Sample_Load(CHAR*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern void Voice_SetVolume(SBYTE,UWORD); MIKMODAPI extern UWORD Voice_GetVolume(SBYTE); MIKMODAPI extern void Voice_SetFrequency(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetFrequency(SBYTE); MIKMODAPI extern void Voice_SetPanning(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetPanning(SBYTE); MIKMODAPI extern void Voice_Play(SBYTE,SAMPLE*,ULONG); MIKMODAPI extern void Voice_Stop(SBYTE); MIKMODAPI extern BOOL Voice_Stopped(SBYTE); MIKMODAPI extern SLONG Voice_GetPosition(SBYTE); MIKMODAPI extern ULONG Voice_RealVolume(SBYTE); /* * ========== Internal module representation (UniMod) */ /* Instrument definition - for information only, the only field which may be of use in user programs is the name field */ /* Instrument note count */ #define INSTNOTES 120 /* Envelope point */ typedef struct ENVPT { SWORD pos; SWORD val; } ENVPT; /* Envelope point count */ #define ENVPOINTS 32 /* Instrument structure */ typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS]; } INSTRUMENT; struct MP_CONTROL; struct MP_VOICE; /* Module definition */ /* maximum master channels supported */ #define UF_MAXCHAN 64 /* Module flags */ #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */ #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */ #define UF_INST 0x0004 /* Instruments are used */ #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */ #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */ #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */ #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */ #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */ #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */ #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */ #define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */ typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */ struct INSTRUMENT* instruments; /* all instruments */ struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */ struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */ struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */ } MODULE; /* * ========== Module loaders */ struct MLOADER; MIKMODAPI extern CHAR* MikMod_InfoLoader(void); MIKMODAPI extern void MikMod_RegisterAllLoaders(void); MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*); MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */ MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */ MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */ MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */ MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */ MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */ MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */ MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */ MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */ MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */ MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */ MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */ MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */ MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */ /* * ========== Module player */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*); MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*); MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern void Player_Stop(void); MIKMODAPI extern void Player_TogglePause(void); MIKMODAPI extern BOOL Player_Paused(void); MIKMODAPI extern void Player_NextPosition(void); MIKMODAPI extern void Player_PrevPosition(void); MIKMODAPI extern void Player_SetPosition(UWORD); MIKMODAPI extern BOOL Player_Muted(UBYTE); MIKMODAPI extern void Player_SetVolume(SWORD); MIKMODAPI extern MODULE* Player_GetModule(void); MIKMODAPI extern void Player_SetSpeed(UWORD); MIKMODAPI extern void Player_SetTempo(UWORD); MIKMODAPI extern void Player_Unmute(SLONG,...); MIKMODAPI extern void Player_Mute(SLONG,...); MIKMODAPI extern void Player_ToggleMute(SLONG,...); MIKMODAPI extern int Player_GetChannelVoice(UBYTE); MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE); typedef void (*MikMod_player_t)(void); MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t); #define MUTE_EXCLUSIVE 32000 #define MUTE_INCLUSIVE 32001 /* * ========== Drivers */ enum { MD_MUSIC = 0, MD_SNDFX }; enum { MD_HARDWARE = 0, MD_SOFTWARE }; /* Mixing flags */ /* These ones take effect only after MikMod_Init or MikMod_Reset */ #define DMODE_16BITS 0x0001 /* enable 16 bit output */ #define DMODE_STEREO 0x0002 /* enable stereo output */ #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */ #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */ #define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */ /* These take effect immediately. */ #define DMODE_SURROUND 0x0100 /* enable surround sound */ #define DMODE_INTERP 0x0200 /* enable interpolation */ #define DMODE_REVERSE 0x0400 /* reverse stereo */ struct SAMPLOAD; typedef struct MDRIVER { struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR* Alias; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); int (*Init) (void); void (*Exit) (void); int (*Reset) (void); int (*SetNumVoices) (void); int (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE); } MDRIVER; /* These variables can be changed at ANY time and results will be immediate */ MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */ MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */ MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */ MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */ MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) */ /* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */ MIKMODAPI extern UWORD md_device; /* device */ MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */ MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above */ /* The following variable should not be changed! */ MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. */ /* Known drivers list */ MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */ MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */ MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */ MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */ MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */ MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */ MIKMODAPI extern struct MDRIVER drv_sam9407;/* Linux sam9407 driver */ MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */ MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */ MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */ MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */ MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */ MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */ MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */ MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */ MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */ MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */ MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */ MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */ MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */ /*========== Virtual channel mixer interface (for user-supplied drivers only) */ MIKMODAPI extern int VC_Init(void); MIKMODAPI extern void VC_Exit(void); MIKMODAPI extern int VC_SetNumVoices(void); MIKMODAPI extern ULONG VC_SampleSpace(int); MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*); MIKMODAPI extern int VC_PlayStart(void); MIKMODAPI extern void VC_PlayStop(void); MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int); MIKMODAPI extern void VC_SampleUnload(SWORD); MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG); MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG); MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD); MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE); MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE); MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE); MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); MIKMODAPI extern void VC_VoiceStop(UBYTE); MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE); MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE); MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/macintosh/README0000644000000000000000000000601112255576504015125 0ustar rootroot Hello folks ! This is libmikmod, version 3.1.16, a portable sound library for Unix. Check out the file 'NEWS' for more history information. >> BUILDING LIBMIKMOD --------------------- - If you're not building libmikmod for the Macintosh, then you're lost in the sources. Go up one directory, and read the main README file. So, you're on one of those esthetically-challenged Apple boxes ? Or on a sober but nice classic beige box ? With a near-buttonless mouse ? libmikmod can be built using Metrowerks Codewarrior (Version Pro 5 being used to create the project file) and Apple MPW (only tested with CW compilers). Read the file INSTALL in this directory for compilation instructions. The projects will generate code for 68k as well as PowerPC processors. HTML documentation of the library, for programmers, is located in the doc directory. For more information on this port, please contact Anders Bjoerklund (email: afb@algonet.se, web: http://www.algonet.se/~afb) >> THANKS --------- We would like to thank everyone who contributed to libmikmod. Their names are in the AUTHORS file for the significative contributions, but some other names can be found in the NEWS file. Thanks a lot ! Keeping libmikmod alive wouldn't be much fun without you. >> LICENSE ---------- The libmikmod sound library is covered by the GNU Library General Public License as published by the Free Software Fundation (you'll find it in the file COPYING.LIB) ; either version 2 of the licence, or (at your option) any later version. The GNU Lesser General Public License, version 2.1, in file COPYING.LESSER, can be considered as a later version of the LGPL, and is strongly recommended for people who will embed libmikmod in their application as a shared library. Parts of the library (in playercode/mdulaw.c) are derived from the files libst.h and raw.c from an old version of the sox (SOund eXchange) package written by Lance Norskog and Jef Poskanzer. The following copyright notice applies to these parts: Copyright (C) 1989 by Jef Poskanzer. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. Note that none of these parts are used in the MacOS version of the libmikmod library. >> CONTACT AND DOWNLOAD INFO ---------------------------- libmikmod home page is located at SourceForge: http://mikmod.sourceforge.net/ http://sourceforge.net/projects/mikmod/ There's a mailing list (mikmod-public) for discussing the development of MikMod (new features, bugs, ideas...) Look for more information on the web site. >> LAST NOTES ------------- We hope you'll enjoy using this version of libmikmod as well as we enjoyed debugging and improving it. -- Miod Vallat, 01/24/2002 miod@mikmod.org Anders Bjoerklund afb@algonet.se libmikmod-3.1.16/macintosh/INSTALL0000644000000000000000000000440710003535131015261 0ustar rootroot>> BUILD INSTRUCTIONS FOR libmikmod FOR MACINTOSH ------------------------------------------------- Requirements (to run): - 680x0 or PowerPC Macintosh - Sound Manager 2.0 or above - CFM68K for 680X0 shared library Requirements (to compile): - Metrowerks CodeWarrior - Apple MPW To compile and build : A) Using CodeWarrior -------------------- 1) Open "libmikmod.mcp" with CodeWarrior IDE 2) Set Current Target : "¥ All Libraries" 3) Make Temporary stuff (can be deleted afterwards) - "libmikmod Data" folder CodeWarrior Pro 5 is needed to open the supplied project. If you have an older version of CodeWarrior and wish to recreate the project, you can see which files are included in the project at the following address: http://www.algonet.se/~afb/mikmod/mikmodfiles.gif B) With MPW ----------- 1) Open MPW Shell 2) Run the Script : "BuildLibmikmod" Temporary stuff (can be deleted afterwards) - "libmikmod.makeout" textfile - "obj","objppc" folders Only tested with the CW compilers from Metrowerks (CodeWarrior MPW). For other setups, you might need to edit the "libmikmod.make" file. I'm interested in how to make it compile with SC/MrC, please mail me if you succeed. >> TARGETS ---------- Builds the following files: - libmikmod # Fat (680X0+PowerPC) Shared Library ['shlb'] - libmikmodStub # Fat Stub Link Library (no code/data) ['stub'] The various parts that are mixed into the above fat libraries: - libmikmod68k.lib # 680X0 stub library - libmikmodPPC.lib # PowerPC stub library - libmikmod68k.dll # 680X0 shared library - libmikmodPPC.dll # PowerPC shared library (these 4 files can be deleted, since they are also present in the fat libs) - libmikmod 68k # 680X0 Static Library for CodeWarrior C/C++ - libmikmod PPC # PowerPC Static Library for CodeWarrior C/C++ >> INSTALLING ------------- Move "libmikmod" to the Extensions folder of your System Folder. Move "libmikmodStub" and "mikmod.h" to your Compiler Folder, for instance (just somewhere along your libmikmod-using project's search path) These three files (libmikmod,libmikmodStub, mikmod.h) can also be downloaded directly from my web page (see URL below). If you have troubles compiling them yourself, that is. Enjoy! Anders F Bjšrklund http://www.algonet.se/~afb/mikmod libmikmod-3.1.16/macintosh/libmikmodversion.r0000644000000000000000000001436312260337651020010 0ustar rootroot/* libmikmodversion.r NOTE: this file needs macintosh linefeeds (\r) to work with Rez! */ #ifndef __TYPES_R__ #include "Types.r" #endif #ifndef __BALLOONS_R__ #include "Balloons.r" #endif #define LIBMIKMOD_VERSION_MAJOR 3 #define LIBMIKMOD_VERSION_MINOR 1 #define LIBMIKMOD_REVISION 16 #define LIBMIKMOD_VERSION_STRING "3.1.16" #define LIBMIKMOD_STATE release #define LIBMIKMOD_RELEASE_NO 0 #define LIBMIKMOD_COUNTRY verSweden #define LIBMIKMOD_NAME "libmikmod" #define LIBMIKMOD_SHORT_DESCRIPTION "music module player" #define LIBMIKMOD_LONG_DESCRIPTION "A portable sound / music module playing shared library." /* Resources for libmikmod shared library : */ resource 'vers' (1) { LIBMIKMOD_VERSION_MAJOR, (LIBMIKMOD_VERSION_MINOR << 4) | LIBMIKMOD_REVISION, LIBMIKMOD_STATE, LIBMIKMOD_RELEASE_NO, LIBMIKMOD_COUNTRY, LIBMIKMOD_VERSION_STRING, LIBMIKMOD_VERSION_STRING }; resource 'vers' (2) { LIBMIKMOD_VERSION_MAJOR, (LIBMIKMOD_VERSION_MINOR << 4) | LIBMIKMOD_REVISION, LIBMIKMOD_STATE, LIBMIKMOD_RELEASE_NO, LIBMIKMOD_COUNTRY, LIBMIKMOD_VERSION_STRING, LIBMIKMOD_SHORT_DESCRIPTION }; /* Extension Manager info */ data 'CCIª' (128) { LIBMIKMOD_NAME "\n\n" LIBMIKMOD_LONG_DESCRIPTION }; /* Finder help balloon */ resource 'hfdr' (kHMHelpID) { HelpMgrVersion, hmDefaultOptions, 0, 0, { HMStringItem { LIBMIKMOD_NAME "\n\n" LIBMIKMOD_LONG_DESCRIPTION } } }; resource 'BNDL' (128) { 'lmm!', 0, { 'ICN#', { 0, 128 }, 'FREF', { 0, 128 } } }; resource 'FREF' (128) { 'shlb', 0, "" }; /* Owner resource */ data 'lmm!' (0) { $"00" }; /* nice custom icon for extension, drawn by Anders F Bjšrklund, follows: */ resource 'ICN#' (128) { { /* array: 2 elements */ /* [1] */ $"7FFF FFF0 8000 0008 8000 0008 8015 0008" $"8011 0008 8015 6008 8015 9008 8015 1008" $"A015 1008 D015 100A 9015 E00D 1000 0009" $"1000 5001 1000 1001 1166 5201 1199 5401" $"1111 5801 1111 5401 1111 5201 1111 5201" $"1000 0009 9000 004D D000 004A A598 E3C8" $"8665 1448 8445 1448 8445 1448 8445 14CE" $"8444 E34F 8000 000F 8000 000E 7FFF FFFC", /* [2] */ $"7FFF FFF0 FFFF FFF8 FFFF FFF8 FFFF FFF8" $"FFFF FFF8 FFFF FFF8 FFFF FFF8 FFFF FFF8" $"FFFF FFF8 DFFF FFFA 9FFF FFFF 1FFF FFFF" $"1FFF FFFF 1FFF FFFF 1FFF FFFF 1FFF FFFF" $"1FFF FFFF 1FFF FFFF 1FFF FFFF 1FFF FFFF" $"1FFF FFFF 9FFF FFFF DFFF FFFA FFFF FFF8" $"FFFF FFF8 FFFF FFF8 FFFF FFF8 FFFF FFFE" $"FFFF FFFF FFFF FFFF FFFF FFFE 7FFF FFFC" } }; resource 'icl8' (128) { $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" $"FFFF FFFF FFFF FFFF FFFF FFFF 0000 0000" $"FF00 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 00F6 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6F6 F6C0" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6C0 C0F6 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F6F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"C0F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 F9F6 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FF00 FFF9 F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 0000" $"FFFF 00FF F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F9 FF00 FF00" $"FF00 00FF F6F6 F6F6 F6F6 F6C0 F6C0 F6C0" $"C0C0 C0F6 F6F6 F6F6 F6F6 F6F9 FFFF 00FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FF00 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6C0 F6F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6C0 C0F6 F6C0 C0F6" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 C0F6 F6C0 C0F6 F6C0" $"F6C0 F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 C0F6 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6C0 F6F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F6F6 F9FF" $"0000 00FF F6F6 F6C0 F6F6 F6C0 F6F6 F6C0" $"F6C0 F6C0 F6F6 C0F6 F6F6 F6F6 F9F6 F9FF" $"0000 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FFF9 F9FF" $"FF00 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6C0 F6F9 FFFF F9FF" $"FFFF 00FF F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6C0 F6F9 FF00 FF00" $"FF00 FF00 F6C0 F6C0 C0F6 F6C0 C0F6 F6F6" $"C0C0 C0F6 F6F6 C0C0 C0C0 F6F9 FF00 0000" $"FF00 0000 F6C0 C0F6 F6C0 C0F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 F6C0 F6F9 FF00 0000" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6C0" $"F6F6 F6C0 F6C0 F6F6 C0C0 F6F9 FFFC FC00" $"FF00 F6F6 F6C0 F6F6 F6C0 F6F6 F6C0 F6F6" $"C0C0 C0F6 F6F6 C0C0 F6C0 F6F9 FFFC FCFC" $"FFF6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F9 FFFC FCFC" $"FFF6 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FFFC FC00" $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" $"FFFF FFFF FFFF FFFF FFFF FFFF FCFC" }; resource 'ics#' (128) { { /* array: 2 elements */ /* [1] */ $"FFFE 8002 8002 8102 8102 C103 4001 4281" $"4541 4541 C003 8282 8542 8542 8002 FFFE", /* [2] */ $"FFFE FFFE FFFE FFFE FFFE FFFF 7FFF 7FFF" $"7FFF 7FFF 7FFF FFFE FFFE FFFE FFFE FFFE" } }; resource 'ics8' (128) { $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FB00" $"FF00 0000 0000 0000 0000 0000 00F6 FF00" $"FFF6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F8 FF00" $"FFF6 F6F6 F6F6 F6C0 F6F6 F6F6 F6F8 FF00" $"FFF6 F6F6 F6F6 F6C0 F6F6 F6F6 F6F8 FF00" $"FFFF 00F6 F6F6 F6C0 F6F6 F6F6 F6F8 FFFF" $"00FF 00F6 F6F6 F6F6 F6F6 F6F6 F6F6 F8FF" $"00FF 00F6 F6F6 C0F6 C0F6 F6F6 F6F6 F8FF" $"00FF 00F6 F6C0 F6C0 F6C0 F6F6 F6F6 F8FF" $"00FF 00F6 F6C0 F6C0 F6C0 F6F6 F6F6 F8FF" $"FFFF 00F6 F6F6 F6F6 F6F6 F6F6 F6F6 FFFF" $"FF00 00F6 F6F6 C0F6 C0F6 F6F6 F6F8 FF00" $"FF00 F6F6 F6C0 F6C0 F6C0 F6F6 F6F8 FF00" $"FF00 F6F6 F6C0 F6C0 F6C0 F6F6 F6F8 FF00" $"FFF6 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 FF00" $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FB" }; libmikmod-3.1.16/macintosh/strdup.c0000644000000000000000000000043312222471454015724 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include char* strdup(const char *__s) { char *charptr; if (!__s) return NULL; charptr=(char *)malloc(sizeof(char) * (strlen(__s) + 1)); if (charptr) strcpy(charptr, __s); return charptr; } libmikmod-3.1.16/macintosh/mikmod_build.h0000644000000000000000000006314212262033674017057 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library include file ==============================================================================*/ #ifndef _MIKMOD_H_ #define _MIKMOD_H_ #include #include #ifdef __cplusplus extern "C" { #endif /* * ========== Compiler magic for shared libraries * * ========== NOTE TO WINDOWS DEVELOPERS: * If you are compiling for Windows and will link to the static library * (libmikmod.a with MinGW, or mikmod_static.lib with MSVC or LCC, etc), * you must define MIKMOD_STATIC in your project. Otherwise, dllimport * will be assumed. */ #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MIKMOD_BUILD) && defined(DLL_EXPORT) /* building libmikmod as a dll for windows */ # define MIKMODAPI __declspec(dllexport) # elif defined(MIKMOD_BUILD) || defined(MIKMOD_STATIC) /* building or using static libmikmod for windows */ # define MIKMODAPI # else # define MIKMODAPI __declspec(dllimport) /* using libmikmod dll for windows */ # endif /* SYM_VISIBILITY should be defined if both the compiler * and the target support the visibility attributes. the * configury does that automatically. for the standalone * makefiles, etc, the developer should add the required * flags, i.e.: -DSYM_VISIBILITY -fvisibility=hidden */ #elif defined(MIKMOD_BUILD) && defined(SYM_VISIBILITY) # define MIKMODAPI __attribute__((visibility("default"))) #else # define MIKMODAPI #endif /* * ========== Library version */ #define LIBMIKMOD_VERSION_MAJOR 3L #define LIBMIKMOD_VERSION_MINOR 1L #define LIBMIKMOD_REVISION 16L #define LIBMIKMOD_VERSION \ ((LIBMIKMOD_VERSION_MAJOR<<16)| \ (LIBMIKMOD_VERSION_MINOR<< 8)| \ (LIBMIKMOD_REVISION)) MIKMODAPI extern long MikMod_GetVersion(void); /* * ========== Platform independent-type definitions */ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include /* Avoid conflicts with windef.h */ #define SBYTE _mm_SBYTE #define UBYTE _mm_UBYTE #define SWORD _mm_SWORD #define UWORD _mm_UWORD #define SLONG _mm_SLONG #define ULONG _mm_ULONG #define BOOL _mm_BOOL #define CHAR _mm_CHAR #endif #if defined(__OS2__)||defined(__EMX__) #define INCL_DOSSEMAPHORES #include #else typedef char CHAR; #endif #if defined (_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) /* 64 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed int SLONG; /* 4 bytes, signed */ typedef unsigned int ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #else /* 32 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed long SLONG; /* 4 bytes, signed */ #if !defined(__OS2__)&&!defined(__EMX__) typedef unsigned long ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #endif #endif /* * ========== Error codes */ enum { MMERR_OPENING_FILE = 1, MMERR_OUT_OF_MEMORY, MMERR_DYNAMIC_LINKING, MMERR_SAMPLE_TOO_BIG, MMERR_OUT_OF_HANDLES, MMERR_UNKNOWN_WAVE_TYPE, MMERR_LOADING_PATTERN, MMERR_LOADING_TRACK, MMERR_LOADING_HEADER, MMERR_LOADING_SAMPLEINFO, MMERR_NOT_A_MODULE, MMERR_NOT_A_STREAM, MMERR_MED_SYNTHSAMPLES, MMERR_ITPACK_INVALID_DATA, MMERR_DETECTING_DEVICE, MMERR_INVALID_DEVICE, MMERR_INITIALIZING_MIXER, MMERR_OPENING_AUDIO, MMERR_8BIT_ONLY, MMERR_16BIT_ONLY, MMERR_STEREO_ONLY, MMERR_ULAW, MMERR_NON_BLOCK, MMERR_AF_AUDIO_PORT, MMERR_AIX_CONFIG_INIT, MMERR_AIX_CONFIG_CONTROL, MMERR_AIX_CONFIG_START, MMERR_GUS_SETTINGS, MMERR_GUS_RESET, MMERR_GUS_TIMER, MMERR_HP_SETSAMPLESIZE, MMERR_HP_SETSPEED, MMERR_HP_CHANNELS, MMERR_HP_AUDIO_OUTPUT, MMERR_HP_AUDIO_DESC, MMERR_HP_BUFFERSIZE, MMERR_OSS_SETFRAGMENT, MMERR_OSS_SETSAMPLESIZE, MMERR_OSS_SETSTEREO, MMERR_OSS_SETSPEED, MMERR_SGI_SPEED, MMERR_SGI_16BIT, MMERR_SGI_8BIT, MMERR_SGI_STEREO, MMERR_SGI_MONO, MMERR_SUN_INIT, MMERR_OS2_MIXSETUP, MMERR_OS2_SEMAPHORE, MMERR_OS2_TIMER, MMERR_OS2_THREAD, MMERR_DS_PRIORITY, MMERR_DS_BUFFER, MMERR_DS_FORMAT, MMERR_DS_NOTIFY, MMERR_DS_EVENT, MMERR_DS_THREAD, MMERR_DS_UPDATE, MMERR_WINMM_HANDLE, MMERR_WINMM_ALLOCATED, MMERR_WINMM_DEVICEID, MMERR_WINMM_FORMAT, MMERR_WINMM_UNKNOWN, MMERR_MAC_SPEED, MMERR_MAC_START, ___filler_MMERR=(MMERR_MAC_START+22),/* 65-86 exist only in libmikmod3. */ MMERR_ALSA_NOCONFIG, MMERR_ALSA_SETPARAMS, MMERR_ALSA_SETFORMAT, MMERR_ALSA_SETRATE, MMERR_ALSA_SETCHANNELS, MMERR_ALSA_BUFFERSIZE, MMERR_ALSA_PCM_START, MMERR_ALSA_PCM_WRITE, MMERR_ALSA_PCM_RECOVER, MMERR_MAX }; /* * ========== Error handling */ typedef void (MikMod_handler)(void); typedef MikMod_handler *MikMod_handler_t; MIKMODAPI extern int MikMod_errno; MIKMODAPI extern BOOL MikMod_critical; MIKMODAPI extern char *MikMod_strerror(int); MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t); /* * ========== Library initialization and core functions */ struct MDRIVER; MIKMODAPI extern void MikMod_RegisterAllDrivers(void); MIKMODAPI extern CHAR* MikMod_InfoDriver(void); MIKMODAPI extern void MikMod_RegisterDriver(struct MDRIVER*); MIKMODAPI extern int MikMod_DriverFromAlias(CHAR*); MIKMODAPI extern int MikMod_Init(CHAR*); MIKMODAPI extern void MikMod_Exit(void); MIKMODAPI extern int MikMod_Reset(CHAR*); MIKMODAPI extern int MikMod_SetNumVoices(int,int); MIKMODAPI extern BOOL MikMod_Active(void); MIKMODAPI extern int MikMod_EnableOutput(void); MIKMODAPI extern void MikMod_DisableOutput(void); MIKMODAPI extern void MikMod_Update(void); MIKMODAPI extern BOOL MikMod_InitThreads(void); MIKMODAPI extern void MikMod_Lock(void); MIKMODAPI extern void MikMod_Unlock(void); /* * ========== Reader, Writer */ typedef struct MREADER { int (*Seek)(struct MREADER*,long,int); long (*Tell)(struct MREADER*); BOOL (*Read)(struct MREADER*,void*,size_t); int (*Get)(struct MREADER*); BOOL (*Eof)(struct MREADER*); } MREADER; typedef struct MWRITER { int (*Seek)(struct MWRITER*, long, int); long (*Tell)(struct MWRITER*); BOOL (*Write)(struct MWRITER*, void*, size_t); int (*Put)(struct MWRITER*, int); } MWRITER; /* * ========== Samples */ /* Sample playback should not be interrupted */ #define SFX_CRITICAL 1 /* Sample format [loading and in-memory] flags: */ #define SF_16BITS 0x0001 #define SF_STEREO 0x0002 #define SF_SIGNED 0x0004 #define SF_BIG_ENDIAN 0x0008 #define SF_DELTA 0x0010 #define SF_ITPACKED 0x0020 #define SF_FORMATMASK 0x003F /* General Playback flags */ #define SF_LOOP 0x0100 #define SF_BIDI 0x0200 #define SF_REVERSE 0x0400 #define SF_SUSTAIN 0x0800 #define SF_PLAYBACKMASK 0x0C00 /* Module-only Playback Flags */ #define SF_OWNPAN 0x1000 #define SF_UST_LOOP 0x2000 #define SF_EXTRAPLAYBACKMASK 0x3000 /* Panning constants */ #define PAN_LEFT 0 #define PAN_HALFLEFT 64 #define PAN_CENTER 128 #define PAN_HALFRIGHT 192 #define PAN_RIGHT 255 #define PAN_SURROUND 512 /* panning value for Dolby Surround */ typedef struct SAMPLE { SWORD panning; /* panning (0-255 or PAN_SURROUND) */ ULONG speed; /* Base playing speed/frequency of note */ UBYTE volume; /* volume 0-64 */ UWORD inflags; /* sample format on disk */ UWORD flags; /* sample format in memory */ ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ ULONG susbegin; /* sustain loop begin (in samples) \ Not Supported */ ULONG susend; /* sustain loop end / Yet! */ /* Variables used by the module player only! (ignored for sound effects) */ UBYTE globvol; /* global volume */ UBYTE vibflags; /* autovibrato flag stuffs */ UBYTE vibtype; /* Vibratos moved from INSTRUMENT to SAMPLE */ UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; CHAR* samplename; /* name of the sample */ /* Values used internally only */ UWORD avibpos; /* autovibrato pos [player use] */ UBYTE divfactor; /* for sample scaling, maintains proper period slides */ ULONG seekpos; /* seek position in file */ SWORD handle; /* sample handle used by individual drivers */ } SAMPLE; /* Sample functions */ MIKMODAPI extern SAMPLE *Sample_Load(CHAR*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern void Voice_SetVolume(SBYTE,UWORD); MIKMODAPI extern UWORD Voice_GetVolume(SBYTE); MIKMODAPI extern void Voice_SetFrequency(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetFrequency(SBYTE); MIKMODAPI extern void Voice_SetPanning(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetPanning(SBYTE); MIKMODAPI extern void Voice_Play(SBYTE,SAMPLE*,ULONG); MIKMODAPI extern void Voice_Stop(SBYTE); MIKMODAPI extern BOOL Voice_Stopped(SBYTE); MIKMODAPI extern SLONG Voice_GetPosition(SBYTE); MIKMODAPI extern ULONG Voice_RealVolume(SBYTE); /* * ========== Internal module representation (UniMod) */ /* Instrument definition - for information only, the only field which may be of use in user programs is the name field */ /* Instrument note count */ #define INSTNOTES 120 /* Envelope point */ typedef struct ENVPT { SWORD pos; SWORD val; } ENVPT; /* Envelope point count */ #define ENVPOINTS 32 /* Instrument structure */ typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS]; } INSTRUMENT; struct MP_CONTROL; struct MP_VOICE; /* Module definition */ /* maximum master channels supported */ #define UF_MAXCHAN 64 /* Module flags */ #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */ #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */ #define UF_INST 0x0004 /* Instruments are used */ #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */ #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */ #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */ #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */ #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */ #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */ #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */ #define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */ typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */ struct INSTRUMENT* instruments; /* all instruments */ struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */ struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */ struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */ } MODULE; /* * ========== Module loaders */ struct MLOADER; MIKMODAPI extern CHAR* MikMod_InfoLoader(void); MIKMODAPI extern void MikMod_RegisterAllLoaders(void); MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*); MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */ MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */ MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */ MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */ MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */ MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */ MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */ MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */ MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */ MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */ MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */ MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */ MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */ MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */ /* * ========== Module player */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*); MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*); MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern void Player_Stop(void); MIKMODAPI extern void Player_TogglePause(void); MIKMODAPI extern BOOL Player_Paused(void); MIKMODAPI extern void Player_NextPosition(void); MIKMODAPI extern void Player_PrevPosition(void); MIKMODAPI extern void Player_SetPosition(UWORD); MIKMODAPI extern BOOL Player_Muted(UBYTE); MIKMODAPI extern void Player_SetVolume(SWORD); MIKMODAPI extern MODULE* Player_GetModule(void); MIKMODAPI extern void Player_SetSpeed(UWORD); MIKMODAPI extern void Player_SetTempo(UWORD); MIKMODAPI extern void Player_Unmute(SLONG,...); MIKMODAPI extern void Player_Mute(SLONG,...); MIKMODAPI extern void Player_ToggleMute(SLONG,...); MIKMODAPI extern int Player_GetChannelVoice(UBYTE); MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE); typedef void (*MikMod_player_t)(void); MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t); #define MUTE_EXCLUSIVE 32000 #define MUTE_INCLUSIVE 32001 /* * ========== Drivers */ enum { MD_MUSIC = 0, MD_SNDFX }; enum { MD_HARDWARE = 0, MD_SOFTWARE }; /* Mixing flags */ /* These ones take effect only after MikMod_Init or MikMod_Reset */ #define DMODE_16BITS 0x0001 /* enable 16 bit output */ #define DMODE_STEREO 0x0002 /* enable stereo output */ #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */ #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */ #define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */ /* These take effect immediately. */ #define DMODE_SURROUND 0x0100 /* enable surround sound */ #define DMODE_INTERP 0x0200 /* enable interpolation */ #define DMODE_REVERSE 0x0400 /* reverse stereo */ struct SAMPLOAD; typedef struct MDRIVER { struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR* Alias; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); int (*Init) (void); void (*Exit) (void); int (*Reset) (void); int (*SetNumVoices) (void); int (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE); } MDRIVER; /* These variables can be changed at ANY time and results will be immediate */ MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */ MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */ MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */ MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */ MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) */ /* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */ MIKMODAPI extern UWORD md_device; /* device */ MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */ MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above */ /* The following variable should not be changed! */ MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. */ /* Known drivers list */ MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */ MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */ MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */ MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */ MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */ MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */ MIKMODAPI extern struct MDRIVER drv_sam9407;/* Linux sam9407 driver */ MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */ MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */ MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */ MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */ MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */ MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */ MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */ MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */ MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */ MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */ MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */ MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */ MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */ /*========== Virtual channel mixer interface (for user-supplied drivers only) */ MIKMODAPI extern int VC_Init(void); MIKMODAPI extern void VC_Exit(void); MIKMODAPI extern int VC_SetNumVoices(void); MIKMODAPI extern ULONG VC_SampleSpace(int); MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*); MIKMODAPI extern int VC_PlayStart(void); MIKMODAPI extern void VC_PlayStop(void); MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int); MIKMODAPI extern void VC_SampleUnload(SWORD); MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG); MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG); MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD); MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE); MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE); MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE); MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); MIKMODAPI extern void VC_VoiceStop(UBYTE); MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE); MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE); MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/macintosh/mikmod.h.in0000644000000000000000000000000010003535131016247 0ustar rootrootlibmikmod-3.1.16/macintosh/strcasecmp.c0000644000000000000000000000050510003535131016533 0ustar rootroot#ifdef HAVE_CONFIG_H #include "config.h" #endif #include int strcasecmp(const char *__s1, const char *__s2) { register unsigned char c1, c2; while (*__s1 && *__s2) { c1 = tolower(*__s1); c2 = tolower(*__s2); if (c1 != c2) return (int)(c1 - c2); __s1++; __s2++; } return (int)(*__s1 - *__s2); } libmikmod-3.1.16/macintosh/libmikmod.exp0000644000000000000000000000261410003535131016713 0ustar rootroot# # EXP File, this decides what gets exported in the shared library; # MikMod_GetVersion MikMod_errno MikMod_critical MikMod_strerror MikMod_RegisterErrorHandler MikMod_Init MikMod_Exit MikMod_Reset MikMod_SetNumVoices MikMod_Active MikMod_EnableOutput MikMod_DisableOutput MikMod_Update MikMod_InfoDriver MikMod_RegisterDriver MikMod_RegisterAllDrivers MikMod_InfoLoader MikMod_RegisterAllLoaders MikMod_RegisterLoader MikMod_RegisterPlayer MikMod_InitThreads MikMod_Lock MikMod_Unlock MikMod_DriverFromAlias Player_Load Player_LoadFP Player_LoadGeneric Player_LoadTitle Player_Free Player_Start Player_Active Player_Stop Player_TogglePause Player_Paused Player_NextPosition Player_PrevPosition Player_SetPosition Player_Muted Player_SetVolume Player_GetModule Player_SetSpeed Player_SetTempo Player_Unmute Player_Mute Player_ToggleMute Player_GetChannelVoice Player_GetChannelPeriod Sample_Load Sample_LoadFP Sample_LoadGeneric Sample_Free Sample_Play Voice_GetVolume Voice_GetFrequency Voice_GetPanning Voice_SetVolume Voice_SetFrequency Voice_SetPanning Voice_Play Voice_Stop Voice_Stopped Voice_GetPosition Voice_RealVolume md_volume md_musicvolume md_sndfxvolume md_reverb md_pansep md_device md_mixfreq md_mode md_driver drv_nos drv_raw drv_wav drv_mac load_669 load_amf load_dsm load_far load_gdm load_imf load_it load_m15 load_med load_mod load_mtm load_okt load_s3m load_stm load_stx load_ult load_uni load_xm libmikmod-3.1.16/macintosh/libmikmod.mcp0000644000000000000000000106207610003535131016707 0ustar rootrootcool(=>.&–CodeWarrior Projecto€MœPof¬"\‚T$,4 % &"#$ !'( c­2 ë)>¯¥¦§ ¡¢£¤‘’“”•–—˜™š›œžŸ‚ƒ„…†‡ˆ‰Š‹Œ©ª®¯ % & $!"#'((*+,-./,,,,,,,,,,,)?0=  Ó ×ÿÿÿÿœžŸ   ¡¢£¤¥¦§ ¨ ©ª­®¯°±²³´ cwmikmodheaders.h Merge Out????APPLDLGXckidProjWSPC ¢ ¦¢  ¨ ×JavaClasses.jarZIP MWZPa.outE.EXE@  踻ÒÙÚÛJavaClasses.jarZIP MWZP__sta__startÿÿÿÿ ¦JavaClasses.jarZIP MWZPa.out????APPL€€@XÀ???? cwmikmodheaders.h Merge Out????APPLDLGXckidProjWSPCJavaClasses.zipZIP JAVAa.out????APPL€€@XÀ????JavaClasses.jarZIP MWZPÿÿÿÿÏæ£¤¸¥¦·Ø  EÔµ¶½âÛ¼ãÜ×èõö÷øùúûüýþÿ™"´—   éêëìíîïðñòóôßá) +#*ž» ! /012¡§¨©àç¢3„…†‡ˆ‰Š•‹ŒŽ‘’“”4-ÑÚ 5ªÎ,6«ÝÞäÁÒÓÕnopqrstuv˜wxyz{|}~789–šœ³›ƒ:;&ÇabHcde€‚fË ÅÊÆÀÉÈ¿Ã'Ä(ghIÐi< ­®¹¯°±ºÙ²=GF>?¬åj.¾ÖÍŸ@$%ÌklmABCDJKLMNOPQRSTUVWXYZ[\]^_`JavaClasses.jarZIP MWZP cwmikmodheaders.h   libmikmod68K.dllcfmgshlb????U {ÿÿÿÿ  Merge Out????APPLDLGXckidProjWSPC ?@ABCDEFGHIJLMNOPQRSTUVWXYZ[\^_`ior‚ƒ†‡ŒÌÄÇÃËÅ×ÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ¥JavaClasses.jarZIP MWZP libmikmod__initialize_start__terminate¥  libmikmod 68kkkk????????????U { cwmikmodheaders.hJavaClasses.jarZIP MWZP›œÑÿÿÿÿ  ´3³Éÿÿô __sta__start MacOS 68K Linker68k Shared Library:__sta__start ÿÿÿÿ ¥JavaClasses.jarZIP MWZP P'CODE' 'DATA' 'PICT'—›œžŸ¥¦¨¨ __start Merge Out????APPLDLGXckidProjWSPCP'CODE' 'DATA' 'PICT'MSIEInternet ExplorerIexplore.exe Toolbox68k.out????APPL€X ????U {€JavaClasses.jarZIP MWZP   macmikmodheaders.h Merge Out????APPLDLGXckidProjWSPCÿÿÿÿa.outE.EXE@__start libmikmod PPC????????????libmikmodPPC.dllcfmgshlb???? MacOS PPC LinkerPPC Static Library:P'CODE' 'DATA' 'PICT' ÿÿÿÿMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/a.outE.EXE@‚bƒc„d…e†f‡gˆh‰iŠj‹kŒlmop‘q’r“s”t•u–v—w˜x™yšz›{œ|}ž~Ÿ Œ¡’¢£•¤–¥¦‚§ƒ©nª€®é¯§ƒÿÿÿÿ§ƒÿÿÿÿ§ƒÿÿÿÿ§ƒÿÿÿÿ§ƒÿÿÿÿ§ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêëìíåèîïðäéçñòóôõö÷øùúûüýþæÿÊËÌÍÅÈÎÏÐÄÉÇÑÒÓÔÕÖרÙÚÛÜÝÞÆßàáâ㪫¬­¥¨®¯°¤©§±²³´µ¶·¸¹º»¼½¾¦¿ÀÁÂÃ9:;<=36>?@2785ABCDEFGHI14JKLMNOŠ‹)Œ…ˆŽ„(‰‡‘’“”•–—˜™*š›œž'†Ÿ ¡+¢£*+,-%(./0$)'123456789:;<=>&?@ABCBCDE>AFGH=@IJKLMNOPQRSTUV?WXYZ$%&' #()*—"˜+ ,-.¡/012345678!9:™;<~€z}‚ƒ„y|ž…†‡ˆ‰Š‹ŒŽ‘’{“”Ÿ•–  `abc\_def[š^›g¢hij£klmnopqrst]uvœwxJKLMEHNOPDIGQRSTUVWXY Z[\]^F_`a!bcÊË$ÌÍÅÈÎÏÐÄ#ÉÇÑÒÓÔÕÖרÙ%ÚÛÜÝÞ"Æßàá&âãêë ìíåèîïðä éçñòóôõö÷øù úûüýþ æÿ       !"#XYZ[\RU]^_QVWT`abcdefghPSijklmnª«.¬­¥¨®¯°¤-©§±²³´µ¶·¸¹/º»¼½¾,¦¿ÀÁ0ÂÃjklmehnopdigqrstuvwxyz{|}~f€‚ƒ @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@a.outE.EXE@ MacOS 68K Linker68k Static Library: @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@ Toolbox68k.out????APPL€X ????U {€  Merge Out????APPLDLGXckidProjWSPC libmikmodlmm!shlbDLGXckidProjWSPC macmikmodheaders.hMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/__initialize__sta_start__terminate NONAME.EXE@a.out????APPL€€@XÀ????__startä€å€!°à"!¡Ð)!¡08*tGT!¢aç¸o s ‚ !¢P” ãȤ ¶È!¢€×ïàäÿpòëùŽ !¡Ð)6îÈ<F!¢ÐSH[n|Œ@–¯ """"Ú!€ô"#$(!%wi0&ë?'X(¦0j) |*8086ˆ+¶ô ”,ÿÿ÷H -².¼/µò\Å05ÊÀØ1ðé2ø345 6,7¶ô@88ÿÿ÷H9%Y:"l;)r<*=-‰>0’?3œ@6©A·BÉCÙDêEûFGH.I:JDKZL`MmN{O…PQ™R£S­T·UÅVÏWÙXãYíZû[ \]^+_9`EaQbYccdmeuf~gˆh’i™j£k­l¶mÀnÐoÛpæqñrüstuv'w2x=yHzS{^|i}t~‰€’œ‚¦ƒ­„·…À†ʇÕˆà‰éŠó‹üŒŽ&0‘:’G“Q”]•g–q—„˜“™žš²›ÜÔàžðŸý  ¡¢(£8¤D¥U¦`§l¨{©Šª‘«›¬¨­µ®Á¯Ò°ݱå²ñ³þ´ µ ¶ .· =¸ P¹ \º h» {¼ ‰½ ›¾ ­¿ µÀ ÊÁ Ý ïà Ä Å 2Æ HÇ YÈ sÉ ŠÊ ˜Ë ³Ì ÌÍ ×Î ßÏ ëÐ ìÑ ñÒ Ó Ô &Õ 1Ö D× VØ eÙ {Ú ‘Û §Ü ºÝ ÍÞ Ûß éà òá ÿâ *ä <å Næ \ç lè |é Žê §ë »ì Ñí çî ûï ð &ñ <ò Oó eô {õ ö ¦÷ ºø Îù âú öû üý1þEÿYm•©½Ñåø  ! 4 G Z jz‡£­Ðçô/BUV__start libmikmod   ?b@cAdBeCfDgEhFiGjHkIlJmLoMpNqOrPsQtRuSvTwUxVyWzX{Y|Z}[~\^_‚`ƒiŒo’r•‚–ƒ†n‡€Œé‰/„—ÿÿÿÿ„—ÿÿÿÿ„—ÿÿÿÿ„—ÿÿÿÿ„—ÿÿÿÿ„—ÿÿÿÿwˆÿÿÿÿx‰ÿÿÿÿyŠÿÿÿÿz‹ÿÿÿÿ{ÿÿÿÿ|Žÿÿÿÿ}ÿÿÿÿ~ÿÿÿÿ‘ÿÿÿÿ€“ÿÿÿÿ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @:ÿÿÿÿ:ÿÿÿÿ@ MacOS MergenkerFat Shared Library:a.out????APPL€€@XÀ????MSIEInternet ExplorerIexplore.exeà?@uJITâÀ⊠A*@*â¶Ø´=²†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €= a.out????APPL€XÀ????U {€__startÿÿÿÿMSIEInternet ExplorerIexplore.exeà?@uJITãšã¢ðA*@*ã—`¶Ø´>†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €=ROOTFILE¥GRUP libmikmodFILEªFILE¯GRUP playercode FILE‚FILE„FILE…FILE†FILE‡FILEˆFILE‰FILEŠFILE‹FILE©FILEŒFILEFILEƒGRUP loadersFILEFILEFILE‘FILE’FILE“FILE”FILE•FILE–FILE—FILE˜FILE™FILEšFILE›FILEœFILEFILEžFILEŸGRUPdriversFILE FILE¡FILE¢FILE£FILE¤GRUPmmioFILE¥FILE¦FILE§GRUPShared Library SupportFILEFILE¨GRUP MSL LibrariesGRUP68kFILEÌFILEËFILEÅFILEÄGRUPPPCFILEFILE›FILEœGRUP Mac LibrariesFILEŸGRUP68kFILEFILEÃGRUPPPCFILE—FILEžGRUPMikMod LibrariesFILE¦FILEFILEFILEFILE@6GÀary. The to:2P the dependency tree for the C P'CODE' 'DATA' 'PICT' MacOS 68K Linker68k Stub Link Library: Merge Out????APPLDLGXckidProjWSPC__sta__startMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/ @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@ libmikmod68K.libbMPS stub????U { Toolbox68k.out????APPL€X ????U {€libmikmodPPC.libbMPS stub????ProjWSPC  @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@__start_initialize__sta_start_terminate libmikmod a.outE.EXE@@ libmikmodStubbMPS stubDLGXckidProjWSPCBasic Toolbox MultiFirst Segment:a.outLib Import 68KMPW Import 68KBalloon HelpMW C/C++ 68KMW Pascal 68KRezPEF Import 68KBasic Toolbox 68k:Toolbox68k.outBasci Toolbox PPCBasic Toolbox PPCLib Import PPCMW C/C++ PPCMW Pascal PPCPPCAsmXCOFF Import PPCPEF Import PPC:ToolboxPPC.outSillyBalls.cSillyBalls.rsrcInterfaceLibMathLibMSL RuntimePPC.LibMSL C.PPC.LibMSL C++.PPC.LibMacOS.libMathLib68K Fa(4i/8d).LibMSL Runtime68K.LibMSL C.68K Fa(4i_8d).LibMSL C++.68K Fa(4i_8d).LibBasic Toolbox FAT:Merge Out:ToolboxFAT.outToolbox68k.outToolboxPPC.outMathLib68K Fa(4i_8d).LibMSL SIOUX.68K.LibMSL SIOUX.PPC.Lib:Toolbox68k:ToolboxPPC:ToolboxFATInternalPlug.RsrcExample.cSoundLibBe-DriverClass.cppBe-DriverClass.hBe-FileUtils.cBe-PlugImport.cDelayOutPut.cEffects.cFileUtils.hInterrupt.cMac-FileUtils.cMac-PlugImport.cMac-SoundManager.cMAD.hMainDriver.cOutPut8.cPPPlug.hRDriver.hRDriverInt.hTickRemover.cWin-DirectSound.cWin-FileUtils.cWin-PlugImport.cWin-WaveDriver.c:ExamplePPCProfilerPPC.LibProfiler68k(Small).LibMiniMusic.cMyTypes.hZSS Development Log.cZSS.hZSS_Config.hZSS_Defines.hZSS_Mac.cZSS_Mac.hZSS_MAD.cZSS_MAD.hZSS_Mix.cZSS_Mix.hZSS_Mix_68k.cZSS_MOD.cZSS_MOD.hZSS_MTM.cZSS_MTM.hZSS_Patches.cZSS_Patches.hZSS_S3M.cZSS_S3M.hZSS_Tracker.cZSS_Tracker.hZSS_Utils.cZSS_Utils.hmdreg.cmdriver.cmloader.cmlreg.cmlutil.cmplayer.cmunitrk.cmwav.cnpertab.csloader.cvirtch.cvirtch2.cvirtch_common.cload_669.cload_amf.cload_dsm.cload_far.cload_gdm.cload_imf.cload_it.cload_m15.cload_med.cload_mod.cload_mtm.cload_s3m.cload_stm.cload_stx.cload_ult.cload_uni.cload_xm.cstrdup.cmmalloc.cmmerror.cmmio.cmactest.cdrv_AF.cdrv_aix.cdrv_alsa.cdrv_dart.cdrv_ds.cdrv_esd.cdrv_hp.cdrv_nos.cdrv_os2l.cdrv_os2s.cdrv_oss.cdrv_raw.cdrv_sgi.cdrv_stdout.cdrv_sun.cdrv_ultra.cdrv_wav.cdrv_mac.cmacmikmodheaders.h:MikModLib PPCload_mik.c:macmikmodheaders.hMacOS 68K LinkerMacOS PPC LinkerMacOS MergeCustom KeywordsAccess PathsTarget SettingsFile MappingsBuild ExtrasDebugger Target68K CodeGen68K Disassembler68K Linker68K ProjectC/C++ CompilerC/C++ WarningsCFM68KFTP PanelIR OptimizerRez CompilerPPC CodeGenPPC DisassemblerPPC LinkerPPC PEFPPC ProjectPPCAsm PanelMacOS Merge Panel:MikModLib 68k:libmikmod 68k:LibMikMod PPC68k Shared Library68k LibraryPPC LibraryPPC Shared LibraryAll Libraries:LibMikModPPC.dll:libmikmod68K.dllStdCLibMSL ShLibRuntime.LibMSL C.PPC (NL).LibLibMikMod.mcp.expMSL RuntimePPC.DLLMSL ShLibRuntimeCFM68K.LibMSL SIOUX.CFM68K.LibMSL C.68K (4i_8d).LibMSL C.CFM68K.DLLMathLibCFM68K (4i_8d).LibMSL MWRuntimeLibCFM68KMSL C.PPC.DLLMSL C.CFM68K Fa(4i_8d).LibMSL AppRuntimeCFM68K.LibToolLibs.oStubs.oInterface.oNoneFat Shared LibraryLibMikMod68k.dllLibMikModPPC.dll:LibMikModlibmikmodversion.rStub Link Library:LibMikModStub68k Stub Link LibraryPPC Stub Link LibraryFat Stub Link Library:LibMikMod68k.stub:LibMikModPPC.stublibmikmod 68klibmikmod PPC:Run Me!customicon.c:Set LibMikMod Custom Icon¥ All Libraries:LibMikMod68k.lib:LibMikModPPC.liblibmikmod.expsetcustomicon.c¥ All Librariescwmikmodheaders.h:Libraries:LibMikMod 68k:playercode:mdreg.c:playercode:mdriver.c:playercode:mloader.c:playercode:mlreg.c:playercode:mlutil.c:playercode:mplayer.c:playercode:munitrk.c:playercode:mwav.c:playercode:npertab.c:playercode:sloader.c:playercode:virtch.c:playercode:virtch2.c:loaders:load_669.c:loaders:load_amf.c:loaders:load_dsm.c:loaders:load_far.c:loaders:load_gdm.c:loaders:load_imf.c:loaders:load_it.c:loaders:load_m15.c:loaders:load_med.c:loaders:load_mod.c:loaders:load_mtm.c:loaders:load_s3m.c:loaders:load_stm.c:loaders:load_stx.c:loaders:load_ult.c:loaders:load_uni.c:loaders:load_xm.c:drivers:drv_nos.c:drivers:drv_stdout.c:drivers:drv_raw.c:drivers:drv_wav.c:drivers:drv_mac.c:mmio:mmalloc.c:mmio:mmerror.c:mmio:mmio.c:playercode:virtch_common.c:strdup.c:cwmikmodheaders.h¥ All Libraries:temp:libmikmod68K.dllSource TreesDebugger Runtime68K Global OptimizerPPC Global Optimizer68k Static LibraryPPC Static Librarystrcasecmp.c @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@ÍìÈ__startMSIEInternet ExplorerIexplore.exeà?@uJITâÀ⊠A*@*â¶Ø´=²†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €= a.out????APPL€XÀ????U {€ @ :ÿÿÿÿ@::ÿÿÿÿ:MSL:werks Standard Library:MSL C:ÿÿÿÿ@ :MacOS Support:ÿÿÿÿ@P'CODE' 'DATA' 'PICT'ÿÿÿÿÿÍìÈa.out????APPL€€@XÀ????ÿÍìÈMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/ MacOS PPC LinkerPPC Shared Library: NONAME.EXE@ÿÿÿÿÿÍìÈÿÿÿÿÿÍìÈMSIEInternet ExplorerIexplore.exeà?@uJITãšã¢ðA*@*ã—`¶Ø´>†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €=MSIEhttp://java.sun.com/products/jdk/1.1/docs/api/ NONAME.EXE@ Set LibMikMod Custom Icon????APPL€XÀ????U {€DFLTMetrowerks JavaInternet ExplorerDFLTMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/DFLTMetrowerks JavaInternet ExplorerDFLTMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/__start  !"#$%+,-&(')*/.  ¶´3­pÿÿ–¥·´3­phR¸¾´3®)ÿÿš;»½´3³yiè´3²¬+KÒÕ´3«'ÿÿíçÛØ´3ªK=ØÙ ä´3®“ÿÿ¶qÚ å´3®ž*¶€ é é Ø€ ¶€—›œ)ž/Ÿ¥é¦ß¨æ¨æ¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é__startP'CODE' 'DATA' 'PICT'MSIEhttp://java.sun.com/products/jdk/1.1/docs/api/¾ÔÖ @:ÿÿÿÿ:ÿÿÿÿ@a.out????APPL€€@XÀ????a.outE.EXE@DFLTMetrowerks JavaInternet ExplorerDFLTMSIEhttp://java.sun.com/products/jdk/1.1/docs/api/__start ÓÓ ׿ Ôæ Ôæ Ôæ Ôæ Ôæ Ôæ Öé Öé ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ ÌÌ Ÿ Ÿ ŸNoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86 MacOS MergenkerFat Stub Link Library:MSIEInternet ExplorerIexplore.exeà?@uJITâÀ⊠A*@*â¶Ø´=²†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €=reg$EillDi5¸ ‹Get¬tMouÌtDiañdDia Dial0 ialoS wDiav ialo‘ xt I²ventÒelecóalogalog5DialYItem}topAeAleÂonAládAleýlertxt E>dGe_etDI‚Text¢t MoÁgDeáurceó urge!€4"ndedV#istv$5ò°•%³&Ö'ó() 2*_casS+5ã0l,åÀ‹-reg©.È/illDâ05¸ 1Get(2tMouJ3tDiah4dDia‹5Dial¨6ialoÂ7wDiaà8ialoÿ9xt I:vent?;elec]Dialº?ItemÙ@topAûA€BonAl:CdAleXDlert{Ext E˜FdGe¶GetDI×HTextøIt Mo JgDe 0Kurce NLurge mM ‡N «O ÍP ïQ R 0S MT gU …V ¤W ÃX Get äY Zc To [lti =\gmen _]Lib ~^68K  _rt 6 À`on H ßa€ ýbPasc cezP =dt 68 [e!¯è |f!¯ð g!¯ð ¶h!¯ð Õi!° ój!°Ø k!°È ,l!°È Pm!°È rn!°È ”o!°È ²p!°È Õq!°È òr!°È s!°È*t!°ØIu!°Øhv!°H‰w6~p§xeÜÄycallâzBàCà{HàIà#|NàOàE}TàUàe~Zà[à„`àaࢀfàgàÅ€â‚ndedƒist!„TargB…ct D[†Settz‡ Set˜ˆeSaf·‰ ÑŠ_casõ‹5ã0ŒåÀ9regWŽzillD—5¸ ±‘GetÏ’tMouî“tDia ”dDia.•DialL–ialoi—wDia‡˜ialo©™xt IÅšventì›elecœalog*alogQžDialsŸItem topA¶¡Ö¢ø£¤:¥]¦}§ ¨Á©áª«#¬G­e®„¯¦°ȱâ²ÿ³´@µ_¶·¢¸ǹæº »(¼C½b¾‚¿¢ÀÄÁã Ã)ÄHÅdÆ}ǙȳÉÌÊèËÌÍ4ÎLÏgЂѕҫÓÄÔÞÕöÖ×+ØIÙaÚ~Û•Ü©ÝÁÞÚßóàá&âGã^ävå’æ«çÇèáéúêë.ìKíbîzï•ð°ñÃòÙóòô õ$ö=÷Yøwùú¬ûÃü×ýïþÿ!<TuŒ¤Çç + K n  ± Ïî  2 L i ‰ ª É é! !1!P!t!’!­!Ì!ì"  ".!"M""u#"“$"²%"Ð&"ë'# (#%)#@*#^+#x,#—-#°.#Ê/#ç0$1$2$13$L4$h5$‚6$7$»8$Û9$õ:%;%-<%C=%]>%x?%“@%°A%ÊB%íC&D& E&CF&cG&†H&§I&ÇJ&êK' L'-M'KN'jO'ŒP'®Q'ÈR'åS(T(&U(EV(eW(ˆX(­Y(ÌZ(ð[)\))])H^)h_)ˆ`)ªa)Éb)ñc*d*.e*Pf*og*‘h*±i*Ðj*òk+l+3m+Pn+no+p+°q+Ér+ås,t,$u,Bv,aw,ƒx,§y,Åz,è{-|-}-=~-\-{€-œ-º‚-áƒ-þ„.….B†.e‡.‹ˆ.¯‰.ÒŠ.ø‹/Œ/A/bŽ/„/©/Α/ë’0 “0.”0R•0t–0——0½˜0å™1š1.›1Oœ1m1ž1²Ÿ1Õ 1ú¡2¢2G£2h¤2Š¥2°¦2Ó§2ù¨3©3@ª3f«3ˆ¬3¯­3Ю3ò¯4°4<±4Y²4y³4œ´4Àµ4â¶5·5+¸5S¹5uº5œ»5½¼5Û½5ý¾6 ¿6CÀ6hÁ6ŠÂ6µÃ6ÖÄ6øÅ7Æ7AÇ7gÈ7‹É7®Ê7ÔË7öÌ8Í8>Î8`Ï8…Ð8ªÑ8ÇÒ8çÓ9 Ô9.Õ9PÖ9s×9™Ø9ÁÙ9ãÚ: Û:+Ü:IÝ:kÞ:Žß:±à:Öá:øâ;#ã;Dä;få;†æ;£ç;Ãè;áé;þê<ë<:ì<[íü>'ý>Cþ>`ÿ>}>œ>¸>Ý>ø??-?J?k?Œ ?­ ?Æ ?ã @ @%@F@f@Š@²@ÚAA"AFAnA–A¾AÛAüB!BFBkB‹B¯ B×!Bÿ"C'#CJ$Cq%Cœ&CÇ'Cò(D)D<*Dg+D’,D½-Dà.E/E20E]1Eˆ2E¨3EË4Eë5F6F/7FO8Fs9F–:Fµ;FÙ<G=G>G>?G`@G‚AGœBGÁCGàDHEH,FHJGHeHH„IH¤JHÄKHæLIMI-NIUOIsPI’QI²RIÕSIõTJUJ9VJYWJ}XJ YJ¿ZJã[K \K)]KH^Kj_KŒ`K¦aKËbKêcLdL6eLTfLogLŽhL®iLÎjLðkMlM7mM_nM}o @:ÿÿÿÿ:ÿÿÿÿ@:MacOS Support:ÿÿÿÿ@ None 68K Linker¥ All Libraries:P'CODE' 'DATA' 'PICT'a.out????APPL€€@XÀ???? NONAME.EXE@ 蹺¸»ÒÛÙÚ.objObj Import x86MSIEInternet ExplorerIexplore.exeà?@uJITãšã¢ðA*@*ã—`¶Ø´>†MENUzSTR#žPPobÂRidLÎaeteÚSTR æFlagòTMPLþpref versPICT.DITL:DLOGFictbRDrop^hi _j£,ÿÿø. ?-(v€3 €=ÃÈÄÅÅËÇËÉÌÌ×éÙ€ÚbÛdÜeÝfÞgßhàiájâkãnälåmæcçoèpéqêrësìtíuîvïwðxñyòzó{ô|õ}ö~÷øŒù’úû•ü–ýþ‚ÿƒæNoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.mfTEXT.rRezZIP MW JavaZipFMW Javadocu`rsrc`.auJAR Importer@.classMW Java.gifJAR Importer@.jarMW Java.javaMW Java.jpegJAR Importer@.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KPLob`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docP.oMPW Import 68K.ppob`.rsrc`MacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docP.oXCOFF Import PPC.ppob`.rsrc`Win32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.defTEXT.hMW C/C++ x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.mfTEXT.rRezZIP MW JavaZipFMW Javadocu`rsrc`.auJAR Importer@.classMW Java.gifJAR Importer@.jarMW Java.javaMW Java.jpegJAR Importer@.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KPLob`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docP.oMPW Import 68K.ppob`.rsrc`MacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docP.oXCOFF Import PPC.ppob`.rsrc`Win32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.defTEXT.hMW C/C++ x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86 libmikmod_initialize_start_terminatP'CODE' 'DATA' 'PICT' MacOS PPC LinkerPPC Stub Link Library:NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.rRezZIP MW Java@ZipFMW Javadocu`rsrc`.classMW Java.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KRSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.ppuMW Pascal 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docPMacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pMW Pascal PPCTEXT.pasMW Pascal PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.ppuMW Pascal PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docPMC LinkerCLUS@MMLBLib Import 68KMPLFLib Import 68KOBJ MPW Import 68KTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.clsMC Class Compiler€TEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.defTEXT.docTEXT.hTEXT.pMW Pascal 68KTEXT.pasMW Pascal 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.tsWin32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.hMW C/C++ x86TEXT.pMW Pascal x86TEXT.pasMW Pascal x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.ppuMW Pascal x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86P'CODE' 'DATA' 'PICT'.docP.libLib Import x86.objObj Import x86NoneMMPr@Java LinkerAPPL`Appl`COŒkMW JavaClssMW JavaJjrf.jrfMWCD`RSRC`TEXT.bhBalloon HelpTEXT.htmlTEXT.javaMW JavaTEXT.mfTEXT.rRezZIP MW JavaZipFMW Javadocu`rsrc`.auJAR Importer@.classMW Java.gifJAR Importer@.jarMW Java.javaMW Java.jpegJAR Importer@.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KPLob`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docP.oMPW Import 68K.ppob`.rsrc`MacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docP.oXCOFF Import PPC.ppob`.rsrc`Win32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.defTEXT.hMW C/C++ x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86 ¢Ô ¦æ £æ £æ £æ £æ £æ £æ ¥é ¥é Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ`rsrc`.auJAR Importer@.classMW Java.gifJAR Importer@.jarMW Java.javaMW Java.jpegJAR Importer@.zipMW JavaMacOS 68K LinkerAPPL`Appl`MMLBLib Import 68KMPLFLib Import 68KMWCD`OBJ MPW Import 68KPLob`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ 68KTEXT.c++MW C/C++ 68KTEXT.ccMW C/C++ 68KTEXT.cpMW C/C++ 68KTEXT.cppMW C/C++ 68KTEXT.expTEXT.hMW C/C++ 68KTEXT.pchMW C/C++ 68K€TEXT.pch++MW C/C++ 68K€TEXT.rRezTEXT.segdocu`rsrc`shlbPEF Import 68KstubPEF Import 68K.docP.oMPW Import 68K.ppob`.rsrc`MacOS MergeAPPL`Appl`RSRC`TEXT.bhBalloon HelpTEXT.rRezrsrc`shlbMacOS PPC LinkerAPPL`Appl`MMLBLib Import PPCMPLFLib Import PPCMWCD`RSRC`TEXT.bhBalloon HelpTEXT.cMW C/C++ PPCTEXT.c++MW C/C++ PPCTEXT.ccMW C/C++ PPCTEXT.cpMW C/C++ PPCTEXT.cppMW C/C++ PPCTEXT.expTEXT.hMW C/C++ PPCTEXT.pchMW C/C++ PPC€TEXT.pch++MW C/C++ PPC€TEXT.rRezTEXT.sPPCAsmXCOFXCOFF Import PPCdocu`rsrc`shlbPEF Import PPCstubPEF Import PPC.docP.oXCOFF Import PPC.ppob`.rsrc`Win32 x86 LinkerTEXT.cMW C/C++ x86TEXT.c++MW C/C++ x86TEXT.ccMW C/C++ x86TEXT.cpMW C/C++ x86TEXT.cppMW C/C++ x86TEXT.defTEXT.hMW C/C++ x86TEXT.pchMW C/C++ x86€TEXT.pch++MW C/C++ x86€TEXT.rcMW WinRCTEXT.resWinRes Import.docP.libLib Import x86.objObj Import x86P'CODE' 'DATA' 'PICT'Basic Toolbox Multi:Custom KeywordsBasic Toolbox Multi:Access PathsBasic Toolbox Multi:Target SettingsBasic Toolbox Multi:File MappingsBasic Toolbox Multi:Build ExtrasBasic Toolbox Multi:68K CodeGenBasic Toolbox Multi:68K DisassemblerBasic Toolbox Multi:68K LinkerBasic Toolbox Multi:68K ProjectBasic Toolbox Multi:C/C++ CompilerBasic Toolbox Multi:C/C++ WarningsBasic Toolbox Multi:CFM68KBasic Toolbox Multi:IR OptimizerBasic Toolbox Multi:Java OutputBasic Toolbox Multi:Java ProjectBasic Toolbox Multi:Java VMBasic Toolbox Multi:MacOS Merge PanelBasic Toolbox Multi:Pascal CompilerBasic Toolbox Multi:Pascal WarningsBasic Toolbox Multi:PPC CodeGenBasic Toolbox Multi:PPC DisassemblerBasic Toolbox Multi:PPC LinkerBasic Toolbox Multi:PPC PEFBasic Toolbox Multi:PPC ProjectBasic Toolbox Multi:PPCAsm PanelBasic Toolbox Multi:Rez CompilerBasic Toolbox Multi:WinRC CompilerBasic Toolbox Multi:x86 CodeGenBasic Toolbox Multi:x86 LinkerBasic Toolbox Multi:x86 ProjectProject File ListBasic Toolbox 68k:Custom KeywordsBasic Toolbox 68k:Access PathsBasic Toolbox 68k:Target SettingsBasic Toolbox 68k:File MappingsBasic Toolbox 68k:Build ExtrasBasic Toolbox 68k:68K CodeGenBasic Toolbox 68k:68K DisassemblerBasic Toolbox 68k:68K LinkerBasic Toolbox 68k:68K ProjectBasic Toolbox 68k:C/C++ CompilerBasic Toolbox 68k:C/C++ WarningsBasic Toolbox 68k:CFM68KBasic Toolbox 68k:IR OptimizerBasic Toolbox 68k:Java OutputBasic Toolbox 68k:Java ProjectBasic Toolbox 68k:Java VMBasic Toolbox 68k:MacOS Merge PanelBasic Toolbox 68k:Pascal CompilerBasic Toolbox 68k:Pascal WarningsBasic Toolbox 68k:PPC CodeGenBasic Toolbox 68k:PPC DisassemblerBasic Toolbox 68k:PPC LinkerBasic Toolbox 68k:PPC PEFBasic Toolbox 68k:PPC ProjectBasic Toolbox 68k:PPCAsm PanelBasic Toolbox 68k:Rez CompilerBasic Toolbox 68k:WinRC CompilerBasic Toolbox 68k:x86 CodeGenBasic Toolbox 68k:x86 LinkerBasic Toolbox 68k:x86 ProjectBasci Toolbox PPC:Custom KeywordsBasci Toolbox PPC:Access PathsBasci Toolbox PPC:Target SettingsBasci Toolbox PPC:File MappingsBasci Toolbox PPC:Build ExtrasBasci Toolbox PPC:68K CodeGenBasci Toolbox PPC:68K DisassemblerBasci Toolbox PPC:68K LinkerBasci Toolbox PPC:68K ProjectBasci Toolbox PPC:C/C++ CompilerBasci Toolbox PPC:C/C++ WarningsBasci Toolbox PPC:CFM68KBasci Toolbox PPC:IR OptimizerBasci Toolbox PPC:Java OutputBasci Toolbox PPC:Java ProjectBasci Toolbox PPC:Java VMBasci Toolbox PPC:MacOS Merge PanelBasci Toolbox PPC:Pascal CompilerBasci Toolbox PPC:Pascal WarningsBasci Toolbox PPC:PPC CodeGenBasci Toolbox PPC:PPC DisassemblerBasci Toolbox PPC:PPC LinkerBasci Toolbox PPC:PPC PEFBasci Toolbox PPC:PPC ProjectBasci Toolbox PPC:PPCAsm PanelBasci Toolbox PPC:Rez CompilerBasci Toolbox PPC:WinRC CompilerBasci Toolbox PPC:x86 CodeGenBasci Toolbox PPC:x86 LinkerBasci Toolbox PPC:x86 ProjectBasic Toolbox PPC:Custom KeywordsBasic Toolbox PPC:Access PathsBasic Toolbox PPC:Target SettingsBasic Toolbox PPC:File MappingsBasic Toolbox PPC:Build ExtrasBasic Toolbox PPC:68K CodeGenBasic Toolbox PPC:68K DisassemblerBasic Toolbox PPC:68K LinkerBasic Toolbox PPC:68K ProjectBasic Toolbox PPC:C/C++ CompilerBasic Toolbox PPC:C/C++ WarningsBasic Toolbox PPC:CFM68KBasic Toolbox PPC:IR OptimizerBasic Toolbox PPC:Java OutputBasic Toolbox PPC:Java ProjectBasic Toolbox PPC:Java VMBasic Toolbox PPC:MacOS Merge PanelBasic Toolbox PPC:Pascal CompilerBasic Toolbox PPC:Pascal WarningsBasic Toolbox PPC:PPC CodeGenBasic Toolbox PPC:PPC DisassemblerBasic Toolbox PPC:PPC LinkerBasic Toolbox PPC:PPC PEFBasic Toolbox PPC:PPC ProjectBasic Toolbox PPC:PPCAsm PanelBasic Toolbox PPC:Rez CompilerBasic Toolbox PPC:WinRC CompilerBasic Toolbox PPC:x86 CodeGenBasic Toolbox PPC:x86 LinkerBasic Toolbox PPC:x86 ProjectBasic Toolbox FAT:Custom KeywordsBasic Toolbox FAT:Access PathsBasic Toolbox FAT:Target SettingsBasic Toolbox FAT:File MappingsBasic Toolbox FAT:Build ExtrasBasic Toolbox FAT:68K CodeGenBasic Toolbox FAT:68K DisassemblerBasic Toolbox FAT:68K LinkerBasic Toolbox FAT:68K ProjectBasic Toolbox FAT:C/C++ CompilerBasic Toolbox FAT:C/C++ WarningsBasic Toolbox FAT:CFM68KBasic Toolbox FAT:IR OptimizerBasic Toolbox FAT:Java OutputBasic Toolbox FAT:Java ProjectBasic Toolbox FAT:Java VMBasic Toolbox FAT:MacOS Merge PanelBasic Toolbox FAT:Pascal CompilerBasic Toolbox FAT:Pascal WarningsBasic Toolbox FAT:PPC CodeGenBasic Toolbox FAT:PPC DisassemblerBasic Toolbox FAT:PPC LinkerBasic Toolbox FAT:PPC PEFBasic Toolbox FAT:PPC ProjectBasic Toolbox FAT:PPCAsm PanelBasic Toolbox FAT:Rez CompilerBasic Toolbox FAT:WinRC CompilerBasic Toolbox FAT:x86 CodeGenBasic Toolbox FAT:x86 LinkerBasic Toolbox FAT:x86 ProjectBasic Toolbox 68k:Debugger TargetBasic Toolbox 68k:FTP PanelBasic Toolbox 68k:x86 Exceptions PanelBasic Toolbox PPC:Debugger TargetBasic Toolbox PPC:FTP PanelBasic Toolbox PPC:x86 Exceptions PanelBasic Toolbox FAT:Debugger TargetBasic Toolbox FAT:FTP PanelBasic Toolbox FAT:x86 Exceptions PanelBasic Toolbox 68k:Java LanguageBasic Toolbox 68k:JavaDoc ProjectBasic Toolbox PPC:Java LanguageBasic Toolbox PPC:JavaDoc Project68k Shared Library:Custom Keywords68k Shared Library:Access Paths68k Shared Library:Target Settings68k Shared Library:File Mappings68k Shared Library:Build Extras68k Shared Library:Debugger Target68k Shared Library:68K CodeGen68k Shared Library:68K Disassembler68k Shared Library:68K Linker68k Shared Library:68K Project68k Shared Library:C/C++ Compiler68k Shared Library:C/C++ Warnings68k Shared Library:CFM68K68k Shared Library:FTP Panel68k Shared Library:IR Optimizer68k Shared Library:Java Language68k Shared Library:Java Output68k Shared Library:Java Project68k Shared Library:JavaDoc Project68k Shared Library:MacOS Merge Panel68k Shared Library:PPC CodeGen68k Shared Library:PPC Disassembler68k Shared Library:PPC Linker68k Shared Library:PPC PEF68k Shared Library:PPC Project68k Shared Library:PPCAsm Panel68k Shared Library:Rez Compiler68k Shared Library:WinRC Compiler68k Shared Library:x86 CodeGen68k Shared Library:x86 Exceptions Panel68k Shared Library:x86 Linker68k Shared Library:x86 Project68k Library:Custom Keywords68k Library:Access Paths68k Library:Target Settings68k Library:File Mappings68k Library:Build Extras68k Library:Debugger Target68k Library:68K CodeGen68k Library:68K Disassembler68k Library:68K Linker68k Library:68K Project68k Library:C/C++ Compiler68k Library:C/C++ Warnings68k Library:CFM68K68k Library:FTP Panel68k Library:IR Optimizer68k Library:Java Language68k Library:Java Output68k Library:Java Project68k Library:JavaDoc Project68k Library:MacOS Merge Panel68k Library:PPC CodeGen68k Library:PPC Disassembler68k Library:PPC Linker68k Library:PPC PEF68k Library:PPC Project68k Library:PPCAsm Panel68k Library:Rez Compiler68k Library:WinRC Compiler68k Library:x86 CodeGen68k Library:x86 Exceptions Panel68k Library:x86 Linker68k Library:x86 ProjectPPC Library:Custom KeywordsPPC Library:Access PathsPPC Library:Target SettingsPPC Library:File MappingsPPC Library:Build ExtrasPPC Library:Debugger TargetPPC Library:68K CodeGenPPC Library:68K DisassemblerPPC Library:68K LinkerPPC Library:68K ProjectPPC Library:C/C++ CompilerPPC Library:C/C++ WarningsPPC Library:CFM68KPPC Library:FTP PanelPPC Library:IR OptimizerPPC Library:Java LanguagePPC Library:Java OutputPPC Library:Java ProjectPPC Library:JavaDoc ProjectPPC Library:MacOS Merge PanelPPC Library:PPC CodeGenPPC Library:PPC DisassemblerPPC Library:PPC LinkerPPC Library:PPC PEFPPC Library:PPC ProjectPPC Library:PPCAsm PanelPPC Library:Rez CompilerPPC Library:WinRC CompilerPPC Library:x86 CodeGenPPC Library:x86 Exceptions PanelPPC Library:x86 LinkerPPC Library:x86 ProjectPPC Shared Library:Custom KeywordsPPC Shared Library:Access PathsPPC Shared Library:Target SettingsPPC Shared Library:File MappingsPPC Shared Library:Build ExtrasPPC Shared Library:Debugger TargetPPC Shared Library:68K CodeGenPPC Shared Library:68K DisassemblerPPC Shared Library:68K LinkerPPC Shared Library:68K ProjectPPC Shared Library:C/C++ CompilerPPC Shared Library:C/C++ WarningsPPC Shared Library:CFM68KPPC Shared Library:FTP PanelPPC Shared Library:IR OptimizerPPC Shared Library:Java LanguagePPC Shared Library:Java OutputPPC Shared Library:Java ProjectPPC Shared Library:JavaDoc ProjectPPC Shared Library:MacOS Merge PanelPPC Shared Library:PPC CodeGenPPC Shared Library:PPC DisassemblerPPC Shared Library:PPC LinkerPPC Shared Library:PPC PEFPPC Shared Library:PPC ProjectPPC Shared Library:PPCAsm PanelPPC Shared Library:Rez CompilerPPC Shared Library:WinRC CompilerPPC Shared Library:x86 CodeGenPPC Shared Library:x86 Exceptions PanelPPC Shared Library:x86 LinkerPPC Shared Library:x86 ProjectAll Libraries:Custom KeywordsAll Libraries:Access PathsAll Libraries:Target SettingsAll Libraries:File MappingsAll Libraries:Build ExtrasAll Libraries:Debugger TargetAll Libraries:68K CodeGenAll Libraries:68K DisassemblerAll Libraries:68K LinkerAll Libraries:68K ProjectAll Libraries:C/C++ CompilerAll Libraries:C/C++ WarningsAll Libraries:CFM68KAll Libraries:FTP PanelAll Libraries:IR OptimizerAll Libraries:Java LanguageAll Libraries:Java OutputAll Libraries:Java ProjectAll Libraries:JavaDoc ProjectAll Libraries:MacOS Merge PanelAll Libraries:PPC CodeGenAll Libraries:PPC DisassemblerAll Libraries:PPC LinkerAll Libraries:PPC PEFAll Libraries:PPC ProjectAll Libraries:PPCAsm PanelAll Libraries:Rez CompilerAll Libraries:WinRC CompilerAll Libraries:x86 CodeGenAll Libraries:x86 Exceptions PanelAll Libraries:x86 LinkerAll Libraries:x86 ProjectFat Shared Library:Custom KeywordsFat Shared Library:Access PathsFat Shared Library:Target SettingsFat Shared Library:File MappingsFat Shared Library:Build ExtrasFat Shared Library:Debugger TargetFat Shared Library:68K CodeGenFat Shared Library:68K DisassemblerFat Shared Library:68K LinkerFat Shared Library:68K ProjectFat Shared Library:C/C++ CompilerFat Shared Library:C/C++ WarningsFat Shared Library:CFM68KFat Shared Library:FTP PanelFat Shared Library:IR OptimizerFat Shared Library:Java LanguageFat Shared Library:Java OutputFat Shared Library:Java ProjectFat Shared Library:JavaDoc ProjectFat Shared Library:MacOS Merge PanelFat Shared Library:PPC CodeGenFat Shared Library:PPC DisassemblerFat Shared Library:PPC LinkerFat Shared Library:PPC PEFFat Shared Library:PPC ProjectFat Shared Library:PPCAsm PanelFat Shared Library:Rez CompilerFat Shared Library:WinRC CompilerFat Shared Library:x86 CodeGenFat Shared Library:x86 Exceptions PanelFat Shared Library:x86 LinkerFat Shared Library:x86 ProjectStub Link Library:Custom KeywordsStub Link Library:Access PathsStub Link Library:Target SettingsStub Link Library:File MappingsStub Link Library:Build ExtrasStub Link Library:Debugger TargetStub Link Library:68K CodeGenStub Link Library:68K DisassemblerStub Link Library:68K LinkerStub Link Library:68K ProjectStub Link Library:C/C++ CompilerStub Link Library:C/C++ WarningsStub Link Library:CFM68KStub Link Library:FTP PanelStub Link Library:IR OptimizerStub Link Library:Java LanguageStub Link Library:Java OutputStub Link Library:Java ProjectStub Link Library:JavaDoc ProjectStub Link Library:MacOS Merge PanelStub Link Library:PPC CodeGenStub Link Library:PPC DisassemblerStub Link Library:PPC LinkerStub Link Library:PPC PEFStub Link Library:PPC ProjectStub Link Library:PPCAsm PanelStub Link Library:Rez CompilerStub Link Library:WinRC CompilerStub Link Library:x86 CodeGenStub Link Library:x86 Exceptions PanelStub Link Library:x86 LinkerStub Link Library:x86 Project68k Stub Link Library:Custom Keywords68k Stub Link Library:Access Paths68k Stub Link Library:Target Settings68k Stub Link Library:File Mappings68k Stub Link Library:Build Extras68k Stub Link Library:Debugger Target68k Stub Link Library:68K CodeGen68k Stub Link Library:68K Disassembler68k Stub Link Library:68K Linker68k Stub Link Library:68K Project68k Stub Link Library:C/C++ Compiler68k Stub Link Library:C/C++ Warnings68k Stub Link Library:CFM68K68k Stub Link Library:FTP Panel68k Stub Link Library:IR Optimizer68k Stub Link Library:Java Language68k Stub Link Library:Java Output68k Stub Link Library:Java Project68k Stub Link Library:JavaDoc Project68k Stub Link Library:MacOS Merge Panel68k Stub Link Library:PPC CodeGen68k Stub Link Library:PPC Disassembler68k Stub Link Library:PPC Linker68k Stub Link Library:PPC PEF68k Stub Link Library:PPC Project68k Stub Link Library:PPCAsm Panel68k Stub Link Library:Rez Compiler68k Stub Link Library:WinRC Compiler68k Stub Link Library:x86 CodeGen68k Stub Link Library:x86 Exceptions Panel68k Stub Link Library:x86 Linker68k Stub Link Library:x86 ProjectPPC Stub Link Library:Custom KeywordsPPC Stub Link Library:Access PathsPPC Stub Link Library:Target SettingsPPC Stub Link Library:File MappingsPPC Stub Link Library:Build ExtrasPPC Stub Link Library:Debugger TargetPPC Stub Link Library:68K CodeGenPPC Stub Link Library:68K DisassemblerPPC Stub Link Library:68K LinkerPPC Stub Link Library:68K ProjectPPC Stub Link Library:C/C++ CompilerPPC Stub Link Library:C/C++ WarningsPPC Stub Link Library:CFM68KPPC Stub Link Library:FTP PanelPPC Stub Link Library:IR OptimizerPPC Stub Link Library:Java LanguagePPC Stub Link Library:Java OutputPPC Stub Link Library:Java ProjectPPC Stub Link Library:JavaDoc ProjectPPC Stub Link Library:MacOS Merge PanelPPC Stub Link Library:PPC CodeGenPPC Stub Link Library:PPC DisassemblerPPC Stub Link Library:PPC LinkerPPC Stub Link Library:PPC PEFPPC Stub Link Library:PPC ProjectPPC Stub Link Library:PPCAsm PanelPPC Stub Link Library:Rez CompilerPPC Stub Link Library:WinRC CompilerPPC Stub Link Library:x86 CodeGenPPC Stub Link Library:x86 Exceptions PanelPPC Stub Link Library:x86 LinkerPPC Stub Link Library:x86 ProjectFat Stub Link Library:Custom KeywordsFat Stub Link Library:Access PathsFat Stub Link Library:Target SettingsFat Stub Link Library:File MappingsFat Stub Link Library:Build ExtrasFat Stub Link Library:Debugger TargetFat Stub Link Library:68K CodeGenFat Stub Link Library:68K DisassemblerFat Stub Link Library:68K LinkerFat Stub Link Library:68K ProjectFat Stub Link Library:C/C++ CompilerFat Stub Link Library:C/C++ WarningsFat Stub Link Library:CFM68KFat Stub Link Library:FTP PanelFat Stub Link Library:IR OptimizerFat Stub Link Library:Java LanguageFat Stub Link Library:Java OutputFat Stub Link Library:Java ProjectFat Stub Link Library:JavaDoc ProjectFat Stub Link Library:MacOS Merge PanelFat Stub Link Library:PPC CodeGenFat Stub Link Library:PPC DisassemblerFat Stub Link Library:PPC LinkerFat Stub Link Library:PPC PEFFat Stub Link Library:PPC ProjectFat Stub Link Library:PPCAsm PanelFat Stub Link Library:Rez CompilerFat Stub Link Library:WinRC CompilerFat Stub Link Library:x86 CodeGenFat Stub Link Library:x86 Exceptions PanelFat Stub Link Library:x86 LinkerFat Stub Link Library:x86 Project¥ All Libraries:Custom Keywords¥ All Libraries:Access Paths¥ All Libraries:Target Settings¥ All Libraries:File Mappings¥ All Libraries:Build Extras¥ All Libraries:Debugger Target¥ All Libraries:68K CodeGen¥ All Libraries:68K Disassembler¥ All Libraries:68K Linker¥ All Libraries:68K Project¥ All Libraries:C/C++ Compiler¥ All Libraries:C/C++ Warnings¥ All Libraries:CFM68K¥ All Libraries:FTP Panel¥ All Libraries:IR Optimizer¥ All Libraries:Java Language¥ All Libraries:Java Output¥ All Libraries:Java Project¥ All Libraries:JavaDoc Project¥ All Libraries:MacOS Merge Panel¥ All Libraries:PPC CodeGen¥ All Libraries:PPC Disassembler¥ All Libraries:PPC Linker¥ All Libraries:PPC PEF¥ All Libraries:PPC Project¥ All Libraries:PPCAsm Panel¥ All Libraries:Rez Compiler¥ All Libraries:WinRC Compiler¥ All Libraries:x86 CodeGen¥ All Libraries:x86 Exceptions Panel¥ All Libraries:x86 Linker¥ All Libraries:x86 Project68k Library:Source Trees68k Library:Debugger Runtime68k Library:68K Global Optimizer68k Library:PPC Global Optimizer68k Library:x86 Global OptimizerPPC Library:Source TreesPPC Library:Debugger RuntimePPC Library:68K Global OptimizerPPC Library:PPC Global OptimizerPPC Library:x86 Global Optimizer68k Shared Library:Source Trees68k Shared Library:Debugger Runtime68k Shared Library:68K Global Optimizer68k Shared Library:PPC Global Optimizer68k Shared Library:x86 Global OptimizerPPC Shared Library:Source TreesPPC Shared Library:Debugger RuntimePPC Shared Library:68K Global OptimizerPPC Shared Library:PPC Global OptimizerPPC Shared Library:x86 Global Optimizer¥ All Libraries:Source Trees¥ All Libraries:Debugger Runtime¥ All Libraries:68K Global Optimizer¥ All Libraries:PPC Global Optimizer¥ All Libraries:x86 Global OptimizerFat Shared Library:Source TreesFat Shared Library:Debugger RuntimeFat Shared Library:68K Global OptimizerFat Shared Library:PPC Global OptimizerFat Shared Library:x86 Global OptimizerFat Stub Link Library:Source TreesFat Stub Link Library:Debugger RuntimeFat Stub Link Library:68K Global OptimizerFat Stub Link Library:PPC Global OptimizerFat Stub Link Library:x86 Global Optimizer68k Stub Link Library:Source Trees68k Stub Link Library:Debugger Runtime68k Stub Link Library:68K Global Optimizer68k Stub Link Library:PPC Global Optimizer68k Stub Link Library:x86 Global OptimizerPPC Stub Link Library:Source TreesPPC Stub Link Library:Debugger RuntimePPC Stub Link Library:68K Global OptimizerPPC Stub Link Library:PPC Global OptimizerPPC Stub Link Library:x86 Global Optimizer68k Static Library:Source Trees68k Static Library:Custom Keywords68k Static Library:Access Paths68k Static Library:Target Settings68k Static Library:File Mappings68k Static Library:Build Extras68k Static Library:Debugger Runtime68k Static Library:Debugger Target68k Static Library:68K CodeGen68k Static Library:68K Disassembler68k Static Library:68K Global Optimizer68k Static Library:68K Linker68k Static Library:68K Project68k Static Library:C/C++ Compiler68k Static Library:C/C++ Warnings68k Static Library:CFM68K68k Static Library:MacOS Merge Panel68k Static Library:PPC CodeGen68k Static Library:PPC Disassembler68k Static Library:PPC Global Optimizer68k Static Library:PPC Linker68k Static Library:PPC PEF68k Static Library:PPC Project68k Static Library:PPCAsm Panel68k Static Library:Rez Compiler68k Static Library:WinRC Compiler68k Static Library:x86 CodeGen68k Static Library:x86 Exceptions Panel68k Static Library:x86 Global Optimizer68k Static Library:x86 Linker68k Static Library:x86 ProjectPPC Static Library:Source TreesPPC Static Library:Custom KeywordsPPC Static Library:Access PathsPPC Static Library:Target SettingsPPC Static Library:File MappingsPPC Static Library:Build ExtrasPPC Static Library:Debugger RuntimePPC Static Library:Debugger TargetPPC Static Library:68K CodeGenPPC Static Library:68K DisassemblerPPC Static Library:68K Global OptimizerPPC Static Library:68K LinkerPPC Static Library:68K ProjectPPC Static Library:C/C++ CompilerPPC Static Library:C/C++ WarningsPPC Static Library:CFM68KPPC Static Library:MacOS Merge PanelPPC Static Library:PPC CodeGenPPC Static Library:PPC DisassemblerPPC Static Library:PPC Global OptimizerPPC Static Library:PPC LinkerPPC Static Library:PPC PEFPPC Static Library:PPC ProjectPPC Static Library:PPCAsm PanelPPC Static Library:Rez CompilerPPC Static Library:WinRC CompilerPPC Static Library:x86 CodeGenPPC Static Library:x86 Exceptions PanelPPC Static Library:x86 Global OptimizerPPC Static Library:x86 LinkerPPC Static Library:x86 Projectî.Pmstrmstlx, mstn((msti! mstrè«x €mstlèÑ€mstnènt °mtplPømtps H mtslH(mstiè$.,mpsièž8Ümtglèpmtpi€¤mtloé€PLstQnpref/)f8prefÈ•1)ž pref·2c mtsl¼ž Ømtpl$ümtps mtpiG¤mtlo!ÿprefŠk5(8prefrfm5` prefân-.pref܆‡A)IprefÆŸˆ <pref½‰‰™8prefù0‹ @ prefrƒŒ#Ämall¼Ìmapl $ mtslBš ˆmtpl˜Vômtps0mtpiëÀmtlo\pref tW¥5 ppref †›¦)«pref À§áX ºpref ee¨xpref :á©&Zpref ô…ª˜pref ¼y«ˆ pref &Ϭ’pref b­pref ¤ä® >pref n¯Þpref 8Ÿ° Úpref çÁ±ùÖ2pref ´š² ” pref dˆ³öàpref ‘?´ â2pref ^µEÆPpref ꢶ“èpref   ·ìbpref ÔI¸cpref tž¹8 pref Ñšº ¨Äpref wÉ»ñpref ½„¼ h¨pref ¨>½B.pref ì¼¾2Þ pref Å|¿p"pref Ö˜À’pref &jÁæpref kC ’pref ŽßÃjpref k#Ä[b2pref æÒ  pref ÿäÓÑpref ÜÔ v2pref µ±ÕÕôPpref ëÖpref ý×àš2pref Öòl pref í®ó;Ÿpref E¿ô 2pref ÔõãÌPpref uöjÊpref ÷x mtsl¶°mtpl˜xmtpsmtpi5m$mtlo±mtplƒ€mtpsx mtsl@mtpiPmtlo¼ZmstpYpref S•’@ppref @øi&pref W¦– ºpref `Y‹pref zî  ,pref ­r …pref ¡ 5 pref x ?pref †ó š°pref à#9>pref µ‹pref 鏸Úpref ‰áÆv2pref Z¨ pref ¢î`îpref º´2pref º›xrPpref ýpref ð2;&bpref n£™pref |{­ pref •4¢HÄpref rºÒpref Ji_¬¨pref 1á!.pref ÎÇY¾ pref a"pref ß= “pref A!%pref ’/"j’pref Oñ#mÜjpref c=$ mtpl`n€mtpsÑ mtslñmtpiW mtlo#æprefÚEɨ@preftFÍèpref}‡GÙpðpref6[HÓüprefvïIÛDprefB>J$prefãKà prefîlL):prefØJMÝ`prefÎ8N0ƒ>pref¸UO)Hpref½„PÞfÚprefjQu@2pref$§RM pref:SÆpref T¿2prefôªUÒPpref§rV~TprefWœbbpref}X4êprefO¨Yè pref~Z¤hÊprefÏø[ìœpref–ª\Õ¨prefSw]@×.pref…›^í´ pref”¸_A"pref“`5pref0AaGˆprefözbïÀ’prefÇWc£ jprefÁd4þmstp¥hmtplI@€mtps} mtslmtpi%mtlo2¾ mtsl ÜRˆmtpl 5•tmtps  mtpi Tmtlo 0Áprefþø…ppref)ä†ðRprefù]‡ÿ€ ºprefèˆ÷ðpref4e‰™Jpref¬ŸŠ Îprefú ‹§ pref•Œ«preff|ŠprefUìŽH‚>prefÐ !íprefèQ :Úpref‘Ç 2pref?4’³ prefGÌ“ªhpref U”0á2pref •ÀPpref"–×fprefC+—HÀbpref›+˜6 prefªÜ™ prefå—šø÷Äpref°­››fprefÒtœИ¨prefq¨nF.prefl•ž" pref&ÝŸG¢"prefq ;ˆpref§¡I"prefë3¢œ~’pref"£Ñ@jprefª¤£ˆ mtsl }°mtpl H xmtps ¾mtpi Nmtlo j°prefXN¥Öppref3¦-@prefåJ§3T ºprefþ̨ prefÔ&© —prefÔתGÄpref$g«$ pref±\¬[Pprefºc­ ³pref€_®œÄ>pref³¯``pref£{°FÚpref¡â±^Ò2pref I²$" pref∳L.pref% ´GØ2prefôÓµ=JPpref¿¶bprefP¶·öfbpref¯þ¸pref “¹£v preflïº Äprefx »äpref&+¼ ¹¨pref—½¥2.prefþоT pref¶ž¿¼"pref#À¼:prefµYÁÕ«pref„0Âü’prefÃŽjprefaÄà|prefã5ÅÊ<@pref£ŠÆprefºmÇ`"ðprefSéÈCÅprefüÉ[öprefùôÊöÈprefýÔ˼| pref[LÌù»prefà?ÍKprefh÷Îi>prefQVϧprefdлÚpref¡,ÑÛ2prefqÒõ pref¹ÓErprefWÃÔ#z2pref¼ÈÕŽ˜PprefòÖ¾øpref¬«×Pbpref"[زpref“ßÙùÉ pref(ÚDÌÊpref½!ÛsÎpref´Ü^¨pref¼óÝE–.prefýYÞ¼Þ pref?ßtæ"pref ’àÆprefvVáupref·â}Â’pref°ãfjpref{U伎mstpRàpref'*å,Xprefú¤æ2hprefÌØç³`ðprefE@èBpref7ÈéÎ|prefÅìêRúpref¢Ië¬ pref%Jì#ØprefÛíÐpref»~î›¶>pref aïSpref±ðÚxÚpref.{ñƒ2pref^pòW prefÔbó{pref+Çô×2prefÆûõ†6PprefX4ö‹†pref‹÷›ôbprefˆÔøSprefáùS0 pref:ú–úÊpref6Žû pref~fü£¨¨pref1öý»ê.prefÅâþ8| pref1ìÿC”"prefS$[<pref éŒ prefg²—Ä’pref…nsJjpref·=}pref2eprefpÆ# prefG¾#! pref~#- prefz»®PprefÅ-o:prefW³· pref,£#¬ prefÿ<#¸ prefNÐPprefÄgÕ`prefʤœV prefm<¤P preff¤\ pref Žö`prefèUûppref´›µ pref¿ C¶ prefQ•!L pref§L"ÒÎpref(¸#×Þprefî$<` prefR%pprefy4Œ,pref½ß5L" ºprefDK6áprefQˆ7U®pref_U86)prefsé9  pref\¨: † pref½;  prefØ4< prefãÝ="prefp> M>prefŒ? .pref*@8EÚprefšùA ‹bprefÛB pref7;C ´ pref·úD < pref"'E(vÄprefÒ¡F1prefëaG[¨prefÍÙH í.pref ËI<¯ prefP…JQ"prefÐ#Kspref3´L‡pref$ËM $ pref;°N’prefWYOXPjprefEaPIÀprefÙQ=pref?ŽR‚,ppref¼ßSaþpref ¿TlÜ ºprefIU:prefÉØVNÐpref³rW>»pref'¬XWprefÒjY 0 prefh¹Zk preft[wpref x\F‚prefÉ] >pref…è^¡prefr_XºÚpref™‰`¿bprefPa¯pref ´b pref0¸cà pref›¸d/¿ÄprefCúe^”prefÇŒfZ”¨pref¿ŸgG.prefOehh prefsMi­"pref¤¥jpref1^kprefðËl# prefœ•m2+’prefÚWnŠœjprefõolibmikmod-3.1.16/macintosh/Makefile.am0000644000000000000000000000040012222471454016265 0ustar rootrootEXTRA_DIST = README INSTALL \ config.h mikmod.h.in mikmod.h mikmod_build.h mikmod_build.h.in \ cwmikmodheaders.h \ libmikmodversion.r \ libmikmod.mcp \ BuildLibmikmod libmikmod.make libmikmod.exp \ strcasecmp.c strdup.c libmikmod-3.1.16/macintosh/libmikmod.make0000644000000000000000000001576010003535131017042 0ustar rootroot # Makefile for MPW (Macintosh Programmers Workshop by Apple) # # File: libmikmod.make # Target: libmikmod # # Build with: make -f libmikmod.make libmikmod # # NOTE: Experimental! Only tried with Metrowerks compilers so far # # Written by Anders F Bjšrklund MAKEFILE = libmikmod.make libs = :libs: MikModDir = "::" LibName68k = "libmikmod68K.dll" StubName68k = "libmikmod68K.lib" LibNamePPC = "libmikmodPPC.dll" StubNamePPC = "libmikmodPPC.lib" LibNameFat = "libmikmod" StubNameFat = "libmikmodStub" Header = "mikmod.h" #------------------------------------------------------------------------------ # Choose your tools and libraries: # Metrowerks CodeWarrior: CC68K = MWC68K CCPPC = MWCPPC LINK68K = MWLink68k LINKPPC = MWLinkPPC IncLibraries68k = ¶ "{SharedLibraries}InterfaceLib" ¶ "{MW68KLibraries}MathLibCFM68K (4i_8d).Lib" ¶ "{MW68KLibraries}MSL AppRuntimeCFM68K.Lib" ¶ "{MW68KLibraries}MSL MWRuntimeLibCFM68K" ¶ "{MW68KLibraries}MSL C.CFM68K Fa(4i_8d).Lib" ¶ "{MW68KLibraries}MSL SIOUX.CFM68K.Lib" IncLibrariesPPC = ¶ "{SharedLibraries}InterfaceLib" ¶ "{SharedLibraries}MathLib" ¶ "{SharedLibraries}SoundLib" ¶ "{MWPPCLibraries}MSL RuntimePPC.Lib" ¶ "{MWPPCLibraries}MSL C.PPC.Lib" ¶ "{MWPPCLibraries}MSL SIOUX.PPC.Lib" # provided by Apple : (these compilers/linkers are so far untested) #CC68K = SC #CCPPC = MrC #LINK68K = Lib #LINKPPC = PPCLink #IncLibraries68k = ¶ # "{SharedLibraries}InterfaceLib" ¶ # "{SharedLibraries}StdCLib" ¶ # "{SharedLibraries}MathLib" ¶ # "{SharedLibraries}SoundLib" ¶ # "{PPCLibraries}StdCRuntime.o" ¶ # "{PPCLibraries}PPCCRuntime.o" ¶ # "{PPCLibraries}PPCToolLibs.o" #IncLibrariesPPC = ¶ # "{SharedLibraries}InterfaceLib" # "{SharedLibraries}StdCLib" ¶ # "{CFM68KLibraries}NuMathLib.o" ¶ # "{CFM68KLibraries}NuMacRuntime.o" ¶ # "{CFM68KLibraries}NuToolLibs.o" ¶ #------------------------------------------------------------------------------ Prefix = -prefix "cwmikmodheaders.h" Export = "libmikmod.exp" Headers = -i "{MikModDir}include:" ¶ -i "{MikModDir}playercode:" Sources = ":" ¶ "{MikModDir}playercode:" ¶ "{MikModDir}loaders:" ¶ "{MikModDir}drivers:" ¶ "{MikModDir}mmio:" obj = :obj: objppc = :objppc: Warnings = -w noimplicitconv,nopossible,nounusedvar,nounusedarg Options = -EOL -mpw_pointers SymOptions = -sym off # turn this on to debug with SADE/R2Db Debug68kOptions = -opt on # turn this off to build debug 68K code DebugPPCOptions = -opt speed # turn this off to build debug PowerPC code LibOptions = -t 'shlb' -c 'cfmg' -xm s LibOptions68k = {LibOptions} -model CFMflatdf LibOptionsPPC = {LibOptions} IncludesFolders = {Prefix} -nosyspath {Headers} CCOptions = {IncludesFolders} {Options} {Warnings} {SymOptions} CC68KOptions = {CCOptions} {Debug68kOptions} -model cfmflatdf CCPPCOptions = {CCOptions} {DebugPPCOptions} #------------------------------------------------------------------------------ # These are modified default build rules. #------------------------------------------------------------------------------ {obj} Ä {Sources} .c.o Ä .c Echo "# compiling "{Default}.c" using {CC68K}" {CC68K} {CC68KOptions} {DepDir}{Default}.c -o {TargDir}{Default}.c.o {objppc} Ä {Sources} .c.x Ä .c Echo "# compiling "{Default}.c" using {CCPPC}" {CCPPC} {CCPPCOptions} {DepDir}{Default}.c -o {TargDir}{Default}.c.x #------------------------------------------------------------------------------ # These are the objects that we want to include in the library. #------------------------------------------------------------------------------ LibObjects68k = ¶ {obj}strdup.c.o ¶ {obj}mmalloc.c.o ¶ {obj}mmerror.c.o ¶ {obj}mmio.c.o ¶ {obj}mdreg.c.o ¶ {obj}mdriver.c.o ¶ {obj}mlreg.c.o ¶ {obj}mlutil.c.o ¶ {obj}mloader.c.o ¶ {obj}mplayer.c.o ¶ {obj}munitrk.c.o ¶ {obj}mwav.c.o ¶ {obj}npertab.c.o ¶ {obj}sloader.c.o ¶ {obj}virtch_common.c.o ¶ {obj}virtch.c.o ¶ {obj}virtch2.c.o ¶ {obj}load_669.c.o ¶ {obj}load_amf.c.o ¶ {obj}load_dsm.c.o ¶ {obj}load_far.c.o ¶ {obj}load_gdm.c.o ¶ {obj}load_imf.c.o ¶ {obj}load_it.c.o ¶ {obj}load_m15.c.o ¶ {obj}load_med.c.o ¶ {obj}load_mod.c.o ¶ {obj}load_mtm.c.o ¶ {obj}load_s3m.c.o ¶ {obj}load_stm.c.o ¶ {obj}load_stx.c.o ¶ {obj}load_ult.c.o ¶ {obj}load_uni.c.o ¶ {obj}load_xm.c.o ¶ {obj}drv_nos.c.o ¶ {obj}drv_stdout.c.o ¶ {obj}drv_raw.c.o ¶ {obj}drv_wav.c.o ¶ {obj}drv_mac.c.o LibObjectsPPC = ¶ {objppc}strdup.c.x ¶ {objppc}mmalloc.c.x ¶ {objppc}mmerror.c.x ¶ {objppc}mmio.c.x ¶ {objppc}mdreg.c.x ¶ {objppc}mdriver.c.x ¶ {objppc}mlreg.c.x ¶ {objppc}mlutil.c.x ¶ {objppc}mloader.c.x ¶ {objppc}mplayer.c.x ¶ {objppc}munitrk.c.x ¶ {objppc}mwav.c.x ¶ {objppc}npertab.c.x ¶ {objppc}sloader.c.x ¶ {objppc}virtch_common.c.x ¶ {objppc}virtch.c.x ¶ {objppc}virtch2.c.x ¶ {objppc}load_669.c.x ¶ {objppc}load_amf.c.x ¶ {objppc}load_dsm.c.x ¶ {objppc}load_far.c.x ¶ {objppc}load_gdm.c.x ¶ {objppc}load_imf.c.x ¶ {objppc}load_it.c.x ¶ {objppc}load_m15.c.x ¶ {objppc}load_med.c.x ¶ {objppc}load_mod.c.x ¶ {objppc}load_mtm.c.x ¶ {objppc}load_s3m.c.x ¶ {objppc}load_stm.c.x ¶ {objppc}load_stx.c.x ¶ {objppc}load_ult.c.x ¶ {objppc}load_uni.c.x ¶ {objppc}load_xm.c.x ¶ {objppc}drv_nos.c.x ¶ {objppc}drv_stdout.c.x ¶ {objppc}drv_raw.c.x ¶ {objppc}drv_wav.c.x ¶ {objppc}drv_mac.c.x #------------------------------------------------------------------------------ # These are the targets. #------------------------------------------------------------------------------ ALL Ä {LibNameFat} {StubNameFat} {Header} {Header} Ä Duplicate -y 'mikmod_build.h' {Header} {LibName68k} ÄÄ {LibObjects68k} Echo "# Building 680X0 shared library" {LINK68K} {LibObjects68k} {IncLibraries68k} {SymOptions} {LibOptions68k} -f {Export} -o {Targ} {StubName68k} Ä {Export} MakeStub -arch m68k {Export} -o {StubName68k} {LibNamePPC} ÄÄ {LibObjectsPPC} Echo "# Building PowerPC shared library" {LINKPPC} {LibObjectsPPC} {IncLibrariesPPC} {SymOptions} {LibOptionsPPC} -f {Export} -o {Targ} {StubNamePPC} Ä {Export} MakeStub -arch pwpc {Export} -o {StubNamePPC} {LibNameFat} Ä {MAKEFILE} {LibName68k} {LibNamePPC} Echo "# Building Fat shared library (merging)" Duplicate -y {LibName68k} {LibNameFat} MergeFragment {LibNamePPC} {LibNameFat} Delete -i {LibName68k} Delete -i {LibNamePPC} Rez 'libmikmodversion.r' -append -o {LibNameFat} SetFile -a C {LibNameFat} {StubNameFat} Ä {Export} {StubName68k} {StubNamePPC} MakeStub -arch fat {Export} -o {StubNameFat} Delete -i {StubName68k} Delete -i {StubNamePPC} libmikmod-3.1.16/macintosh/mikmod_build.h.in0000644000000000000000000000000010003535131017426 0ustar rootrootlibmikmod-3.1.16/macintosh/cwmikmodheaders.h0000644000000000000000000000054610003535131017547 0ustar rootroot /* use pre-compiled headers, for speed */ #if __MWERKS__ #define MSL_USE_PRECOMPILED_HEADERS 1 #include #endif /* standard headers */ #include #include /* defines */ #define HAVE_CONFIG_H 1 /* missing function prototypes */ extern char *strdup(const char *); extern int strcasecmp(const char *,const char *); libmikmod-3.1.16/macintosh/config.h0000644000000000000000000000332112262033674015656 0ustar rootroot/* config.h.in. Generated for macintosh builds. */ /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to `unsigned' if doesn't define. */ /* #undef size_t */ /* Define if you have the ANSI C header files. */ /* #undef STDC_HEADERS */ /* Define if you want support for output to stdout */ /* #undef DRV_STDOUT */ /* Define if your system supports binary pipes (i.e. Unix) */ /* #undef DRV_PIPE */ /* Define if you want a raw pcm data file writer driver */ #define DRV_RAW 1 /* Define if you want a .wav file writer driver */ #define DRV_WAV 1 /* Define if the Macintosh driver is compiled */ #define DRV_MAC 1 /* Define if you want a debug version of the library */ /* #undef MIKMOD_DEBUG */ /* Define if you want runtime dynamic linking of ALSA and EsounD drivers */ /* #undef MIKMOD_DYNAMIC */ /* Define if your system provides POSIX.4 threads */ /* #undef HAVE_PTHREAD */ /* Define if your system defines random(3) and srandom(3) in math.h instead of stdlib.h */ /* #undef SRANDOM_IN_MATH_H */ /* Define if you have the srandom function. */ /* #undef HAVE_SRANDOM */ /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ /* #undef HAVE_MALLOC_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_IOCTL_H */ /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 /* Name of package */ #define PACKAGE "libmikmod" /* Version number of package */ #define VERSION "3.1.16" libmikmod-3.1.16/win32/0000755000000000000000000000000012262343244013213 5ustar rootrootlibmikmod-3.1.16/win32/Makefile.in0000644000000000000000000002632612260336530015267 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = win32 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/include/mikmod.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = mikmod.h mikmod_build.h CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ # autotools discourages adding directories to EXTRA_DIST, # but I'm doing it to indclude the MSVC project files. EXTRA_DIST = Makefile.lcc Makefile.mingw \ mikmod.def mikmod.h mikmod_build.h mikmod.h.in mikmod_build.h.in \ README MSVC6 VS2005 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign win32/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign win32/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mikmod.h: $(top_builddir)/config.status $(top_srcdir)/include/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mikmod_build.h: $(top_builddir)/config.status $(top_srcdir)/include/mikmod.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/win32/Makefile.lcc0000644000000000000000000001770612260322070015416 0ustar rootroot# Makefile template for use under win32 # for the compiler system lcc-win32. # Your compiler utilities here CC=lcc.exe LIB=lcclib.exe LINK=lcclnk.exe DRIVER_FLAGS= /DDRV_DS /DDRV_WIN /DDRV_WAV /DDRV_RAW # If you want to build a dynamic library, uncomment the following two lines # and comment the next two. #LIBS=$(DLLNAME) #CFLAGS= -A /DWIN32 /DMIKMOD_BUILD /DDLL_EXPORT /DHAVE_FCNTL_H /DHAVE_MALLOC_H /DHAVE_LIMITS_H $(DRIVER_FLAGS) LIBS=$(LIBSTATIC) CFLAGS= -A /DWIN32 /DMIKMOD_BUILD /DMIKMOD_STATIC /DHAVE_FCNTL_H /DHAVE_MALLOC_H /DHAVE_LIMITS_H $(DRIVER_FLAGS) # Compile command COMPILE=$(CC) -errout=err.out $(CFLAGS) /I..\include /I.. /I..\win32 .SUFFIXES: .SUFFIXES: .o .c LIBNAME=mikmod.lib DLLNAME=mikmod.dll LIBSTATIC=mikmod_static.lib DRIVER_OBJ=drv_ds.o drv_win.o OBJ=$(DRIVER_OBJ) \ drv_nos.o drv_raw.o drv_stdout.o drv_wav.o \ load_669.o load_amf.o load_dsm.o load_far.o load_gdm.o load_it.o \ load_imf.o load_m15.o load_med.o load_mod.o load_mtm.o load_okt.o \ load_s3m.o load_stm.o load_stx.o load_ult.o load_uni.o load_xm.o \ mmalloc.o mmerror.o mmio.o \ mdriver.o mdreg.o mloader.o mlreg.o mlutil.o mplayer.o munitrk.o mwav.o \ npertab.o sloader.o virtch.o virtch2.o virtch_common.o all: $(LIBS) clean: FOR %F IN ( $(LIBNAME) $(LIBSTATIC) $(DLLNAME) mikmod.exp *.o ) DO IF EXIST %F ERASE %F distclean: FOR %F IN ( ..\include\mikmod.h ..\win32\mikmod_build.h Makefile ) DO IF EXIST %F ERASE %F # lcc doesn't seem to do well without a *.def with dll exports $(DLLNAME): $(OBJ) mikmod.def $(LINK) /DLL /NOUNDERSCORES /OUT:$(DLLNAME) *.o mikmod.def dsound.lib winmm.lib $(LIBSTATIC): $(OBJ) $(LIB) /OUT:$(LIBSTATIC) *.o ..\include\mikmod.h ..\win32\mikmod_build.h: mikmod_build.h COPY mikmod_build.h ..\win32\mikmod_build.h COPY mikmod_build.h ..\include\mikmod.h drv_ds.o: ..\drivers\drv_ds.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_ds.c drv_nos.o: ..\drivers\drv_nos.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_nos.c drv_raw.o: ..\drivers\drv_raw.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_raw.c drv_stdout.o: ..\drivers\drv_stdout.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_stdout.c drv_wav.o: ..\drivers\drv_wav.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_wav.c drv_win.o: ..\drivers\drv_win.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\drivers\drv_win.c load_669.o: ..\loaders\load_669.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_669.c load_amf.o: ..\loaders\load_amf.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_amf.c load_dsm.o: ..\loaders\load_dsm.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_dsm.c load_far.o: ..\loaders\load_far.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_far.c load_gdm.o: ..\loaders\load_gdm.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_gdm.c load_it.o: ..\loaders\load_it.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_it.c load_imf.o: ..\loaders\load_imf.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_imf.c load_m15.o: ..\loaders\load_m15.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_m15.c load_med.o: ..\loaders\load_med.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_med.c load_mod.o: ..\loaders\load_mod.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_mod.c load_mtm.o: ..\loaders\load_mtm.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_mtm.c load_okt.o: ..\loaders\load_okt.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_okt.c load_s3m.o: ..\loaders\load_s3m.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_s3m.c load_stm.o: ..\loaders\load_stm.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_stm.c load_stx.o: ..\loaders\load_stx.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_stx.c load_ult.o: ..\loaders\load_ult.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_ult.c load_uni.o: ..\loaders\load_uni.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_uni.c load_xm.o: ..\loaders\load_xm.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\loaders\load_xm.c mmalloc.o: ..\mmio\mmalloc.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\mmio\mmalloc.c mmerror.o: ..\mmio\mmerror.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\mmio\mmerror.c mmio.o: ..\mmio\mmio.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\mmio\mmio.c mdriver.o: ..\playercode\mdriver.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mdriver.c mdreg.o: ..\playercode\mdreg.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mdreg.c mloader.o: ..\playercode\mloader.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mloader.c mlreg.o: ..\playercode\mlreg.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mlreg.c mlutil.o: ..\playercode\mlutil.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mlutil.c mplayer.o: ..\playercode\mplayer.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mplayer.c munitrk.o: ..\playercode\munitrk.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\munitrk.c mwav.o: ..\playercode\mwav.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\mwav.c npertab.o: ..\playercode\npertab.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\npertab.c sloader.o: ..\playercode\sloader.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\sloader.c virtch.o: ..\playercode\virtch.c ..\playercode\virtch_common.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\virtch.c virtch2.o: ..\playercode\virtch2.c ..\playercode\virtch_common.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\virtch2.c virtch_common.o: ..\playercode\virtch_common.c \ ..\win32\mikmod_build.h ..\include\mikmod_internals.h $(COMPILE) /Fo$@ ..\playercode\virtch_common.c libmikmod-3.1.16/win32/mikmod.h0000644000000000000000000006314212262033674014655 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library include file ==============================================================================*/ #ifndef _MIKMOD_H_ #define _MIKMOD_H_ #include #include #ifdef __cplusplus extern "C" { #endif /* * ========== Compiler magic for shared libraries * * ========== NOTE TO WINDOWS DEVELOPERS: * If you are compiling for Windows and will link to the static library * (libmikmod.a with MinGW, or mikmod_static.lib with MSVC or LCC, etc), * you must define MIKMOD_STATIC in your project. Otherwise, dllimport * will be assumed. */ #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MIKMOD_BUILD) && defined(DLL_EXPORT) /* building libmikmod as a dll for windows */ # define MIKMODAPI __declspec(dllexport) # elif defined(MIKMOD_BUILD) || defined(MIKMOD_STATIC) /* building or using static libmikmod for windows */ # define MIKMODAPI # else # define MIKMODAPI __declspec(dllimport) /* using libmikmod dll for windows */ # endif /* SYM_VISIBILITY should be defined if both the compiler * and the target support the visibility attributes. the * configury does that automatically. for the standalone * makefiles, etc, the developer should add the required * flags, i.e.: -DSYM_VISIBILITY -fvisibility=hidden */ #elif defined(MIKMOD_BUILD) && defined(SYM_VISIBILITY) # define MIKMODAPI __attribute__((visibility("default"))) #else # define MIKMODAPI #endif /* * ========== Library version */ #define LIBMIKMOD_VERSION_MAJOR 3L #define LIBMIKMOD_VERSION_MINOR 1L #define LIBMIKMOD_REVISION 16L #define LIBMIKMOD_VERSION \ ((LIBMIKMOD_VERSION_MAJOR<<16)| \ (LIBMIKMOD_VERSION_MINOR<< 8)| \ (LIBMIKMOD_REVISION)) MIKMODAPI extern long MikMod_GetVersion(void); /* * ========== Platform independent-type definitions */ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include /* Avoid conflicts with windef.h */ #define SBYTE _mm_SBYTE #define UBYTE _mm_UBYTE #define SWORD _mm_SWORD #define UWORD _mm_UWORD #define SLONG _mm_SLONG #define ULONG _mm_ULONG #define BOOL _mm_BOOL #define CHAR _mm_CHAR #endif #if defined(__OS2__)||defined(__EMX__) #define INCL_DOSSEMAPHORES #include #else typedef char CHAR; #endif #if defined (_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) /* 64 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed int SLONG; /* 4 bytes, signed */ typedef unsigned int ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #else /* 32 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed long SLONG; /* 4 bytes, signed */ #if !defined(__OS2__)&&!defined(__EMX__) typedef unsigned long ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #endif #endif /* * ========== Error codes */ enum { MMERR_OPENING_FILE = 1, MMERR_OUT_OF_MEMORY, MMERR_DYNAMIC_LINKING, MMERR_SAMPLE_TOO_BIG, MMERR_OUT_OF_HANDLES, MMERR_UNKNOWN_WAVE_TYPE, MMERR_LOADING_PATTERN, MMERR_LOADING_TRACK, MMERR_LOADING_HEADER, MMERR_LOADING_SAMPLEINFO, MMERR_NOT_A_MODULE, MMERR_NOT_A_STREAM, MMERR_MED_SYNTHSAMPLES, MMERR_ITPACK_INVALID_DATA, MMERR_DETECTING_DEVICE, MMERR_INVALID_DEVICE, MMERR_INITIALIZING_MIXER, MMERR_OPENING_AUDIO, MMERR_8BIT_ONLY, MMERR_16BIT_ONLY, MMERR_STEREO_ONLY, MMERR_ULAW, MMERR_NON_BLOCK, MMERR_AF_AUDIO_PORT, MMERR_AIX_CONFIG_INIT, MMERR_AIX_CONFIG_CONTROL, MMERR_AIX_CONFIG_START, MMERR_GUS_SETTINGS, MMERR_GUS_RESET, MMERR_GUS_TIMER, MMERR_HP_SETSAMPLESIZE, MMERR_HP_SETSPEED, MMERR_HP_CHANNELS, MMERR_HP_AUDIO_OUTPUT, MMERR_HP_AUDIO_DESC, MMERR_HP_BUFFERSIZE, MMERR_OSS_SETFRAGMENT, MMERR_OSS_SETSAMPLESIZE, MMERR_OSS_SETSTEREO, MMERR_OSS_SETSPEED, MMERR_SGI_SPEED, MMERR_SGI_16BIT, MMERR_SGI_8BIT, MMERR_SGI_STEREO, MMERR_SGI_MONO, MMERR_SUN_INIT, MMERR_OS2_MIXSETUP, MMERR_OS2_SEMAPHORE, MMERR_OS2_TIMER, MMERR_OS2_THREAD, MMERR_DS_PRIORITY, MMERR_DS_BUFFER, MMERR_DS_FORMAT, MMERR_DS_NOTIFY, MMERR_DS_EVENT, MMERR_DS_THREAD, MMERR_DS_UPDATE, MMERR_WINMM_HANDLE, MMERR_WINMM_ALLOCATED, MMERR_WINMM_DEVICEID, MMERR_WINMM_FORMAT, MMERR_WINMM_UNKNOWN, MMERR_MAC_SPEED, MMERR_MAC_START, ___filler_MMERR=(MMERR_MAC_START+22),/* 65-86 exist only in libmikmod3. */ MMERR_ALSA_NOCONFIG, MMERR_ALSA_SETPARAMS, MMERR_ALSA_SETFORMAT, MMERR_ALSA_SETRATE, MMERR_ALSA_SETCHANNELS, MMERR_ALSA_BUFFERSIZE, MMERR_ALSA_PCM_START, MMERR_ALSA_PCM_WRITE, MMERR_ALSA_PCM_RECOVER, MMERR_MAX }; /* * ========== Error handling */ typedef void (MikMod_handler)(void); typedef MikMod_handler *MikMod_handler_t; MIKMODAPI extern int MikMod_errno; MIKMODAPI extern BOOL MikMod_critical; MIKMODAPI extern char *MikMod_strerror(int); MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t); /* * ========== Library initialization and core functions */ struct MDRIVER; MIKMODAPI extern void MikMod_RegisterAllDrivers(void); MIKMODAPI extern CHAR* MikMod_InfoDriver(void); MIKMODAPI extern void MikMod_RegisterDriver(struct MDRIVER*); MIKMODAPI extern int MikMod_DriverFromAlias(CHAR*); MIKMODAPI extern int MikMod_Init(CHAR*); MIKMODAPI extern void MikMod_Exit(void); MIKMODAPI extern int MikMod_Reset(CHAR*); MIKMODAPI extern int MikMod_SetNumVoices(int,int); MIKMODAPI extern BOOL MikMod_Active(void); MIKMODAPI extern int MikMod_EnableOutput(void); MIKMODAPI extern void MikMod_DisableOutput(void); MIKMODAPI extern void MikMod_Update(void); MIKMODAPI extern BOOL MikMod_InitThreads(void); MIKMODAPI extern void MikMod_Lock(void); MIKMODAPI extern void MikMod_Unlock(void); /* * ========== Reader, Writer */ typedef struct MREADER { int (*Seek)(struct MREADER*,long,int); long (*Tell)(struct MREADER*); BOOL (*Read)(struct MREADER*,void*,size_t); int (*Get)(struct MREADER*); BOOL (*Eof)(struct MREADER*); } MREADER; typedef struct MWRITER { int (*Seek)(struct MWRITER*, long, int); long (*Tell)(struct MWRITER*); BOOL (*Write)(struct MWRITER*, void*, size_t); int (*Put)(struct MWRITER*, int); } MWRITER; /* * ========== Samples */ /* Sample playback should not be interrupted */ #define SFX_CRITICAL 1 /* Sample format [loading and in-memory] flags: */ #define SF_16BITS 0x0001 #define SF_STEREO 0x0002 #define SF_SIGNED 0x0004 #define SF_BIG_ENDIAN 0x0008 #define SF_DELTA 0x0010 #define SF_ITPACKED 0x0020 #define SF_FORMATMASK 0x003F /* General Playback flags */ #define SF_LOOP 0x0100 #define SF_BIDI 0x0200 #define SF_REVERSE 0x0400 #define SF_SUSTAIN 0x0800 #define SF_PLAYBACKMASK 0x0C00 /* Module-only Playback Flags */ #define SF_OWNPAN 0x1000 #define SF_UST_LOOP 0x2000 #define SF_EXTRAPLAYBACKMASK 0x3000 /* Panning constants */ #define PAN_LEFT 0 #define PAN_HALFLEFT 64 #define PAN_CENTER 128 #define PAN_HALFRIGHT 192 #define PAN_RIGHT 255 #define PAN_SURROUND 512 /* panning value for Dolby Surround */ typedef struct SAMPLE { SWORD panning; /* panning (0-255 or PAN_SURROUND) */ ULONG speed; /* Base playing speed/frequency of note */ UBYTE volume; /* volume 0-64 */ UWORD inflags; /* sample format on disk */ UWORD flags; /* sample format in memory */ ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ ULONG susbegin; /* sustain loop begin (in samples) \ Not Supported */ ULONG susend; /* sustain loop end / Yet! */ /* Variables used by the module player only! (ignored for sound effects) */ UBYTE globvol; /* global volume */ UBYTE vibflags; /* autovibrato flag stuffs */ UBYTE vibtype; /* Vibratos moved from INSTRUMENT to SAMPLE */ UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; CHAR* samplename; /* name of the sample */ /* Values used internally only */ UWORD avibpos; /* autovibrato pos [player use] */ UBYTE divfactor; /* for sample scaling, maintains proper period slides */ ULONG seekpos; /* seek position in file */ SWORD handle; /* sample handle used by individual drivers */ } SAMPLE; /* Sample functions */ MIKMODAPI extern SAMPLE *Sample_Load(CHAR*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern void Voice_SetVolume(SBYTE,UWORD); MIKMODAPI extern UWORD Voice_GetVolume(SBYTE); MIKMODAPI extern void Voice_SetFrequency(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetFrequency(SBYTE); MIKMODAPI extern void Voice_SetPanning(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetPanning(SBYTE); MIKMODAPI extern void Voice_Play(SBYTE,SAMPLE*,ULONG); MIKMODAPI extern void Voice_Stop(SBYTE); MIKMODAPI extern BOOL Voice_Stopped(SBYTE); MIKMODAPI extern SLONG Voice_GetPosition(SBYTE); MIKMODAPI extern ULONG Voice_RealVolume(SBYTE); /* * ========== Internal module representation (UniMod) */ /* Instrument definition - for information only, the only field which may be of use in user programs is the name field */ /* Instrument note count */ #define INSTNOTES 120 /* Envelope point */ typedef struct ENVPT { SWORD pos; SWORD val; } ENVPT; /* Envelope point count */ #define ENVPOINTS 32 /* Instrument structure */ typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS]; } INSTRUMENT; struct MP_CONTROL; struct MP_VOICE; /* Module definition */ /* maximum master channels supported */ #define UF_MAXCHAN 64 /* Module flags */ #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */ #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */ #define UF_INST 0x0004 /* Instruments are used */ #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */ #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */ #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */ #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */ #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */ #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */ #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */ #define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */ typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */ struct INSTRUMENT* instruments; /* all instruments */ struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */ struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */ struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */ } MODULE; /* * ========== Module loaders */ struct MLOADER; MIKMODAPI extern CHAR* MikMod_InfoLoader(void); MIKMODAPI extern void MikMod_RegisterAllLoaders(void); MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*); MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */ MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */ MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */ MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */ MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */ MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */ MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */ MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */ MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */ MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */ MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */ MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */ MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */ MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */ /* * ========== Module player */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*); MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*); MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern void Player_Stop(void); MIKMODAPI extern void Player_TogglePause(void); MIKMODAPI extern BOOL Player_Paused(void); MIKMODAPI extern void Player_NextPosition(void); MIKMODAPI extern void Player_PrevPosition(void); MIKMODAPI extern void Player_SetPosition(UWORD); MIKMODAPI extern BOOL Player_Muted(UBYTE); MIKMODAPI extern void Player_SetVolume(SWORD); MIKMODAPI extern MODULE* Player_GetModule(void); MIKMODAPI extern void Player_SetSpeed(UWORD); MIKMODAPI extern void Player_SetTempo(UWORD); MIKMODAPI extern void Player_Unmute(SLONG,...); MIKMODAPI extern void Player_Mute(SLONG,...); MIKMODAPI extern void Player_ToggleMute(SLONG,...); MIKMODAPI extern int Player_GetChannelVoice(UBYTE); MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE); typedef void (*MikMod_player_t)(void); MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t); #define MUTE_EXCLUSIVE 32000 #define MUTE_INCLUSIVE 32001 /* * ========== Drivers */ enum { MD_MUSIC = 0, MD_SNDFX }; enum { MD_HARDWARE = 0, MD_SOFTWARE }; /* Mixing flags */ /* These ones take effect only after MikMod_Init or MikMod_Reset */ #define DMODE_16BITS 0x0001 /* enable 16 bit output */ #define DMODE_STEREO 0x0002 /* enable stereo output */ #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */ #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */ #define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */ /* These take effect immediately. */ #define DMODE_SURROUND 0x0100 /* enable surround sound */ #define DMODE_INTERP 0x0200 /* enable interpolation */ #define DMODE_REVERSE 0x0400 /* reverse stereo */ struct SAMPLOAD; typedef struct MDRIVER { struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR* Alias; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); int (*Init) (void); void (*Exit) (void); int (*Reset) (void); int (*SetNumVoices) (void); int (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE); } MDRIVER; /* These variables can be changed at ANY time and results will be immediate */ MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */ MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */ MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */ MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */ MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) */ /* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */ MIKMODAPI extern UWORD md_device; /* device */ MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */ MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above */ /* The following variable should not be changed! */ MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. */ /* Known drivers list */ MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */ MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */ MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */ MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */ MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */ MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */ MIKMODAPI extern struct MDRIVER drv_sam9407;/* Linux sam9407 driver */ MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */ MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */ MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */ MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */ MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */ MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */ MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */ MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */ MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */ MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */ MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */ MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */ MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */ /*========== Virtual channel mixer interface (for user-supplied drivers only) */ MIKMODAPI extern int VC_Init(void); MIKMODAPI extern void VC_Exit(void); MIKMODAPI extern int VC_SetNumVoices(void); MIKMODAPI extern ULONG VC_SampleSpace(int); MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*); MIKMODAPI extern int VC_PlayStart(void); MIKMODAPI extern void VC_PlayStop(void); MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int); MIKMODAPI extern void VC_SampleUnload(SWORD); MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG); MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG); MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD); MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE); MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE); MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE); MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); MIKMODAPI extern void VC_VoiceStop(UBYTE); MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE); MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE); MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/win32/Makefile.mingw0000644000000000000000000002164712260322070015775 0ustar rootroot# Makefile for targetting win32/win64 # Requires a native or cross MinGW or MinGW-w64 compiler-set # and GNU make (gmake or mingw32-make or whatever) ifeq ($(CROSS),) CC=gcc AS=as AR=ar RANLIB=ranlib else CC=$(CROSS)-gcc AS=$(CROSS)-as AR=$(CROSS)-ar RANLIB=$(CROSS)-ranlib endif #RM=del RM=rm -f CPPFLAGS=-DMIKMOD_BUILD LDLIBS= # support for WinMM sound output: LDLIBS+=-lwinmm CPPFLAGS+=-DDRV_WIN # support for Direct Sound output: LDLIBS+=-ldsound CPPFLAGS+=-DDRV_DS # support for wav file output: CPPFLAGS+=-DDRV_WAV # support for output raw data to a file: CPPFLAGS+=-DDRV_RAW # support for output to stdout: #CPPFLAGS+=-DDRV_STDOUT # Compiler flags CPPFLAGS+=-DHAVE_FCNTL_H -DHAVE_MALLOC_H -DHAVE_LIMITS_H CFLAGS=-O2 -Wall CFLAGS+=-ffast-math #CFLAGS+=-g -mthreads LDFLAGS= LDLIBS+=-lm COMPILE=$(CC) -c $(CFLAGS) $(CPPFLAGS) -I../include -I.. -I../win32 .SUFFIXES: .SUFFIXES: .o .c DLL_VER=2 CPPFLAGS_DLL=-DDLL_EXPORT=1 CPPFLAGS_STATIC=-DMIKMOD_STATIC=1 LIBNAME=libmikmod.dll.a LIBSTATIC=libmikmod.a DLLNAME=libmikmod-$(DLL_VER).dll DEFNAME=libmikmod-$(DLL_VER).def LIBS=$(LIBNAME) $(DLLNAME) DRIVER_OBJ=drv_ds.o drv_win.o OBJ=$(DRIVER_OBJ) \ drv_nos.o drv_raw.o drv_stdout.o drv_wav.o \ load_669.o load_amf.o load_dsm.o load_far.o load_gdm.o load_it.o \ load_imf.o load_m15.o load_med.o load_mod.o load_mtm.o load_okt.o \ load_s3m.o load_stm.o load_stx.o load_ult.o load_uni.o load_xm.o \ mmalloc.o mmerror.o mmio.o \ mdriver.o mdreg.o mloader.o mlreg.o mlutil.o mplayer.o munitrk.o mwav.o \ npertab.o sloader.o virtch.o virtch2.o virtch_common.o # mdulaw.o help: @echo "" @echo "Valid targets:" @echo "" @echo " $(MAKE) dll : build dll and import library" @echo " $(MAKE) static : build static library" @echo "" clean: $(RM) $(DLLNAME) $(LIBNAME) $(LIBSTATIC) $(DEFNAME) *.o dll: $(DLLNAME) $(LIBNAME) dll: $(DLLNAME) $(LIBNAME) static: $(LIBSTATIC) static: $(LIBSTATIC) $(DLLNAME): CPPFLAGS+=$(CPPFLAGS_DLL) $(LIBNAME): $(DLLNAME) $(DLLNAME): $(OBJ) $(CC) -shared -o $(DLLNAME) $(OBJ) $(LDFLAGS) $(LDLIBS) \ -Wl,--enable-auto-image-base -Wl,--no-undefined \ -Xlinker --output-def -Xlinker $(DEFNAME) \ -Xlinker --out-implib -Xlinker $(LIBNAME) $(LIBSTATIC): CPPFLAGS+=$(CPPFLAGS_STATIC) $(LIBSTATIC): $(OBJ) $(AR) rc $@ $(OBJ) $(RANLIB) $@ drv_ds.o: ../drivers/drv_ds.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_ds.c -o drv_ds.o drv_nos.o: ../drivers/drv_nos.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_nos.c -o drv_nos.o drv_raw.o: ../drivers/drv_raw.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_raw.c -o drv_raw.o drv_stdout.o: ../drivers/drv_stdout.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_stdout.c -o drv_stdout.o drv_wav.o: ../drivers/drv_wav.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_wav.c -o drv_wav.o drv_win.o: ../drivers/drv_win.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../drivers/drv_win.c -o drv_win.o load_669.o: ../loaders/load_669.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_669.c -o load_669.o load_amf.o: ../loaders/load_amf.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_amf.c -o load_amf.o load_dsm.o: ../loaders/load_dsm.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_dsm.c -o load_dsm.o load_far.o: ../loaders/load_far.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_far.c -o load_far.o load_gdm.o: ../loaders/load_gdm.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_gdm.c -o load_gdm.o load_it.o: ../loaders/load_it.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_it.c -o load_it.o load_imf.o: ../loaders/load_imf.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_imf.c -o load_imf.o load_m15.o: ../loaders/load_m15.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_m15.c -o load_m15.o load_med.o: ../loaders/load_med.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_med.c -o load_med.o load_mod.o: ../loaders/load_mod.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_mod.c -o load_mod.o load_mtm.o: ../loaders/load_mtm.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_mtm.c -o load_mtm.o load_okt.o: ../loaders/load_okt.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_okt.c -o load_okt.o load_s3m.o: ../loaders/load_s3m.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_s3m.c -o load_s3m.o load_stm.o: ../loaders/load_stm.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_stm.c -o load_stm.o load_stx.o: ../loaders/load_stx.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_stx.c -o load_stx.o load_ult.o: ../loaders/load_ult.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_ult.c -o load_ult.o load_uni.o: ../loaders/load_uni.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_uni.c -o load_uni.o load_xm.o: ../loaders/load_xm.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../loaders/load_xm.c -o load_xm.o mmalloc.o: ../mmio/mmalloc.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../mmio/mmalloc.c -o mmalloc.o mmerror.o: ../mmio/mmerror.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../mmio/mmerror.c -o mmerror.o mmio.o: ../mmio/mmio.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../mmio/mmio.c -o mmio.o mdriver.o: ../playercode/mdriver.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mdriver.c -o mdriver.o mdreg.o: ../playercode/mdreg.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mdreg.c -o mdreg.o mdulaw.o: ../playercode/mdulaw.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mdulaw.c -o mdulaw.o mloader.o: ../playercode/mloader.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mloader.c -o mloader.o mlreg.o: ../playercode/mlreg.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mlreg.c -o mlreg.o mlutil.o: ../playercode/mlutil.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mlutil.c -o mlutil.o mplayer.o: ../playercode/mplayer.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mplayer.c -o mplayer.o munitrk.o: ../playercode/munitrk.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/munitrk.c -o munitrk.o mwav.o: ../playercode/mwav.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/mwav.c -o mwav.o npertab.o: ../playercode/npertab.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/npertab.c -o npertab.o sloader.o: ../playercode/sloader.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/sloader.c -o sloader.o virtch.o: ../playercode/virtch.c ../playercode/virtch_common.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/virtch.c -o virtch.o virtch2.o: ../playercode/virtch2.c ../playercode/virtch_common.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/virtch2.c -o virtch2.o virtch_common.o: ../playercode/virtch_common.c \ ../win32/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) ../playercode/virtch_common.c -o virtch_common.o libmikmod-3.1.16/win32/README0000644000000000000000000000713112255576504014106 0ustar rootroot Hello folks ! This is libmikmod, version 3.1.16, a portable sound library for Unix. Check out the file 'NEWS' for more history information. >> BUILDING LIBMIKMOD --------------------- - If you're not building libmikmod for Windows, then you're lost in the sources. Go up one directory, and read the main README file. So, you're on an angry fruit salad Windows system, aren't you ? With those so cute icons and an overflowed system tray ? Currently, libmikmod can be build under Windows with the Microsoft compiler, lcc-win32 and MinGW (I suppose that the Watcom compiler and Metrowerks Codewarrior could be used as well). You'll need the DirectX SDK (if not included with the compiler) to compile the DirectSound driver; version 5 or better is required. The standard Win32 SDK is enough for the winmm driver. Oh, I almost forgot: you need long filenames to compile libmikmod, but that should not be a problem nowadays. -- Instructions for Microsoft Compiler Use one of the project files to build a dll and an import library: MSVC6 for the old Visual C 6, or VS2005 for Visual Studio 2005 and newer. To make your library ready to use, copy the file 'mikmod.h' to your compiler include directory, and 'mikmod.lib` to your compiler libraries directory. You also have to put 'libmikmod.dll' somewhere in your PATH. HTML documentation of the library, for programmers, is located in the doc directory. -- Instructions for lcc-win32 Use Makefile.lcc -- Instructions for MingGW Use Makefile.mingw >> THANKS --------- I would like to thank everyone who contributed to libmikmod. Their names are in the AUTHORS file for the significative contributions, but some other names can be found in the NEWS file. Thanks a lot ! Keeping libmikmod alive wouldn't be much fun without you. >> LICENSE ---------- The libmikmod sound library is covered by the GNU Library General Public License as published by the Free Software Fundation (you'll find it in the file COPYING.LIB); either version 2 of the licence, or (at your option) any later version. The GNU Lesser General Public License, version 2.1, in file COPYING.LESSER, can be considered as a later version of the LGPL, and is strongly recommended for people who will embed libmikmod in their application as a shared library. Parts of the library (in playercode/mdulaw.c) are derived from the files libst.h and raw.c from an old version of the sox (SOund eXchange) package written by Lance Norskog and Jef Poskanzer. The following copyright notice applies to these parts: Copyright (C) 1989 by Jef Poskanzer. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. Note that none of these parts are used in the Win32 version of the libmikmod library. >> CONTACT AND DOWNLOAD INFO ---------------------------- libmikmod home page is located at SourceForge: http://mikmod.sourceforge.net/ http://sourceforge.net/projects/mikmod/ There's a mailing list (mikmod-public) for discussing the development of MikMod (new features, bugs, ideas...) Look for more information on the web site. >> LAST NOTES ------------- I hope you'll enjoy using this version of libmikmod as well as I enjoyed debugging and improving it. -- Miod Vallat, 01/24/2002 miod@mikmod.org libmikmod-3.1.16/win32/mikmod.def0000644000000000000000000000566512226333456015173 0ustar rootrootEXPORTS MikMod_Active @1 MikMod_DisableOutput @2 MikMod_DriverFromAlias @3 MikMod_EnableOutput @4 MikMod_Exit @5 MikMod_GetVersion @6 MikMod_InfoDriver @7 MikMod_InfoLoader @8 MikMod_Init @9 MikMod_InitThreads @10 MikMod_Lock @11 MikMod_RegisterAllDrivers @12 MikMod_RegisterAllLoaders @13 MikMod_RegisterDriver @14 MikMod_RegisterErrorHandler @15 MikMod_RegisterLoader @16 MikMod_RegisterPlayer @17 MikMod_Reset @18 MikMod_SetNumVoices @19 MikMod_Unlock @20 MikMod_Update @21 MikMod_critical @22 DATA MikMod_errno @23 DATA MikMod_strerror @24 Player_Active @25 Player_Free @26 Player_GetChannelPeriod @27 Player_GetChannelVoice @28 Player_GetModule @29 Player_Load @30 Player_LoadFP @31 Player_LoadGeneric @32 Player_LoadTitle @33 Player_LoadTitleFP @34 Player_Mute @35 Player_Muted @36 Player_NextPosition @37 Player_Paused @38 Player_PrevPosition @39 Player_SetPosition @40 Player_SetSpeed @41 Player_SetTempo @42 Player_SetVolume @43 Player_Start @44 Player_Stop @45 Player_ToggleMute @46 Player_TogglePause @47 Player_Unmute @48 Sample_Free @49 Sample_Load @50 Sample_LoadFP @51 Sample_LoadGeneric @52 Sample_Play @53 VC_Exit @54 VC_Init @55 VC_PlayStart @56 VC_PlayStop @57 VC_SampleLength @58 VC_SampleLoad @59 VC_SampleSpace @60 VC_SampleUnload @61 VC_SetNumVoices @62 VC_SilenceBytes @63 VC_VoiceGetFrequency @64 VC_VoiceGetPanning @65 VC_VoiceGetPosition @66 VC_VoiceGetVolume @67 VC_VoicePlay @68 VC_VoiceRealVolume @69 VC_VoiceSetFrequency @70 VC_VoiceSetPanning @71 VC_VoiceSetVolume @72 VC_VoiceStop @73 VC_VoiceStopped @74 VC_WriteBytes @75 Voice_GetFrequency @76 Voice_GetPanning @77 Voice_GetPosition @78 Voice_GetVolume @79 Voice_Play @80 Voice_RealVolume @81 Voice_SetFrequency @82 Voice_SetPanning @83 Voice_SetVolume @84 Voice_Stop @85 Voice_Stopped @86 drv_ds @87 DATA drv_nos @88 DATA drv_raw @89 DATA drv_stdout @90 DATA drv_wav @91 DATA drv_win @92 DATA load_669 @93 DATA load_amf @94 DATA load_dsm @95 DATA load_far @96 DATA load_gdm @97 DATA load_imf @98 DATA load_it @99 DATA load_m15 @100 DATA load_med @101 DATA load_mod @102 DATA load_mtm @103 DATA load_okt @104 DATA load_s3m @105 DATA load_stm @106 DATA load_stx @107 DATA load_ult @108 DATA load_uni @109 DATA load_xm @110 DATA md_device @111 DATA md_driver @112 DATA md_mixfreq @113 DATA md_mode @114 DATA md_musicvolume @115 DATA md_pansep @116 DATA md_reverb @117 DATA md_sndfxvolume @118 DATA md_volume @119 DATA libmikmod-3.1.16/win32/mikmod_build.h0000644000000000000000000006314212262033674016034 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== MikMod sound library include file ==============================================================================*/ #ifndef _MIKMOD_H_ #define _MIKMOD_H_ #include #include #ifdef __cplusplus extern "C" { #endif /* * ========== Compiler magic for shared libraries * * ========== NOTE TO WINDOWS DEVELOPERS: * If you are compiling for Windows and will link to the static library * (libmikmod.a with MinGW, or mikmod_static.lib with MSVC or LCC, etc), * you must define MIKMOD_STATIC in your project. Otherwise, dllimport * will be assumed. */ #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MIKMOD_BUILD) && defined(DLL_EXPORT) /* building libmikmod as a dll for windows */ # define MIKMODAPI __declspec(dllexport) # elif defined(MIKMOD_BUILD) || defined(MIKMOD_STATIC) /* building or using static libmikmod for windows */ # define MIKMODAPI # else # define MIKMODAPI __declspec(dllimport) /* using libmikmod dll for windows */ # endif /* SYM_VISIBILITY should be defined if both the compiler * and the target support the visibility attributes. the * configury does that automatically. for the standalone * makefiles, etc, the developer should add the required * flags, i.e.: -DSYM_VISIBILITY -fvisibility=hidden */ #elif defined(MIKMOD_BUILD) && defined(SYM_VISIBILITY) # define MIKMODAPI __attribute__((visibility("default"))) #else # define MIKMODAPI #endif /* * ========== Library version */ #define LIBMIKMOD_VERSION_MAJOR 3L #define LIBMIKMOD_VERSION_MINOR 1L #define LIBMIKMOD_REVISION 16L #define LIBMIKMOD_VERSION \ ((LIBMIKMOD_VERSION_MAJOR<<16)| \ (LIBMIKMOD_VERSION_MINOR<< 8)| \ (LIBMIKMOD_REVISION)) MIKMODAPI extern long MikMod_GetVersion(void); /* * ========== Platform independent-type definitions */ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include /* Avoid conflicts with windef.h */ #define SBYTE _mm_SBYTE #define UBYTE _mm_UBYTE #define SWORD _mm_SWORD #define UWORD _mm_UWORD #define SLONG _mm_SLONG #define ULONG _mm_ULONG #define BOOL _mm_BOOL #define CHAR _mm_CHAR #endif #if defined(__OS2__)||defined(__EMX__) #define INCL_DOSSEMAPHORES #include #else typedef char CHAR; #endif #if defined (_LP64) || defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) /* 64 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed int SLONG; /* 4 bytes, signed */ typedef unsigned int ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #else /* 32 bit architectures */ typedef signed char SBYTE; /* 1 byte, signed */ typedef unsigned char UBYTE; /* 1 byte, unsigned */ typedef signed short SWORD; /* 2 bytes, signed */ typedef unsigned short UWORD; /* 2 bytes, unsigned */ typedef signed long SLONG; /* 4 bytes, signed */ #if !defined(__OS2__)&&!defined(__EMX__) typedef unsigned long ULONG; /* 4 bytes, unsigned */ typedef int BOOL; /* 0=false, <>0 true */ #endif #endif /* * ========== Error codes */ enum { MMERR_OPENING_FILE = 1, MMERR_OUT_OF_MEMORY, MMERR_DYNAMIC_LINKING, MMERR_SAMPLE_TOO_BIG, MMERR_OUT_OF_HANDLES, MMERR_UNKNOWN_WAVE_TYPE, MMERR_LOADING_PATTERN, MMERR_LOADING_TRACK, MMERR_LOADING_HEADER, MMERR_LOADING_SAMPLEINFO, MMERR_NOT_A_MODULE, MMERR_NOT_A_STREAM, MMERR_MED_SYNTHSAMPLES, MMERR_ITPACK_INVALID_DATA, MMERR_DETECTING_DEVICE, MMERR_INVALID_DEVICE, MMERR_INITIALIZING_MIXER, MMERR_OPENING_AUDIO, MMERR_8BIT_ONLY, MMERR_16BIT_ONLY, MMERR_STEREO_ONLY, MMERR_ULAW, MMERR_NON_BLOCK, MMERR_AF_AUDIO_PORT, MMERR_AIX_CONFIG_INIT, MMERR_AIX_CONFIG_CONTROL, MMERR_AIX_CONFIG_START, MMERR_GUS_SETTINGS, MMERR_GUS_RESET, MMERR_GUS_TIMER, MMERR_HP_SETSAMPLESIZE, MMERR_HP_SETSPEED, MMERR_HP_CHANNELS, MMERR_HP_AUDIO_OUTPUT, MMERR_HP_AUDIO_DESC, MMERR_HP_BUFFERSIZE, MMERR_OSS_SETFRAGMENT, MMERR_OSS_SETSAMPLESIZE, MMERR_OSS_SETSTEREO, MMERR_OSS_SETSPEED, MMERR_SGI_SPEED, MMERR_SGI_16BIT, MMERR_SGI_8BIT, MMERR_SGI_STEREO, MMERR_SGI_MONO, MMERR_SUN_INIT, MMERR_OS2_MIXSETUP, MMERR_OS2_SEMAPHORE, MMERR_OS2_TIMER, MMERR_OS2_THREAD, MMERR_DS_PRIORITY, MMERR_DS_BUFFER, MMERR_DS_FORMAT, MMERR_DS_NOTIFY, MMERR_DS_EVENT, MMERR_DS_THREAD, MMERR_DS_UPDATE, MMERR_WINMM_HANDLE, MMERR_WINMM_ALLOCATED, MMERR_WINMM_DEVICEID, MMERR_WINMM_FORMAT, MMERR_WINMM_UNKNOWN, MMERR_MAC_SPEED, MMERR_MAC_START, ___filler_MMERR=(MMERR_MAC_START+22),/* 65-86 exist only in libmikmod3. */ MMERR_ALSA_NOCONFIG, MMERR_ALSA_SETPARAMS, MMERR_ALSA_SETFORMAT, MMERR_ALSA_SETRATE, MMERR_ALSA_SETCHANNELS, MMERR_ALSA_BUFFERSIZE, MMERR_ALSA_PCM_START, MMERR_ALSA_PCM_WRITE, MMERR_ALSA_PCM_RECOVER, MMERR_MAX }; /* * ========== Error handling */ typedef void (MikMod_handler)(void); typedef MikMod_handler *MikMod_handler_t; MIKMODAPI extern int MikMod_errno; MIKMODAPI extern BOOL MikMod_critical; MIKMODAPI extern char *MikMod_strerror(int); MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t); /* * ========== Library initialization and core functions */ struct MDRIVER; MIKMODAPI extern void MikMod_RegisterAllDrivers(void); MIKMODAPI extern CHAR* MikMod_InfoDriver(void); MIKMODAPI extern void MikMod_RegisterDriver(struct MDRIVER*); MIKMODAPI extern int MikMod_DriverFromAlias(CHAR*); MIKMODAPI extern int MikMod_Init(CHAR*); MIKMODAPI extern void MikMod_Exit(void); MIKMODAPI extern int MikMod_Reset(CHAR*); MIKMODAPI extern int MikMod_SetNumVoices(int,int); MIKMODAPI extern BOOL MikMod_Active(void); MIKMODAPI extern int MikMod_EnableOutput(void); MIKMODAPI extern void MikMod_DisableOutput(void); MIKMODAPI extern void MikMod_Update(void); MIKMODAPI extern BOOL MikMod_InitThreads(void); MIKMODAPI extern void MikMod_Lock(void); MIKMODAPI extern void MikMod_Unlock(void); /* * ========== Reader, Writer */ typedef struct MREADER { int (*Seek)(struct MREADER*,long,int); long (*Tell)(struct MREADER*); BOOL (*Read)(struct MREADER*,void*,size_t); int (*Get)(struct MREADER*); BOOL (*Eof)(struct MREADER*); } MREADER; typedef struct MWRITER { int (*Seek)(struct MWRITER*, long, int); long (*Tell)(struct MWRITER*); BOOL (*Write)(struct MWRITER*, void*, size_t); int (*Put)(struct MWRITER*, int); } MWRITER; /* * ========== Samples */ /* Sample playback should not be interrupted */ #define SFX_CRITICAL 1 /* Sample format [loading and in-memory] flags: */ #define SF_16BITS 0x0001 #define SF_STEREO 0x0002 #define SF_SIGNED 0x0004 #define SF_BIG_ENDIAN 0x0008 #define SF_DELTA 0x0010 #define SF_ITPACKED 0x0020 #define SF_FORMATMASK 0x003F /* General Playback flags */ #define SF_LOOP 0x0100 #define SF_BIDI 0x0200 #define SF_REVERSE 0x0400 #define SF_SUSTAIN 0x0800 #define SF_PLAYBACKMASK 0x0C00 /* Module-only Playback Flags */ #define SF_OWNPAN 0x1000 #define SF_UST_LOOP 0x2000 #define SF_EXTRAPLAYBACKMASK 0x3000 /* Panning constants */ #define PAN_LEFT 0 #define PAN_HALFLEFT 64 #define PAN_CENTER 128 #define PAN_HALFRIGHT 192 #define PAN_RIGHT 255 #define PAN_SURROUND 512 /* panning value for Dolby Surround */ typedef struct SAMPLE { SWORD panning; /* panning (0-255 or PAN_SURROUND) */ ULONG speed; /* Base playing speed/frequency of note */ UBYTE volume; /* volume 0-64 */ UWORD inflags; /* sample format on disk */ UWORD flags; /* sample format in memory */ ULONG length; /* length of sample (in samples!) */ ULONG loopstart; /* repeat position (relative to start, in samples) */ ULONG loopend; /* repeat end */ ULONG susbegin; /* sustain loop begin (in samples) \ Not Supported */ ULONG susend; /* sustain loop end / Yet! */ /* Variables used by the module player only! (ignored for sound effects) */ UBYTE globvol; /* global volume */ UBYTE vibflags; /* autovibrato flag stuffs */ UBYTE vibtype; /* Vibratos moved from INSTRUMENT to SAMPLE */ UBYTE vibsweep; UBYTE vibdepth; UBYTE vibrate; CHAR* samplename; /* name of the sample */ /* Values used internally only */ UWORD avibpos; /* autovibrato pos [player use] */ UBYTE divfactor; /* for sample scaling, maintains proper period slides */ ULONG seekpos; /* seek position in file */ SWORD handle; /* sample handle used by individual drivers */ } SAMPLE; /* Sample functions */ MIKMODAPI extern SAMPLE *Sample_Load(CHAR*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern void Voice_SetVolume(SBYTE,UWORD); MIKMODAPI extern UWORD Voice_GetVolume(SBYTE); MIKMODAPI extern void Voice_SetFrequency(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetFrequency(SBYTE); MIKMODAPI extern void Voice_SetPanning(SBYTE,ULONG); MIKMODAPI extern ULONG Voice_GetPanning(SBYTE); MIKMODAPI extern void Voice_Play(SBYTE,SAMPLE*,ULONG); MIKMODAPI extern void Voice_Stop(SBYTE); MIKMODAPI extern BOOL Voice_Stopped(SBYTE); MIKMODAPI extern SLONG Voice_GetPosition(SBYTE); MIKMODAPI extern ULONG Voice_RealVolume(SBYTE); /* * ========== Internal module representation (UniMod) */ /* Instrument definition - for information only, the only field which may be of use in user programs is the name field */ /* Instrument note count */ #define INSTNOTES 120 /* Envelope point */ typedef struct ENVPT { SWORD pos; SWORD val; } ENVPT; /* Envelope point count */ #define ENVPOINTS 32 /* Instrument structure */ typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS]; } INSTRUMENT; struct MP_CONTROL; struct MP_VOICE; /* Module definition */ /* maximum master channels supported */ #define UF_MAXCHAN 64 /* Module flags */ #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */ #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */ #define UF_INST 0x0004 /* Instruments are used */ #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */ #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */ #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */ #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */ #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */ #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */ #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */ #define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */ typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */ struct INSTRUMENT* instruments; /* all instruments */ struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */ struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */ struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */ } MODULE; /* * ========== Module loaders */ struct MLOADER; MIKMODAPI extern CHAR* MikMod_InfoLoader(void); MIKMODAPI extern void MikMod_RegisterAllLoaders(void); MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*); MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */ MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */ MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */ MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */ MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */ MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */ MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */ MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */ MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */ MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */ MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */ MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */ MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */ MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */ MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */ /* * ========== Module player */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*); MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*); MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern void Player_Stop(void); MIKMODAPI extern void Player_TogglePause(void); MIKMODAPI extern BOOL Player_Paused(void); MIKMODAPI extern void Player_NextPosition(void); MIKMODAPI extern void Player_PrevPosition(void); MIKMODAPI extern void Player_SetPosition(UWORD); MIKMODAPI extern BOOL Player_Muted(UBYTE); MIKMODAPI extern void Player_SetVolume(SWORD); MIKMODAPI extern MODULE* Player_GetModule(void); MIKMODAPI extern void Player_SetSpeed(UWORD); MIKMODAPI extern void Player_SetTempo(UWORD); MIKMODAPI extern void Player_Unmute(SLONG,...); MIKMODAPI extern void Player_Mute(SLONG,...); MIKMODAPI extern void Player_ToggleMute(SLONG,...); MIKMODAPI extern int Player_GetChannelVoice(UBYTE); MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE); typedef void (*MikMod_player_t)(void); MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t); #define MUTE_EXCLUSIVE 32000 #define MUTE_INCLUSIVE 32001 /* * ========== Drivers */ enum { MD_MUSIC = 0, MD_SNDFX }; enum { MD_HARDWARE = 0, MD_SOFTWARE }; /* Mixing flags */ /* These ones take effect only after MikMod_Init or MikMod_Reset */ #define DMODE_16BITS 0x0001 /* enable 16 bit output */ #define DMODE_STEREO 0x0002 /* enable stereo output */ #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */ #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */ #define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */ /* These take effect immediately. */ #define DMODE_SURROUND 0x0100 /* enable surround sound */ #define DMODE_INTERP 0x0200 /* enable interpolation */ #define DMODE_REVERSE 0x0400 /* reverse stereo */ struct SAMPLOAD; typedef struct MDRIVER { struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR* Alias; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); int (*Init) (void); void (*Exit) (void); int (*Reset) (void); int (*SetNumVoices) (void); int (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE); } MDRIVER; /* These variables can be changed at ANY time and results will be immediate */ MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */ MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */ MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */ MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */ MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) */ /* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */ MIKMODAPI extern UWORD md_device; /* device */ MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */ MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above */ /* The following variable should not be changed! */ MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. */ /* Known drivers list */ MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */ MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */ MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */ MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */ MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */ MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */ MIKMODAPI extern struct MDRIVER drv_sam9407;/* Linux sam9407 driver */ MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */ MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */ MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */ MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */ MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */ MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */ MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */ MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */ MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */ MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */ MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */ MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */ MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */ /*========== Virtual channel mixer interface (for user-supplied drivers only) */ MIKMODAPI extern int VC_Init(void); MIKMODAPI extern void VC_Exit(void); MIKMODAPI extern int VC_SetNumVoices(void); MIKMODAPI extern ULONG VC_SampleSpace(int); MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*); MIKMODAPI extern int VC_PlayStart(void); MIKMODAPI extern void VC_PlayStop(void); MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int); MIKMODAPI extern void VC_SampleUnload(SWORD); MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG); MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG); MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD); MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE); MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE); MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG); MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE); MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); MIKMODAPI extern void VC_VoiceStop(UBYTE); MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE); MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE); MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE); #ifdef __cplusplus } #endif #endif /* ex:set ts=4: */ libmikmod-3.1.16/win32/mikmod.h.in0000644000000000000000000000000010003535131015224 0ustar rootrootlibmikmod-3.1.16/win32/MSVC6/0000755000000000000000000000000012262343244014051 5ustar rootrootlibmikmod-3.1.16/win32/MSVC6/libmikmod.dsp0000644000000000000000000001664612260322070016535 0ustar rootroot# Microsoft Developer Studio Project File - Name="libmikmod" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=libmikmod - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libmikmod.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libmikmod.mak" CFG="libmikmod - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libmikmod - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libmikmod - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "libmikmod - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "MIKMOD_BUILD" /D "DLL_EXPORT" /D "DRV_DS" /D "DRV_WIN" /D "DRV_WAV" /D "DRV_RAW" /D "HAVE_LIMITS_H" /D "HAVE_FCNTL_H" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\win32" /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "MIKMOD_BUILD" /D "DLL_EXPORT" /D "DRV_DS" /D "DRV_WIN" /D "DRV_WAV" /D "DRV_RAW" /D "HAVE_LIMITS_H" /D "HAVE_FCNTL_H" /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib winmm.lib dsound.lib /nologo /dll /machine:I386 # SUBTRACT LINK32 /pdb:none /nodefaultlib !ELSEIF "$(CFG)" == "libmikmod - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "MIKMOD_BUILD" /D "DLL_EXPORT" /D "DRV_DS" /D "DRV_WIN" /D "DRV_WAV" /D "DRV_RAW" /D "HAVE_LIMITS_H" /D "HAVE_FCNTL_H" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\win32" /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "MIKMOD_BUILD" /D "DLL_EXPORT" /D "DRV_DS" /D "DRV_WIN" /D "DRV_WAV" /D "DRV_RAW" /D "HAVE_LIMITS_H" /D "HAVE_FCNTL_H" /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib winmm.lib dsound.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # SUBTRACT LINK32 /pdb:none /nodefaultlib !ENDIF # Begin Target # Name "libmikmod - Win32 Release" # Name "libmikmod - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\..\drivers\drv_ds.c # End Source File # Begin Source File SOURCE=..\..\drivers\drv_nos.c # End Source File # Begin Source File SOURCE=..\..\drivers\drv_raw.c # End Source File # Begin Source File SOURCE=..\..\drivers\drv_stdout.c # End Source File # Begin Source File SOURCE=..\..\drivers\drv_wav.c # End Source File # Begin Source File SOURCE=..\..\drivers\drv_win.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_669.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_amf.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_dsm.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_far.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_gdm.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_imf.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_it.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_m15.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_med.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_mod.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_mtm.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_okt.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_s3m.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_stm.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_stx.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_ult.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_uni.c # End Source File # Begin Source File SOURCE=..\..\loaders\load_xm.c # End Source File # Begin Source File SOURCE=..\..\playercode\mdreg.c # End Source File # Begin Source File SOURCE=..\..\playercode\mdriver.c # End Source File # Begin Source File SOURCE=..\..\playercode\mloader.c # End Source File # Begin Source File SOURCE=..\..\playercode\mlreg.c # End Source File # Begin Source File SOURCE=..\..\playercode\mlutil.c # End Source File # Begin Source File SOURCE=..\..\mmio\mmalloc.c # End Source File # Begin Source File SOURCE=..\..\mmio\mmerror.c # End Source File # Begin Source File SOURCE=..\..\mmio\mmio.c # End Source File # Begin Source File SOURCE=..\..\playercode\mplayer.c # End Source File # Begin Source File SOURCE=..\..\playercode\munitrk.c # End Source File # Begin Source File SOURCE=..\..\playercode\mwav.c # End Source File # Begin Source File SOURCE=..\..\playercode\npertab.c # End Source File # Begin Source File SOURCE=..\..\playercode\sloader.c # End Source File # Begin Source File SOURCE=..\..\playercode\virtch.c # End Source File # Begin Source File SOURCE=..\..\playercode\virtch2.c # End Source File # Begin Source File SOURCE=..\..\playercode\virtch_common.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\mikmod.h # End Source File # Begin Source File SOURCE=..\mikmod_build.h # End Source File # Begin Source File SOURCE=..\..\include\mikmod_internals.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project libmikmod-3.1.16/win32/MSVC6/libmikmod.dsw0000644000000000000000000000103712226306364016542 0ustar rootrootMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "libmikmod"=".\libmikmod.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libmikmod-3.1.16/win32/VS2005/0000755000000000000000000000000012262343244014052 5ustar rootrootlibmikmod-3.1.16/win32/VS2005/libmikmod.vcproj0000644000000000000000000002455112260322070017245 0ustar rootroot libmikmod-3.1.16/win32/VS2005/libmikmod.sln0000644000000000000000000000232412226306364016542 0ustar rootroot Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmikmod", "libmikmod.vcproj", "{C118ACA9-74E7-4433-8433-452B33A77716}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C118ACA9-74E7-4433-8433-452B33A77716}.Debug|Win32.ActiveCfg = Debug|Win32 {C118ACA9-74E7-4433-8433-452B33A77716}.Debug|Win32.Build.0 = Debug|Win32 {C118ACA9-74E7-4433-8433-452B33A77716}.Debug|x64.ActiveCfg = Debug|x64 {C118ACA9-74E7-4433-8433-452B33A77716}.Debug|x64.Build.0 = Debug|x64 {C118ACA9-74E7-4433-8433-452B33A77716}.Release|Win32.ActiveCfg = Release|Win32 {C118ACA9-74E7-4433-8433-452B33A77716}.Release|Win32.Build.0 = Release|Win32 {C118ACA9-74E7-4433-8433-452B33A77716}.Release|x64.ActiveCfg = Release|x64 {C118ACA9-74E7-4433-8433-452B33A77716}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal libmikmod-3.1.16/win32/Makefile.am0000644000000000000000000000037712226306364015260 0ustar rootroot# autotools discourages adding directories to EXTRA_DIST, # but I'm doing it to indclude the MSVC project files. EXTRA_DIST = Makefile.lcc Makefile.mingw \ mikmod.def mikmod.h mikmod_build.h mikmod.h.in mikmod_build.h.in \ README MSVC6 VS2005 libmikmod-3.1.16/win32/mikmod_build.h.in0000644000000000000000000000000010003535131016403 0ustar rootrootlibmikmod-3.1.16/Makefile.am0000644000000000000000000000411612256420240014302 0ustar rootrootAUTOMAKE_OPTIONS = foreign SUBDIRS = drivers include loaders mmio playercode posix \ dlapi macintosh os2 win32 docs bin_SCRIPTS = libmikmod-config EXTRA_DIST = libmikmod-config.in libmikmod.m4 libmikmod.pc.in \ libmikmod.spec.in libmikmod.spec COPYING.LESSER m4datadir = $(datadir)/aclocal m4data_DATA = libmikmod.m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmikmod.pc ACLOCAL_AMFLAGS = -I m4 # always define MIKMOD_BUILD when building libmikmod # regardless of static build or shared library build.. AM_CFLAGS = -DMIKMOD_BUILD=1 AM_CPPFLAGS = -I@top_builddir@/include -I@top_srcdir@/include lib_LTLIBRARIES = libmikmod.la libmikmod_la_SOURCES = \ dlapi/dl_hpux.c \ drivers/drv_AF.c \ drivers/drv_aix.c \ drivers/drv_alsa.c \ drivers/drv_dart.c \ drivers/drv_ds.c \ drivers/drv_esd.c \ drivers/drv_hp.c \ drivers/drv_mac.c \ drivers/drv_nos.c \ drivers/drv_os2.c \ drivers/drv_oss.c \ drivers/drv_pipe.c \ drivers/drv_raw.c \ drivers/drv_sam9407.c \ drivers/drv_sgi.c \ drivers/drv_stdout.c \ drivers/drv_sun.c \ drivers/drv_ultra.c \ drivers/drv_wav.c \ drivers/drv_win.c \ loaders/load_669.c \ loaders/load_amf.c \ loaders/load_dsm.c \ loaders/load_far.c \ loaders/load_gdm.c \ loaders/load_imf.c \ loaders/load_it.c \ loaders/load_m15.c \ loaders/load_med.c \ loaders/load_mod.c \ loaders/load_mtm.c \ loaders/load_okt.c \ loaders/load_s3m.c \ loaders/load_stm.c \ loaders/load_stx.c \ loaders/load_ult.c \ loaders/load_uni.c \ loaders/load_xm.c \ mmio/mmalloc.c \ mmio/mmerror.c \ mmio/mmio.c \ playercode/mdreg.c \ playercode/mdriver.c \ playercode/mdulaw.c \ playercode/mloader.c \ playercode/mlreg.c \ playercode/mlutil.c \ playercode/mplayer.c \ playercode/munitrk.c \ playercode/mwav.c \ playercode/npertab.c \ playercode/sloader.c \ playercode/virtch.c \ playercode/virtch2.c \ playercode/virtch_common.c libmikmod_la_LDFLAGS = -no-undefined -version-info @MIKMOD_LT_CURRENT@:@MIKMOD_LT_REVISION@:@MIKMOD_LT_AGE@ libmikmod_la_LIBADD = @LTLIBOBJS@ @LIBRARY_LIB@ libmikmod-3.1.16/aclocal.m40000644000000000000000000010777612260336521014131 0ustar rootroot# generated automatically by aclocal 1.11.6 -*- 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.64],, [m4_warning([this file was generated for autoconf 2.64. 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.6], [], [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.6])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 /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/esd.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) libmikmod-3.1.16/libmikmod-config.in0000755000000000000000000000170512245574000016016 0ustar rootroot#! /bin/sh prefix=@prefix@ exec_prefix=@exec_prefix@ exec_prefix_set=no libdir=@libdir@ includedir=@includedir@ usage="\ Usage: libmikmod-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags] [--ldadd]" if test $# -eq 0 ; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0 ; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo @LIBMIKMOD_VERSION@ ;; --cflags) if test $includedir != /usr/include ; then includes=-I$includedir fi echo $includes @REENTRANT@ ;; --ldadd) echo @LIB_LDADD@ ;; --libs) echo -L@libdir@ -lmikmod @LIBRARY_LIB@ ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done libmikmod-3.1.16/libmikmod.pc.in0000644000000000000000000000045512244572132015155 0ustar rootrootprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libmikmod Description: Library for playing Module Files and for Sound Effects Version: @LIBMIKMOD_VERSION@ URL: http://mikmod.sourceforge.net/ Libs: -L${libdir} -lmikmod Libs.private: -lm Cflags: -I${includedir} libmikmod-3.1.16/os2/0000755000000000000000000000000012262343244012754 5ustar rootrootlibmikmod-3.1.16/os2/Makefile.in0000644000000000000000000002531212260336527015030 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = os2 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = README mikmod2.def.in Build.cmd.in Makefile.tmpl configure.cmd all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign os2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign os2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/os2/Makefile.tmpl0000644000000000000000000001504212222472510015364 0ustar rootroot# Makefile template for use under OS/2 # DRIVER_OBJ=drv_os2.o drv_dart.o AR=@AR@ ARFLAGS=@ARFLAGS@ CC=@CC@ CFLAGS=@CFLAGS@ COMPILE=$(CC) $(CFLAGS) -I../include -I.. IMPLIB=@IMPLIB@ .SUFFIXES: .SUFFIXES: .o .c LIBS=@LIBS@ LIBNAME=@LIBNAME@ DLLNAME=@DLLNAME@ DEFNAME=@DEFNAME@ OBJ=$(DRIVER_OBJ) \ drv_nos.o drv_raw.o drv_stdout.o drv_wav.o \ load_669.o load_amf.o load_dsm.o load_far.o load_gdm.o load_it.o \ load_imf.o load_m15.o load_med.o load_mod.o load_mtm.o load_s3m.o \ load_stm.o load_stx.o load_ult.o load_uni.o load_xm.o \ mmalloc.o mmerror.o mmio.o \ mdriver.o mdreg.o mloader.o mlreg.o mlutil.o mplayer.o munitrk.o mwav.o \ npertab.o sloader.o virtch.o virtch2.o virtch_common.o all: @LIB@ clean: FORCE FOR %F IN ( $(LIBNAME) $(DLLNAME) $(OBJ) ) DO IF EXIST %F ERASE %F distclean: clean FOR %F IN ( $(DEFNAME) ..\include\mikmod.h ..\include\mikmod_build.h Makefile ) DO IF EXIST %F ERASE %F $(DLLNAME): $(OBJ) $(DEFNAME) $(CC) $(CFLAGS) -Zso -Zsys -o $(DLLNAME) $(DEFNAME) $(OBJ) $(LIBS) $(IMPLIB) -o $(LIBNAME) $(DEFNAME) $(LIBNAME): $(OBJ) $(AR) $(ARFLAGS) $(LIBNAME) $(OBJ) drv_dart.o: ../drivers/drv_dart.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_dart.c drv_nos.o: ../drivers/drv_nos.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_nos.c drv_os2.o: ../drivers/drv_os2.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_os2.c drv_raw.o: ../drivers/drv_raw.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_raw.c drv_stdout.o: ../drivers/drv_stdout.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_stdout.c drv_wav.o: ../drivers/drv_wav.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../drivers/drv_wav.c load_669.o: ../loaders/load_669.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_669.c load_amf.o: ../loaders/load_amf.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_amf.c load_dsm.o: ../loaders/load_dsm.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_dsm.c load_far.o: ../loaders/load_far.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_far.c load_gdm.o: ../loaders/load_gdm.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_gdm.c load_it.o: ../loaders/load_it.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_it.c load_imf.o: ../loaders/load_imf.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_imf.c load_m15.o: ../loaders/load_m15.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_m15.c load_med.o: ../loaders/load_med.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_med.c load_mod.o: ../loaders/load_mod.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_mod.c load_mtm.o: ../loaders/load_mtm.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_mtm.c load_s3m.o: ../loaders/load_s3m.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_s3m.c load_stm.o: ../loaders/load_stm.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_stm.c load_stx.o: ../loaders/load_stx.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_stx.c load_ult.o: ../loaders/load_ult.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_ult.c load_uni.o: ../loaders/load_uni.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_uni.c load_xm.o: ../loaders/load_xm.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../loaders/load_xm.c mmalloc.o: ../mmio/mmalloc.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../mmio/mmalloc.c mmerror.o: ../mmio/mmerror.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../mmio/mmerror.c mmio.o: ../mmio/mmio.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../mmio/mmio.c mdriver.o: ../playercode/mdriver.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mdriver.c mdreg.o: ../playercode/mdreg.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mdreg.c mloader.o: ../playercode/mloader.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mloader.c mlreg.o: ../playercode/mlreg.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mlreg.c mlutil.o: ../playercode/mlutil.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mlutil.c mplayer.o: ../playercode/mplayer.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mplayer.c munitrk.o: ../playercode/munitrk.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/munitrk.c mwav.o: ../playercode/mwav.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/mwav.c npertab.o: ../playercode/npertab.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/npertab.c sloader.o: ../playercode/sloader.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/sloader.c virtch.o: ../playercode/virtch.c ../playercode/virtch_common.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/virtch.c virtch2.o: ../playercode/virtch2.c ../playercode/virtch_common.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/virtch2.c virtch_common.o: ../playercode/virtch_common.c \ ../include/mikmod_build.h ../include/mikmod_internals.h $(COMPILE) @ORULE@ ../playercode/virtch_common.c FORCE: libmikmod-3.1.16/os2/Build.cmd.in0000644000000000000000000000027412222472510015103 0ustar rootroot@ECHO OFF IF EXIST Makefile GOTO BUILD CALL configure.cmd :BUILD @MAKE@ %1 IF ERRORLEVEL 1 GOTO ERROR ECHO Compilation finished. GOTO END :ERROR ECHO Compilation aborted ! :END libmikmod-3.1.16/os2/README0000644000000000000000000001103612255576504013646 0ustar rootroot Hello folks ! This is libmikmod, version 3.1.16, a portable sound library for Unix. Check out the file 'NEWS' for more history information. >> BUILDING LIBMIKMOD --------------------- - If you're not building libmikmod for OS/2, then you're lost in the sources. Go up one directory, and read the main README file. So you're on a good old OS/2 system, aren't you ? With a customized Object Desktop or some equivalent tool collection ? I hope you've installed REXX support during the system installation. If you didn't, you lose. Run 'selective install' from the system setup folder, install REXX support, check it works, and come back here. Currently, libmikmod can be build under OS/2 only with the emx compiler or the Watcom compiler. Borland C lacks a 64-bit integer type and can't be used. You'll need the MMPM/2 toolkit (included in all the Warp toolkits) to compile the MMPM/2 driver. The Warp 4 toolkit is required if you want to build the DART driver, too. Oh, I almost forgot: you need long filenames to compile libmikmod, so you'll have to compile it on an HPFS drive, or an ext2fs drive, or a network drive where you can use decent-size filenames. In this directory, run configure You will then be asked some questions. First, you'll have to choose your compiler. If you choose emx, you can either build a static library, or a DLL with an import library. Then, you will be asked if you want to build a debug version; this option is mainly intended for the libmikmod developers, so you should answer "N" here. The next step is the driver selection. You'll be asked if you want the MMPM/2 and DART drivers. Since DART is not available on OS/2 older than Warp 4, the MMPM/2 driver is recommended for pre-Warp 4 systems. Otherwise, the DART driver is preferable, but you can include both to be sure your libmikmod library will work on every 32 bit version of OS/2. After the configuration has finished and the Makefiles are created, just run build and you'll get your libmikmod library in the libmikmod directory. If the build fails, I'd like to hear from you to correct the problem. To make you library ready to use, copy the file '..\include\mikmod.h' to your compiler include directory, and 'mikmod.lib' to your compiler library directory. If you built a DLL, put the DLL (mikmod.dll) in a directory which appears in your LIBPATH. HTML documentation of the library, for programmers, is located in the doc directory. >> THANKS --------- I would like to thank everyone who contributed to libmikmod. Their names are in the AUTHORS file for the significative contributions, but some other names can be found in the NEWS file. Thanks a lot ! Keeping libmikmod alive wouldn't be much fun without you. >> LICENSE ---------- The libmikmod sound library is covered by the GNU Library General Public License as published by the Free Software Fundation (you'll find it in the file COPYING.LIB); either version 2 of the licence, or (at your option) any later version. The GNU Lesser General Public License, version 2.1, in file COPYING.LESSER, can be considered as a later version of the LGPL, and is strongly recommended for people who will embed libmikmod in their application as a shared library. Parts of the library (in playercode/mdulaw.c) are derived from the files libst.h and raw.c from an old version of the sox (SOund eXchange) package written by Lance Norskog and Jef Poskanzer. The following copyright notice applies to these parts: Copyright (C) 1989 by Jef Poskanzer. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. Note that none of these parts are used in the OS/2 version of the libmikmod library. >> CONTACT AND DOWNLOAD INFO ---------------------------- libmikmod home page is located at SourceForge: http://mikmod.sourceforge.net/ http://sourceforge.net/projects/mikmod/ There's a mailing list (mikmod-public) for discussing the development of MikMod (new features, bugs, ideas...) Look for more information on the web site. >> LAST NOTES ------------- I hope you'll enjoy using this version of libmikmod as well as I enjoyed debugging and improving it. -- Miod Vallat, 01/24/2002 miod@mikmod.org libmikmod-3.1.16/os2/mikmod2.def.in0000644000000000000000000000603212222472510015377 0ustar rootrootLIBRARY mikmod2 DESCRIPTION "libmikmod/2 @LIBMIKMOD_MAJOR_VERSION@.@LIBMIKMOD_MINOR_VERSION@.@LIBMIKMOD_MICRO_VERSION@" EXPORTS MikMod_GetVersion @1 MikMod_errno @11 MikMod_critical @12 MikMod_strerror @17 MikMod_RegisterErrorHandler @18 MikMod_Init @21 MikMod_Exit @22 MikMod_Reset @23 MikMod_SetNumVoices @24 MikMod_Active @25 MikMod_EnableOutput @26 MikMod_DisableOutput @27 MikMod_Update @28 MikMod_InfoDriver @29 MikMod_RegisterDriver @30 MikMod_RegisterAllDrivers @31 MikMod_InfoLoader @32 MikMod_RegisterAllLoaders @33 MikMod_RegisterLoader @34 MikMod_RegisterPlayer @35 MikMod_InitThreads @36 MikMod_Lock @37 MikMod_Unlock @38 MikMod_DriverFromAlias @39 Player_Load @41 Player_LoadFP @42 Player_LoadGeneric @43 Player_LoadTitle @44 Player_Free @45 Player_Start @46 Player_Active @47 Player_Stop @48 Player_TogglePause @49 Player_Paused @50 Player_NextPosition @51 Player_PrevPosition @52 Player_SetPosition @53 Player_Muted @54 Player_SetVolume @55 Player_GetModule @56 Player_SetSpeed @57 Player_SetTempo @58 Player_Unmute @59 Player_Mute @60 Player_ToggleMute @61 Player_GetChannelVoice @62 Player_GetChannelPeriod @63 Player_LoadTitleFP @64 Sample_Load @71 Sample_LoadFP @72 Sample_LoadGeneric @73 Sample_Free @74 Sample_Play @75 Voice_GetVolume @78 Voice_GetFrequency @79 Voice_GetPanning @80 Voice_SetVolume @81 Voice_SetFrequency @82 Voice_SetPanning @83 Voice_Play @84 Voice_Stop @85 Voice_Stopped @86 Voice_GetPosition @87 Voice_RealVolume @88 md_volume @91 md_musicvolume @92 md_sndfxvolume @93 md_reverb @94 md_pansep @95 md_device @96 md_mixfreq @97 md_mode @98 md_driver @99 drv_nos @101 drv_raw @102 drv_stdout @103 drv_wav @104 drv_dart @105 drv_os2 @106 load_669 @111 load_amf @112 load_dsm @113 load_far @114 load_it @115 load_imf @116 load_m15 @117 load_med @118 load_mod @119 load_mtm @120 load_s3m @121 load_stm @122 load_stx @123 load_ult @124 load_uni @125 load_xm @126 load_gdm @127 load_okt @128 VC_Init @141 VC_Exit @142 VC_SetNumVoices @143 VC_SampleSpace @144 VC_SampleLength @145 VC_PlayStart @146 VC_PlayStop @147 VC_SampleLoad @148 VC_SampleUnload @149 VC_WriteBytes @150 VC_SilenceBytes @151 VC_VoiceSetVolume @152 VC_VoiceSetFrequency @153 VC_VoiceSetPanning @154 VC_VoicePlay @155 VC_VoiceStop @156 VC_VoiceStopped @157 VC_VoiceGetPosition @158 VC_VoiceRealVolume @159 VC_VoiceGetVolume @160 VC_VoiceGetFrequency @161 VC_VoiceGetPanning @162 libmikmod-3.1.16/os2/Makefile.am0000644000000000000000000000011412222472510014777 0ustar rootrootEXTRA_DIST = README mikmod2.def.in Build.cmd.in Makefile.tmpl configure.cmd libmikmod-3.1.16/os2/configure.cmd0000644000000000000000000001643312260322544015427 0ustar rootroot/* REXX */ /* MikMod sound library (c) 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: configure.cmd,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Configuration script for libmikmod under OS/2 ==============================================================================*/ ver_maj=3 ver_min=1 ver_micro=16 ECHO OFF CALL main ECHO ON EXIT /* *========== Helper functions */ yesno: ans='' DO WHILE ans='' SAY message" [y/n] " PULL ans ans=SUBSTR(ans,1,1) IF \((ans='N')|(ans='Y')) THEN DO SAY "Invalid answer. Please answer Y or N" ans='' END END RETURN ans EXIT sed: IF LINES(fileout) THEN DO CALL LINEOUT fileout ERASE fileout END CALL LINEOUT fileout,,1 linecount=0 DO WHILE LINES(filein) line=LINEIN(filein) IF linecount\=0 THEN DO arro2=1 DO WHILE (arro2\=0) arro1=POS('@',line) arro2=0 IF (arro1\=0) THEN arro2=POS('@',line,arro1+1) IF (arro2\=0) THEN DO keyword=SUBSTR(line,arro1+1,arro2-arro1-1) SELECT WHEN keyword='AR' THEN keyword=ar WHEN keyword='ARFLAGS' THEN keyword=arflags WHEN keyword='CC' THEN keyword=cc WHEN keyword='CFLAGS' THEN keyword=cflags WHEN keyword='DEFNAME' THEN keyword=defname WHEN keyword='DLLNAME' THEN keyword=dllname WHEN keyword='IMPLIB' THEN keyword=implib WHEN keyword='LIB' THEN keyword=lib WHEN keyword='LIBMIKMOD_MAJOR_VERSION' THEN keyword=ver_maj WHEN keyword='LIBMIKMOD_MICRO_VERSION' THEN keyword=ver_micro WHEN keyword='LIBMIKMOD_MINOR_VERSION' THEN keyword=ver_min WHEN keyword='LIBNAME' THEN keyword=libname WHEN keyword='LIBS' THEN keyword=libs WHEN keyword='MAKE' THEN keyword=make WHEN keyword='ORULE' THEN keyword=orule WHEN keyword='DOES_NOT_HAVE_SIGNED' THEN keyword='' OTHERWISE NOP END line=SUBSTR(line,1,arro1-1)""keyword""SUBSTR(line,arro2+1,LENGTH(line)-arro2) END END /* convert forward slashes to backslashes for Watcom ? */ IF convert="yes" THEN DO IF cc="wcc386" THEN DO arro1=1 DO WHILE arro1\=0 arro1=LASTPOS('/',line) IF (arro1\=0) THEN line=SUBSTR(line,1,arro1-1)"\"SUBSTR(line,arro1+1,LENGTH(line)-arro1) END END END END linecount=1 CALL LINEOUT fileout, line END CALL LINEOUT fileout CALL LINEOUT filein RETURN main: /* *========== 1. Check the system and the compiler */ libname="mikmod2.lib" dllname="mikmod2.dll" defname="mikmod2.def" build_dll=0 lib=libname libs="" SAY "libmikmod/2 version "ver_maj"."ver_min"."ver_micro" configuration" SAY /* OS/2 * - MMPM/2 and DART drivers are available */ /* Don't check for fnmatch() */ SAY SAY "Compiler..." SAY "You can compile libmikmod either with emx or with Watcom C. However, due to" SAY "the Unix nature of the library, emx is recommended." message="Do you want to use the emx compiler (recommended) ?" CALL yesno IF RESULT='Y' THEN DO SAY "Configuring for emx..." cc="gcc" cflags="-O2 -Zomf -Zmt -funroll-loops -ffast-math -fno-strength-reduce -Wall" SAY SAY "When building with emx, you can choose between building a static library, or" SAY "a DLL with an import library." message="Do you want to build a DLL (recommended) ?" CALL yesno IF RESULT='Y' THEN DO build_dll=1 cflags=cflags" -Zdll" lib=dllname END ar="emxomfar" arflags="cr" make="make" orule="-o $@ -c" implib="emximp" END ELSE DO SAY "Configuring for Watcom C..." cc="wcc386" cflags="-5r -bt=os2 -fp5 -fpi87 -mf -oeatxh -w4 -zp8" ar="wlib" arflags="-b -c -n" make="wmake -ms" orule="-fo=$^@" implib="" END /* "Checking" for include files */ cflags=cflags" -DHAVE_FCNTL_H -DHAVE_LIMITS_H -DHAVE_UNISTD_H -DHAVE_SYS_IOCTL_H -DHAVE_SYS_TIME_H" cflags=cflags" -DMIKMOD_BUILD" /* *========== 2. Ask the user for his/her choices */ /* Debug version */ SAY SAY "Debugging..." message="Do you want a debug version ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DMIKMOD_DEBUG" IF cc="gcc" THEN cflags=cflags" -g" ELSE IF cc="wcc386" THEN cflags=cflags" -d2" END ELSE DO IF cc="gcc" THEN cflags=cflags" -s -fomit-frame-pointer" ELSE IF cc="wcc386" THEN cflags=cflags" -d1" END /* Drivers */ SAY SAY "Drivers..." /* MMPM/2 driver */ SAY "The MMPM/2 drivers will work with any OS/2 version starting from 2.1." SAY "If you're not running Warp 4, these drivers are recommended." message="Do you want the MMPM/2 drivers ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DDRV_OS2" libs="-lmmpm2" END /* Dart driver */ SAY "The DART (Direct Audio Real Time) driver will use less CPU time than the" SAY "standard MMPM/2 drivers, but will not work on OS/2 2.1 or 3.0." SAY "If you use Warp 4, this driver is recommended." message="Do you want the DART driver ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DDRV_DART" IF libs="" THEN libs="-lmmpm2" END /* WAV file writer driver */ SAY "The WAV file writer driver adds support for output to a WAV file." message="Do you want the WAV file writer driver ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DDRV_WAV" END /* RAW data disk writer driver */ SAY "The RAW file writer driver adds support for raw sound data" SAY "output to a file." message="Do you want the RAW file writer driver ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DDRV_RAW" END /* stdout driver */ SAY "The STDOUT driver adds support for output to stdout (console)" SAY "which is not needed by everyone." message="Do you want the STDOUT driver ?" CALL yesno IF RESULT='Y' THEN DO cflags=cflags" -DDRV_STDOUT" END /* *========== 3. Generate Makefiles */ SAY filein ="Makefile.tmpl" fileout="Makefile" convert="yes" CALL sed filein ="..\include\mikmod.h.in" fileout="..\include\mikmod.h" convert="no" CALL sed filein ="..\include\mikmod.h.in" fileout="..\include\mikmod_build.h" convert="no" CALL sed filein =defname".in" fileout=defname convert="no" CALL sed filein ="Build.cmd.in" fileout="Build.cmd" convert="yes" CALL sed /* *========== 4. Last notes */ SAY SAY "Configuration is complete. libmikmod is ready to compile." SAY "Just enter 'build' at the command prompt..." SAY RETURN libmikmod-3.1.16/configure.ac0000644000000000000000000006221012262033674014543 0ustar rootrootdnl Process this file with autoconf to produce a configure script. AC_PREREQ([2.63]) AC_INIT([libmikmod],[3.1.16]) LIBMIKMOD_MAJOR_VERSION=3 LIBMIKMOD_MINOR_VERSION=1 LIBMIKMOD_MICRO_VERSION=16 LIBMIKMOD_VERSION=$LIBMIKMOD_MAJOR_VERSION.$LIBMIKMOD_MINOR_VERSION.$LIBMIKMOD_MICRO_VERSION AC_CONFIG_AUX_DIR([autotools]) AM_INIT_AUTOMAKE([1.10 foreign subdir-objects]) AC_CONFIG_SRCDIR([include/mikmod.h.in]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_LIBOBJ_DIR([posix]) AM_MAINTAINER_MODE # Library versioning for libtool: CURRENT, REVISION, AGE # - library source changed -> increment REVISION # - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 # - interfaces added -> increment AGE # - interfaces removed -> AGE = 0 MIKMOD_LT_CURRENT=2 MIKMOD_LT_REVISION=6 MIKMOD_LT_AGE=0 AC_SUBST(MIKMOD_LT_CURRENT) AC_SUBST(MIKMOD_LT_REVISION) AC_SUBST(MIKMOD_LT_AGE) # =================== # build target: # =================== AC_CANONICAL_HOST # these for convenience libmikmod_mingw=no libmikmod_cygwin=no libmikmod_linux=no libmikmod_darwin=no libmikmod_netbsd=no libmikmod_openbsd=no libmikmod_os2=no libmikmod_djgpp=no case $host_os in mingw*) libmikmod_mingw=yes ;; cygwin*) libmikmod_cygwin=yes ;; linux*) libmikmod_linux=yes ;; darwin*) libmikmod_darwin=yes ;; netbsd*) libmikmod_netbsd=yes ;; openbsd*) libmikmod_openbsd=yes ;; emx*) libmikmod_os2=yes;; *djgpp) libmikmod_djgpp=yes ;; esac # ============================================================== # libmikmod specific control variables and their default values. # ============================================================== libmikmod_driver_af=no libmikmod_driver_aix=no libmikmod_driver_alsa=yes libmikmod_driver_esd=yes libmikmod_driver_hp=no libmikmod_driver_oss=yes libmikmod_driver_sam9407=no libmikmod_driver_sgi=no libmikmod_driver_sun=no libmikmod_driver_win=yes libmikmod_driver_ds=yes libmikmod_driver_ultra=no libmikmod_driver_os2=yes libmikmod_driver_dart=yes libmikmod_driver_wav=yes libmikmod_driver_raw=yes libmikmod_driver_stdout=yes libmikmod_driver_pipe=yes libmikmod_dynload=yes libmikmod_dynload_underscores=no libmikmod_debug=no libmikmod_threads=yes libmikmod_unix=default # ========================= # Configure script options. # ========================= AC_ARG_ENABLE([af], [AS_HELP_STRING([--enable-af],[include DEC AudioFile server driver [default=no]])], [if test "$enableval" = "yes" then libmikmod_driver_af=yes else libmikmod_driver_af=no fi]) AC_ARG_ENABLE([alsa], [AS_HELP_STRING([--enable-alsa],[Linux only: include ALSA driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_alsa=yes else libmikmod_driver_alsa=no fi]) AC_ARG_ENABLE([esd], [AS_HELP_STRING([--enable-esd],[include EsounD (Enlightened Sound Daemon) driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_esd=yes else libmikmod_driver_esd=no fi]) case $host_os in mingw*|emx*|*djgpp) # windows, dos, os2 don't need stdout or pipe. # so default to disabled, but still user-selectable. libmikmod_driver_pipe=no libmikmod_driver_stdout=no ;; *) ;; esac AC_ARG_ENABLE([wav], [AS_HELP_STRING([--enable-wav],[include support for output to a wav file [default=yes]])], [if test "$enableval" = "yes" then libmikmod_driver_wav=yes else libmikmod_driver_wav=no fi]) AC_ARG_ENABLE([raw], [AS_HELP_STRING([--enable-raw],[include support for output raw data to a file [default=yes]])], [if test "$enableval" = "yes" then libmikmod_driver_raw=yes else libmikmod_driver_raw=no fi]) AC_ARG_ENABLE([stdout], [AS_HELP_STRING([--enable-stdout],[include support for output to stdout [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_stdout=yes else libmikmod_driver_stdout=no fi]) AC_ARG_ENABLE([pipe], [AS_HELP_STRING([--enable-pipe],[include support for output via a pipe to another command [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_pipe=yes else libmikmod_driver_pipe=no fi]) AC_ARG_ENABLE([oss], [AS_HELP_STRING([--enable-oss],[include OSS driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_oss=yes else libmikmod_driver_oss=no fi]) AC_ARG_ENABLE([win], [AS_HELP_STRING([--enable-win],[Windows only: include Windows MCI driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_win=yes else libmikmod_driver_win=no fi]) AC_ARG_ENABLE([ds], [AS_HELP_STRING([--enable-ds],[Windows only: include Direct Sound driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_ds=yes else libmikmod_driver_ds=no fi]) AC_ARG_ENABLE([os2], [AS_HELP_STRING([--enable-os2],[OS/2 only: include the OS/2 MCI driver [guessed]])], [if test "$enableval" = "yes" then libmikmod_driver_os2=yes else libmikmod_driver_os2=no fi]) AC_ARG_ENABLE([dart], [AS_HELP_STRING([--enable-dart],[OS/2 (Warp 4) only: include OS/2 direct audio (DART) [default=no]])], [if test "$enableval" = "yes" then libmikmod_driver_dart=yes else libmikmod_driver_dart=no fi]) AC_ARG_ENABLE([sam9407], [AS_HELP_STRING([--enable-sam9407],[Linux only: include sam9407 driver [default=no]])], [if test "$enableval" = "yes" then libmikmod_driver_sam9407=yes else libmikmod_driver_sam9407=no fi]) AC_ARG_ENABLE([ultra], [AS_HELP_STRING([--enable-ultra],[Linux only: include Ultra driver [default=no]])], [if test "$enableval" = "yes" then libmikmod_driver_ultra=yes else libmikmod_driver_ultra=no fi]) AC_ARG_ENABLE([dl], [AS_HELP_STRING([--enable-dl],[load alsa, esound and ultra drivers at runtime [default=yes]])], [if test "$enableval" = "yes" then libmikmod_dynload=yes else libmikmod_dynload=no fi]) AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],[build a debug version of libmikmod [default=no]])], [if test "$enableval" = "yes" then libmikmod_debug=yes else libmikmod_debug=no fi]) AC_ARG_ENABLE([threads], [AS_HELP_STRING([--enable-threads],[build a thread-safe version of libmikmod [guessed]])], [if test "$enableval" = "yes" then libmikmod_threads=yes else libmikmod_threads=no fi]) AC_ARG_ENABLE([unix], [AS_HELP_STRING([--enable-unix],[override the default value of MIKMOD_UNIX in mikmod_internals.h (if you *really* need to.)])], [if test "$enableval" = "yes" ;then libmikmod_unix=1 elif test "$enableval" = "no" ;then libmikmod_unix=0 fi]) # =================== # Check for programs. # =================== AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_PROG_MAKE_SET # Check if makeinfo support html output. If it doesn't, pretend it's missing # rather than failing rebuilding the documentation. AC_CACHE_CHECK([if makeinfo supports html output],libmikmod_cv_makeinfo_html, if (makeinfo --help 2>&1 | grep html > /dev/null) 2>/dev/null then libmikmod_cv_makeinfo_html=yes else libmikmod_cv_makeinfo_html=no fi) if test $libmikmod_cv_makeinfo_html = no then MAKEINFO="$missing_dir/missing makeinfo" else MAKEINFO="$MAKEINFO --no-split" fi # ==================== # Check for libraries. # ==================== # dl functions # ------------ if test $libmikmod_mingw = yes; then # libmikmod_dynload variable is for dlopen() api only libmikmod_dynload=no fi if test $libmikmod_dynload = yes then libmikmod_dynload=no libmikmod_dllib= # SunOS-style shared libraries AC_CHECK_HEADERS(dlfcn.h) if test $ac_cv_header_dlfcn_h = yes then AC_CHECK_LIB(c,dlopen,libmikmod_dynload=sun, [AC_CHECK_LIB(dl,dlopen,[libmikmod_dynload=sun libmikmod_dllib="-ldl"],libmikmod_dynload=no)]) else # HP-UX-style shared libraries AC_CHECK_HEADERS(dl.h) if test $ac_cv_header_dl_h = yes then AC_CHECK_LIB(dld,shl_load,[libmikmod_dynload=hp libmikmod_dllib="-ldld" CFLAGS="${CFLAGS} -DMIKMOD_DLAPI_HP=1 -I${srcdir}/dlapi"], libmikmod_dynload=no) fi fi fi if test $libmikmod_dynload = sun then AC_CACHE_CHECK( [wherever dynamically loaded symbols need underscores], libmikmod_cv_dynload_underscores, libmikmod_oldlibs=$LIBS LIBS="$LIBS $libmikmod_dllib" AC_LANG_SAVE AC_LANG_C AC_TRY_RUN([#include #ifndef RTLD_GLOBAL #define RTLD_GLOBAL 0 #endif int main(void) { void *libc, *printfptr; libc = dlopen("libc.so", RTLD_LAZY | RTLD_GLOBAL); if (!libc) exit(1); printfptr = dlsym(libc, "_printf"); dlclose(libc); exit(!printfptr); }], libmikmod_cv_dynload_underscores=yes, libmikmod_cv_dynload_underscores=no, libmikmod_cv_dynload_underscores=no) AC_LANG_RESTORE LIBS=$libmikmod_oldlibs ) if test $libmikmod_cv_dynload_underscores = yes then AC_DEFINE([DLSYM_NEEDS_UNDERSCORE], 1, [Define if your system needs leading underscore to function names in dlsym() calls]) fi fi # POSIX.4 threads # --------------- if test $libmikmod_mingw = yes ; then # libmikmod_threads variable is for pthreads only libmikmod_threads=no fi if test $libmikmod_threads = yes then libmikmod_threads=no AC_CACHE_CHECK( [if compiler recognizes -pthread], libmikmod_cv_gcc_pthread, ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -pthread" AC_LANG_SAVE AC_LANG_C AC_TRY_LINK([#include ], [int p = pthread_create(NULL,NULL,NULL,NULL);], libmikmod_cv_gcc_pthread=yes, libmikmod_cv_gcc_pthread=no ) AC_LANG_RESTORE CFLAGS=$ac_save_CFLAGS ) if test $libmikmod_cv_gcc_pthread = yes then dnl There is no need for -pthread on darwin, and gcc dnl complains about unrecognized option -pthread if test $libmikmod_darwin = no then libmikmod_threads="" CFLAGS="$CFLAGS -pthread" fi else dnl AC_CHECK_HEADERS(pthread.h) unreliable AC_CHECK_LIB(pthread,pthread_create,libmikmod_threads=-lpthread, [AC_CHECK_LIB(c_r,pthread_create,libmikmod_threads=-lc_r)]) fi fi # ALSA - Linux only # ----------------- if test $libmikmod_linux = yes && test $libmikmod_driver_alsa = yes then libmikmod_driver_alsa=no AC_CHECK_HEADERS(alsa/asoundlib.h) if test $ac_cv_header_alsa_asoundlib_h = yes then AC_CHECK_LIB(asound,snd_pcm_open,libmikmod_driver_alsa=yes) fi else libmikmod_driver_alsa=no fi # esd # --- if test $libmikmod_driver_esd = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then libmikmod_driver_esd=no AM_PATH_ESD(0.2.18,libmikmod_driver_esd=yes) else libmikmod_driver_esd=no fi # Windows audio # --------------------- case $host_os in mingw*|cygwin*) # do a windows.h check, just in case.. AC_CHECK_HEADERS(windows.h) if test $ac_cv_header_windows_h != yes ; then libmikmod_driver_win=no libmikmod_driver_ds=no libmikmod_driver_xaudio2=no fi if test $libmikmod_driver_ds = yes then libmikmod_driver_ds=no AC_CHECK_HEADERS(dsound.h) if test $ac_cv_header_dsound_h = yes ; then libmikmod_driver_ds=yes fi fi ;; *) libmikmod_driver_win=no libmikmod_driver_ds=no ;; esac # OS/2 audio # --------------------- case $host_os in emx*) # do an os2.h check, just in case.. AC_CHECK_HEADERS(os2.h) if test $ac_cv_header_os2_h != yes ; then libmikmod_driver_os2=no libmikmod_driver_dart=no fi ;; *) libmikmod_driver_os2=no libmikmod_driver_dart=no ;; esac # sgi audio - IRIX only # --------------------- case $host_os in irix*) AC_CHECK_HEADERS(dmedia/audio.h) if test $ac_cv_header_dmedia_audio_h = yes then AC_CHECK_LIB(audio,ALseterrorhandler,libmikmod_driver_sgi=yes) fi ;; esac # audiofile # --------- if test $libmikmod_driver_af = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then libmikmod_driver_af=no AC_CHECK_HEADERS(AF/AFlib.h) if test $ac_cv_header_AF_AFlib_h = yes then AC_CHECK_LIB(AF,AFOpenAudioConn,libmikmod_driver_af=yes) fi else libmikmod_driver_af=no fi # libgus - Linux only # ------------------- if test $libmikmod_linux = yes && test $libmikmod_driver_ultra = yes then libmikmod_driver_ultra=no AC_CHECK_HEADERS(libgus.h) if test $ac_cv_header_libgus_h = yes then AC_CACHE_CHECK([if libgus is new enough],libmikmod_cv_libgus_h_good, AC_TRY_COMPILE([#include ], [gus_info_t *info; int flg1=GUS_INSTR_SIMPLE; int flg2=GUS_WAVE_BIDIR;], libmikmod_cv_libgus_h_good=yes, libmikmod_cv_libgus_h_good=no)) if test $libmikmod_cv_libgus_h_good = yes then AC_CHECK_LIB(gus,gus_cards,libmikmod_driver_ultra=yes) fi fi else libmikmod_driver_ultra=no fi # sam9407 - Linux only # -------------------- if test $libmikmod_linux = yes && test $libmikmod_driver_sam9407 = yes then libmikmod_driver_sam9407=no AC_CHECK_HEADERS(sys/sam9407.h) if test $ac_cv_header_sys_sam9407_h = yes then libmikmod_driver_sam9407=yes fi else libmikmod_driver_sam9407=no fi # ======================= # Check for header files. # ======================= AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h limits.h malloc.h memory.h strings.h sys/ioctl.h unistd.h) # ============================================================= # Check for typedefs, structures, and compiler characteristics. # ============================================================= AC_PROG_GCC_TRADITIONAL AC_C_CONST AC_TYPE_PID_T AC_TYPE_SIZE_T AC_C_BIGENDIAN AC_CACHE_CHECK([if compiler understands the signed keyword], libmikmod_cv_gcc_signed, AC_LANG_SAVE AC_LANG_C AC_TRY_COMPILE(,[signed int t = 0;], libmikmod_cv_gcc_signed=yes,libmikmod_cv_gcc_signed=no) AC_LANG_RESTORE) if test $libmikmod_cv_gcc_signed = yes then DOES_NOT_HAVE_SIGNED="" else DOES_NOT_HAVE_SIGNED="#define signed" fi # ============================ # Check for library functions. # ============================ AC_CHECK_FUNCS(setenv snprintf srandom) AC_REPLACE_FUNCS(memcmp strcasecmp strdup strstr) AC_CHECK_LIB([m],[floor],LIBRARY_LIB="-lm $LIBRARY_LIB") AC_HEADER_EGREP(srandom,math.h,AC_DEFINE([SRANDOM_IN_MATH_H], 1, [Define if your system defines random(3) and srandom(3) in math.h instead of stdlib.h])) # ================ # Choose settings. # ================ libmikmod_driverlist=nosound if test $libmikmod_driver_raw = yes ; then libmikmod_driverlist="raw $libmikmod_driverlist" AC_DEFINE([DRV_RAW], 1, [Define if you want a raw pcm data file writer driver]) fi if test $libmikmod_driver_wav = yes ; then libmikmod_driverlist="wav $libmikmod_driverlist" AC_DEFINE([DRV_WAV], 1, [Define if you want a .wav file writer driver]) fi if test $libmikmod_driver_pipe = yes ; then libmikmod_driverlist="pipe $libmikmod_driverlist" AC_DEFINE([DRV_PIPE], 1, [Define if your system supports binary pipes (i.e. Unix)]) fi if test $libmikmod_driver_stdout = yes ; then libmikmod_driverlist="stdout $libmikmod_driverlist" AC_DEFINE([DRV_STDOUT], 1, [Define if you want support for output to stdout]) fi # If we can guess the drivers needed from the system, no need to ask the user # to specify it manually case $host_os in aix*) AC_DEFINE([AIX], 1, [Define if your system is AIX 3.x - might be needed for 4.x too]) AC_CHECK_HEADERS(sys/audio.h sys/acpa.h) if test $ac_cv_header_sys_audio_h = yes && \ test $ac_cv_header_sys_acpa_h = yes then libmikmod_driver_aix=yes fi ;; hpux*) AC_CHECK_HEADERS(sys/audio.h) if test $ac_cv_header_sys_audio_h = yes then libmikmod_driver_hp=yes fi ;; netbsd*|openbsd*) AC_CHECK_HEADERS(sys/audioio.h) if test $ac_cv_header_sys_audioio_h = yes then libmikmod_driver_sun=yes if test $libmikmod_netbsd = yes then libmikmod_driverlist="netbsd $libmikmod_driverlist" else libmikmod_driverlist="openbsd $libmikmod_driverlist" fi fi ;; sunos*|solaris*) AC_CHECK_HEADERS(sun/audioio.h sys/audioio.h) if test $ac_cv_header_sun_audioio_h = yes || \ test $ac_cv_header_sys_audioio_h = yes then libmikmod_driver_sun=yes libmikmod_driverlist="sun $libmikmod_driverlist" if test "$cross_compiling" != yes then case `uname -r` in 4*) AC_DEFINE([SUNOS], 1, [Define if your system is SunOS 4.x]) ;; esac fi fi ;; esac if test $libmikmod_driver_af = yes then libmikmod_driverlist="$libmikmod_driverlist audiofile" AC_DEFINE([DRV_AF], 1, [Define if the DEC AudioFile server driver is compiled]) LIBRARY_LIB="-lAF $LIBRARY_LIB" fi if test $libmikmod_driver_win = yes then libmikmod_driverlist="win $libmikmod_driverlist" AC_DEFINE([DRV_WIN], 1, [Define if the Windows MCI driver is compiled]) LIBRARY_LIB="-lwinmm $LIBRARY_LIB" fi if test $libmikmod_driver_ds = yes then libmikmod_driverlist="ds $libmikmod_driverlist" AC_DEFINE([DRV_DS], 1, [Define if the Windows DirectSound driver is compiled]) LIBRARY_LIB="-ldsound $LIBRARY_LIB" fi if test $libmikmod_driver_os2 = yes then libmikmod_driverlist="os2 $libmikmod_driverlist" AC_DEFINE([DRV_OS2], 1, [Define if the OS/2 MCI driver is compiled]) # drv_os2 and drv_dart both link to mmpm2 if test $libmikmod_driver_dart = no ; then LIBRARY_LIB="-lmmpm2 $LIBRARY_LIB" fi fi if test $libmikmod_driver_dart = yes then libmikmod_driverlist="dart $libmikmod_driverlist" AC_DEFINE([DRV_DART], 1, [Define if the OS/2 direct audio (DART) driver is compiled]) LIBRARY_LIB="-lmmpm2 $LIBRARY_LIB" fi if test $libmikmod_driver_aix = yes then libmikmod_driverlist="aix $libmikmod_driverlist" AC_DEFINE([DRV_AIX], 1, [Define if the AIX audio driver is compiled]) fi if test $libmikmod_driver_alsa = yes then libmikmod_driverlist="alsa $libmikmod_driverlist" AC_DEFINE([DRV_ALSA], 1, [Define if the Linux ALSA driver is compiled]) if test $libmikmod_dynload = no then LIBRARY_LIB="-lasound $LIBRARY_LIB" fi fi if test $libmikmod_driver_esd = yes then libmikmod_driverlist="esd $libmikmod_driverlist" AC_DEFINE([DRV_ESD], 1, [Define if the Enlightened Sound Daemon driver is compiled]) CFLAGS="$CFLAGS $ESD_CFLAGS" # Under Solaris and perhaps other systems, we have to forward esd # dependencies to libmikmod's dependency list. # However, no need to keep libraries we won't require (libossaudio on BSD # systems, libaudiofile, libasound on Linux) if test $libmikmod_dynload != no then ESD_LIBS="`echo $ESD_LIBS|sed -e 's/-lesd//'|sed -e 's/-lasound//'|sed -e 's/-laudiofile//'|sed -e 's/-lossaudio//'`" fi LIBRARY_LIB="$ESD_LIBS $LIBRARY_LIB" fi if test $libmikmod_driver_hp = yes then libmikmod_driverlist="hp $libmikmod_driverlist" AC_DEFINE([DRV_HP], 1, [Define if the HP-UX audio driver is compiled]) fi if test $libmikmod_driver_oss = yes && test $libmikmod_mingw = no && test $libmikmod_darwin = no then # under Linux, /dev/sndstat is deprecated, never check for OSS as the # headers are always found. if test $libmikmod_linux = no && test "$cross_compiling" != yes then AC_CACHE_CHECK([for OSS (/dev/sndstat)],libmikmod_cv_oss_dev_sndstat, if test -c /dev/sndstat then libmikmod_cv_oss_dev_sndstat=yes else libmikmod_cv_oss_dev_sndstat=no fi) else libmikmod_cv_oss_dev_sndstat=yes fi if test $libmikmod_cv_oss_dev_sndstat = yes then AC_CHECK_HEADERS(machine/soundcard.h) AC_CHECK_HEADERS(sys/soundcard.h) if test $ac_cv_header_machine_soundcard_h = yes || \ test $ac_cv_header_sys_soundcard_h = yes then libmikmod_driverlist="oss $libmikmod_driverlist" AC_DEFINE([DRV_OSS], 1, [Define if the Open Sound System driver is compiled]) fi fi else libmikmod_driver_oss=no fi if test $libmikmod_driver_sam9407 = yes then libmikmod_driverlist="sam9407 $libmikmod_driverlist" AC_DEFINE([DRV_SAM9407], 1, [Define if the Linux SAM9407 driver is compiled]) fi if test $libmikmod_driver_sgi = yes then libmikmod_driverlist="sgi $libmikmod_driverlist" AC_DEFINE([DRV_SGI], 1, [Define if the SGI audio driver is compiled]) LIBRARY_LIB="-laudio $LIBRARY_LIB" fi if test $libmikmod_driver_sun = yes then AC_DEFINE([DRV_SUN], 1, [Define if the Sun audio driver or compatible (NetBSD, OpenBSD) is compiled]) fi if test $libmikmod_driver_ultra = yes then libmikmod_driverlist="ultra $libmikmod_driverlist" AC_DEFINE([DRV_ULTRA], 1, [Define if the Linux Ultra driver is compiled]) if test $libmikmod_dynload = no then LIBRARY_LIB="-lgus $LIBRARY_LIB" fi fi if test $libmikmod_debug = yes then AC_DEFINE([MIKMOD_DEBUG], 1, [Define if you want a debug version of the library]) CC="$CC -g" fi if test $libmikmod_dynload != no then AC_DEFINE([MIKMOD_DYNAMIC], 1, [Define if you want runtime dynamic linking of ALSA and EsounD drivers]) LIBRARY_LIB="$libmikmod_dllib $LIBRARY_LIB" if test $libmikmod_dynload = sun then # RTLD_GLOBAL is not defined under every system AC_CACHE_CHECK([if RTLD_GLOBAL is defined],libmikmod_cv_decl_rtld_global, AC_TRY_COMPILE([#include ],[int flag=RTLD_GLOBAL;], libmikmod_cv_decl_rtld_global=yes, libmikmod_cv_decl_rtld_global=no)) if test $libmikmod_cv_decl_rtld_global = yes then AC_DEFINE([HAVE_RTLD_GLOBAL], 1, [Define if your system has RTLD_GLOBAL defined in ]) fi fi fi # If compiling with gcc, use adequate optimization flags if test $ac_cv_prog_gcc = yes then # On at least x86 platforms, gcc 2.7.2.1 and earlier won't work if -O3 (or # -finline-functions) are used. Versions 2.7.2.3, 2.8.x and egcs are ok # (didn't test 2.7.2.2). # Until there's an easy way to catch broken inlining, we choose flags known # to work correctly depending of the compiler version. AC_CACHE_CHECK([if inlining functions is safe], libmikmod_cv_gcc_inline_safe, AC_TRY_COMPILE(,[ #if !(defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 7)) #error inlining functions is not safe #endif ], libmikmod_cv_gcc_inline_safe=yes, libmikmod_cv_gcc_inline_safe=no)) if test $libmikmod_cv_gcc_inline_safe = no then CFLAGS="$CFLAGS -fno-strength-reduce" fi CFLAGS="$CFLAGS -ffast-math" if test $libmikmod_darwin = yes; then CFLAGS="$CFLAGS -fno-common" fi if test $libmikmod_debug = yes then CFLAGS="$CFLAGS -Wall -Werror" else CFLAGS="$CFLAGS -Wall" fi # pgcc 2.95.2 appears not to be able to compile libmikmod, although regular # gcc works fine. Issue a warning if the compiler is pgcc, until a reliable # way to detect flawed version (or, better, a reliable workaround) is # found. dnl do not cache this test - better rechecking every time AC_MSG_CHECKING(if compiler is pgcc) if ($CC -v 2>&1 | grep ^pgcc > /dev/null) 2>/dev/null then libmikmod_gcc_is_pgcc=yes else libmikmod_gcc_is_pgcc=no fi AC_MSG_RESULT($libmikmod_gcc_is_pgcc) if test $libmikmod_gcc_is_pgcc = yes then echo " *** Version 2.95.2 of this compiler, and perhaps others, are unable to *** compile libmikmod. If compilation fails for playercode/virtch.c *** around line 650, with the error ``internal error--insn does not *** satisfy its constraints'', then you'll have to use another compiler. " >&2 fi fi if test x$libmikmod_threads != xno then AC_DEFINE([HAVE_PTHREAD], 1, [Define if your system provides POSIX.4 threads]) CFLAGS="$CFLAGS -D_REENTRANT" LIBRARY_LIB="$libmikmod_threads $LIBRARY_LIB" REENTRANT="-D_REENTRANT" if test $libmikmod_cv_gcc_pthread = yes then dnl There is no need for -pthread on darwin, and gcc dnl complains about unrecognized option -pthread if test $libmikmod_darwin = no then REENTRANT="-pthread $REENTRANT" LIB_LDADD="-pthread" fi fi fi # MIKMOD_UNIX override if test "$libmikmod_unix" = "0" || test "$libmikmod_unix" = "1" then AC_DEFINE_UNQUOTED([MIKMOD_UNIX], $libmikmod_unix, [Define to 0 or 1 to override MIKMOD_UNIX in mikmod_internals.h.]) fi # symbol visibility ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden -Werror" AC_CACHE_CHECK([if compiler supports visibility attributes], libmikmod_cv_gcc_visibility, AC_LANG_SAVE AC_LANG_C AC_TRY_COMPILE([void foo(void); __attribute__((visibility("default"))) void foo(void) {}], [], libmikmod_cv_gcc_visibility=yes,libmikmod_cv_gcc_visibility=no) AC_LANG_RESTORE) # we want symbol -fvisibility for elf targets, however it works # with darwin/macho too. other than that, windows, dos and os2 # do not need it: for any such targets, the -Werror switch is # supposed to fail the above check. (I'm adding the manual test # below nonetheless, just in case.) case $host_os in mingw*|cygwin*|emx*|*djgpp) libmikmod_cv_gcc_visibility=no ;; esac CFLAGS="$ac_save_CFLAGS" if test $libmikmod_cv_gcc_visibility = yes ;then CFLAGS="$CFLAGS -DSYM_VISIBILITY -fvisibility=hidden" fi # ================= # Create Makefiles. # ================= AC_SUBST(REENTRANT) AC_SUBST(DOES_NOT_HAVE_SIGNED) AC_SUBST(LIBRARY_LIB) AC_SUBST(LIBMIKMOD_MAJOR_VERSION) AC_SUBST(LIBMIKMOD_MINOR_VERSION) AC_SUBST(LIBMIKMOD_MICRO_VERSION) AC_SUBST(LIBMIKMOD_VERSION) AC_SUBST(LIB_LDADD) AC_OUTPUT( libmikmod-config libmikmod.pc libmikmod.spec Makefile docs/Makefile docs/libmikmod-config.1 dlapi/Makefile drivers/Makefile include/Makefile include/mikmod.h include/mikmod_build.h:include/mikmod.h.in loaders/Makefile mmio/Makefile playercode/Makefile posix/Makefile macintosh/Makefile macintosh/mikmod.h:include/mikmod.h.in macintosh/mikmod_build.h:include/mikmod.h.in macintosh/_libmikmodversion.r os2/Makefile win32/Makefile win32/mikmod.h:include/mikmod.h.in win32/mikmod_build.h:include/mikmod.h.in ) chmod +x libmikmod-config cat macintosh/_libmikmodversion.r | tr '\n' '\r' > macintosh/libmikmodversion.r # ==================== # Print configuration. # ==================== libmikmod_driverlist=`echo $libmikmod_driverlist|sed -e 's, , ,g'` if test $libmikmod_dynload != no then libmikmod_dynload="yes, ${libmikmod_dynload} style" fi echo " Library configuration: Source code location: $srcdir Compiler: $CC Compiler flags: $CFLAGS Debug version: $libmikmod_debug Dynamically loaded drivers whenever possible: $libmikmod_dynload Drivers to be compiled: $libmikmod_driverlist Install path: $prefix/lib, $prefix/include " libmikmod-3.1.16/mmio/0000755000000000000000000000000012262343244013212 5ustar rootrootlibmikmod-3.1.16/mmio/Makefile.in0000644000000000000000000002524212260336527015270 0ustar rootroot# Makefile.in generated by automake 1.11.6 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 = : build_triplet = @build@ host_triplet = @host@ subdir = mmio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/esd.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ 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@ DLLTOOL = @DLLTOOL@ DOES_NOT_HAVE_SIGNED = @DOES_NOT_HAVE_SIGNED@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ESD_CFLAGS = @ESD_CFLAGS@ ESD_CONFIG = @ESD_CONFIG@ ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBMIKMOD_MAJOR_VERSION = @LIBMIKMOD_MAJOR_VERSION@ LIBMIKMOD_MICRO_VERSION = @LIBMIKMOD_MICRO_VERSION@ LIBMIKMOD_MINOR_VERSION = @LIBMIKMOD_MINOR_VERSION@ LIBMIKMOD_VERSION = @LIBMIKMOD_VERSION@ LIBOBJS = @LIBOBJS@ LIBRARY_LIB = @LIBRARY_LIB@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_LDADD = @LIB_LDADD@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MIKMOD_LT_AGE = @MIKMOD_LT_AGE@ MIKMOD_LT_CURRENT = @MIKMOD_LT_CURRENT@ MIKMOD_LT_REVISION = @MIKMOD_LT_REVISION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ RANLIB = @RANLIB@ REENTRANT = @REENTRANT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ 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@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ 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@ EXTRA_DIST = mmalloc.c mmerror.c mmio.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mmio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mmio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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-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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ 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-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: libmikmod-3.1.16/mmio/mmalloc.c0000644000000000000000000000317410730716636015016 0ustar rootroot/* MikMod sound library (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mmalloc.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Dynamic memory routines ==============================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" /* Same as malloc, but sets error variable _mm_error when fails */ void* _mm_malloc(size_t size) { void *d; if(!(d=calloc(1,size))) { _mm_errno = MMERR_OUT_OF_MEMORY; if(_mm_errorhandler) _mm_errorhandler(); } return d; } /* Same as calloc, but sets error variable _mm_error when fails */ void* _mm_calloc(size_t nitems,size_t size) { void *d; if(!(d=calloc(nitems,size))) { _mm_errno = MMERR_OUT_OF_MEMORY; if(_mm_errorhandler) _mm_errorhandler(); } return d; } /* ex:set ts=4: */ libmikmod-3.1.16/mmio/mmerror.c0000644000000000000000000001550412262235016015043 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mmerror.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Error handling functions. Register an error handler with _mm_RegisterErrorHandler() and you're all set. ==============================================================================*/ /* The global variables _mm_errno, and _mm_critical are set before the error handler in called. See below for the values of these variables. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "mikmod_internals.h" #define _mmerr_invalid "Invalid error code" static char *_mm_errmsg[MMERR_MAX+1] = { /* No error */ "No error", /* Generic errors */ "Could not open requested file", "Out of memory", "Dynamic linking failed", /* Sample errors */ "Out of memory to load sample", "Out of sample handles to load sample", "Sample format not recognized", /* Module errors */ "Failure loading module pattern", "Failure loading module track", "Failure loading module header", "Failure loading sampleinfo", "Module format not recognized", "Module sample format not recognized", "Synthsounds not supported in MED files", "Compressed sample is invalid", /* Driver errors: */ "Sound device not detected", "Device number out of range", "Software mixer failure", "Could not open sound device", "This driver supports 8 bit linear output only", "This driver supports 16 bit linear output only", "This driver supports stereo output only", "This driver supports uLaw output (8 bit mono, 8 kHz) only", "Unable to set non-blocking mode for audio device", /* AudioFile driver errors */ #ifdef DRV_AF "Cannot find suitable AudioFile audio port", #else _mmerr_invalid, #endif /* AIX driver errors */ #ifdef DRV_AIX "Configuration (init step) of audio device failed", "Configuration (control step) of audio device failed", "Configuration (start step) of audio device failed", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Ultrasound driver errors */ #ifdef DRV_ULTRA "Ultrasound driver only works in 16 bit stereo 44 KHz", "Ultrasound card could not be reset", "Could not start Ultrasound timer", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* HP driver errors */ #ifdef DRV_HP "Unable to select 16bit-linear sample format", "Could not select requested sample-rate", "Could not select requested number of channels", "Unable to select audio output", "Unable to get audio description", "Could not set transmission buffer size", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Open Sound System driver errors */ #ifdef DRV_OSS "Could not set fragment size", "Could not set sample size", "Could not set mono/stereo setting", "Could not set sample rate", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* SGI driver errors */ #ifdef DRV_SGI "Unsupported sample rate", "Hardware does not support 16 bit sound", "Hardware does not support 8 bit sound", "Hardware does not support stereo sound", "Hardware does not support mono sound", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Sun driver errors */ #ifdef DRV_SUN "Sound device initialization failed", #else _mmerr_invalid, #endif /* OS/2 drivers errors */ #if defined(DRV_OS2) || defined(DRV_DART) "Could not set mixing parameters", #else _mmerr_invalid, #endif #ifdef DRV_OS2 "Could not create playback semaphores", "Could not create playback timer", "Could not create playback thread", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* DirectSound driver errors */ #ifdef DRV_DS "Could not set playback priority", "Could not create playback buffers", "Could not set playback format", "Could not register callback", "Could not register event", "Could not create playback thread", "Could not initialize playback thread", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Windows Multimedia API driver errors */ #ifdef DRV_WIN "Invalid device handle", "The resource is already allocated", "Invalid device identifier", "Unsupported output format", "Unknown error", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Macintosh driver errors */ #ifdef DRV_MAC "Unsupported sample rate", "Could not start playback", #else _mmerr_invalid, _mmerr_invalid, #endif /* errors 65-86 non-existent in libmikmod2. */ _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, /* ALSA driver errors */ #ifdef DRV_ALSA "No ALSA configurations available", "Could not set ALSA output params", "Could not set playback format", "Could not set sample rate", "Could not set mono/stereo setting", "Could not get buffer size from ALSA", "ALSA PCM start error", "ALSA PCM write error", "ALSA PCM recovery failure", #else _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, #endif /* Invalid error */ _mmerr_invalid }; MIKMODAPI char *MikMod_strerror(int code) { if ((code<0)||(code>MMERR_MAX)) code=MMERR_MAX; return _mm_errmsg[code]; } /* User installed error callback */ MikMod_handler_t _mm_errorhandler = NULL; MIKMODAPI int _mm_errno = 0; MIKMODAPI BOOL _mm_critical = 0; static MikMod_handler_t _mm_registererrorhandler(MikMod_handler_t proc) { MikMod_handler_t oldproc=_mm_errorhandler; _mm_errorhandler = proc; return oldproc; } MIKMODAPI MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t proc) { MikMod_handler_t result; MUTEX_LOCK(vars); result=_mm_registererrorhandler(proc); MUTEX_UNLOCK(vars); return result; } /* ex:set ts=4: */ libmikmod-3.1.16/mmio/mmio.c0000644000000000000000000002304012226736624014326 0ustar rootroot/* MikMod sound library (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*============================================================================== $Id: mmio.c,v 1.1.1.1 2004/06/01 12:16:17 raph Exp $ Portable file I/O routines ==============================================================================*/ /* The way this module works: - _mm_fopen will call the errorhandler [see mmerror.c] in addition to setting _mm_errno on exit. - _mm_iobase is for internal use. It is used by Player_LoadFP to ensure that it works properly with wad files. - _mm_read_I_* and _mm_read_M_* differ : the first is for reading data written by a little endian (intel) machine, and the second is for reading big endian (Mac, RISC, Alpha) machine data. - _mm_write functions work the same as the _mm_read functions. - _mm_read_string is for reading binary strings. It is basically the same as an fread of bytes. */ /* FIXME the _mm_iobase variable ought to be MREADER-specific. It will eventually become a private field of the MREADER structure, but this will require a soname version bump. In the meantime, the drawback is that if you use the xxx_LoadFP functions, you can't have several MREADER objects with different iobase values. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_UNISTD_H #include #endif #include #include #include "mikmod_internals.h" #ifdef SUNOS extern int fclose(FILE *); extern int fgetc(FILE *); extern int fputc(int, FILE *); extern size_t fread(void *, size_t, size_t, FILE *); extern int fseek(FILE *, long, int); extern size_t fwrite(const void *, size_t, size_t, FILE *); #endif #define COPY_BUFSIZE 1024 static long _mm_iobase = 0, temp_iobase = 0; FILE* _mm_fopen(const CHAR* fname,const CHAR* attrib) { FILE *fp; if(!(fp=fopen(fname,attrib))) { _mm_errno = MMERR_OPENING_FILE; if(_mm_errorhandler) _mm_errorhandler(); } return fp; } BOOL _mm_FileExists(const CHAR* fname) { FILE *fp; if(!(fp=fopen(fname,"r"))) return 0; fclose(fp); return 1; } int _mm_fclose(FILE *fp) { return fclose(fp); } /* Sets the current file-position as the new _mm_iobase */ void _mm_iobase_setcur(MREADER* reader) { temp_iobase=_mm_iobase; /* store old value in case of revert */ _mm_iobase=reader->Tell(reader); } /* Reverts to the last known _mm_iobase value. */ void _mm_iobase_revert(void) { _mm_iobase=temp_iobase; } /*========== File Reader */ typedef struct MFILEREADER { MREADER core; FILE* file; } MFILEREADER; static BOOL _mm_FileReader_Eof(MREADER* reader) { return feof(((MFILEREADER*)reader)->file); } static BOOL _mm_FileReader_Read(MREADER* reader,void* ptr,size_t size) { return !!fread(ptr,size,1,((MFILEREADER*)reader)->file); } static int _mm_FileReader_Get(MREADER* reader) { return fgetc(((MFILEREADER*)reader)->file); } static int _mm_FileReader_Seek(MREADER* reader,long offset,int whence) { return fseek(((MFILEREADER*)reader)->file, (whence==SEEK_SET)?offset+_mm_iobase:offset,whence); } static long _mm_FileReader_Tell(MREADER* reader) { return ftell(((MFILEREADER*)reader)->file)-_mm_iobase; } MREADER *_mm_new_file_reader(FILE* fp) { MFILEREADER* reader=(MFILEREADER*)_mm_malloc(sizeof(MFILEREADER)); if (reader) { reader->core.Eof =&_mm_FileReader_Eof; reader->core.Read=&_mm_FileReader_Read; reader->core.Get =&_mm_FileReader_Get; reader->core.Seek=&_mm_FileReader_Seek; reader->core.Tell=&_mm_FileReader_Tell; reader->file=fp; } return (MREADER*)reader; } void _mm_delete_file_reader (MREADER* reader) { if(reader) free(reader); } /*========== File Writer */ typedef struct MFILEWRITER { MWRITER core; FILE* file; } MFILEWRITER; static int _mm_FileWriter_Seek(MWRITER* writer,long offset,int whence) { return fseek(((MFILEWRITER*)writer)->file,offset,whence); } static long _mm_FileWriter_Tell(MWRITER* writer) { return ftell(((MFILEWRITER*)writer)->file); } static BOOL _mm_FileWriter_Write(MWRITER* writer,void* ptr,size_t size) { return (fwrite(ptr,size,1,((MFILEWRITER*)writer)->file)==size); } static int _mm_FileWriter_Put(MWRITER* writer,int value) { return fputc(value,((MFILEWRITER*)writer)->file); } MWRITER *_mm_new_file_writer(FILE* fp) { MFILEWRITER* writer=(MFILEWRITER*)_mm_malloc(sizeof(MFILEWRITER)); if (writer) { writer->core.Seek =&_mm_FileWriter_Seek; writer->core.Tell =&_mm_FileWriter_Tell; writer->core.Write=&_mm_FileWriter_Write; writer->core.Put =&_mm_FileWriter_Put; writer->file=fp; } return (MWRITER*) writer; } void _mm_delete_file_writer (MWRITER* writer) { if(writer) free (writer); } /*========== Write functions */ void _mm_write_string(CHAR* data,MWRITER* writer) { if(data) _mm_write_UBYTES(data,strlen(data),writer); } void _mm_write_M_UWORD(UWORD data,MWRITER* writer) { _mm_write_UBYTE(data>>8,writer); _mm_write_UBYTE(data&0xff,writer); } void _mm_write_I_UWORD(UWORD data,MWRITER* writer) { _mm_write_UBYTE(data&0xff,writer); _mm_write_UBYTE(data>>8,writer); } void _mm_write_M_ULONG(ULONG data,MWRITER* writer) { _mm_write_M_UWORD(data>>16,writer); _mm_write_M_UWORD(data&0xffff,writer); } void _mm_write_I_ULONG(ULONG data,MWRITER* writer) { _mm_write_I_UWORD(data&0xffff,writer); _mm_write_I_UWORD(data>>16,writer); } void _mm_write_M_SWORD(SWORD data,MWRITER* writer) { _mm_write_M_UWORD((UWORD)data,writer); } void _mm_write_I_SWORD(SWORD data,MWRITER* writer) { _mm_write_I_UWORD((UWORD)data,writer); } void _mm_write_M_SLONG(SLONG data,MWRITER* writer) { _mm_write_M_ULONG((ULONG)data,writer); } void _mm_write_I_SLONG(SLONG data,MWRITER* writer) { _mm_write_I_ULONG((ULONG)data,writer); } void _mm_write_M_SWORDS(SWORD *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_M_SWORD(*(buffer++),writer); } void _mm_write_M_UWORDS(UWORD *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_M_UWORD(*(buffer++),writer); } void _mm_write_I_SWORDS(SWORD *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_I_SWORD(*(buffer++),writer); } void _mm_write_I_UWORDS(UWORD *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_I_UWORD(*(buffer++),writer); } void _mm_write_M_SLONGS(SLONG *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_M_SLONG(*(buffer++),writer); } void _mm_write_M_ULONGS(ULONG *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_M_ULONG(*(buffer++),writer); } void _mm_write_I_SLONGS(SLONG *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_I_SLONG(*(buffer++),writer); } void _mm_write_I_ULONGS(ULONG *buffer,int cnt,MWRITER* writer) { while(cnt-- > 0) _mm_write_I_ULONG(*(buffer++),writer); } /*========== Read functions */ BOOL _mm_read_string(CHAR* buffer,int cnt,MREADER* reader) { return reader->Read(reader,buffer,cnt); } UWORD _mm_read_M_UWORD(MREADER* reader) { UWORD result=((UWORD)_mm_read_UBYTE(reader))<<8; result|=_mm_read_UBYTE(reader); return result; } UWORD _mm_read_I_UWORD(MREADER* reader) { UWORD result=_mm_read_UBYTE(reader); result|=((UWORD)_mm_read_UBYTE(reader))<<8; return result; } ULONG _mm_read_M_ULONG(MREADER* reader) { ULONG result=((ULONG)_mm_read_M_UWORD(reader))<<16; result|=_mm_read_M_UWORD(reader); return result; } ULONG _mm_read_I_ULONG(MREADER* reader) { ULONG result=_mm_read_I_UWORD(reader); result|=((ULONG)_mm_read_I_UWORD(reader))<<16; return result; } SWORD _mm_read_M_SWORD(MREADER* reader) { return((SWORD)_mm_read_M_UWORD(reader)); } SWORD _mm_read_I_SWORD(MREADER* reader) { return((SWORD)_mm_read_I_UWORD(reader)); } SLONG _mm_read_M_SLONG(MREADER* reader) { return((SLONG)_mm_read_M_ULONG(reader)); } SLONG _mm_read_I_SLONG(MREADER* reader) { return((SLONG)_mm_read_I_ULONG(reader)); } BOOL _mm_read_M_SWORDS(SWORD *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_M_SWORD(reader); return !reader->Eof(reader); } BOOL _mm_read_M_UWORDS(UWORD *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_M_UWORD(reader); return !reader->Eof(reader); } BOOL _mm_read_I_SWORDS(SWORD *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_I_SWORD(reader); return !reader->Eof(reader); } BOOL _mm_read_I_UWORDS(UWORD *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_I_UWORD(reader); return !reader->Eof(reader); } BOOL _mm_read_M_SLONGS(SLONG *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_M_SLONG(reader); return !reader->Eof(reader); } BOOL _mm_read_M_ULONGS(ULONG *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_M_ULONG(reader); return !reader->Eof(reader); } BOOL _mm_read_I_SLONGS(SLONG *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_I_SLONG(reader); return !reader->Eof(reader); } BOOL _mm_read_I_ULONGS(ULONG *buffer,int cnt,MREADER* reader) { while(cnt-- > 0) *(buffer++)=_mm_read_I_ULONG(reader); return !reader->Eof(reader); } /* ex:set ts=4: */ libmikmod-3.1.16/mmio/Makefile.am0000644000000000000000000000005010003535130015225 0ustar rootrootEXTRA_DIST = mmalloc.c mmerror.c mmio.c libmikmod-3.1.16/config.h.in0000644000000000000000000001472612260336527014312 0ustar rootroot/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define if your system is AIX 3.x - might be needed for 4.x too */ #undef AIX /* Define if your system needs leading underscore to function names in dlsym() calls */ #undef DLSYM_NEEDS_UNDERSCORE /* Define if the DEC AudioFile server driver is compiled */ #undef DRV_AF /* Define if the AIX audio driver is compiled */ #undef DRV_AIX /* Define if the Linux ALSA driver is compiled */ #undef DRV_ALSA /* Define if the OS/2 direct audio (DART) driver is compiled */ #undef DRV_DART /* Define if the Windows DirectSound driver is compiled */ #undef DRV_DS /* Define if the Enlightened Sound Daemon driver is compiled */ #undef DRV_ESD /* Define if the HP-UX audio driver is compiled */ #undef DRV_HP /* Define if the OS/2 MCI driver is compiled */ #undef DRV_OS2 /* Define if the Open Sound System driver is compiled */ #undef DRV_OSS /* Define if your system supports binary pipes (i.e. Unix) */ #undef DRV_PIPE /* Define if you want a raw pcm data file writer driver */ #undef DRV_RAW /* Define if the Linux SAM9407 driver is compiled */ #undef DRV_SAM9407 /* Define if the SGI audio driver is compiled */ #undef DRV_SGI /* Define if you want support for output to stdout */ #undef DRV_STDOUT /* Define if the Sun audio driver or compatible (NetBSD, OpenBSD) is compiled */ #undef DRV_SUN /* Define if the Linux Ultra driver is compiled */ #undef DRV_ULTRA /* Define if you want a .wav file writer driver */ #undef DRV_WAV /* Define if the Windows MCI driver is compiled */ #undef DRV_WIN /* Define to 1 if you have the header file. */ #undef HAVE_AF_AFLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_ALSA_ASOUNDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_DL_H /* Define to 1 if you have the header file. */ #undef HAVE_DMEDIA_AUDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_DSOUND_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBGUS_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_SOUNDCARD_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the `memcmp' function. */ #undef HAVE_MEMCMP /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_OS2_H /* Define if your system provides POSIX.4 threads */ #undef HAVE_PTHREAD /* Define if your system has RTLD_GLOBAL defined in */ #undef HAVE_RTLD_GLOBAL /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `srandom' function. */ #undef HAVE_SRANDOM /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file. */ #undef HAVE_SUN_AUDIOIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ACPA_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_AUDIOIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_AUDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SAM9407_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOUNDCARD_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define if you want a debug version of the library */ #undef MIKMOD_DEBUG /* Define if you want runtime dynamic linking of ALSA and EsounD drivers */ #undef MIKMOD_DYNAMIC /* Define to 0 or 1 to override MIKMOD_UNIX in mikmod_internals.h. */ #undef MIKMOD_UNIX /* 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 home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if your system defines random(3) and srandom(3) in math.h instead of stdlib.h */ #undef SRANDOM_IN_MATH_H /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if your system is SunOS 4.x */ #undef SUNOS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t libmikmod-3.1.16/libmikmod.spec.in0000644000000000000000000000445712224033124015502 0ustar rootroot%define version @LIBMIKMOD_MAJOR_VERSION@.@LIBMIKMOD_MINOR_VERSION@.@LIBMIKMOD_MICRO_VERSION@ %define release 1 Summary: sound library for module files Name: libmikmod Version: %{version} Release: %{release} License: LGPL Group: System Environment/Libraries URL: http://mikmod.sourceforge.net/ #Source: http://mikmod.sourceforge.net/files/%{name}-%{version}.tar.gz Source: http://download.sourceforge.net/mikmod/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root %description A portable sound library for Unix and other systems, capable of playing samples as well as module files, on a wide range of sound devices. %package devel Summary: Libraries and include files to develop libmikmod applications Group: Development/Libraries Requires: %{name} = %{version} %description devel Install the libmikmod-devel package if you want to develop applications that will use the libmikmod library. %prep %setup -q -n %{name}-%{version} %build %configure make %install [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT %makeinstall rm -f $RPM_BUILD_ROOT/%{_infodir}/dir %clean [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %post devel if [ "$1" = "1" ]; then # first install if [ -x /sbin/install-info ]; then for infofile in %{_infodir}/mikmod.info*; do /sbin/install-info $infofile %{_infodir}/dir done fi fi %preun devel if [ "$1" = "0" ]; then # last uninstall if [ -x /sbin/install-info ]; then for infofile in %{_infodir}/mikmod.info*; do /sbin/install-info --delete $infofile %{_infodir}/dir done fi fi %ifos darwin %define __defattr %defattr(-,root,wheel) %define __soext dylib %else %define __defattr %defattr(-,root,root) %define __soext so %endif %files %{__defattr} %doc AUTHORS COPYING.LESSER COPYING.LIB INSTALL NEWS README TODO %ifnos darwin %{_libdir}/libmikmod.%{__soext}.* %else %{_libdir}/libmikmod.*.%{__soext} %endif %files devel %{__defattr} %doc docs/mikmod.html %{_bindir}/libmikmod-config %{_mandir}/man?/* %{_includedir}/mikmod.h %{_libdir}/libmikmod.a %{_libdir}/libmikmod.la %{_libdir}/libmikmod.%{__soext} %{_libdir}/pkgconfig/libmikmod.pc %{_infodir}/mikmod.info* %{_datadir}/aclocal/* libmikmod-3.1.16/TODO0000644000000000000000000000253410003535130012731 0ustar rootrootTODO list for future versions (or ROADMAP if you prefer) ============================= **** for the next major release, libmikmod 3.2: - bugfixes - ability to have several modules in memory (it doesn't work in all cases in the current version) - integration of the LINA (LINA Is Not A3D) companion library written by David Banz. - total module length computation - ability to seek in modules in smaller chunks than patterns **** during 3.2.x maintenance releases: - a NAS (Network Audio System) driver - DMF and PSM loaders - loading of stereo and ADPCM wave files **** hopefully in 3.x.x releases: - bugfixes - use of glib or Pth for better thread support (i.e. more portability) - LIQ loader (see with Claudio Matsuoka) - MED improvements (at least I hope so) - software mixer improvements - an OSS sequencer driver - an ALSA sequencer driver **** Will hopefully occur in 4.x - bugfixes - a TFMX loader (see with Claudio, too) **** Plans for the 4.x series and later: - bugfixes - a well-defined module loader interface, allowing both libmikmod and xmp to share the same loader code (in cooperation with Claudio, of course) - extending the feature list, at the request of the users: midi support ? mp3 support ? cdda support ? suggestions welcome. Want something else ? Drop me a note at and I'll see what I can do for you...